首页 > 解决方案 > 从 Google BigQuery 标准 SQL 中的数组生成随机值

问题描述

我希望匿名化一些营销数据以用于可视化目的。为此,我创建了几个数组,将现有活动名称替换为匿名值,例如活动 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 但这不起作用。以前有人做过这样的事情吗?

标签: google-bigquery

解决方案


以下是 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`

推荐阅读