【问题标题】:How to parse JSON in Standard SQL BigQuery?如何在标准 SQL BigQuery 中解析 JSON?
【发布时间】:2019-07-18 04:52:56
【问题描述】:

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

行预览图片

【问题讨论】:

    标签: sql json google-bigquery


    【解决方案1】:

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

    【讨论】:

    • 我知道这很奇怪,但是当我像在答案中那样插入数据时,它会起作用并解析正确的信息。但是当相同的数据是列时,我会得到空值。
    • 您能否在 图像 中以表格模式显示结果窗格中的几行示例 - 所以我们可以看到我们正在处理的具体数据是什么
    • 我添加了图片,我猜我需要在调用JSON_EXTRACT_SCALAR之前取消引用它
    • 刚刚添加的图片-是JSON预览还是表格预览?
    • 它是一个表格预览,Json 预览是"raw_json": "\"{\\\"Type\\\": \\\"
    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2012-01-29
    相关资源
    最近更新 更多