如何列出 AWS Glue Catalog 中的所有数据库和表?
How to list all databases and tables in AWS Glue Catalog?
我在 AWS Glue 控制台中创建了一个开发终端节点,现在我可以在 gluepyspark 控制台中访问 SparkContext 和 SQLContext。
如何访问目录并列出所有数据库和表?通常的 sqlContext.sql("show tables").show()
不起作用。
CatalogConnection Class 可能有帮助,但我不知道它在哪个包中。我尝试从 awsglue.context 导入但没有成功。
我花了几个小时试图找到有关 CatalogConnection class 的一些信息,但没有找到任何信息。 (即使在 aws-glue-lib 存储库中 https://github.com/awslabs/aws-glue-libs)
就我而言,我需要 table Glue Job Script 控制台中的名称
最后我使用了 boto 库并使用 Glue 客户端检索了数据库和 table 名称:
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
重要的是正确设置区域
参考:
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
将每个回复粘贴 returns 一页。如果您有超过 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
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'])
这样你就不必搞乱 while 循环或下一个标记。
我在 AWS Glue 控制台中创建了一个开发终端节点,现在我可以在 gluepyspark 控制台中访问 SparkContext 和 SQLContext。
如何访问目录并列出所有数据库和表?通常的 sqlContext.sql("show tables").show()
不起作用。
CatalogConnection Class 可能有帮助,但我不知道它在哪个包中。我尝试从 awsglue.context 导入但没有成功。
我花了几个小时试图找到有关 CatalogConnection class 的一些信息,但没有找到任何信息。 (即使在 aws-glue-lib 存储库中 https://github.com/awslabs/aws-glue-libs)
就我而言,我需要 table Glue Job Script 控制台中的名称
最后我使用了 boto 库并使用 Glue 客户端检索了数据库和 table 名称:
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
重要的是正确设置区域
参考: 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
将每个回复粘贴 returns 一页。如果您有超过 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
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'])
这样你就不必搞乱 while 循环或下一个标记。