不同系统、不同存储格式(textfile, parquet)数据的传递
描述:
本地测试环境hive中有数据,存储格式为textfile,现在要上传到公司开发环境,存储格式为parquet, 如何实现???
tb_textfile表---> local file --->tb_parquet(❌)
tb_textfile表---> local file --->tb_textfile_tmp ---> tb_parquet(✔️)
[因为是不同的系统,不能直接将tb_textfile表中的数据导入tb_parquet中,中间需要先导出到本地文件]
--建表tb_textfile:指明分隔符,textfile存储
create table if not exists tb_textfile(id int, name string) partitioned by(time string) row format delimited fields terminated by '\t' stored as textfile; --加载数据到tb_textfile
insert into tb_textfile partition(time='20180616') values (111,'text111'),(222,'text222'),(333,'text333'); --导出tb_textfile数据到本地文件夹,指明分隔符
insert overwrite local directory '/Users/wooluwalker/Desktop/export_test' row format delimited fields terminated by '\t' select * from tb_textfile; --目标文件夹export_test中出现 000000_0 文件 --cat /Users/wooluwalker/Desktop/export_test/000000_0 111 text111 20180616
222 text222 20180616
333 text333 20180616 --创建tb_parquet表,指明分隔符,parquet格式存储
create table if not exists tb_parquet(id int, name string) partitioned by(time string) row format delimited fields terminated by '\t' stored as parquet; --上传export_test目录中的数据到hive的tb_parquet表
load data local inpath '/Users/wooluwalker/Desktop/export_test/000000_0' into table tb_parquet partition(time='20180616');
--查看上传的数据
select * from tb_parquet;
返回的结果是:
Failed with exception java.io.IOException:java.lang.RuntimeException:
hdfs://0.0.0.0:9000/user/hive/warehouse/hivetest.db/tb_parquet/time=20180616/000000_0 is not a Parquet file.
expected magic number at tail [80, 65, 82, 49] but found [54, 49, 54, 10] 由此证明,不能将textfile格式存储的表所导出的文件,直接上传到 parquet格式的表中
解决方式:
将export_test目录中的数据到hive的textfile格式存储的表,然后再由此表导出数据到parquet中
-- 上一步上传的数据格式不对,需要先清空,否则无法select
truncate table tb_parquet;
--创建textfile格式的中间表tb_textfile_tmp,指明分隔符,存储格式为textfile
create table if not exists tb_textfile_tmp(id int, name string) partitioned by(time string) row format delimited fields terminated by '\t' stored as textfile;
--上传数据到textfile格式的中间表中
load data local inpath '/Users/wooluwalker/Desktop/export_test/000000_0' into table tb_textfile_tmp partition(time='20180616');
--将textfile格式的中间表数据导出到parquet格式的目标表 tb_parquet
insert into tb_parquet partition(time='20180616') select id, name from tb_textfile_tmp;
--查看表数据
select * from tb_parquet; 111 text111 20180616
222 text222 20180616
333 text333 20180616
hive编程指南 中讲,‘不管源表中数据如何存储,hive会将所有字段序列化生成字符串写入到文件中,hive使用和hive内存存储的表相同的编码方式来生成输出文件’,因此textfile导出的文件不能导入parquet表中
不同系统、不同存储格式(textfile, parquet)数据的传递的更多相关文章
- Spark存储Parquet数据到Hive,对map、array、struct字段类型的处理
利用Spark往Hive中存储parquet数据,针对一些复杂数据类型如map.array.struct的处理遇到的问题? 为了更好的说明导致问题的原因.现象以及解决方案,首先看下述示例: -- 创建 ...
- 云方案,依托H3C彩虹云存储架构,结合UIA统一认证系统,实现了用户数据的集中存储和管理
客户的声音 资料云项目在迷你云基础上二次开发,通过使用云存储技术及文件秒传技术,对文件进行统一存储与管理,以达到节约文件管理成本.存储成本目的:通过有效的文件版本控制机制,以达到风险管控的目的:通过多 ...
- Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置
Django后台一般是不需要人为的去开发的,因为django已经通过配置实现哪些模块是后台需要管理,如何排序,列表展示哪些列,列显示名称,是否为空(默认值),过滤条件,分页页数,列表中哪些项可编辑等等 ...
- SAP QA32 做使用决策系统报错:分类数据的不一致性=>交易终止
SAP QA32 做使用决策系统报错:分类数据的不一致性=>交易终止 QA32,对如下检验批做处理,系统报错, 试图使用MSC3N去显示这个批次主数据,同样报错, 原因在于批次的分类数据产生后, ...
- Atitit.biz业务系统 面向框架 面向模式---------数据映射imp
Atitit.biz业务系统 面向框架 面向模式---------数据映射imp 1.1. 面向变量 面向过程 面向对象 面向组件 面向框架 面向服务 面向模式1 1.2. 第2章 架构模式 ...
- 更换PostgreSql的data文件夹并重新服务器(此方法同样适用于系统崩溃后,找回数据的操作)
*如果是系统崩溃,需要找回数据,PostgreSQL安装目录的data文件夹要存在 1.备份PostgreSQL安装目录到其他目录下 2.停止Postgres服务,可以在运行中输入services.m ...
- Intent之复杂数据的传递
想在两个Activity之间传递一个对象Result,在网上差了很多,都需要序列化或者时下Paracelable,等等,试了很多都不行. 后来才制单,这个Result,根本不需要集成Sereriabl ...
- ASP.NET MVC5中View-Controller间数据的传递
使用ASP.NET MVC做开发时,经常需要在页面(View)和控制器(Controller)之间传递数据,那么都有哪些数据传递的方式呢? 本文对于View向Controller中传值共列举了以下几种 ...
- C#学习笔记-数据的传递(公共变量)以及Dictionary
看的代码越多,写的代码越多,就越是享受这些字符,终于渐渐懂得了那种传闻中的成就感,特别是自己从看不懂然后一步一步学,一个代码一个代码地敲,最后哪怕只是完成了一个小功能,也都是特别自豪的!这种自豪不用告 ...
随机推荐
- python 绑定方法
一.绑定方法与非绑定方法 1.绑定方法''' 绑定方法:绑定给谁就是给谁用的 1.凡是类中的方法和函数,都是绑定给对象使用的: 2.绑定方法都有自动传值的功能.传递进去的值,就是对象本身. 3.如果类 ...
- 笨办法39字典dict
一开始没看明白,直接把句子缩短了,输出结果看字典的用法 stuff = {'name': 'Zed', 'age': 39, 'height': 6 * 12 + 2} stuff['city'] = ...
- JS获取伪元素的属性
window下的getComputedStyle属性.getPropertyValue属性 // 获取 .element:before 的 color 值 var color = window.get ...
- java 的序列化与反序列化
前言: 一直很不理解java的序列化的概念,为什么java对象的序列化要实现 Serializable的接口?或者要实现Externalizable的接口?而且Externalizable 的父类还是 ...
- easyui datagrid 后台分页,前端如何处理
module.exports = { queryMethod(){ let params = checkQueryParams.call(this); if (!params) { return; } ...
- (转)ArcGIS Runtime for Android 使用异步GP服务绘制等值线
关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...
- node.js安装使用express框架
官网:http://www.expressjs.com.cn/ 使用方式(如果后面需要添加路由等推荐第二种方式,不然需要需要手动添加):一.自己动手搭建 1. 新建项目文件夹,如test,并在命令行中 ...
- 小白的REDIS学习(二)-链表
本文为读<Redis设计与实现>的记录.该书以Redis2.9讲解Redis相关内容.请注意版本差异. Redis使用C语言,实现了自己的链表结构,实现的代码如下 //集成了链表的各类信息 ...
- 使用EFCore处理并发冲突
一.首先添加并发处理标记 在需要进行并发处理的类中添加版本号,并在版本号上使用[Timestamp]标记: public class Department { public int Id { get; ...
- Python 函数的描述
函数 函数是带名字的代码块,用于完成具体的工作. 要执行函数定义的特定任务,可调用该函数.需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用执行该任务的函数,让Python运 ...