如何为表中每行标记指定列组合是否唯一?含BigQuery方案
通用SQL实现方法
核心思路是利用窗口函数按指定列组合分组,统计每组的行数,通过判断行数是否为1来标记唯一性:
SELECT *, COUNT(*) OVER (PARTITION BY Fruits, Color) = 1 AS is_unique FROM your_table;
PARTITION BY Fruits, Color:将数据按需要校验的列组合分组COUNT(*) OVER (...):计算每组内的总行数- 当行数等于1时,说明该列组合唯一,标记为
TRUE,否则为FALSE
BigQuery实现方案
BigQuery完全兼容上述通用逻辑,仅需注意表名格式为项目ID.数据集ID.表名,示例代码如下:
SELECT Fruits, Color, Weight, COUNT(*) OVER (PARTITION BY Fruits, Color) = 1 AS is_unique FROM `your-project.your-dataset.target-table`;
针对超大规模数据集,BigQuery会自动优化窗口函数的执行效率,无需额外配置。
示例演示
输入表(需校验
Fruits, Color列组合唯一性):
| Fruits | Color | Weight |
|--------|--------|--------|
| Apple | Red | 100 |
| Apple | Red | 150 |
| Banana | Yellow | 200 |
| Orange | Orange | 120 |
输出结果:
| Fruits | Color | Weight | is_unique |
|--------|--------|--------|-----------|
| Apple | Red | 100 | FALSE |
| Apple | Red | 150 | FALSE |
| Banana | Yellow | 200 | TRUE |
| Orange | Orange | 120 | TRUE |
内容的提问来源于stack exchange,提问作者Saurabh Maurya
相关产品推荐
相关产品推荐

