Извлечение текста из JSON с помощью VARCHAR

#sql #snowflake-cloud-data-platform

#sql #snowflake-cloud-data-platform

Вопрос:

Пытаюсь извлечь текстовое значение из столбца с помощью json varchar , но получаю ошибку недопустимого аргумента в snowflake во время работы в режиме on. Этот json имеет немного другую структуру, чем то, что я привык видеть.

Пробовали это, чтобы извлечь текст:

 changes:comment:new_value::varchar
changes:new_value::varchar
changes:comment::varchar
 

JSON выглядит следующим образом:

 {
   "comment": 
   { 
      "new_value": "Hello there. Welcome to our facility.", 
      "old_value": ""
   }
}
 

Хотите извлечь данные из этого столбца, чтобы вывод считывался:

 Hello there. Welcome to our facility.
 

Ответ №1:

Вы не можете извлекать поля из VARCHAR . Если ваша строка имеет формат JSON, вы должны преобразовать ее в VARIANT тип, например, через PARSE_JSON функцию.

Пример ниже:

 create or replace table x(v varchar) as select * from values('{
   "comment": 
   { 
      "new_value": "Hello there. Welcome to our facility.", 
      "old_value": ""
   }
}');
select v, parse_json(v):comment.new_value::varchar from x;
-------------------------------------------------------------- ------------------------------------------ 
                              V                               | PARSE_JSON(V):COMMENT.NEW_VALUE::VARCHAR |
-------------------------------------------------------------- ------------------------------------------ 
 {                                                            | Hello there. Welcome to our facility.    |
    "comment":                                                |                                          |
    {                                                         |                                          |
       "new_value": "Hello there. Welcome to our facility.",  |                                          |
       "old_value": ""                                        |                                          |
    }                                                         |                                          |
 }                                                            |                                          |
-------------------------------------------------------------- ------------------------------------------