Ограничить размер массива до 1 МБ в BigQuery - PullRequest
0 голосов
/ 04 июня 2019

У меня есть следующая операция, которую я выполняю в BigQuery:

SELECT ARRAY_AGG(state IGNORE NULLS LIMIT 10000) 
FROM mytable
GROUP BY state

Как лучше всего ограничить результат размером не более 1 МБ?Раньше я выполнял LIMIT в ARRAY_AGG, но часто это превышало бы лимит, если бы были большие текстовые поля, поэтому я бы предпочел ограничить его конечным размером результата.

1 Ответ

4 голосов
/ 04 июня 2019

Один из вариантов (BigQuery Standard SQL)

#standardSQL
WITH temp AS (
  SELECT state, SUM(LENGTH(state)) OVER(ORDER BY pos) size 
  FROM (
    SELECT state, ROW_NUMBER() OVER() pos
    FROM `project.dataset.table`
  )
)
SELECT ARRAY_AGG(state IGNORE NULLS)
FROM temp
WHERE size < 1000000    

Вы можете протестировать, поиграть с приведенным выше примером ниже:

#standardSQL
WITH `project.dataset.table` AS (
  SELECT REPEAT('a', CAST(100 * RAND() AS INT64)) state
  FROM UNNEST(GENERATE_ARRAY(1, 100))
), temp AS (
  SELECT state, SUM(LENGTH(state)) OVER(ORDER BY pos) size 
  FROM (
    SELECT state, ROW_NUMBER() OVER() pos
    FROM `project.dataset.table`
  )
)
SELECT ARRAY_AGG(state IGNORE NULLS)
FROM temp
WHERE size < 5000 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...