这两天遇到个奇怪的事,以前还没注意到。
hive导入csv的时候,有时因为值是带双引号括住的,所以一般用这个格式建表:
create table test( index int, ..... ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = "\t", "quoteChar" = "\"", 'skip.header.line.count'='1' ) STORED AS TEXTFILE;
然后发现所有的字段都变成string,改也没反应,能改也报错,也不能直接导入到parquet格式的表,也会报错,用impala查询也报错。
后来用另外一个方法,将表转为parquet格式后,字段类型才正常。
那怎么转为parquet格式呢,如果直接创建parquet格式表,在select 导入。会有异常错误
所以我个人方法是再创建一个textfile表,格式如下:
create table test2( index int, ..... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
然后在创建parquet表,来转换就正常:
create table test3( index int, ..... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS PARQUET TBLPROPERTIES('parquet.compression'='SNAPPY');
就是说,用了 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 就会字段类型异常。
也无从查起。
如果有大神看到可以给点思路哈