前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0608-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表(续)

0608-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表(续)

作者头像
Fayson
发布2019-05-07 15:09:29
1.6K0
发布2019-05-07 15:09:29
举报
文章被收录于专栏:Hadoop实操

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1

文档编写目的

在上一篇文章《6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表》中主要介绍了非分区表的转换方式,本篇文章Fayson主要针对分区表进行介绍。

  • 内容概述

1.准备测试数据及表

2.Hive ORC表转Parquet

3.总结

  • 测试环境

1.RedHat7.4

2.CM和CDH版本为6.1.0

2

Hive ORC表转Parquet表

1.创建一个使用DATE类型作为分区字段的表,并插入测试数据

代码语言:javascript
复制
create table day_table (id int, content string) 
partitioned by (dt date) 
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS ORC;

insert into day_table PARTITION(dt = '2018-01-02') values(1,'fayson');
insert into day_table PARTITION(dt = '2018-01-03') values(2,'fayson2');

select * from day_table;

2.登录Hive的元数据库,在数据库中将所有Hive表中分区为DATE类型的数据修改为STRING

代码语言:javascript
复制
MariaDB [metastore]> select * from PARTITION_KEYS;
MariaDB [metastore]> update PARTITION_KEYS set PKEY_TYPE='string' where PKEY_TYPE='date';

查看day_table表的DATE类型字段是已修改为STRING

使用Hive可以正常查询day_table表数据

使用Impala查询提示“ORC scans are disabled by --enable_orc_scanner flag”

3.准备Hive SQL脚本将test_orc表转为Parquet格式的表

代码语言:javascript
复制
[root@hadoop12 ~]# vim day_table_parquet.sql 
set mapreduce.input.fileinputformat.split.maxsize=536870912;
set mapreduce.input.fileinputformat.split.minsize=536870912;
set parquet.block.size=268435456;
set parquet.compression=SNAPPY;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
SET hive.optimize.sort.dynamic.partition=true;
drop table if exists day_table_parquet;
create table day_table_parquet like day_table stored as parquet;
INSERT OVERWRITE TABLE day_table_parquet PARTITION(dt) select * from day_table;

4.在命令行使用hive命令执行day_table_parquet.sql脚本

代码语言:javascript
复制
[root@hadoop12 ~]# hive -f test_parquet.sql

5.查看day_table_parquet表正常,格式转为parquet且访问正常

使用Impala访问day_table_parquet表

分区数与原表分区数一致,且数据可以正常查询

3

总结

1.Hive对ORC格式的表没有做严格的数类型校验,因此在统一的修改了Hive元数据库的DATE类型为STRING类型后,ORC格式的表依然可以正常查询。

2.在C6版本中其实已经支持了ORC格式的表,但默认是禁用的,可以通过在Impala Daemon的高级配置中增加--enable_orc_scanner参数来启用,由于C6版本目前刚支持ORC格式,是否存在问题和风险有待验证。

3.Impala默认是不支持DATE类的,同时Impala对Parquet或ORC文件中的数据类型有严格的校验,因此在将Hive元数据库中DATE类型修改为STRING类型后查询依然会报“Unsupported type 'DATE'”

4.Hive元数据库中的PARTITION_KEYS表中主要存储Hive表分区字段信息,这里介绍的转换方式比较暴力,但是爽啊!!!

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档