比较BigQuery中的表

时间:2013-10-24 20:07:07

标签: compare google-bigquery

如何比较两个表格(Table1Table2)并查找Table2中的所有新条目或更改。

使用SQL Server我可以使用

Select * from Table1
Except
Select * from Table2

这是我想要的样本

表1

 A   |  1
 B   |  2
 C   |  3

表2

 A   |  1
 B   |  2
 C   |  2
 D   |  4

所以,如果我比较两个表,我希望我的结果能够显示以下内容

C   |   2
D   |   4

我尝试了一些没有运气的陈述。

2 个答案:

答案 0 :(得分:6)

现在我有了你的实际样本数据集,我可以编写一个查询,查找一个表中不在另一个表中的每个域:

https://bigquery.cloud.google.com/table/inbound-acolyte-377:demo.1024有24,729,816行。 https://bigquery.cloud.google.com/table/inbound-acolyte-377:demo.1025有24,732,640行。

让我们看看1025中不是1024的所有内容:

SELECT a.domain
FROM [inbound-acolyte-377:demo.1025] a
LEFT OUTER JOIN EACH [inbound-acolyte-377:demo.1024] b
ON a.domain = b.domain
WHERE b.domain IS NULL

结果:39,629行。 (已过8.1秒,处理2.04 GB)

答案 1 :(得分:2)

获取差异(假设tkey是您唯一的行标识符):

SELECT a.tkey, a.name, b.name
FROM [your.tableold] a
JOIN EACH [your.tablenew] b
ON a.tkey = b.tkey
WHERE a.name != b.name
LIMIT 100

对于新行,有一种方法是您建议的:

SELECT col1, col2
FROM table2
WHERE col1 NOT IN
  (SELECT col1 FROM Table1)

(当Table1变得过大时,你必须切换到JOIN EACH)