Google Big Query 检查 json 密钥是否存在

Len*_*ena 2 sql json google-bigquery

我有一个 Google Big Query Table 列,其中包含一个 json 字符串。随着时间的推移,这个 json 字符串中引入了新的键。

time              col_b     
--------------------------------------------------
timestamp3        {"key1": "value", "key2": "value"}
timestamp2        {"key1": "value"}
timestamp1        {"key1": "value"}
Run Code Online (Sandbox Code Playgroud)

如何提取 key2 并在它不存在的情况下填充 NaN?我想到了类似的事情:

SELECT 
    JSON_EXTRACT(col_b, "$.key2) AS key2
FROM db;
Run Code Online (Sandbox Code Playgroud)

这样做会引发错误,因此它认为应该是双精度值而不是字符串导致空值。

Bad double type: value
Run Code Online (Sandbox Code Playgroud)

如何提前检查key2是否存在,如果不存在则填充null?

Mik*_*ant 5

请参阅下面的示例

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'timestamp3' time, '{"key1": "value", "key2": "value"}' col_b UNION ALL
  SELECT 'timestamp2', '{"key1": "value"}' UNION ALL
  SELECT 'timestamp1', '{"key1": "value"}' 
)
SELECT *, IFNULL(JSON_EXTRACT_SCALAR(col_b, '$.key2'), 'NaN') AS key2
FROM `project.dataset.table`
Run Code Online (Sandbox Code Playgroud)

带输出

Row time        col_b                               key2     
1   timestamp3  {"key1": "value", "key2": "value"}  value    
2   timestamp2  {"key1": "value"}                   NaN  
3   timestamp1  {"key1": "value"}                   NaN  
Run Code Online (Sandbox Code Playgroud)