在ETL中使用avro

摘要
  1. 简介部分ETL过程中使用avro格式的优越性
  2. 此文章主要记录ETL过程使用avro格式存储数据时的注意事项
简介

出于方便性考虑, 数据仓库ods层的存储格式往往是text
text是易于人类阅读的, 当然易于以字符串的形式批量处理数据.
但是如果数据源是mysql等关系型数据库, 数据本身的格式相对规范. 这种情况下, 数据抽取时如果依旧使用text格式, 必然会导致数据类型信息的丢失.
此外, text格式无法存储null值, 字符串的"null"和空值难以区分

如果对数据安全有较高需求, text格式的低应激特性也会带来隐患.
Apache Avro是一个独立于编程语言的数据序列化系统, avro对数据类型要求严格, 一旦数据类型出现异常, 以avro格式存储的hive表会显式的抛出异常, 以此来提醒运维人员.
所以考录将数据存储格式更改为avro.

使用

需要用sqoop将数据导出为avro格式, 可以指定--as-avrodatafile
kettle中, 转换 -> 核心对象 -> Big Data -> Avro Output流程, 也可以将数据导出为avro

问题

当数据从传统的关系型数据库, 比如mysql, 被导出为avro, 再被导入hive时, 实际上会发生两次数据类型的转换.
这是因为mysql, avro, hive各有不同的数据类型, 导出和导入过程都不可避免的需要转换数据类型.
而且当数据类型对应错误, hive在尝试读取对应avro文件时就会抛出异常.
总而言之, 数据格式的对应是一个必然要注意到的细节.

avro到hive的数据类型转换, 实际上并不太需要我们操心, 因为在hive建表时, 可以指定了"a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值