Как разобрать JSON в стандартном SQL BigQuery? - PullRequest
0 голосов
/ 24 февраля 2019

После потоковой передачи некоторых данных json в BQ у нас есть запись, которая выглядит следующим образом:

"{\"Type\": \"Some_type\", \"Identification\": {\"Name\": \"First Last\"}}"

Как мне извлечь из этого type?Например, я хотел бы получить Some_type.

Я безуспешно перепробовал все возможные комбинации, показанные в https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions, а именно, подумал:

SELECT JSON_EXTRACT_SCALAR(raw_json , "$[\"Type\"]") as parsed_type FROM `table` LIMIT 1000 

- это то, что мне нужно,Однако я получаю:

Недопустимый токен в JSONPath по адресу: ["Type"]

Изображение предварительного просмотра строк

enter image description here

1 Ответ

0 голосов
/ 24 февраля 2019

Ниже приведен пример для BigQuery Standard SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, "{\"Type\": \"Some_type\", \"Identification\": {\"Name\": \"First Last\"}}" raw_json UNION ALL
  SELECT 2, '{"Type": "Some_type", "Identification": {"Name": "First Last"}}'
)
SELECT id, JSON_EXTRACT_SCALAR(raw_json , "$.Type") AS parsed_type
FROM `project.dataset.table`  

с результатом

Row id  parsed_type  
1   1   Some_type    
2   2   Some_type    

См. Пример обновления ниже - взгляните на третью запись, которая, по-моему, имитирует ваш случай

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, "{\"Type\": \"Some_type\", \"Identification\": {\"Name\": \"First Last\"}}" raw_json UNION ALL
  SELECT 2, '''{"Type": "Some_type", "Identification": {"Name": "First Last"}}''' UNION ALL
  SELECT 3, '''"{\"Type\": \"


                     null1\"}"
  '''
)
SELECT id, 
  JSON_EXTRACT_SCALAR(REGEXP_REPLACE(raw_json, r'^"|"$', '') , "$.Type") AS parsed_type
FROM `project.dataset.table`  

с результатом

Row id  parsed_type  
1   1   Some_type    
2   2   Some_type    
3   3   null1    

Примечание: я использую null1 вместо null, поэтому вы можете легко видеть, что это не NULL, а скорее строка null1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...