You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery SQL查询异常:重复值问题排查与解决咨询

问题原因与解决方案

问题原因

你的查询用逗号直接连接两个表,这会产生笛卡尔积——Uber Eats表中的每一行都会和Grubhub表中的每一行进行匹配。哪怕你用了DISTINCT,它是对整个结果行(四个字段组合)去重,而不是单独对Uber_Eats_Slug和uber_formatted_datetime去重。只要Grub_Hub_Slug或grubhub_formatted_datetime有不同值,整行就会被保留,所以你会看到大量重复的Uber相关字段,对应不同的Grubhub字段值。

修正方案

方案1:仅获取Uber Eats的不重复数据

如果你的需求只是拿到不重复的Uber_Eats_Slug和uber_formatted_datetime,完全不需要关联Grubhub表,直接查询Uber的表即可:

SELECT 
    DISTINCT
    CONCAT(vb_name, b_name) AS Uber_Eats_Slug,
    FORMAT_TIMESTAMP('%Y-%m-%d %H:%M', CAST(timestamp AS TIMESTAMP)) AS uber_formatted_datetime
FROM 
    `arboreal-vision-339901.take_home_v2.virtual_kitchen_ubereats_hours`
LIMIT 1000;

方案2:关联两个平台的对应厨房数据

如果需要同时获取两个平台对应同一家虚拟厨房的数据,必须添加关联条件,用JOIN替代笛卡尔积,比如通过虚拟厨房的vb_name和b_name来匹配:

SELECT 
    DISTINCT
    CONCAT(ue.vb_name, ue.b_name) AS Uber_Eats_Slug,
    CONCAT(gh.vb_name, gh.b_name) AS Grub_Hub_Slug,
    FORMAT_TIMESTAMP('%Y-%m-%d %H:%M', CAST(ue.timestamp AS TIMESTAMP)) AS uber_formatted_datetime,
    FORMAT_TIMESTAMP('%Y-%m-%d %H:%M', CAST(gh.timestamp AS TIMESTAMP)) AS grubhub_formatted_datetime
FROM 
    `arboreal-vision-339901.take_home_v2.virtual_kitchen_ubereats_hours` AS ue
JOIN 
    `arboreal-vision-339901.take_home_v2.virtual_kitchen_grubhub_hours` AS gh
ON 
    ue.vb_name = gh.vb_name 
    AND ue.b_name = gh.b_name  -- 确保是同一家虚拟厨房
GROUP BY 
    Uber_Eats_Slug, Grub_Hub_Slug, uber_formatted_datetime, grubhub_formatted_datetime
LIMIT 1000;

注:这里的GROUP BY和DISTINCT作用重复,可去掉其中一个,保留DISTINCT或仅保留GROUP BY即可。

内容的提问来源于stack exchange,提问作者Tejas Mallikarjuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:34:58