我有一个本地目录,它用于存储配置单元表数据。
我需要列出所有使用本地目录的表。
这些表(托管表)存储在配置单元默认数据库中,该数据库允许将数据存储在其他本地目录中。
我的本地目录:/abc/efg/data/
表格数据存储在 123 、 456,789 等子文件夹中
对于 table 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
但它会导致一些性能问题,因为我在数据库中有 6000 个表。
请帮我列出所有使用本地目录且性能最佳的表。
最佳答案
我假设您希望通过从默认数据库中托管表的 desc 格式化 命令中提取表来列出表及其相应的位置信息。
如果我的理解是正确的,我建议你去查询 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 |
...
.
关于hadoop - 本地目录中的配置单元表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38820991/