我可以想到 2 种在 Google BigQuery 中进行过滤的方法。(假设表 2 很小。)哪种过滤方法更可取,为什么?它取决于table1的大小吗?或者还有其他更好的方法吗?
SELECT
a.ID
FROM
table1 AS a
LEFT OUTER JOIN
table2 AS b
ON
a.ID = b.ID
WHERE
b.ID is NULL
Run Code Online (Sandbox Code Playgroud)
或者
SELECT
ID
FROM
table1
WHERE
ID NOT IN (
SELECT
ID
FROM
table2)
Run Code Online (Sandbox Code Playgroud)
第二个仅限于一个且只有一个要过滤的字段。
First 可用于按多个字段过滤,如下所示
SELECT
a.ID
FROM
table1 AS a
LEFT OUTER JOIN
table2 AS b
ON
a.ID = b.ID AND a.Field2 = b.Field2 AND a.Field3 = b.Field3
WHERE
b.ID is NULL
Run Code Online (Sandbox Code Playgroud)
我测试了两个字段的反连接,差异很明显。
SELECT fields, ..
FROM inputA A
LEFT JOIN inputB B
ON A.key = B.key AND A.key2 = B.key2
WHERE B.key IS NULL AND B.key2 IS NULL
Run Code Online (Sandbox Code Playgroud)
比其 NOT IN 等效项执行得更好:
SELECT fields, ..
FROM inputA A
WHERE key NOT IN (SELECT NUM_RUT FROM key)
AND key2 NOT IN (SELECT key2 FROM inputB)
Run Code Online (Sandbox Code Playgroud)
在本例中,读取 4.6Gb 后,BigQuery 中的时间为 5 秒与 7 秒。
| 归档时间: |
|
| 查看次数: |
4665 次 |
| 最近记录: |