"skip.header.line.count"="1"
create table xxx{
...
}
...
tblproperties(
"skip.header.line.count"="1", --跳过文件首的1行
--"skip.footer.line.count"="n" --跳过文件尾的n行
)
复制代码
注意csv文件的列的分隔符时,
、;
仍是\t
,如fields terminated by ','
node
注意是从本地文件上传,hdfs移动,仍是查询已有表插入到新表中,数据导入Hive表的语法不一样,分别是load data local inpath ...
,load data inpath ...
,insert into/overwrite table xxx ... select ...
sql
--静态分区
insert into table table1 partition(partition_col="xxx") select ... from query_table;
--动态分区,要注意分区字段和查询的字段类型是否一致
insert into table table1 partition(col1) select col1,... from query_table;
复制代码
from query_table
insert into table table1 [partition]
select col1,col2
insert into table table2
select *
复制代码
insert into/overwrite
的区别,into是追加,overwrite是重写(先删后写,若是涉及分区的话是重写该分区数据)涉及到分区表插入数据时,要注意是否开启动态分区,是采用严格模式仍是非严格的,容许建立的最大动态分区数,涉及如下几个配置app
hive.exec.dynamic.partition
,开启动态分区,默认truehive.exec.dynamic.partition.mode
,动态分区模式,默认是严格的(strict,用户必须指定一个静态分区)。非严格模式(nonstrict)容许全部分区字段都是动态的分区。【记得设置为非严格的】hive.exec.max.dynamic.partitions
,总共容许建立的最大动态分区数,默认1000hive.exec.max.dynamic.ppartitions.pernode
,每一个节点上容许建立的最大动态分区数,默认100hive.exec.max.created.files
,一个MR Job中全部mappers、reducers总共容许建立的最大hdfs文件数,默认100000hive.error.on.empty.partition
,动态分区为空时是否抛出异常,默认false,也无需设置
partition(pCol="xxx",col1)