在配置单元中标识分区表的sql

r8uurelv  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(274)

这个问题在这里已经有了答案

检查配置单元表是否在给定列上分区(1个答案)
六个月前关门了。
有没有什么方法允许在配置单元中列出分区表?我找到了在SQLServer中实现这一点的方法。
https://dba.stackexchange.com/questions/14996/how-do-i-get-a-list-of-all-the-partitioned-tables-in-my-database
我只想列出一个特定数据库下的分区表,这样就不必检查大量表的ddl来确定该表是分区的还是非分区的。Hive中有类似的功能吗?请建议。

krcsximq

krcsximq1#

您可以直接连接到hivemetastore数据库,并获取有关已分区表的信息。需要知道以下信息,可能会根据您的群集配置而更改:
配置配置单元元存储以存储有关表的元数据的数据库(如postgresql、mysql等)。
通常 metastore 是配置单元元存储数据库中存储表信息的数据库名称。 TBLS 存储配置单元表信息的表。 DBS 存储配置单元数据库信息和 PARTITIONS 在配置单元中存储分区信息的表。 DB_ID 外键在吗 TBLS 以及 TBL_ID 是的外键 TBLSPARTITIONS .
连接如下表: select d."NAME" as DATABASE_NAME, t."TBL_NAME" as TABLE_NAME, p."PKEY_NAME" as PARTITION_KEY_NAME from "PARTITION" p join "TBLS" on p."TBL_ID"=t."TBL_ID" join "DBS" dat on t."DB_ID"=d."DB_ID" where d."NAME"="filterdbname" AND p."PKEY_NAME" is not null; 这就是sql方法。如果需要程序化方法。hivemetastoreclient api可用于查询metastore表。需要元存储连接设置。在java中,下面是伪代码,
import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.HiveMetaStoreClient; HiveConf conf = new HiveConf(); hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, Address+":"+ Port); HiveMetaStoreClient hiveMetaStoreClient = new HiveMetaStoreClient(conf);

相关问题