You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过AWS Glue将DynamoDB数据导入S3 Hive表时数组结构体丢失属性名

解决方案:保留DynamoDB嵌套数组的属性名转为字符串存储

问题出在直接使用cast(listItems as string)转换嵌套数组时,Spark会将结构体转为无属性名的字符串格式(类似{value1, value2})。要保留完整的键值对结构,应该使用Spark的to_json()函数,它会将嵌套的数组/结构体序列化为标准JSON字符串,完整保留属性名。

修改后的代码

调整SQL中的字段转换逻辑,替换原有的cast为to_json:

datasource = glue_context.create_dynamic_frame.from_options(
                            connection_type="dynamodb",
                            connection_options={"dynamodb.input.tableName": "purchase_list"},
                            transformation_ctx="datasource")
ddb_src_df = datasource.toDF()
ddb_src_df.createOrReplaceTempView("ddb_src_df")

inst_sql = f"""insert overwrite table purchase_list
        select id,
name,
title,
to_json(listItems) as listItems
from ddb_src_df"""

glue_context.spark_session.sql(inst_sql)

执行效果

转换后的listItems字段会生成标准JSON格式的字符串,完整保留属性名:

[{"manufacture_date":"2023-01-01","purchase_price":"20.0"},{"manufacture_date":"2023-01-02","purchase_price":"30.0"}]

(注:标准JSON用双引号包裹键和字符串值,比预期格式更规范,后续展开数据时兼容性更强)

方案优势

  • 自动保留所有嵌套属性名,未来新增属性无需修改代码
  • 生成的标准JSON字符串便于后续通过from_json()或其他JSON解析工具展开数据
  • 完全符合目标表的string类型字段要求

内容的提问来源于stack exchange,提问作者vvazza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:55:20