使用AWS Glue向OpenSearch迁移时如何自定义文档_id?
实现AWS Glue向OpenSearch写入自定义_id的方案
可以实现,报错原因是_id是OpenSearch的元数据字段,不能作为文档内容的一部分传入,必须通过写入参数指定映射字段。具体操作如下:
核心思路
不要将自定义唯一字段重命名为_id,而是通过Glue的OpenSearch写入参数,指定现有字段作为文档的_id。
具体实现步骤
1. 确保数据包含全局唯一标识符字段
确认你的DynamoDB数据经过转换后,保留了全局唯一标识字段(比如命名为resource_id、uuid等)。
2. 在Glue作业中配置写入参数
方式一:Spark代码作业(Python/Scala)
在写入OpenSearch的代码段中,添加es.mapping.id选项,值为你的唯一字段名:
# 假设已完成数据转换,得到包含唯一字段的DataFrame df.write.format("opensearch") \ .option("es.nodes", "your-opensearch-domain-endpoint") \ .option("es.port", "443") \ .option("es.net.ssl", "true") \ .option("es.resource", "your-target-index/_doc") \ .option("es.mapping.id", "resource_id") # 指定唯一字段作为_id .mode("append") \ .save()
方式二:Glue Studio可视化作业
- 选中OpenSearch目标节点,进入配置界面
- 找到「高级选项」下的「额外Spark配置」
- 添加一行配置:
es.mapping.id=resource_id(替换为你的唯一字段名称)
3. 验证结果
运行作业后,OpenSearch会自动将你指定的字段值作为文档的_id,不再自动生成随机ID,同时避免元数据字段的报错。
内容的提问来源于stack exchange,提问作者Karelito
相关产品推荐
相关产品推荐

