К сожалению, раздел с помощью 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