繁体   English   中英

如何在标准SQL BigQuery中解析JSON?

[英]How to parse JSON in Standard SQL BigQuery?

将一些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”]

行图片预览

在此处输入图片说明

以下示例适用于BigQuery标准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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM