从 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 中的数组生成随机值的主要内容,如果未能解决你的问题,请参考以下文章