Описание проблемы Мы создали тему публикации/подписки в Google Cloud Platform, где подписка должна писать напрямую в таблицу BigQuery, используя параметр Тип доставки: «Запись в BigQuery».
В теме используется схема proto3 следующим образом
syntax = "proto3";
message ProtocolBuffer {
...
optional string location = 3;
...
}
а таблица BigQuery, в которую подписка должна писать, содержит столбец с нулевым значением location и типом GEOGRAPHY.
Теперь при попытке создать подписку выдает следующую ошибку:
Incompatible schema type for field 'location': field is STRING in the topic schema, but GEOGRAPHY in the BigQuery table schema.
Как мы могли бы решить эту проблему, не меняя тип GEOGRAPHY столбца location в BigQuery? В идеале вы не хотите использовать Dataflow, старый способ записи с подписки на BigQuery по финансовым причинам.
Мы можем найти два источника Google Cloud Platform, чтобы попытаться решить эту проблему.
Отображение схемы
https://cloud.google.com/pubsub/docs/bigquery#schema_compatibility
Эта документация говорит нам, что нет существующего сопоставления между proto3 string и ZetaSQL GEOGRAPHY.
Преобразование типа данных
https://cloud.google.com/bigquery/docs/write-api#data_type_conversions
С другой стороны, в документации по преобразованию данных BigQuery отмечается, что GEOGRAPHY преобразуется в прототип string. Тем не менее, мы получаем ошибку в конце концов.

Подписка Cloud Pub/Sub BigQuery в настоящее время не поддерживает тип GEOGRAPHY, на что указывает ошибка. К сожалению, в настоящее время нет другого решения, кроме использования конвейера потока данных или изменения типа в таблице BigQuery. Вы также можете добавить запрос функции в трекере.
Проблема была создана в трекере Google здесь: https://issuetracker.google.com/issues/261481063