Генерация случайного значения из массива в Google BigQuery стандарт SQL - PullRequest
0 голосов
/ 26 июня 2019

Я хочу анонимизировать некоторые маркетинговые данные для визуализации. Для этого я создал несколько массивов, которые заменяют существующие имена кампаний анонимными значениями, например, Кампания 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, но у меня возникли проблемы. Я переключился случайным образом на рэнд, но это не сработало. Кто-нибудь делал что-то подобное раньше?

1 Ответ

2 голосов
/ 26 июня 2019

Ниже приведено описание 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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...