google-bigquery - 从 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 但这不起作用。以前有人做过这样的事情吗?
解决方案
以下是 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`
推荐阅读
- github - 使用持续部署发布机器人后不显示图像
- c# - 始终定义 Visual Studio 2013 DEBUG 预处理器指令
- java - Retrofit POST request using @Body returns empty response body
- uwp - UWP:NavigationView 无法更改面板背景
- c - 如何解决编译错误:警告“使用此标头的文件必须使用 _SVID_SOURCE 或 _XOPEN_SOURCE 编译”
- java - 在 UTC 中使用到期日期时,JWT 的到期不起作用
- c# - 如何动态替换 json 附带的属性?
- json - 状态元素没有出现在带有 react-tooltip 的反应简单地图上
- javascript - 如何在 javascript 中使用 hapi/joi 框架验证包含特定类型对象的数组?
- here-api - 可以在此处的地图中设置位置精度指示器吗?