我有一个Local目录,用于存储hive表数据。
我需要列出所有使用本地目录的表。
这些表(托管表)存储在hive Default DB中,此DB允许将Data存储在其他本地目录中。
我的本地目录:/ abc / efg / data /
表数据存储在子文件夹中,如123,456,789等
对于表xyz位置是/ abc / efg / data / 123,PQR位置是/ abc / efg / data / 456。
我正在尝试使用
hive -e"显示表" > All_tables 列出所有表格并重定向到文件
对于All_tables中的每一行(每个表)
hive -e" desc格式化$ line" | grep' / abc / efg / data /' >> Tables_My_local_dir
但由于我在DB中有6000个表,因此会导致一些性能问题。
请帮我列出所有使用性能最佳的本地目录的表。
答案 0 :(得分:1)
我假设您希望通过从默认数据库中托管表的 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 |
...
答案 1 :(得分:0)
基于规则
HADOOP TABLES是DIRECTORIES
我创建了一个shell脚本来执行以下步骤。
步骤1.找到自过去14天以来未被修改的所有目录。
第2步。单独的真实表和真实文件夹2.1执行&#34; desc $ dir_name&#34;
2.2基于返回状态($?)将$ dir_name重定向到两个文件(一个用于真实表,另一个用于目录)
现在我在文件中有所需的表。