hive建表,与插入数据

思路,hive导入分区表,只能通过临时表导入。

固建立临时表(不分区),导入数据到临时表,创建分区表,通过【insert 分区表 select 临时表】 导入分区表

打开hue或者直接hive

-----------------------------

创建分区表

-----------------------------

外部表external
以日期进行分区partitioned
数据是以,切分的 row format
存储格式用parquet,压缩数据,比orc差,查询一致,但是插入快(数据是textfile格式,需要通过insert parquet格式的表 select * textfile格式的表)


CREATE external TABLE  default.ods_custom_data(
msgid string,sn string,dv string,vin string,tm_c string,tm_u string,s_ac string,at_ac string,op string,ml_r string
)
partitioned by (data_time string)
row format delimited fields terminated by ','
STORED AS parquet

 

创建临时表

CREATE external TABLE  default.tmp_ods_custom_data(
msgid string,sn string,dv string,vin string,tm_c string,tm_u string,s_ac string,at_ac string,op string,ml_r string,data_time string
)
row format delimited fields terminated by ','
STORED AS textfile

导入数据

----------------------------

准备数据,这种数据是textfile格式

 这是解压后的,实际上的数据是.gz的

1) 本地导入

 hdfs dfs -put ./000000_0.gz /user/hive/warehouse/ods_custom_data

 他就会自动识别,与下面2种方法的原理是一样,都是copy到hdfs的hive表目录下,自动识别

进入hive命令行

2) 本地copy

load data local inpath '/home/hdfs/data/test.txt' into table test;

3) hdfs上的copy

load data inpath '/user/hive/warehouse/tmp_ods_custom_data3/000000_0.gz' overwrite into table tmp_ods_custom_data;

检测是否导入临时表成功

----------------------

 

导入分区表(静态分区方式)

----------------------------------

INSERT OVERWRITE TABLE ods_custom_data partition(data_time='20220601') 

 SELECT

msgid string,sn string,dv string,vin string,tm_c string,tm_u string,s_ac string,at_ac string,op string,ml_r string

FROM tmp_ods_custom_data where data_time='20220601'

注意,上面的表,有一个字段是分区字段(特殊字段),下面的表没有分区字段,所以除去分区字段,比上面的表少1个字段,不要*,否则会出现字段不匹配。select 的时候写好除了分区字段的所有字段

补充:data_time是数据中的data_time字段具体的内容值,我导入的一批次的数据全是这个时间,防止存在脏数据,要使用查询字段限定范围。

 

查看是否成功

-----------------------

 

性能对比

-----------------------

但是,他这个数据,压缩后,比textfile .gz的还要大一点

parquet格式

 

textfile的gz格式

我不知道gz格式能不能写,因为他是gz不能分割。我觉得他比parquet慢,于是做了聚合

parquet表,36秒

 gz,24秒反而更快

 

 我不知道gz文件能不能写,但是从查询上来看的确更快,通过mr的话.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值