Я хочу генерировать уникальные идентификаторы при вставке в таблицу Bigquery. - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу генерировать уникальные идентификаторы при вставке в таблицу Bigquery. ROW_NUMBER () OVER () завершается ошибкой с превышением ресурсов. Форумы рекомендуют использовать ROW_NUMBER () OVER (PARTITION BY). К сожалению, секция by не может использоваться, так как она может выдавать одинаковые row_numbers для секции по ключу. Обратите внимание, что данные, которые я пытаюсь вставить, составляют по меньшей мере несколько сотен миллионов каждый день.

1 Ответ

0 голосов
/ 14 сентября 2018

К сожалению, раздел с помощью by не может быть использован, так как он может выдавать одинаковые номера строк для раздела по ключу

да - вы получите одинаковые номера для разных разделов - так что вы можете просто использовать составной ключ, как показано ниже очень упрощенный пример - просто для демонстрации подхода - вы сможете настроить его для своего конкретного случая

#standardSQL
WITH `project.dataset.table` AS (
  SELECT value, CAST(10*RAND() AS INT64) partitionid
  FROM UNNEST(GENERATE_ARRAY(1, 100)) value
)
SELECT 
  partitionid, 
  value,
  CONCAT(
    CAST(1000 + partitionid AS STRING), 
    CAST(10000 + ROW_NUMBER() OVER(PARTITION BY partitionid ORDER BY value) AS STRING)
  ) id
FROM `project.dataset.table`
-- ORDER BY id  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...