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');
使用Impala查询test_orc表,会提示“Unsupported type 'DATE' in 'default.test_orc.birthday'”
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';
查看test_orc表的DATE类型字段是已修改为STRING
使用Hive可以正常查询test_orc表数据
使用Impala查询提示“ORC scans are disabled by --enable_orc_scanner flag”
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;
4.在命令行使用hive命令执行test_parquet.sql脚本
[root@hadoop12 ~]# hive -f test_parquet.sql
5.查看test_orc_2_parquet表正常,格式转为parquet且访问正常
使用Impala访问test_orc_2_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元数据库中的COLUMNS_V2表中主要存储Hive表中的列信息,这里介绍的转换方式比较暴力,但是爽啊!!!
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
- WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance
- Silverlight菜单控件 — CurveMenu
- 实力终端撑腰 两枚域名均五位数被秒
- Silverlight制作逐帧动画 v2 - part2
- Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)
- 学习Spark——环境搭建(Mac版)
- 离线网络环境下一键式部署
- WCF后续之旅(17):通过tcpTracer进行消息的路由
- Linux同步机制(一) - 线程锁
- Silverlight类库介绍-FJCore
- 大型网站的自强之路
- 人工智能:浮现
- 机器人进化 如何确保 安全概率?
- Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 40行代码把Vue3的响应式集成进React做状态管理
- 写给女朋友的中级前端面试秘籍(含详细答案,15k级别)
- 写给初中级前端的高级进阶指南
- 为什么 Vue 中不要用 index 作为 key?(diff 算法详解)
- Vue3 的响应式和以前有什么区别,Proxy 无敌?
- 腾讯云TKE-PV使用cos存储案例: 容器目录权限问题
- Vue3 究竟好在哪里?(和 React Hook 的详细对比)
- 前端「N皇后」递归回溯经典问题图解
- 深入 TypeScript 中的子类型、逆变、协变,进阶 Vue3 源码前必须搞懂的。
- Vue3 + TypeScript 实现递归菜单组件
- TypeScript 4.1 新特性:字符串模板类型,Vuex 终于有救了?
- TS 4.1 新特性实现 Vuex 无限层级命名空间的 dispatch 类型推断。
- egg.js踩坑记录(一)开始篇
- VUI创建日志(二)——防抖节流组件的实现
- 为你的VuePress博客添加GitTalk评论