BigQuery JSON ЭКСТРАКТ - PullRequest
       2

BigQuery JSON ЭКСТРАКТ

0 голосов
/ 17 июня 2020

[
   {
      "key":"expiry_date",
      "type":"date",
      "label":"Expiry Date",
      "required":false,
      "default_value":"2029-12-15"
   },
   {
      "key":"brand",
      "type":"text",
      "label":"Brand",
      "required":false,
      "default_value":"clipsal"
   }
]

Есть ли способ, которым я мог бы извлечь значение default_value "expiry_date" во вложенном JSON выше? Данные находятся в столбце под названием атрибуты.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Пробовали ли вы какие-либо из этих функций, описанных здесь ? Может, это поможет.

Кроме того, если первый элемент массива json всегда будет тем, что вы хотите, вы можете использовать что-то вроде:

WITH test_table AS (
  SELECT "[{\"key\":\"expiry_date\",\"type\":\"date\",\"label\":\"Expiry Date\",\"required\":false,\"default_value\":\"2029-12-15\"},{\"key\":\"brand\",\"type\":\"text\",\"label\":\"Brand\",\"required\":false,\"default_value\":\"clipsal\"}]" AS json_text_field
)

SELECT JSON_EXTRACT(json_text_field, '$[0].default_value') FROM test_table

Если ключи не всегда первые, вы вместо этого можно использовать:

WITH test_table AS (
  SELECT "[{\"key\":\"expiry_date\",\"type\":\"date\",\"label\":\"Expiry Date\",\"required\":false,\"default_value\":\"2029-12-15\"},{\"key\":\"brand\",\"type\":\"text\",\"label\":\"Brand\",\"required\":false,\"default_value\":\"clipsal\"}]" AS json_text_field
)

SELECT value FROM (
  SELECT JSON_EXTRACT(json_text_field, '$.key') AS id, JSON_EXTRACT(json_text_field, '$.default_value') AS value FROM test_table, UNNEST(JSON_EXTRACT_ARRAY(json_text_field, '$')) AS json_value
) WHERE id = '"expiry_date"'
0 голосов
/ 18 июня 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT JSON_EXTRACT_SCALAR(el, '$.default_value') AS default_value 
FROM `project.dataset.table`,
UNNEST(JSON_EXTRACT_ARRAY(json)) el
WHERE JSON_EXTRACT_SCALAR(el, '$.key') = 'expiry_date'   

Вы можете протестировать выше с образцами / фиктивными данными из y нашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '''
[
   {
      "key":"expiry_date",
      "type":"date",
      "label":"Expiry Date",
      "required":false,
      "default_value":"2029-12-15"
   },
   {
      "key":"brand",
      "type":"text",
      "label":"Brand",
      "required":false,
      "default_value":"clipsal"
   }
]  
  ''' json
)
SELECT JSON_EXTRACT_SCALAR(el, '$.default_value') AS default_value 
FROM `project.dataset.table`,
UNNEST(JSON_EXTRACT_ARRAY(json)) el
WHERE JSON_EXTRACT_SCALAR(el, '$.key') = 'expiry_date'   

с выводом

Row default_value    
1   2029-12-15      

Зависит от вашего реального варианта использования - вы можете рассмотреть вариант ниже

#standardSQL
SELECT *,
  (
    SELECT JSON_EXTRACT_SCALAR(el, '$.default_value') 
    FROM UNNEST(JSON_EXTRACT_ARRAY(json)) el
    WHERE JSON_EXTRACT_SCALAR(el, '$.key') = 'expiry_date'
  ) AS default_value
FROM `project.dataset.table`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...