BigQuery 更新与内部联接
Posted
技术标签:
【中文标题】BigQuery 更新与内部联接【英文标题】:BigQuery Update with Inner join 【发布时间】:2019-09-13 23:09:02 【问题描述】:是否可以基于 JOIN 与 BigQuery 中的现有表对表执行更新?
此查询中没有任何双精度数
SELECT profile_id, count(*) as cnt
FROM `instagram-tags-c67d8.sample_dataset.influence`
GROUP BY profile_id HAVING cnt > 1
它也适用于
select a.profile_id, b.username
from `instagram-tags-c67d8.sample_dataset.influence` AS a
inner join (
SELECT
DISTINCT profile_id, username
FROM `instagram-tags-c67d8.sample_dataset.profile_id_lut`) AS b
ON a.profile_id = b.profile_id
where a.username is null
现在我只有这个问题 UPDATE/MERGE 必须与每个目标行最多匹配一个源行
UPDATE
`instagram-tags-c67d8.sample_dataset.influence` AS a
SET
a.username = b.username
FROM (
SELECT
DISTINCT profile_id, username
FROM `instagram-tags-c67d8.sample_dataset.profile_id_lut`) AS b
WHERE
a.username IS NULL
AND a.profile_id = b.profile_id
【问题讨论】:
该错误似乎表明profile_id_lut
中有多个记录与influence
中的给定profile_id
匹配。
是的,没错
好的,那么您想如何处理该用例?也许从可用的username
s 中选择最大值或最小值?
所以,数据库有很多行不同的用户名,但唯一的 profile_id SELECT profile_id, count(*) as cnt FROM ( SELECT DISTINCT profile_id, username FROM instagram-tags-c67d8.sample_dataset.profile_id_lut ) b GROUP BY profile_id HAVING cnt > 1;
因此,我认为最好的办法是删除旧用户名
【参考方案1】:
该错误似乎表明profile_id_lut
中有多个记录与表influence
中的给定profile_id
匹配。
您必须首先决定如何处理该用例。可能的选项包括:
从源表profile_id_lut
中删除重复记录
从可用的username
s 中选择最大值或最小值
选择profile_id
最大或最小的用户名
最佳选择取决于您的功能用例,无法根据您问题中提供的信息进行评估...
【讨论】:
以上是关于BigQuery 更新与内部联接的主要内容,如果未能解决你的问题,请参考以下文章