0
点赞
收藏
分享

微信扫一扫

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

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


Fayson的github:

​​https://github.com/fayson/cdhproject​​


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



1

文档编写目的


在CDH中使用Hive时,为了统一数据文件的存储格式,推荐使用Parquet格式的文件存储,这样做也是为了能够同时能够兼容Impala的查询。有些用户在Hive中创建大量的ORC格式的表,并使用了DATE数据类型,这会导致在Impala中无法进行正常的查询,因为Impala不支持DATE类型和ORC格式的文件。本篇文章Fayson主要介绍如何通过脚本将ORC格式且使用了DATE类型的Hive表转为Parquet表。

你可能还需要了解的知识:

​​答应我,别在CDH5中使用ORC好吗​​

​​如何在Hive中生成Parquet表​​


  • 内容概述

1.准备测试数据及表

2.Hive ORC表转Parquet

3.总结


  • 测试环境

1.RedHat7.4

2.CM和CDH版本为6.1.0


2

Hive ORC表转Parquet表


1.使用如下语句在hive中创建一个包含DATE类型的ORC表,并插入测试数据


create table test_orc(id int, name string,birthday date) stored as orc;
INSERT into test values(1, 'fayson','2019-10-11');


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_hive


使用Impala查询test_orc表,会提示“Unsupported type 'DATE' in 'default.test_orc.birthday'”


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_hive_02


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


MariaDB [metastore]> select * from COLUMNS_V2 where TYPE_NAME='date';
MariaDB [metastore]> update COLUMNS_V2 set TYPE_NAME='string' where TYPE_NAME='date';


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_hadoop_03


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


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_元数据库_04


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


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_元数据库_05


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


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_元数据库_06


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


set mapreduce.input.fileinputformat.split.maxsize=536870912;
set mapreduce.input.fileinputformat.split.minsize=536870912;
set parquet.block.size=268435456;
set parquet.compression=SNAPPY;
drop table if exists test_orc_2_parquet;
create table default. test_orc_2_parquet
stored as parquet
as select * from test_orc;


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_元数据库_07


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


[root@hadoop12 ~]# hive -f test_parquet.sql 


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_hadoop_08


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


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_hive_09


使用Impala访问test_orc_2_parquet表


0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_hive_10


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元数据库中的COLUMNS_V2表中主要存储Hive表中的列信息,这里介绍的转换方式比较暴力,但是爽啊!


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


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

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


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

0607-6.1.0-如何将ORC格式且使用了DATE类型的Hive表转为Parquet表_元数据库_11


举报

相关推荐

0 条评论