在 Bigquery 中连接表,其中仅更新新字符串
Posted
技术标签:
【中文标题】在 Bigquery 中连接表,其中仅更新新字符串【英文标题】:Join tables in Bigquery where only new strings are updated 【发布时间】:2018-02-02 18:03:02 【问题描述】:我有以下两个数据表:
╔═════════╦══════════╦════════╦══════════╗
║ Keyword ║ Category ║ Amount ║ Update ║
╠═════════╬══════════╬════════╬══════════╣
║ dog ║ Animal ║ 2 ║ 1/1/2018 ║
║ fish ║ Animal ║ 4 ║ 1/1/2018 ║
║ cat ║ Animal ║ 5 ║ 1/1/2018 ║
║ bird ║ Animal ║ 7 ║ 1/1/2018 ║
║ bike ║ Other ║ 1 ║ 1/1/2018 ║
║ rabbit ║ Animal ║ 11 ║ 1/1/2018 ║
╚═════════╩══════════╩════════╩══════════╝
╔═════════╦══════════╦════════╦══════════╗
║ Keyword ║ Category ║ Amount ║ Update ║
╠═════════╬══════════╬════════╬══════════╣
║ lion ║ Animal ║ 2 ║ 1/2/2018 ║
║ snake ║ Animal ║ 9 ║ 1/2/2018 ║
║ cat ║ Animal ║ 18 ║ 1/2/2018 ║
║ bird ║ Animal ║ 13 ║ 1/2/2018 ║
║ bike ║ Other ║ 1 ║ 1/2/2018 ║
║ bottle ║ Other ║ 11 ║ 1/2/2018 ║
╚═════════╩══════════╩════════╩══════════╝
什么 SQL 查询(在 BigQuery 中)会产生下表?
╔═════════╦══════════╦════════╦══════════╗
║ Keyword ║ Category ║ Amount ║ Update ║
╠═════════╬══════════╬════════╬══════════╣
║ dog ║ Animal ║ 2 ║ 1/1/2018 ║
║ fish ║ Animal ║ 4 ║ 1/1/2018 ║
║ cat ║ Animal ║ 18 ║ 1/2/2018 ║
║ bird ║ Animal ║ 13 ║ 1/2/2018 ║
║ rabbit ║ Animal ║ 11 ║ 1/1/2018 ║
║ lion ║ Animal ║ 2 ║ 1/2/2018 ║
║ snake ║ Animal ║ 9 ║ 1/2/2018 ║
║ bike ║ Other ║ 1 ║ 1/2/2018 ║
║ bottle ║ Other ║ 11 ║ 1/2/2018 ║
╚═════════╩══════════╩════════╩══════════╝
要求 - 如果在上一个表格中还没有找到,则添加新的关键字 - 如果关键字已经在第一个表中只更新金额和日期
【问题讨论】:
你已经尝试了什么? 【参考方案1】:这是一种方法:
select t2.*
from t2
union all
select t1.*
from t1
where not exists (select 1 from t2 where t2.keyword = t1.keyword);
这会从第二个表中获取所有内容,并从第一个表中获取不匹配的行。
【讨论】:
【参考方案2】:表 C 看起来像表 B 加上表 A 中不存在于表 B 中的记录
如果您需要表 C,则将 tablec 创建为 select * from tableb 然后插入到 tablec 中。或者如果您只想要数据,您可以插入到 tableb 中。
INSERT
INTO tableb
( SELECT keyword,category,amount, UPDATE
FROM tablea
WHERE NOT EXISTS
(SELECT 'x' FROM tableb WHERE tableb.keyword = tablea.keyword
)
);
【讨论】:
【参考方案3】:这是我让它工作的方式:
SELECT * FROM dataset.t2
UNION DISTINCT
SELECT * FROM dataset.t1
WHERE t1.Keyword NOT IN (SELECT Keyword FROM `project.dataset.t2`)
【讨论】:
以上是关于在 Bigquery 中连接表,其中仅更新新字符串的主要内容,如果未能解决你的问题,请参考以下文章