BigQuery: при кластеризации обнаружен ключ, длина которого превышает

При кластеризации таблиц просмотров страниц в Википедии я получил ошибку:

При кластеризации обнаружен ключ, длина которого превышает максимально допустимый предел в 1024 байта.

Контекст: https://medium.com/google-cloud/bigquery-optimized-cluster-your-tables-65e2f684594b

(Я группирую по

CREATE TABLE `fh-bigquery.wikipedia_v3.pageviews_2017`
PARTITION BY DATE(datehour)
CLUSTER BY wiki, title
...

)


person Felipe Hoffa    schedule 18.08.2018    source источник
comment
как FYI: насколько я понимаю - обнаружена ошибка в обеспечении длины 1 КБ, которая была недавно введена. Итак, это отключено на данный момент, пока не будет исправлено   -  person Mikhail Berlyant    schedule 21.08.2018


Ответы (1)


При кластеризации таблиц BigQuery имеет ограничение на ключи в 1 КБ.

Вы можете решить эту проблему для примеров таблиц, изменив код вставки, чтобы он усекал любую слишком длинную запись.

Например, вместо:

INSERT INTO `fh-bigquery.wikipedia_v3.pageviews_2018` (datehour, wiki, title, views)
SELECT datehour, wiki, title, views

обрезать потенциально длинные заголовки с помощью:

INSERT INTO `fh-bigquery.wikipedia_v3.pageviews_2018` (datehour, wiki, title, views)
SELECT datehour, wiki, SUBSTR(title, 0, 300) title, views

Если вы продолжаете испытывать ошибки, обратите внимание, что некоторые искаженные строки могут иметь большую длину, чем то, что видит SUBSTR(). Отфильтруйте их с помощью:

WHERE BYTE_LENGTH(title) < 300
person Felipe Hoffa    schedule 18.08.2018
comment
должен сказать, что мне нравится видеть, как BQ развивается и внедряет инновации с такой скоростью :)! - person Willian Fuks; 19.08.2018
comment
Я подозреваю, что дело не в том, что заголовок «искажен», а в том, что SUBSTR работает с рунами (символами) Unicode и что ограничения кластеризации указаны в байтах. Таким образом, заголовки с символами двойной / тройной ширины (много китайских иероглифов, акцентированные символы, эмодзи) попадут в этот случай. - person elithrar; 19.08.2018
comment
В моем конкретном случае это были искаженные строки (взятые из реальных журналов) - person Felipe Hoffa; 19.08.2018
comment
Я делаю CLUSTER BY wiki, title, поэтому мне нужно было убедиться, что BYTE_LENGTH(wiki+title) было ниже лимита. - person Felipe Hoffa; 20.08.2018
comment
Вы знаете, работает ли BigQuery над расширением этого лимита @FelipeHoffa? - person Eben du Toit; 11.06.2019
comment
Просто следите за этой веткой. Это ограничение на некоторое время снято, и новое поведение задокументировано здесь. cloud.google.com/bigquery/docs/ - person Pavan Edara; 05.08.2020