hive导入CSV数据,使用动态分区重新分区

本文介绍如何在Hive中创建数据表,并通过动态分区插入数据的方法。同时,对比了动态分区与桶表在数据分割方式、执行时间及关联查询时间上的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建数据表

hive> create database cus;
hive> use cus;
hive> create table telno_md5(
    > phone string,
    > md5 string )
    >  ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY ','
    > STORED AS TEXTFILE;

导入数据

hive> load data local inpath '/home/etluser/data/' into table telno_md5;

创建重新分区表

hive> create table telno_md5_prt(
    > phone string,
    > md5 string )
    > partitioned by (prefix string);

使用动态分区,插入数据

hive> set hive.exec.dynamic.partition=true;
hive> set hive.exec.dynamic.partition.mode=nonstrict;
hive> set hive.exec.max.dynamic.partitions.pernode=100000;  
hive> set hive.exec.max.dynamic.partitions=100000;  
hive> set hive.exec.max.created.files=1000000000; 

hive> insert into table telno_md5_prt
    > partition (prefix)
    > select phone,md5,substr(md5,1,2) as prefix 
    > from telno_md5;

* 参数的含义参考https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-DynamicPartitionInserts*

与桶表的比较

create table telno_md5_bucketed(
phone string,
md5 string )
clustered by(md5) into 1024 buckets;

insert overwrite table telno_md5_bucketed
select phone,md5 from telno_md5;

执行结果比较

数据分割方式实际分割文件数执行时间关联查询时间
dynamic partitions99827m36s16m23s
bucketed table66816m2s6m5s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值