Snowflake数据库中如何修改JSON字段内的键名(将country改为COUNTRY)
Snowflake JSON键名修改方案
错误原因说明
你之前的SQL存在两个问题:
OBJECT_INSERT第一个参数传了T.RECORD:'country',取的是country键对应的值而非整个JSON对象,导致最终只修改了值而非调整键名- WHERE条件
RECORD:"country" = 'country'只会匹配country值为字符串country的行,不符合全量修改的需求
通用兼容写法
所有Snowflake版本都支持的实现方案,逻辑是先新增大写COUNTRY键并绑定原值,再删除小写country键:
UPDATE "KAFKA_DB"."KAFKA_SCHEMA"."TARGET" T SET T.RECORD = OBJECT_DELETE( OBJECT_INSERT(T.RECORD, 'COUNTRY', T.RECORD:country, TRUE), 'country' ) WHERE T.RECORD:country IS NOT NULL;
简洁写法(2022及之后版本支持)
如果你的Snowflake版本支持内置的OBJECT_RENAME函数,可以直接调用完成键名重命名:
UPDATE "KAFKA_DB"."KAFKA_SCHEMA"."TARGET" T SET T.RECORD = OBJECT_RENAME(T.RECORD, 'country', 'COUNTRY') WHERE T.RECORD:country IS NOT NULL;
操作建议
执行更新前建议先运行SELECT语句验证修改结果,避免误操作:
SELECT ID, RECORD AS OLD_RECORD, OBJECT_DELETE(OBJECT_INSERT(RECORD, 'COUNTRY', RECORD:country, TRUE), 'country') AS NEW_RECORD FROM "KAFKA_DB"."KAFKA_SCHEMA"."TARGET" WHERE RECORD:country IS NOT NULL LIMIT 10;
内容的提问来源于stack exchange,提问作者Austin Jackson
相关产品推荐
相关产品推荐

