【问题标题】:Join tables in Bigquery where only new strings are updated在 Bigquery 中连接表,其中仅更新新字符串
【发布时间】: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 ║
╚═════════╩══════════╩════════╩══════════╝

要求 - 如果在上一个表格中还没有找到,则添加新的关键字 - 如果关键字已经在第一个表中只更新金额和日期

【问题讨论】:

  • 你已经尝试了什么?

标签: google-bigquery


【解决方案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`)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 2013-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多