簡體   English   中英

BigQuery 的查詢過濾器按 json 類型

[英]BigQuery's query filter by json type

我的數據庫表如下。

名稱 信息
1個 湯姆 {"count":0, "error":[0,"failed",0]}
2個 {"count":0, "error":["failed","failed","failed"]}
3個 {"count":0, "error":[0,0,0]}
4個 湯姆 {"count":0, "error":["failed","failed",0]}

我希望按以下順序按“Info.error's array”過濾數據。

  1. 全部為0
  2. 排除所有失敗
  3. 至少一個是0

結果數據

名稱 信息
1個 湯姆 {"count":0, "error":[0,"failed",0]}
3個 {"count":0, "error":[0,0,0]}
4個 湯姆 {"count":0, "error":["failed","failed",0]}

那么,應該怎樣輸入SQL這個語法呢? 非常感謝。

為了找出 json 數組中特定值的數量,您可以使用以下代碼片段:

  (SELECT
    COUNTIF(JSON_EXTRACT_SCALAR(error) = "0")
  FROM
    UNNEST(JSON_EXTRACT_ARRAY(ex_table.Info, '$.error')) AS error ) count_zeros,
   
  (SELECT
    COUNTIF(JSON_EXTRACT_SCALAR(error) = "failed")
  FROM
    UNNEST(JSON_EXTRACT_ARRAY(ex_table.Info, '$.error')) AS error ) count_failed

使用這兩個新變量,您可以創建實際的過濾器。

1.

 WHERE
  count_zero = ARRAY_LENGTH(Info.error)
 WHERE 
  NOT count_failed = ARRAY_LENGTH(Info.error)
WHERE  
  count_zero > 0

您應該能夠簡化您的規則集,因為規則 3 說明了您列出的所有場景。 鑒於您的示例數據,請嘗試以下操作:

select *,
from sample_data
WHERE "0" in (SELECT * from UNNEST(JSON_VALUE_ARRAY(info, "$.error")))

它產生:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM