如何通过boto3访问eu-west-1中Athena表的Athena / Glue目录?

时间:2017-12-15 17:41:20

标签: boto3 amazon-athena aws-glue

我需要编写一份使用Athena数据目录中数据的作业。我正在使用Python和boto3。由于Glue已经发布,我似乎通过Glue API使用以下代码访问我的数据目录:

import boto3
from pprint import pprint

glue = boto3.client('glue', region_name='us-east-1')

response = glue.get_tables(
    DatabaseName='default'
)

print(pprint(response['TableList']))

但是这对于eu-west-1区域不起作用,我猜是因为Glue还没有得到支持。

如何访问我在eu-west-1中拥有的Athena数据表的数据目录?我认为这应该是可能的,因为它们出现在UI中!

从AWS论坛交叉发布此内容:

https://forums.aws.amazon.com/thread.jspa?threadID=269605

2 个答案:

答案 0 :(得分:1)

如果您需要DDL和数据源信息,我的建议是create a paginator,然后遍历所有查询执行。从那里,您可以提取所有CREATE TABLE语句并根据您的需要进行解析。

蛮力方法示例(Python 2):

import boto3

# Get a list of Query Execution IDs
client = boto3.client('athena', region_name = 'us-east-1')

paginator = client.get_paginator('list_query_executions')

id_list = [] # List for holding query exection ids

for page in paginator.paginate():
    for id in page['QueryExecutionIds']:
        id_list.append(id)  

# Get a list of query execution metadata
meta_list = []
for id in id_list:
    execution_event = client.get_query_execution(QueryExecutionId = id)
    meta_list.append(execution)

您现在可以在查询字符串上过滤元数据列表(重点关注以CREATE EXTERNAL TABLE开头的语句。您还可以按contextCompletionDateTime整理数据。

如果您只需要列名和类型,则可以运行DESCRIBE database_name.table_name;并获取列名称和类型。

答案 1 :(得分:1)

只是为了结束这一点。 AWS Glue刚刚发布了eu-west-1(2017-12-19),所以这不再是一个问题。

对于不受AWS Glue支持的地区的用户,Zerodf的答案可能仍然是最好的