0
我有超過100列,超過70萬行的bigquery表。我想知道是否可以編寫一個查詢來提取行中任何一列包含值「FINISHED」的行。Bigquery從表中選擇任何列包含「完成」
我有超過100列,超過70萬行的bigquery表。我想知道是否可以編寫一個查詢來提取行中任何一列包含值「FINISHED」的行。Bigquery從表中選擇任何列包含「完成」
下面是BigQuery的標準SQL 應該是良好的開端,你:)
#standardSQL
SELECT <columns to output>
FROM yourTable AS t
WHERE REGEXP_CONTAINS(LOWER(TO_JSON_STRING(t)), 'finished')
您可以測試/與它下面的虛擬數據
發揮#standardSQL
WITH yourTable AS (
SELECT 'a' AS x, 'b' AS y, 'c' AS z UNION ALL
SELECT 'finished', '', '' UNION ALL
SELECT '', 'Bigquery Select from table where any column contains "FINISHED"','' UNION ALL
SELECT '', '', 'aaa' UNION ALL
SELECT 'finished', 'bbb', 'finished'
)
SELECT *
FROM yourTable AS t
WHERE REGEXP_CONTAINS(LOWER(TO_JSON_STRING(t)), 'finished')
更新
注意:如果您將搜索詞作爲至少一個列名的一部分 - 上面將返回所有行!爲了解決這個問題 - 你將需要投入更多一點的編碼
例如,對於簡單的模式(無記錄或重複),這將是一個
#standardSQL
SELECT <columns to output>
FROM yourTable AS t
WHERE (SELECT COUNTIF(SPLIT(zzz, ':')[SAFE_OFFSET(1)] LIKE '%finished%')
FROM UNNEST(SPLIT(SUBSTR(LOWER(TO_JSON_STRING(t)),2,LENGTH(TO_JSON_STRING(t))-2))) AS zzz
) > 0
您可以通過以下
測試這個#standardSQL
WITH yourTable AS (
SELECT 'a' AS x, 'b' AS y, 'c' AS col_finished UNION ALL
SELECT 'finished', '', '' UNION ALL
SELECT '', 'Bigquery Select from table where any column contains "FINISHED"','' UNION ALL
SELECT '', '', 'aaa' UNION ALL
SELECT 'finished', 'bbb', 'finished'
)
SELECT *
FROM yourTable AS t
WHERE (SELECT COUNTIF(SPLIT(zzz, ':')[SAFE_OFFSET(1)] LIKE '%finished%')
FROM UNNEST(SPLIT(SUBSTR(LOWER(TO_JSON_STRING(t)),2,LENGTH(TO_JSON_STRING(t))-2))) AS zzz
) > 0
有趣,謝謝! – Daniel
我不認爲這是可能的。 – Daniel
@丹尼爾 - 確定它是可能的:o)與BigQuery - 請參閱答案 –
您有低利率。重要的是 - 你可以在投票的下方用貼出答案左邊的勾號來標記接受答案。看到http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235爲什麼它很重要!對答案投票也很重要。表決有用的答案。 ...當某人回答你的問題時,你可以檢查該怎麼做 - http://stackoverflow.com/help/someone-answers。遵循這些簡單的規則,您可以提高自己的聲譽得分,同時讓我們有動力回答您的問題:o)請考慮! –