繁体   English   中英

Boto3 Athena 没有显示所有表格

[英]Boto3 Athena are not showing all tables

尝试使用 BOTO3 python 获取 Athena 表中的表名列表。

这是我的代码; 我认为我尝试做分页器是不正确的。 任何帮助表示赞赏

import boto3

client = boto3.client('glue')
responseGetDatabases = client.get_databases()
databaseList = responseGetDatabases['DatabaseList']

for databaseDict in databaseList:
    databaseName = databaseDict['Name']
    if "dbName_" in databaseName:
        print '\ndatabaseName: ' + databaseName
        responseGetTables = client.get_tables( DatabaseName = databaseName )
        paginator = client.get_paginator(['TableList'])
        for page in paginator:
            tableList = responseGetTables['TableList']
            for tables in tableList:
                print tables['Name'] 

get_paginator 函数参数必须是操作的名称。 看起来您正在尝试对get_tables函数进行分页,因此

    paginator = client.get_paginator(['TableList'])

应该:

    paginator = client.get_paginator('get_tables')

一旦你有了 paginator 对象,你需要调用paginator.paginate来检索迭代器。 您可以像这样发送数据库参数:

    page_iterator = paginator.paginate(
        DatabaseName=databaseDict['Name'],
        PaginationConfig={
            'MaxItems': 123,
            'PageSize': 123,
            'StartingToken': 'string'
        }
    )

请在此处查看此功能的文档。

现在你有了迭代器,你可以通过枚举来调用 for 循环:

for page_index, page in enumerate(page_iterator):

这是一个完整的工作示例,说明如何使用分页器进行操作。

请记住提供region_namedatabase_name

import boto3

region_name = '<PROVIDE_AWS_REGION_NAME>'
database_name = '<PROVIDE_YOUR_DATABASE_NAME>'
catalog_name = 'AwsDataCatalog'

athena = boto3.client('athena', region_name=region_name)

paginator = athena.get_paginator('list_table_metadata')
response_iterator = paginator.paginate(
    CatalogName=catalog_name,
    DatabaseName=database_name
)

table_names = []
for page in response_iterator:
    table_names.extend(
        (i['Name'] for i in page['TableMetadataList'])
    )

print(table_names)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM