AWS DMS迁移testt表name列哈希转换报错求助
问题解决:AWS DMS 数据迁移时列转换表达式无效
问题原因
你使用的sha256($column)不符合AWS DMS转换表达式的语法规范,DMS有自己的内置函数库,不能直接使用通用的哈希函数命名。
解决方案
根据你的需求,分两种实现方式:
方式1:生成SHA256哈希值(匹配哈希需求)
修改转换规则中的expression为DMS支持的内置哈希函数语法,且需要先将列值转为字符串类型再哈希:
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "SelectTable", "object-locator": { "schema-name": "public", "table-name": "testt" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "HashNameColumn", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "testt", "column-name": "name" }, "rule-action": "transform", "expression": "HASH_SHA256(TO_STRING($column))", "rule-description": "Hash the name column using SHA256" } ] }
如果需要将哈希值格式化为示例中的带短横线样式,可添加字符串截取拼接逻辑:
"expression": "CONCAT(SUBSTRING(HASH_SHA256(TO_STRING($column)),1,6), '-', SUBSTRING(HASH_SHA256(TO_STRING($column)),7,6), '-', SUBSTRING(HASH_SHA256(TO_STRING($column)),13,6))"
方式2:生成UUID(更贴合示例格式)
如果不需要严格哈希,仅需要UUID格式字符串,直接使用DMS内置的UUID()函数即可:
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "SelectTable", "object-locator": { "schema-name": "public", "table-name": "testt" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "GenerateUUIDForName", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "testt", "column-name": "name" }, "rule-action": "transform", "expression": "UUID()", "rule-description": "Replace name with UUID" } ] }
关键说明
- AWS DMS转换表达式必须使用官方定义的内置函数,常见的包括
HASH_SHA256()、TO_STRING()、CONCAT()、SUBSTRING()、UUID()等。 - 若源列非字符串类型,必须先用
TO_STRING()转换后再进行哈希或字符串操作。
内容的提问来源于stack exchange,提问作者user2278120
相关产品推荐
相关产品推荐

