這兩天遇到個奇怪的事,以前還沒注意到。
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' 就會字段類型異常。
也無從查起。
如果有大神看到可以給點思路哈