【问题标题】:How to get the partition column names for a table?如何获取表的分区列名?
【发布时间】:2022-11-13 14:51:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql hiveql amazon-athena presto


    【解决方案1】:

    尝试这个。

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

    【讨论】:

    • 比 athena 查询更好地使用 aws 客户端,它的方式更快且资源消耗更少
    【解决方案2】:

    使用以您的语言提供的 AWS 客户端获取元数据,例如用于 python 的 boto3 athena

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

    【讨论】:

      【解决方案3】:

      似乎解决方案是针对 mysql 而不是 SQL Server。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 2011-05-01
      • 2010-10-15
      • 1970-01-01
      • 2021-04-28
      相关资源
      最近更新 更多