database - 向数据库列添加注释并从 AWS Glue 检索
问题描述
我正在尝试将 AWS GLUE 数据目录合并到我正在构建的数据湖中。我正在使用几个不同的数据库,并希望将 COMMENTS 添加到其中一些表的列中。这些数据库包括 Redshift 和 MySql。我通常通过按照以下方式将评论添加到列中
COMMENT ON COLUMN table.column_name IS 'This is the comment';
现在我知道 Glue 有一个显示在 GUI 中的注释字段。有没有办法将 Glue 中的评论字段与我添加到数据库列中的评论同步?
解决方案
为了更新有关已在 AWS Glue 数据目录中定义的表的一些元信息,您需要使用get_table()
和update_table()
方法的组合,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]
为简单起见,我们将更改表中第一列的注释
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)
推荐阅读
- winapi - 获取资源管理器的滚动条位置标记的句柄或 UIA ID
- sql - 基于月份的 Oracle SQL 数据迁移行到列因类型而失败
- python - 向网络中的边缘添加权重
- javascript - 如何解析或解释给定到 console.log() 的参数
- c# - 使用正则表达式获取文件名的中间部分
- ios - 在 SwiftUI 中搜索时更改 List/ForEach 循环中的单元格的正确动画?
- ibm-midrange - ERRMSG 不显示在 AS400 的 DSPF 中
- c# - 如何在订阅者上实现 Prism EventAggregator 事件队列
- google-cloud-platform - GCP 指标资源管理器中的计数器指标
- javascript - 当浏览器/pwa 最小化时延迟 ServiceWorker 中的通知