要获取 DynamoDB 表的属性名称,在 AWS Glue 中使用以下代码示例:
import boto3
# 创建 DynamoDB 客户端
ddb = boto3.client('dynamodb')
# 定义 DynamoDB 表名
table_name = 'your DynamoDB table name'
# 获取表描述
table_desc = ddb.describe_table(TableName=table_name)
# 获取属性名称列表
attribute_names = [attr['AttributeName'] for attr in table_desc['Table']['AttributeDefinitions']]
print(attribute_names)
然后,您可以将此列表传递给 AWS Glue 转换作业中的 DynamoDB 输入源,以获取仅包含属性名称的模式。使用以下代码示例:
import boto3
import sys
from awsglue.transforms import *
from awsglue.dynamicframe import DynamicFrame
# 创建 DynamoDB 客户端
ddb = boto3.client('dynamodb')
# 定义 DynamoDB 表名
table_name = 'your DynamoDB table name'
# 获取表描述
table_desc = ddb.describe_table(TableName=table_name)
# 获取属性名称列表
attribute_names = [attr['AttributeName'] for attr in table_desc['Table']['AttributeDefinitions']]
# 创建动态帧
dynamic_frame = glueContext.create_dynamic_frame.from_options(
"dynamodb",
connection_options={
"dynamodb.input.tableName": table_name,
"dynamodb.throughput.read.percent": "0.5",
"dynamodb.splits": "100"
},
format_options={
"dynamodb": {
"json": "true"
}
},
transformation_ctx="dyn_glue_table"
)
# 获取只包含属性名称的 schema
schema = StructType([StructField(name, StringType(), True) for name in attribute_names])
# 将动态帧转换为包含模式的动态帧
df_with_schema = DynamicFrame.fromDF(dynamic_frame.toDF(), glueContext, "df_with_schema").withSchema(schema)
print(df_with_schema.schema())