向数据库列添加注释并从 AWS Glue 中检索

Adding comments to database columns and retrieving from AWS Glue

我正在尝试将 AWS GLUE 数据目录合并到我正在构建的数据湖中。我正在使用几个不同的数据库,并想将评论添加到其中几个表中的列。这些数据库包括 Redshift 和 MySql。我通常会按照

的方式在专栏中添加评论
COMMENT ON COLUMN table.column_name IS 'This is the comment';

现在我知道 Glue 有一个显示在 GUI 中的注释字段。有没有办法将 Glue 中的评论字段与我添加到数据库中的列的评论同步?

为了更新有关 AWS Glue 数据目录中定义的 table 的一些元信息,您需要使用 get_table() and update_table() methods with boto3 的组合,例如 .

这是最简单的方法:

import boto3
from pprint import pprint

glue_client = boto3.client('glue')

database_name = "__SOME_DATABASE__"
table_name = "__SOME_TABLE__"

response = glue_client.get_table(
    DatabaseName=database_name,
    Name=table_name
)
original_table = response['Table']

此处 original_table 遵循 get_table() 定义的响应语法。但是,我们需要从中删除一些字段,以便在我们使用 update_table() 时通过验证。可以通过将 original_table 直接传递给 update_table() 来获得允许的密钥列表,而无需任何 chagnes

allowed_keys = [
    "Name",
    "Description",
    "Owner",
    "LastAccessTime",
    "LastAnalyzedTime",
    "Retention",
    "StorageDescriptor",
    "PartitionKeys",
    "ViewOriginalText",
    "ViewExpandedText",
    "TableType",
    "Parameters"
]
updated_table = dict()
for key in allowed_keys:
    if key in original_table:
        updated_table[key] = original_table[key]

为简单起见,我们将更改 table

中第一列的注释
new_comment = "Foo Bar"
updated_table['StorageDescriptor']['Columns'][0]['Comment'] = new_comment

response = glue_client.update_table(
    DatabaseName=database_name,
    TableInput=updated_table
)

pprint(response)

显然,如果您想向特定列添加评论,则需要将其扩展到

new_comment = "Targeted Foo Bar"
target_column_name = "__SOME_COLUMN_NAME__"
for col in updated_table['StorageDescriptor']['Columns']:
    if col['Name'] == target_column_name:
        col['Comment'] = new_comment

response = glue_client.update_table(
    DatabaseName=database_name,
    TableInput=updated_table
)

pprint(response)