Hive数据格式选择ORC及使用sqoop数据导入

数据存储格式和压缩方式选择

Hive数据存储和压缩参考如下测试参数:

在这里插入图片描述
在这里插入图片描述
1.在压缩存储时间上,除Sequencefile外基本都相差无几。
2.数据压缩比例上ORC最优,parquet压缩性能也较好。
3.SQL查询速度而言,ORC与parquet性能较好,远超其余存储格式。
综合上述各种性能指标,我们采用ORC+SNAPPY压缩格式,这也是目前主流的做法。
参考链接
https://blog.csdn.net/breakout_alex/article/details/103007514
https://blog.csdn.net/weixin_40420525/article/details/100550253
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC

ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度。和Parquet类似,它并不是一个单纯的列式存储格式,仍然是首先根据行组分割整个表,在每一个行组内进行按列存储。ORC文件是自描述的,它的元数据使用Protocol Buffers序列化,并且文件中的数据尽可能的压缩以降低存储空间的消耗,目前也被Spark SQL、Presto等查询引擎支持,但是Impala对于ORC目前没有支持。
只有TEXTFILE表能直接加载数据,如果必须本地load数据和external外部表直接加载运路径数据都只能用TEXTFILE表,其他格式不行,可以通过TEXTFILE表加载后insert到其他表中。ORC表不能直接加载数据,数据要先导入到textfile表,再从textfile表通过insert select from 导入到ORC表。ORC表的源文件不能直接查看,在hive中用select看。
我们使用sqoop进行数据抽取,使用HCatalog方式可以直接将数据抽取到hive的orc表中,解决无法将外部数据load到hive数据表的问题,但是HCatalog不允许数据覆盖,每次都只是追加,所以在进行数据全量抽取是要提前清空数据表数据(truncate table table_name)。
Sqoop一般方式比较随意,不要求源表和目标表字段相同(字段名称和个数都可以不相同),它抽取的方式是将字段按顺序插入,比如目标表有3个字段,源表有一个字段,它会将数据插入到Hive表的第一个字段,其余字段为NULL。但是HCatalog不同,源表和目标表字段名需要相同,字段个数可以不相等,如果字段名不同,抽取数据的时候会报NullPointerException错误。HCatalog抽取数据时,会将字段对应到相同字段名的字段上,哪怕字段个数不相等。但是可以使用query(–query “SELECT order_no_src as order_no_target FROM driver_action WHERE $CONDITIONS”)的方式解决字段名不同问题。
Hive建表语句如下:

CREATE TABLE IF NOT EXISTS ods_wsp_dw_dim_time
(
    id                  int   COMMENT 'id'
) 
COMMENT '时间维度表'
stored as orc tblproperties ("orc.compress"="SNAPPY");

Sqoop语句如下:

//全量抽取
sqoop import --connect jdbc:mysql://ip:3306/wsp --username root --password 123456 --table dw_dim_time --hcatalog-database dw_pj --hcatalog-table ods_wsp_dw_dim_time  -m 4
//增量抽取
sqoop import --connect jdbc:mysql:/ip:3306/wsp?autoReconnect=true --username root --password 123456 --query "select * from dw_fact_point where create_time >= '${pt_day}' and create_time < '${to_day}' and \$CONDITIONS" --hcatalog-database dw_pj --hcatalog-table ods_wsp_dw_fact_point --hcatalog-partition-keys pt_day --hcatalog-partition-values "'${pt_day}'" --split-by id -m 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值