2017-09-14 27 views
0

我有超過100列,超過70萬行的bigquery表。我想知道是否可以編寫一個查詢來提取行中任何一列包含值「FINISHED」的行。Bigquery從表中選擇任何列包含「完成」

+0

我不認爲這是可能的。 – Daniel

+1

@丹尼爾 - 確定它是可能的:o)與BigQuery - 請參閱答案 –

+0

您有低利率。重要的是 - 你可以在投票的下方用貼出答案左邊的勾號來標記接受答案。看到http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235爲什麼它很重要!對答案投票也很重要。表決有用的答案。 ...當某人回答你的問題時,你可以檢查該怎麼做 - http://stackoverflow.com/help/someone-answers。遵循這些簡單的規則,您可以提高自己的聲譽得分,同時讓我們有動力回答您的問題:o)請考慮! –

回答

1

下面是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 
+0

有趣,謝謝! – Daniel

相關問題