在将CSV加载到Hive表中时跳过第一行

35

大家好,

我使用以下命令在Hive中创建了一个表 -

CREATE TABLE db.test 
  ( 
     fname STRING, 
     lname STRING, 
     age   STRING, 
     mob   BIGINT 
  ) row format delimited fields terminated BY '\t' stored AS textfile; 

现在我要使用以下命令从文件中加载数据到表中:
load data local inpath '/home/cluster/TestHive.csv' into table db.test;

问题是,所有的行都被插入了,但我不想要第一行,因为它只包含列名。
请建议我如何跳过第一行。
提前致谢。

2
看起来是重复的 https://dev59.com/mGUo5IYBdhLWcg3wzSEq#15753145 - Rohit Menon
可能是[Hive外部表-CSV文件-标题行]的重复问题。 (https://dev59.com/wWQn5IYBdhLWcg3w7ayK) - Marek Grzenkowicz
这个回答解决了你的问题吗?如何在Hive外部表中跳过CSV头? - Jacek Laskowski
3个回答

56
为了达到这个目的,您可以使用Hive的属性,即TBLPROPERTIES(“skip.header.line.count” =“1”)。您也可以参考以下示例:
CREATE TABLE temp 
  ( 
     name STRING, 
     id   INT 
  ) 
row format delimited fields terminated BY '\t' lines terminated BY '\n' 
tblproperties("skip.header.line.count"="1"); 

1
在Hive上工作,但在Impala上不行。 - Ameba Spugnosa
1
你在Hive中创建了表并从Impala中访问了吗? - Bector
不,我直接在Impala shell上使用了CREATE TABLE语句和tblproperty。我没有尝试在Hive中使用该语句,然后从Impala访问相同的表。 - Ameba Spugnosa

11

对于那些已经创建了带有表头的表格的人,这里是相同的更改命令。

ALTER TABLE tablename SET TBLPROPERTIES ("skip.header.line.count"="1");

该命令用于跳过第一行作为标题的表格中的标题行。请注意,您需要将命令中的“tablename”替换为您实际使用的表格名称。

3

不要在同一CLI命令中混合使用双引号和单引号:

CREATE TABLE db.test 
  ( 
     fname STRING, 
     lname STRING, 
     age   STRING, 
     mob   BIGINT 
  ) row format delimited fields terminated BY '\t' tblproperties('skip.header.line.count'='1') stored AS textfile; 

否则Hive会加载NULL值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接