Ошибка типа INT32 при сканировании объединенной таблицы паркета. Ошибка или ожидаемое поведение? - PullRequest
1 голос
/ 09 апреля 2020

Я использую BigQuery для запроса внешнего источника данных (также известного как федеративная таблица), где исходные данные представляют собой паркетную таблицу с разделенными ульями, хранящуюся в облачном хранилище Google. Я использовал это руководство для определения таблицы.

Мой первый запрос для проверки этой таблицы выглядит следующим образом

SELECT * FROM my_dataset.my_table WHERE year=2019 AND day = "2019-01-01" LIMIT 10

Этот запрос не выполняется со следующей ошибкой

Столбец visitor_partition имеет тип INT64, который отличается от ожидаемого типа INT32

Я хочу знать, почему возникает эта ошибка и как ее обойти или устранить. Я провел небольшое исследование, используя библиотеку parquet-tools, чтобы заглянуть во внутренние данные моего паркета.

Когда я запускаю java -jar ./parquet-tools-1.10.0.jar meta test.c000.gz.parquet | grep visitor_partition над одним из моих файлов паркета, возвращаются следующие соответствующие строки

visitor_partition:          OPTIONAL INT64 R:0 D:1
visitor_partition:           INT64 GZIP DO:0 FPO:59420041 SZ:54561/537912/9.86 VC:633590 ENC:BIT_PACKED,PLAIN_DICTIONARY,RLE ST:[min: 0, max: 99, num_nulls: 0]

Когда я запускаю схему, команду, появляется следующая соответствующая информация о схеме optional int64 visitor_partition;

Так что ясно, что в этом файле паркета представлены данные для поля visitor_partition как INT64. Так почему же BigQuery ожидает увидеть здесь тип INT32?

1 Ответ

3 голосов
/ 13 апреля 2020

Обратите внимание, что схема внешней таблицы выводится из последнего файла, отсортированного по именам файлов, по лексикографическому списку всех файлов, которые соответствуют исходному URI таблицы. Поэтому любой шанс, что конкретный файл Parquet в вашем случае имеет схему, отличную от описанной вами, например, столбец INT32 с логическим типом DATE для поля «visitor_partition» - который BigQuery будет выводить как тип DATE.

...