При использовании Presto для чтения таблицы TPCH, сохраненной в формате Parquet, Presto говорит, что тип столбца неверен - PullRequest
0 голосов
/ 14 октября 2019

Я хочу проверить производительность Presto на локальных данных TPCH, закодированных в формате Parquet.

У меня есть таблицы TPCH, закодированные в Parquet, которые хранятся в папке /home/data/tpch, и создать таблицу в Presto следующим образом

create table hive.tpch_5.region 
       (regionkey int, name varchar, r_comment varchar) 
        with (format= 'PARQUET', external_location = 'file:///home/data/tpch/');

Выбор из regionkey работает хорошо. Но выбор имени приводит к следующей ошибке:

Query 20191014_020453_00040_bfdq8 failed: The column name is declared as type string, but the Parquet file declares the column as type INT32

Однако столбец name имеет тип BINARY. Вот вывод из parquet-tools

file schema: region 
-------------------------------------------------------------------------------------------------------------------
region_key:  REQUIRED INT32 R:0 D:0
name:        REQUIRED BINARY R:0 D:0
comment:     REQUIRED BINARY R:0 D:0

row group 1: RC:5 TS:712 OFFSET:4 
-------------------------------------------------------------------------------------------------------------------
region_key:   INT32 UNCOMPRESSED DO:0 FPO:4 SZ:43/43/1.00 VC:5 ENC:DELTA_BINARY_PACKED,BIT_PACKED
name:         BINARY UNCOMPRESSED DO:0 FPO:47 SZ:120/120/1.00 VC:5 ENC:DELTA_BYTE_ARRAY,BIT_PACKED
comment:      BINARY UNCOMPRESSED DO:0 FPO:167 SZ:549/549/1.00 VC:5 ENC:DELTA_BYTE_ARRAY,BIT_PACKED

Любая помощь очень ценится!

Вот мой hive.properties

connector.name=hive-hadoop2
hive.metastore=file
hive.metastore.catalog.dir=file:///home/harper/presto/hive-catalog
hive.metastore.user=harper
hive.allow-drop-table=true
hive.parquet.use-column-names=true          

Обновление 10/14

Я отладил сервер presto и нашел основную причину. Ошибка была выдана из ParquetPageSourceFactory.getParquetType, где я обнаружил, что вместо чтения схемы региона Presto считал схему из таблицы lineitem.parquet. Оказывается, когда я помещаю все таблицы tpch в один и тот же каталог, Presto не извлекает файл по имени таблицы, а предполагает, что все файлы в этой папке принадлежат одной и той же таблице.

Решение

Создайте отдельные папки для каждой таблицы и переместите файлы в другой каталог.

1 Ответ

0 голосов
/ 14 октября 2019

Должна быть некоторая совместимость между типами столбцов Parquet и типами полей, определенными в вашем DDL. Вы использовали разные имена столбцов в вашем DDL, что также может быть проблемой. Попробуйте изменить имена полей в DDL на имена, определенные в файле Parquet.

...