0

Bigquery JSON_EXTRACT 函数将字符串作为键返回值。是否可以从列中获取字符串?

要处理的json_string_expr就像{'A': '123', 'B': '456'}. 我想从列中获取密钥list。Bigquery 表和预期结果如下。

   |   json_string_expr        | list   | expected_result
   |{'A': '123', 'B': '456'}   | A      |  '123'
   |{'A': '789', 'B': '012'}   | B      |  '012'

JSON_EXTRACT(json_string_expr, '$.list')无法给出预期结果,因为该函数需要 . 之后的字符串$.。知道如何使用标准 SQL 返回预期结果吗?

4

1 回答 1

2

以下是 BigQuery 标准 SQL

不幸的是,JSONPath 必须是字符串文字或查询参数,因此请参阅下面的解决方法

#standardSQL
SELECT json_string_expr, list,
  (SELECT SPLIT(kv, ':')[SAFE_OFFSET(1)]
    FROM UNNEST(SPLIT(REGEXP_REPLACE(json_string_expr, r"[{} ']", ''))) kv 
    WHERE SPLIT(kv, ':')[SAFE_OFFSET(0)] = list
  ) value
FROM `project.dataset.table`  

另一个不那么冗长的版本是

#standardSQL
SELECT json_string_expr, list,
  REGEXP_EXTRACT(json_string_expr, CONCAT(r"'", list, "': '(.*?)'")) value
FROM `project.dataset.table`

如果将上述两个版本都应用于您问题中的样本数据 - 结果是

Row json_string_expr            list    value    
1   {'A': '123', 'B': '456'}    A       123  
2   {'A': '789', 'B': '012'}    B       012  
于 2019-06-22T16:26:30.887 回答