我有一个在一列或多列上分区的表。我可以。。。
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-胶粘目录列出分区
SELECT * FROM table_db."table_1$partitions"
确实给了我每个分区一列的结果。。。
# year
1 2007
2 2015
3 1999
4 1993
但是我无法从这个查询中提取列名。
试试这个。
SELECT table_name,
array_join(array_agg(column_name), ', ') as partition_col
FROM information_schema.columns
WHERE extra_info = 'partition key'
GROUP BY 1
使用您的语言提供的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"]
似乎解决方案是针对mysql而不是SQL Server的。