本地目录中的配置单元表列表

Posted

技术标签:

【中文标题】本地目录中的配置单元表列表【英文标题】:list of hive tables in a local directory 【发布时间】:2016-08-08 03:44:05 【问题描述】:

我有一个本地目录,它用于存储 hive 表数据。

我需要列出所有使用本地目录的表。

这些表(托管表)存储在 hive 默认数据库中,该数据库允许将数据存储在其他本地目录中。

我的本​​地目录:/abc/efg/data/

表格数据存储在 123 、 456,789 等子文件夹中

对于表 xyz 位置是 /abc/efg/data/123 ,PQR 位置是 /abc/efg/data/456 这样。

我正在尝试使用

hive -e "show tables" > All_tables 列出所有表并重定向到一个文件

对于 All_tables 中的每一行(每个表)

hive -e " desc 格式化 $line" | grep '/abc/efg/data/' >> Tables_My_local_dir

但它会导致一些性能问题,因为我在 DB 中有 6000 个表。

请帮我列出所有使用本地目录的性能最好的表。

【问题讨论】:

【参考方案1】:

我假设您希望通过从默认数据库中托管表的 desc formatted 命令中提取表及其相应的位置信息来列出表及其对应的位置信息。

如果我的理解是正确的,我建议你去查询 Hive 元存储,前提是它是一个外部配置的,并且你有必要的权限来获取相同的信息

元存储查询:

SELECT T.TBL_NAME AS TABLE_NAME,S.LOCATION AS LOCATION FROM TBLS T LEFT JOIN SDS S ON T.SD_ID=S.SD_ID WHERE T.TBL_TYPE='MANAGED_TABLE' AND T.DB_ID=1 ;

注意:在查询中,默认数据库的 DB_ID 为 1

输出:

------------+------------------------------------------------------------+
| TABLE_NAME | LOCATION                                                   |
+------------+------------------------------------------------------------+
| sample     | hdfs://********:8020/user/hive/warehouse/sample |
...

.

【讨论】:

【参考方案2】:

基于规则

HADOOP 表是目录

我创建了一个 shell 脚本来执行以下步骤。

步骤 1. 查找自过去 14 天以来未修改的所有目录。

第 2 步。分离真实表和真实文件夹 2.1执行“desc $dir_name”

2.2 根据返回状态($?)将$dir_name重定向到两个文件(一个用于真实表,另一个用于目录)

现在我在文件中有所需的表。

【讨论】:

以上是关于本地目录中的配置单元表列表的主要内容,如果未能解决你的问题,请参考以下文章

在配置单元窗口范围内使用表列

如何使用配置单元上下文有效地查询 Spark 中的配置单元表?

如何将按月分区的配置单元表中的数据加载到按周分区的配置单元表中

如果工作表 1 中的单元格 A1 与工作表 2 中的单元格 B1 匹配,则从工作表 2 返回单元格 A1 [重复]

如何更新配置单元表中的值?

如何在配置单元中使用正则表达式排除字符串中的特殊字符