【问题标题】:getting Clustering/Bucketing columns programmatically以编程方式获取集群/分桶列
【发布时间】:2021-02-25 16:30:07
【问题描述】:

作为参考,我通过sqlalchemy 连接到amazon-athena 基本上使用:

create_engine(
            f'awsathena+rest://:@athena.{myRegion}.amazonaws.com:443/{athena_schema}?s3_staging_dir={myS3_staging_path}',
            echo=True)

在大多数遵循 ANSI-SQL 标准的关系数据库中,我可以通过运行以下命令以编程方式获取表的 partition 列:

select *
from information_schema.columns
where table_name='myTable' and table_schema='mySchema'
    and extra_info = 'partition key'

但是,bucketing 或 clustering 列似乎没有被类似地标记。我知道我可以通过以下方式访问这些信息:

show create table mySchema.myTable

但我对干净的编程解决方案感兴趣(如果存在的话)。我试图不重新发明轮子。请告诉我如何执行此操作或将我指向相关文档。

提前谢谢你。

PS:如果关于表格的其他信息,例如文件位置和存储格式也可以通过编程方式访问,那就太好了。

【问题讨论】:

    标签: sql hive sqlalchemy presto amazon-athena


    【解决方案1】:

    Athena 使用 Glue 数据目录来存储有关数据库和表的元数据。我不知道information_schema 中暴露了多少,关于它的文档也很少。

    但是,您可以通过直接查询 Glue 数据目录来获得 Athena 所知道的一切。在这种情况下,如果您致电GetTable(例如aws glue get-table …),您将在Table.StorageDescriptor.BucketColumns 中找到分桶信息。

    GetTable 调用还将为您提供文件的存储格式和位置(但对于分区表,您需要使用GetPartitions 进行额外调用以检索每个分区数据的位置)。

    【讨论】:

    • 我要试试这个。非常感谢!
    • 再次感谢@theo。这正是我想要的。
    猜你喜欢
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    相关资源
    最近更新 更多