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

Bra*_*son 2 google-bigquery

我希望对一些营销数据进行匿名化以实现可视化目的。为此,我创建了几个数组,用匿名值替换现有的营销活动名称,例如营销活动 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
Run Code Online (Sandbox Code Playgroud)

这满足了我的需要,它为营销活动的每行数据随机分配数字 1-5。

我尝试在 BigQuery 中模仿这一点,但遇到了麻烦。我将随机切换为兰特,但这不起作用。以前有人做过类似的事情吗?

Mik*_*ant 5

以下是 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)
Run Code Online (Sandbox Code Playgroud)

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

#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`
Run Code Online (Sandbox Code Playgroud)