如何在AWS Glue目录中列出所有数据库和表?

Jiř*_*itz 5 pyspark-sql aws-glue

我在AWS Glue控制台中创建了一个Development Endpoint,现在我可以访问gluepyspark控制台中的SparkContext和SQLContext.

如何访问目录并列出所有数据库和表?通常sqlContext.sql("show tables").show()不起作用.

可能有用的是CatalogConnection类,但我不知道它在哪个包中.我尝试从awsglue.context导入并没有成功.

Bao*_*ham 8

Glue 每个响应返回一页。如果您有超过 100 个表,请确保使用NextToken检索所有表。

def get_glue_tables(database=None):
    next_token = ""

    while True:
        response = glue_client.get_tables(
            DatabaseName=database,
            NextToken=next_token
        )

        for table in response.get('TableList'):
            print(table.get('Name'))

        next_token = response.get('NextToken')

        if next_token is None:
            break
Run Code Online (Sandbox Code Playgroud)

  • 我认为你最多只能得到 100 个结果。如果超过 100 个,你将需要使用下一个令牌。 (2认同)

小智 7

boto3 api 还支持分页,因此您可以使用以下代码:

import boto3

glue = boto3.client('glue')
paginator = glue.get_paginator('get_tables')
page_iterator = paginator.paginate(
    DatabaseName='database_name'   
)

for page in page_iterator:
    print(page['TableList'])
Run Code Online (Sandbox Code Playgroud)

这样你就不必搞乱 while 循环或下一个标记。


MP2*_*P23 6

我花了几个小时试图找到有关CatalogConnection类的一些信息,但没有找到任何东西.(即使在aws-glue-lib存储库中https://github.com/awslabs/aws-glue-libs)

在我的情况下,我需要在Glue Job Script控制台中使用表名

最后我使用了boto库并使用Glue客户端检索了数据库和表名:

import boto3


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

responseGetDatabases = client.get_databases()

databaseList = responseGetDatabases['DatabaseList']

for databaseDict in databaseList:

    databaseName = databaseDict['Name']
    print '\ndatabaseName: ' + databaseName

    responseGetTables = client.get_tables( DatabaseName = databaseName )
    tableList = responseGetTables['TableList']

    for tableDict in tableList:

         tableName = tableDict['Name']
         print '\n-- tableName: '+tableName
Run Code Online (Sandbox Code Playgroud)

重要的是正确设置区域

参考:get_databases - http://boto3.readthedocs.io/en/latest/reference/services/glue.html#Glue.Client.get_databases

get_tables - http://boto3.readthedocs.io/en/latest/reference/services/glue.html#Glue.Client.get_tables

  • 当我执行 get_databases 时,我只获取前 100 个数据库。尝试增加 MaxResults,但没有用。有人遇到过这个问题吗? (3认同)
  • @marcin2x4 请检查下面的 Bao Pham 答案 - 您需要使用“NextToken”并将其传递给下一个请求 (2认同)