从 Google BigQuery 标准 SQL 中的数组生成随机值

Posted

技术标签:

【中文标题】从 Google BigQuery 标准 SQL 中的数组生成随机值【英文标题】:Generate a random value from an array in Google BigQuery standard SQL 【发布时间】:2019-06-26 20:41:16 【问题描述】:

我希望将一些营销数据匿名化以实现可视化。为此,我创建了几个数组,将现有的活动名称替换为匿名值,例如活动 1、活动 2、活动 3 等...

我使用以下查询在 PostgreSQL 数据库中进行了这项工作:

(ARRAY['Campaign 1'::text, 'Campaign 2'::text, 'Campaign 3'::text, 'Campaign 4'::text, 'Campaign 5'::text])[(floor(random() * 5::double precision) + 1::double precision)] AS campaign_name

这可以满足我的需要,因为它会为每行数据随机分配 1-5 的数字。

我尝试在 BigQuery 中模仿这一点,但遇到了问题。我随机切换到 rand 但这不起作用。以前有人做过这样的事情吗?

【问题讨论】:

【参考方案1】:

以下是 BigQuery Standrad SQL(众多选项之一)。只是生成的虚拟数据的一个例子

#standardSQL
WITH `project.dataset.dummy_data` AS (SELECT id FROM UNNEST(GENERATE_ARRAY(1, 100)) id)
SELECT id, campaigns[OFFSET(CAST(5 * RAND() - 0.5 AS INT64))] campaign_name
FROM `project.dataset.dummy_data`, (SELECT ['Campaign 1','Campaign 2','Campaign 3','Campaign 4','Campaign 5'] campaigns)

以上假设出于某种原因您希望设置该数组 下面的版本表明你完全可以避免它

#standardSQL
WITH `project.dataset.dummy_data` AS (SELECT id FROM UNNEST(GENERATE_ARRAY(1, 100)) id)
SELECT id, CONCAT('Campaign ', CAST(1 + CAST(5 * RAND() - 0.5 AS INT64) AS STRING)) campaign_name
FROM `project.dataset.dummy_data`

【讨论】:

您的第二个解决方案非常适合我的需要。我什至没有想过将字符串与随机整数连接起来——这也让我的代码更加简洁。谢谢!

以上是关于从 Google BigQuery 标准 SQL 中的数组生成随机值的主要内容,如果未能解决你的问题,请参考以下文章

NOT IN 不能在 google BigQuery 标准 sql 中工作

Google BigQuery 中的 TIMESTAMP 和标准 SQL

BigQuery 中用于 Google Analytics 数据的标准 SQL 还是旧版 SQL?

无法在 Google BigQuery 中将此旧版 SQL 转换为标准 SQL

适用于 BigQuery 的 Google Apps 脚本(标准 SQL)- NaN

从 Google 脚本将数据插入 BigQuery:遇到“”