Hive 配置单元外部表CSV文件-标题行

Hive 配置单元外部表CSV文件-标题行,hive,Hive,下面是我创建的配置单元表: CREATE EXTERNAL TABLE Activity ( column1 type, </br> column2 type ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/exttable/'; 创建外部表活动( 第1列类型 第2列类型 ) 以“,”结尾的行格式分隔字段 位置“/exttable/”; 在我的HDFS location/exttable中,我有很多CS

下面是我创建的配置单元表:

CREATE EXTERNAL TABLE Activity (
  column1 type, </br>
  column2 type
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/exttable/';
创建外部表活动(
第1列类型
第2列类型 ) 以“,”结尾的行格式分隔字段 位置“/exttable/”;
在我的HDFS location/exttable中,我有很多CSV文件,每个CSV文件也包含标题行。在执行select查询时,结果也包含标题行


在HIVE中有没有什么方法可以忽略标题行或第一行?

没有。但是,在加载到HDFS之前,您可以预处理文件以跳过第一行-

tail -n +2 withfirstrow.csv > withoutfirstrow.csv

或者,您可以将其构建到配置单元中的where子句中以忽略第一行。

如果您使用的是配置单元版本0.13.0或更高版本,则可以在表属性中指定“skip.header.line.count”=“1”以删除标题


有关该修补程序的详细信息,请参见:

您现在可以跳过hive 0.13.0中的标头计数


如果您的配置单元版本不支持TBLProperty(“skip.header.line.count”=“1”),您可以使用下面的unix命令忽略第一行(列标题),然后将其放入HDFS中

 sed -n '2,$p' File_with_header.csv > File_with_No_header.csv

要从csv文件中删除头,请使用:

sed -i 1d filename.csv 

假设您希望加载csv文件,如下所示,位于
/home/test/que.csv

1,TAP (PORTUGAL),AIRLINE
2,ANSA INTERNATIONAL,AUTO RENTAL
3,CARLTON HOTELS,HOTEL-MOTEL
现在,我们需要在HDFS中创建一个保存这些数据的位置

hadoop fs-put/home/test/que.csv/user/mcc

下一步是创建一个表。有两种类型可供选择。请参阅选择一个

外部表的示例


可能的副本。这里的答案基本相同,还有一些建议@kgu87的解决方案也有效。如何在配置单元中编写where子句以忽略第一行?如果数据包含标题行,则可以在HQL中使用where col“header column name”,前提是数据本身不包含该值。对于配置单元0.13.0或更高版本,更好的选择是在定义表时使用skip.header.line.count属性。但我仍然能够在hdfs表位置中看到标题。如何将标题行从插入HDFS中删除请注意,也可以使用ALTERTABLE对现有表执行此操作。看见
1,TAP (PORTUGAL),AIRLINE
2,ANSA INTERNATIONAL,AUTO RENTAL
3,CARLTON HOTELS,HOTEL-MOTEL
create external table industry_ 
(
MCC string ,
MCC_Name string,
MCC_Group string
)       
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/mcc/'
tblproperties ("skip.header.line.count"="1");