В документации BigQuery говорится:
Если вы храните данные GEOGRAPHY в таблице и ваши запросы фильтруют данные с помощью пространственного предиката, убедитесь, что таблица кластеризована по столбцу GEOGRAPHY.
Но только POINT
типы будут меньше 1 КБ, большинство географических регионов намного больше. Поэтому, когда я собираюсь вставить географию в кластеризованный столбец, я получаю эту ошибку:
Clustering encountered a key Msg_0_CLOUD_QUERY_TABLE.geom that is 1995 bytes long, which is more than the maximum allowed length of 1024 bytes.
Действительно ли максимальный размер кластеризованного столбца GEOGRAPHY составляет 1024 байта? Нужно ли как-то вставлять свои данные по-другому?
Пробовал как с FILE_LOADS, так и с потоковой передачей. Похоже, что это не ошибка, а просто несоответствие ожиданий, поскольку в документах BQ указано, что кластеризованные столбцы имеют ограничение в 1 КБ.
ОБНОВЛЕНИЕ, январь 2021 г.: команда Bigquery сообщила мне, что ограничение в 1 КБ не было преднамеренным, и они работают над исправлением, позволяющим кластеризовать геометрию произвольного размера без создания суррогатной ограничивающей рамки.
Это похоже на реальный предел, поэтому я предварительно вычислил центроиды для своих полигонов с помощью GDAL в Dataflow, сохранил их в отдельном столбце и сгруппировал по географии центроидов. Прекрасно работает.
Лимит снят. Действительно, это не было преднамеренным и было вызвано смешиванием типов данных STRING / BYTES и GEOGRAPHY. Кстати, ограничение также было снято для типов STRING/BYTES, однако для кластеризации учитываются только первые 1k символов STRING/BYTES.
Не могли бы вы сообщить об ошибке с помощью cloud.google.com/support/docs/issue-trackers и подробно описать, как вы получаете эту ошибку? Вставляете ли вы данные с помощью задания LOAD, потоковой вставки или команды SQL INSERT?