【问题标题】:Replacing NULL values in Table1.Column1 with values from Table2.Column2 where Table1 has multiple rows of same values将 Table1.Column1 中的 NULL 值替换为 Table2.Column2 中的值,其中 Table1 具有多行相同的值
【发布时间】:2021-11-15 05:21:29
【问题描述】:

首先让我为可能令人困惑的标题道歉。我刚刚开始我的数据分析师之旅。我正在使用具有 LAT、LONG、STATE 字段的 Extreme Storm 数据集 (TABLE1) 在 BIGQUERY 中工作。我想用 State Information dataset(TABLE2) 中的一般 LAT/LONG 值替换纬度和经度字段中的空值,还包含 LAT,LONG 和 STATE 值。在 TABLE1 中,每条记录都有一个唯一的 EVENT_ID,并且有 1.4m 行。在 TABLE2 中,每个状态都是唯一的记录。

我试过了:

Update TABLE1 
SET TABLE1.BEGIN_LAT=TABLE2.latitude
From TABLE1
INNER JOIN TABLE2 
ON TABLE1.STATE = TABLE2.STATE
WHERE TABLE1.BEGIN_LAT IS NULL

我收到一个错误,因为 TABLE1 包含具有相同状态的多行,我试图将其用作我的主键。我知道我做错了什么,但不知道如何以正确的方式去做。我想在 BigQuery 中做的事情是否可行?

任何帮助将不胜感激。甚至关于如何提问的建议! :)

谢谢。

【问题讨论】:

    标签: join google-bigquery


    【解决方案1】:

    我相信您在查询中为 Update 中的 TABLE1 和 From 中的 TABLE1 提供了一些别名。在这种情况下,您可以将条件添加到 WHERE 子句以匹配 EVENT_ID。像这样:

    UPDATE TABLE1 TABLE1_U
    SET TABLE1_U.BEGIN_LAT=TABLE2.latitude
    FROM TABLE1 TABLE1_F
    INNER JOIN TABLE2 
    ON TABLE1_F.STATE = TABLE2.STATE
    WHERE TABLE1_U.BEGIN_LAT IS NULL AND TABLE1_U.EVENT_ID = TABLE1_F.EVENT_ID
    

    另外,我更喜欢执行 SELECT 查询而不是更新并将查询结果保存到新表中。

    【讨论】:

    • 您好,感谢您的帮助!它确实填充了空值并停止了错误,但它也覆盖了我想要保留的现有值。我将如何将其编写为选择命令?
    • 对不起,我希望没有不可逆转的数据丢失。您可以这样做:SELECT TABLE1.EVENT_ID, TABLE1.STATE, ..other fields, IFNULL(TABLE1.BEGIN_LAT, TABLE2.latitude) From TABLE1 INNER JOIN TABLE2 ON TABLE1.STATE = TABLE2.STATE 并在“更多”>“查询设置”中设置目标表。
    • 不用担心数据丢失,我有备份存储在云端。我真的很想感谢你花时间帮助我。这解决了我的问题并填充了所需的缺失值!我度过了一段令人沮丧的时光,你帮了很多忙。
    • 没问题。很高兴知道没关系!
    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多