带有内部连接的 BigQuery 更新

BigQuery Update with Inner join

是否可以基于与 BigQuery 中现有 table 的 JOIN 对 table 进行更新?

此查询中没有任何双打

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 中有多个记录与 table influence 中给定的 profile_id 匹配。

您必须首先决定要如何处理该用例。可能的选项包括:

  • 从源中删除重复记录 table profile_id_lut
  • 从可用的 usernames
  • 中选择最大值或最小值
  • 选择具有最大值或最小值的用户名 profile_id

最佳选择取决于您的功能用例,无法根据您问题中提供的信息进行评估...