Изменение значения ключа Snowlfake JSON, требуется SQL

#snowflake-cloud-data-platform

Вопрос:

Как я могу изменить ключи на другие имена? От country до COUNTRY

 ID RECORD 2 { "country": "England", "id": "100200", "status": "morestatus" } 3 { "country": "AMERICA", "id": "100300", "status": "morestatus" } 1 { "country": "UK", "id": "100100", "status": "somestatus" } ID RECORD 2 { "COUNTRY": "England", "id": "100200", "status": "morestatus" } 3 { "COUNTRY": "AMERICA", "id": "100300", "status": "morestatus" } 1 { "COUNTRY": "UK", "id": "100100", "status": "somestatus" }
 

Я пробовал это, но, похоже, это работает для ценностей «страны» и не может изменить страну на СТРАНУ

 UPDATE "KAFKA_DB"."KAFKA_SCHEMA"."TARGET" T SET T.RECORD =OBJECT_INSERT(T.RECORD:'country','COUNTRY', TRUE) WHERE RECORD:"country" = 'country';
 

Изменение значения ключа данных JSON

Комментарии:

1. Я хочу переименовать страну во всех трех строках в СТРАНУ

2. Не могли бы вы, пожалуйста, объяснить желаемый результат и то, что вы пробовали до сих пор? Также предпочтительнее обмениваться входными данными в виде текста. Изображения имеют тенденцию исчезать, и люди, ищущие ответы на подобные вопросы, не смогут извлечь выгоду из индексации.

Ответ №1:

Вы можете вложить OBJECT_DELETE и OBJECT_INSERT, чтобы добавить ключ со старым значением и удалить ключ.

 create temp table t1 as select parse_json('{ "country": "England", "id": "100200", "status": "morestatus" }') as V;

select * from t1;

select object_delete(object_insert(v, 'COUNTRY', v:country), 'country') from t1;
 

Чтобы сохранить изменения, просто выполните ОБНОВЛЕНИЕ:

 update t1 set v = object_delete(object_insert(v, 'COUNTRY', v:country), 'country');
 

Комментарии:

1. Но как я могу сделать постоянное изменение от страны к СТРАНЕ в записях

2. Вы можете просто использовать ОБНОВЛЕНИЕ с показанным синтаксисом. Я думаю, что обновил ответ в тот день, когда Stackoverflow выполнял техническое обслуживание, поэтому я обновлю ответ.

Ответ №2:

Переданные аргументы object_insert нуждаются в исправлении. Флаг обновления здесь не будет иметь никакого эффекта, так как в JSON есть ключи, чувствительные к регистру.

Попробуй

 UPDATE "KAFKA_DB"."KAFKA_SCHEMA"."TARGET" T SET T.RECORD = OBJECT_INSERT(T.RECORD,'COUNTRY', T.RECORD:country);
 

WHERE RECORD:"country" = 'country'; также ограничивает ваши обновления строками, в которых country ключ имеет значение country , которое, вероятно, не то, что вы хотите.