2

我需要编写一个使用我的 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

4

2 回答 2

2

只是为了结束这件事。AWS Glue 刚刚为 eu-west-1 (2017-12-19) 发布,因此这不再是问题。

Zerodf 的答案可能仍然最适合 AWS Glue 尚不支持的区域的用户

于 2017-12-19T12:39:06.810 回答
1

如果您需要 DDL 和数据源信息,我的建议是创建一个分页器,然后遍历所有查询执行。从那里,您可以提取所有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。您还可以通过context和组织数据CompletionDateTime

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

于 2017-12-18T00:04:37.807 回答