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

时间:2016-08-08 03:44:06

标签: hadoop hive

我有一个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个表,因此会导致一些性能问题。

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

2 个答案:

答案 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重定向到两个文件(一个用于真实表,另一个用于目录)

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