2016-04-21 9 views
0

Suchen Sie einen Weg, um ein "nicht in wie" mit bigquery zu tun. Ich habe versucht,Bigquery nicht in gleichwertigem

SELECT 
    e.* 
FROM 
    T1 AS e 
JOIN EACH T2 AS a 
ON 
    e.filename NOT LIKE CONCAT(a.filename, "%"); 

oder

SELECT 
    e.* 
FROM 
    T1 AS e 
JOIN T2 AS a 
ON 
    REGEXP_MATCH(e.filename, CONCAT(a.filename, ".*")) 

Geben Sie den gleichen Fehler

ON clause must be AND of = comparisons of one field name from each table, with all field names prefixed with table name. . 

Jede Idee?

Antwort

1

Wenn Ihre ON-Klausel verstößt unter Voraussetzung: CROSS JOIN teuer ist:

ON clause must be AND of = comparisons of one field name from each table, with all field names prefixed with table name. . 

Sie

SELECT e.* FROM T1 AS e 
CROSS JOIN T2 AS a 
WHERE <condition> 

statt

SELECT e.* FROM T1 AS e 
JOIN T2 AS a ON <condition> 
+1

Aber Vorsicht verwenden! Filtern Sie beide Seiten des Joins so weit wie möglich vor dem Join. Und wo immer es möglich ist, fügen Sie * etwas * in die ON-Klausel ein, damit BQ Ihre Daten partitionieren kann, selbst wenn Sie nach dem Join weitere Filterung durchführen müssen. –

+1

Das stimmt. Sollte dies in meiner Antwort erwähnt werden. Wenn Sie so früh wie möglich so viel wie möglich filtern, verringert sich Ihr Abrechnungszeitraum. Verwenden Sie NUR Felder/Spalten, die Sie benötigen (zumindest in den meisten Fällen auswählen) - reduziert Ihre totalBytesBilled. Wie Sie wissen, ist Ihre fakturierungskosten = totalBytesBilled x billingTier. Sehen Sie mehr Details zu https://cloud.google.com/bigquery/pricing#high-compute –

+0

e.filename SELECT, a.file_ VON T1 AS e CROSS JOIN T2 AS eine wo a.file_ nicht wie CONCAT (e.filename, "%") LIMIT 10 gib mir Ergebnis, aber weiß nicht, ob das der Gute ist. :( –