我将分享我刚刚测试过的东西,它工作得很好。我知道这可能是 Hive 目前可以解决的版本相关问题。无论如何,我会解释我刚刚做了什么,
1.检查原始数据
$猫我的文件.txt
orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING
100,1000,100000,5,"aa"
200,2000,200000,6,"bb"
300,3000,300000,7,"cc"
400,4000,400000,8,"dd"
500,5000,500000,9,"ee"
2.挂载指向文件的Hive表
Create external table myDB.orders(orderID INT, CustID INT, OrderTotal FLOAT, OrderNumItems INT, OrderDesc STRING)
row format
delimited FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/my/path/to/csv'
tblproperties ("skip.header.line.count"="1");
4. 检查 Hive 表是否正常工作。注意,我添加了一句忽略第一行,这通常是 csv 文件的标题。
从 myDB.orders 中选择 *;
100,1000,100000.0,5,"aa"
200,2000,200000.0,6,"bb"
300,3000,300000.0,7,"cc"
400,4000,400000.0,8,"dd"
500,5000,500000.0,9,"ee"
5. 安装拼花桌:
CREATE TABLE myDB.parquet_test (orderID INT, CustID INT, OrderTotal FLOAT,
OrderNumItems INT, OrderDesc STRING)
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' stored as
INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
location '/my/path/to/parquet';
6. 将CSV Hive表中的数据插入Hive Parquet表(过程中转换为parquet)
insert overwrite table myDB.parquet_test select * from myDB.orders;
最后,我通过对myDB.parquet_test
. 为了 100% 确定数据在 Parquet 中,我去/my/path/to/parquet
并仔细检查了这些文件是否真的在 Parquet 中。不确定您的问题是否是因为您没有跳过文件的标题或您正在使用的版本,但同样,我刚刚解释的这些步骤效果很好。