以编程方式获取集群/bucketing列

bakd9h0s  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(363)

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

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

在大多数遵循ansi的关系数据库中- SQL 根据标准,我可以通过运行以下程序以编程方式获取表的分区列:

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:如果表的其他信息,比如文件的位置和存储格式也可以通过编程方式访问,那就太好了。

ao218c7q

ao218c7q1#

雅典娜使用glue数据目录来存储关于数据库和表的元数据。我不知道这里面暴露了多少 information_schema ,关于它的文档很少。
但是,您可以通过直接查询glue数据目录获得雅典娜所知道的一切。在这种情况下,如果你打电话 GetTable (例如。 aws glue get-table … )您将在中找到扣合信息 Table.StorageDescriptor.BucketColumns .
这个 GetTable 调用还将为您提供文件的存储格式和位置(但对于分区表,您需要使用 GetPartitions 检索每个分区的数据的位置)。

相关问题