2017-09-14 2 views
0

J'ai une table dans bigquery qui a plus de 100 colonnes et a plus de 70 millions de rangées. Je veux savoir si je peux écrire une requête pour extraire des lignes où une colonne contient une valeur 'FINISHED'.Bigquery Sélectionnez de la table où une colonne contient 'FINI'

+0

Je ne pense pas que ce soit possible. – Daniel

+1

@Daniel - bien sûr que c'est possible: o) avec BigQuery - voir la réponse –

+0

Vous avez un faible taux. Important sur SO - vous pouvez «marquer la réponse acceptée» en utilisant la coche à gauche de la réponse affichée, en dessous du vote. Voir http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235 pour savoir pourquoi c'est important! Aussi important de «voter sur la réponse». Votez pour les réponses utiles. ... Vous pouvez vérifier ce qu'il faut faire quand quelqu'un répond à votre question - http://stackoverflow.com/help/someone-answers. En suivant ces règles simples, vous augmentez votre propre score de réputation et en même temps vous nous gardez motivés pour répondre à vos questions: o) considérez svp! –

Répondre

1

est ci-dessous pour BigQuery standard SQL devrait être bon début pour vous :)

#standardSQL 
SELECT <columns to output> 
FROM yourTable AS t 
WHERE REGEXP_CONTAINS(LOWER(TO_JSON_STRING(t)), 'finished') 

Vous pouvez tester/jouer avec des données factices avec ci-dessous

#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') 

Mise à jour

Note: si vous avez votre mot de recherche dans le cadre d'au moins un nom de colonne - ci-dessus retournera toutes les lignes! Pour répondre à cela - vous auriez besoin d'investir un peu plus de codage

Par exemple, pour le schéma simple (sans enregistrement ou répété) ce serait une

#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 

Vous pouvez tester cela avec ci-dessous

#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

Intéressant, merci! – Daniel