我想测试以Parquet格式编码的本地TPCH数据的Presto性能。
我将用Parquet编码的TPCH表存储在文件夹/home/data/tpch
下,并按如下方式预先创建表
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。这是实木复合地板工具的输出
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
我调试了presto服务器并找到了根本原因。该错误是从ParquetPageSourceFactory.getParquetType
引发的,在这里我发现Presto从表lineitem.parquet
中读取了架构,而不是读取区域的架构。事实证明,当我将所有tpch表放在同一目录下时,Presto并未按表名获取文件,而是假定该文件夹下的所有文件都属于同一表。
为每个表创建单独的文件夹,然后将文件移动到其他目录。
答案 0 :(得分:0)
Parquet列类型和DDL中定义的字段类型之间必须具有一定的兼容性。您在DDL中使用了不同的列名,这也可能是一个问题。尝试将DDL中的字段名称更改为Parquet文件中定义的名称。