hive 如何获取表的分区列名?

r6hnlfcb  于 2023-01-20  发布在  Hive
关注(0)|答案(3)|浏览(537)

我有一个按一列或多列分区的表。我可以...

SHOW PARTITIONS table_db.table_1

它给出了所有分区的列表,

year=2007
year=2015
year=1999
year=1993

但我只对查找表在哪些列上分区感兴趣,在本例中是year。我希望能够一次对多个表执行此操作,并提供它们的名称和分区列的列表,类似于下面这样。

table_name       partition_col
table_1          year
table_2          year, month

我试过这里的解决方案...
https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html#querying-glue-catalog-listing-partitions

SELECT * FROM table_db."table_1$partitions"

确实会为每个分区给予一列的结果...

#     year
1     2007
2     2015
3     1999
4     1993

...但无法从此查询中提取列名。

raogr8fs

raogr8fs1#

试试这个。

SELECT table_name,
    array_join(array_agg(column_name), ', ') as partition_col
FROM information_schema.columns
WHERE extra_info = 'partition key'
GROUP BY 1
70gysomp

70gysomp2#

通过AWS客户端获取以您的语言提供的元数据,如boto3 athena for python

import boto3

client = boto3.client()

table = client.get_table_metadata(
    CatalogName=catalog,
    DatabaseName=database,
    TableName=name
)["TableMetadata"]

partition_keys = table["PartitionKeys"]
osh3o9ms

osh3o9ms3#

看来解决方案是为mysql而不是SQL Server。

相关问题