如何用BigQuery SQL将表1的Name字段随机填充到表2的User列?
BigQuery SQL实现随机填充用户名称到目标表
方法1:批量随机分配(可控覆盖所有行,随机重复)
如果需要给表2每行随机分配表1名称,且希望分配逻辑更可控,可使用以下SQL:
WITH ranked_table2 AS ( -- 给表2每行生成唯一序号 SELECT Month, Year, ROW_NUMBER() OVER () AS row_num FROM `your-project.your-dataset.table2` ), random_name_pool AS ( -- 生成足够覆盖表2行数的随机名称序列 SELECT Name, ROW_NUMBER() OVER (ORDER BY RAND()) AS row_num FROM `your-project.your-dataset.table1` CROSS JOIN UNNEST(GENERATE_ARRAY(1, (SELECT COUNT(*) FROM `your-project.your-dataset.table2`))) ) -- 更新表2的User列 UPDATE `your-project.your-dataset.table2` t2 SET User = rnp.Name FROM ranked_table2 rt2 JOIN random_name_pool rnp ON rt2.row_num = rnp.row_num WHERE t2.Month = rt2.Month AND t2.Year = rt2.Year;
方法2:单条随机选取(简单直接,允许重复)
若无需复杂分配逻辑,仅需每行独立随机选表1名称,用更简洁的写法:
UPDATE `your-project.your-dataset.table2` SET User = ( SELECT Name FROM `your-project.your-dataset.table1` ORDER BY RAND() LIMIT 1 );
注意事项
- 替换SQL中的
your-project.your-dataset为实际的BigQuery项目ID和数据集名称 - 方法1通过序号关联确保每行都分配到名称,重复情况随机;方法2每行独立随机选取,可能出现大量重复名称
- 执行UPDATE前建议先运行SELECT语句验证匹配结果,比如将方法1的UPDATE替换为SELECT查看分配情况
内容的提问来源于stack exchange,提问作者sql_dev1802
相关产品推荐
相关产品推荐

