2017-09-14 67 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

相关问题