csvファイルをhiveに読ませる場合に、ヘッダが付いていたらどうするか。そのまま読み込ませるとヘッダ行も列に追加されてしまう。
hive0.13からはskip.header.line.countを指定して、行を飛ばせるらしい。ついでにフッタ行を飛ばす skip.footer.line.count もいるようだ。
下記、サンプルのcreate文。最後の行でtblpropertiesに1行ヘッダスキップする設定にしている。
create table foo (foo string, bar string, baz string) row format delimited fields terminated by ',' lines terminated by '\n' tblproperties ('skip.header.line.count'='1');
下記のようなcsvを読み込ませる。
foo,bar,baz a,b,c d,e,f g,h,i j,k,l m,n,o
対象のcsvファイルをHDFSにputしておいてload dataでテーブルに取り込む。
$ hadoop fs -put foo.csv . $ hive -e "load data inpath 'foo.csv' overwrite into table foo"
あとはSELECTして結果の1行目にヘッダ行(foo,bar,baz)がいなければ成功。
$ hive -e "select * from foo" a b c d e f g h i j k l m n o
成功。