获取AWS Glue数据库与表元数据用于库存报告(含创建时间)
获取AWS Glue Catalog数据库与表清单(含创建时间)
Athena的information_schema无法返回Glue Catalog对象的创建时间,不管表是通过SQL DDL还是其他方式创建的,都可以通过以下方案获取所需元数据:
方案1:Python + Boto3脚本批量导出(推荐)
直接调用AWS Glue API可以可靠获取所有数据库和表的创建时间,脚本会自动遍历并导出为CSV格式,方便导入QuickSight或元数据系统:
import boto3 import csv # 初始化Glue客户端 glue_client = boto3.client('glue') # 初始化输出表头 inventory_rows = [ ["数据库名称", "数据库创建时间", "表名称", "表创建时间", "表类型"] ] # 遍历所有数据库 for db in glue_client.get_databases()['DatabaseList']: db_name = db['Name'] db_create_time = db['CreateTime'].strftime('%Y-%m-%d %H:%M:%S') # 遍历当前数据库下的所有表 for table in glue_client.get_tables(DatabaseName=db_name)['TableList']: table_name = table['Name'] table_create_time = table['CreateTime'].strftime('%Y-%m-%d %H:%M:%S') table_type = table.get('TableType', 'UNKNOWN') inventory_rows.append([db_name, db_create_time, table_name, table_create_time, table_type]) # 导出为CSV文件 with open('glue_catalog_inventory.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerows(inventory_rows) print("清单已导出到 glue_catalog_inventory.csv")
使用说明:
- 确保执行脚本的IAM身份拥有
glue:GetDatabases和glue:GetTables权限 - 导出的CSV可直接上传到S3,之后在QuickSight中创建数据集即可使用
- 可以将脚本部署到Lambda,设置定时触发实现清单自动更新
方案2:AWS CLI + jq批量导出
如果偏好命令行工具,可通过CLI结合jq处理输出:
# 导出所有数据库信息(名称+创建时间) aws glue get-databases --query "DatabaseList[].[Name, CreateTime]" --output json | jq -r '.[] | @csv' > glue_databases.csv # 遍历数据库,导出对应表信息 for db in $(aws glue get-databases --query "DatabaseList[].Name" --output text); do aws glue get-tables --database-name "$db" --query "TableList[].[Name, CreateTime, TableType]" --output json | jq -r --arg db "$db" '.[] | [$db] + . | @csv' >> glue_tables.csv done
使用说明:
- 需提前安装jq工具
- 可手动合并
glue_databases.csv和glue_tables.csv,或在QuickSight中关联两个数据集
方案3:Athena查询间接实现
如果需要通过Athena访问这份清单,可将方案1/2导出的CSV上传到S3,然后创建Athena外部表:
CREATE EXTERNAL TABLE glue_catalog_inventory ( database_name STRING, database_create_time STRING, table_name STRING, table_create_time STRING, table_type STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'field.delim' = ',' ) LOCATION 's3://your-bucket/path/to/glue-inventory/' TBLPROPERTIES ('has_encrypted_data'='false');
之后即可用Athena查询:
SELECT * FROM glue_catalog_inventory ORDER BY database_create_time DESC, table_create_time DESC;
内容的提问来源于stack exchange,提问作者Jeff A
相关产品推荐
相关产品推荐

