雅典娜分区位置

时间:2018-01-31 20:52:01

标签: hive presto amazon-athena

我可以使用

查看我桌子上的所有分区
show partitions my_table

我可以使用

查看分区的位置
describe formatted my_table partition (partition_col='value')

但我有很多分区,如果可以避免,我们不想解析describe formatted的输出。

有没有办法在一个查询中获取所有分区及其位置?

3 个答案:

答案 0 :(得分:1)

没有内置或一致的方式来获取此信息。

假设您知道您的分区列,您可以使用

之类的查询获取此信息
select distinct partition_col, "$path" from my_table

答案 1 :(得分:1)

获取表分区位置的最便宜方法是使用来自Glue API的GetPartitions调用。它将列出所有分区,它们的值和位置。您可以像这样使用AWS CLI工具进行尝试:

aws glue get-partitions --region us-somewhere-1 --database-name your_database --table-name the_table

使用像SELECT DISTINCT partition_col, "$path" FROM the_table这样的SQL可能会很昂贵,因为不幸的是Athena会扫描整个表以产生输出(它可能只是看了表元数据,但似乎还不存在优化)。

答案 2 :(得分:0)

使用boto3(从1.12.9版开始),以下代码将返回完整列表:

glue_client = boto3.client("glue")
glue_paginator = glue_client.get_paginator("get_partitions")
pages_iter = glue_paginator.paginate(
    DatabaseName=db_name, TableName=table_name
)
res = []
for page in pages_iter:
    for partition in page["Partitions"]:
        res.append(
            {
                "Values": partition["Values"],
                "Location": partition["StorageDescriptor"]["Location"],
            }
        )