Hive官方使用手册——Avro Files

本文为自己翻译的译文,原文地址:https://cwiki.apache.org/confluence/display/Hive/AvroSerDe


Availability

最早支持AvroSerDe的版本

The AvroSerde is available in Hive 0.9.1 and greater.

概述 –  Hive中使用Avro

AvroSerde允许用户读取或写入Avro数据到Hive表。以下是AvroSerde的注意事项:

  • 从Avro schema中推断出Hive表的schema。从Hive 0.14开始,可以从Hive表的schema推断Avro模式
  • 利用Avro的向后兼容性能力,在一个表中以指定的模式读取所有Avro文件。
  • 支持任意嵌套模式。
  • 将所有Avro数据类型转换为等效的Hive类型。 大多数类型都可以匹配,但是一些Avro类型不存在于Hive中,AvroSerDe会自动转换。
  • 能够解析压缩后的Avro文件。
  • 显式地将可空类型的Avro处理习惯用法Union[T, null] 转换为只有T,并在适时返回null。
  • 将任何Hive表写入Avro文件。
  • 对于ETL过程的工作,Avro模式依然表现的非常可靠。
  • 从Hive 0.14开始,可以使用Alter table语句将列添加到Avro支持的Hive表中。

有关SerDes的一般信息,请参阅开发指南中的Hive SerDe。还请参阅SerDe,了解输入和输出处理的详细信息。

Requirements

The AvroSerde has been built and tested against Hive 0.9.1 and later, and uses Avro 1.7.5 as of Hive 0.13 and 0.14.

Hive Versions
Avro Version
Hive 0.9.1 Avro 1.5.3
Hive 0.10, 0.11, and 0.12 Avro 1.7.1
Hive 0.13 and 0.14 Avro 1.7.5

Avro to Hive type conversion

While most Avro types convert directly to equivalent Hive types, there are some which do not exist in Hive and are converted to reasonable equivalents. Also, the AvroSerde special cases unions of null and another type, as described below:

Avro type                                                                                

Becomes Hive type                                                                                                                                        

Note                                             

null

void

boolean

boolean

int

int

long

bigint

float

float

double

double

bytes

binary

在Hive 0.12.0之前,bytes被转换为数组[smallint]。

string

string

record

struct

map

map

list

array

union

union

[T, null]的联合显式地转换可为空的T,其他类型直接转换为Hive的类型结合。然而,在Hive 7中引入了union,目前还不能在where/group-by语句中使用。从本质上说,他们只是能够看到。因为AvroSerde显式地将[T,null]转换为nullable T,这个限制只适用于多个类型联合或组合的联合,而不是单个类型和null。

enum

string

Hive没有enums的概念。

fixed

binary

Fixeds在Hive 0.12.0之前被转换成数组[smallint]。

创建Avro-backed Hive表

使用AvroSerDe可以在Hive中创建avro支持的表。

All Hive versions

创建Avro-backed表,使用org.apache.hadoop.hive.serde2.avro.AvroSerDe指定serde ,指定输入格式为org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat和输出格式为org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat。还提供了一个位置,AvroSerde将从该位置提取大部分表的当前模式。例如:

CREATE TABLE kst
   PARTITIONED BY (ds string)
   ROW FORMAT SERDE
   'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
   STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
   OUTPUTFORMAT
   'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
   TBLPROPERTIES (
     'avro.schema.url' = 'http://schema_provider/kst.avsc' );

在这个示例中,我们从一个webserver中提取了“真相”阅读器模式。下面描述了提供这个模式的其他参数。

Avro文件添加到数据库(或者创建一个外部表)使用标准的Hive操作(http://wiki.apache.org/hadoop/Hive/LanguageManual/DML)。

此表的描述如下:

hive> describe kst;
OK
string1 string  from deserializer
string2 string  from deserializer
int1     int      from deserializer
boolean1         boolean  from deserializer
long1   bigint  from deserializer
float1   float    from deserializer
double1  double   from deserializer
inner_record1   struct<int_in_inner_record1: int ,string_in_inner_record1:string> from deserializer
enum1   string  from deserializer
array1  array<string>   from deserializer
map1    map<string,string>      from deserializer
union1  uniontype< float , boolean ,string> from deserializer
fixed1  binary  from deserializer
null1    void     from deserializer
unionnullint     int      from deserializer
bytes1  binary  from deserializer

在这一点上,avo支持的表可以像任何其他表一样在Hive中工作。

Hive 0.14及以后的版本

从Hive 0.14开始,可以通过在DDL语句中使用“STORED AS AVRO”来创建AVRO支持的表。AvroSerDe负责从Hive表模式中创建合适的Avro模式,这在Hive的Avro可用性方面取得了很大的成功。

例如:

CREATE TABLE kst (
     string1 string,
     string2 string,
     int1  int ,
     boolean1  boolean ,
     long1 bigint,
     float1  float ,
     double1  double ,
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hive是一个大数据分析的开源平台,它提供了很多的综合应用案例,其中之一是用户学历查询。用户学历查询案例中,我们可以使用Hive从数据仓库中读取关于用户的数据,然后通过分析和聚合这些数据,来确定用户的学历信息。在这个过程中,Hive提供了强大的SQL语句支持,以及丰富的函数库,可以满足各种复杂的分析需求。 ### 回答2: 近日,一家大型人力资源公司因为工作中频繁查询员工学历信息而决定使用hive技术来进行数据的处理和分析,通过hive的综合应用,实现了更加高效便捷的用户学历查询。 此次项目中,该公司首先进行了数据清洗和处理,将员工学历相关信息从不同的数据源中收集并整合,统一存储hive的数据仓库中。接着,通过hiveQL语言对数据进行查询和筛选,实现了仅需几秒钟即可得到用户学历信息的目标。使用hive的好处是能够快速处理海量数据,提高查询效率,同时还能实现数据分析和统计,并可视化展示数据结果。 在具体的操作中,该公司将原始数据进行拆分和转换,把不同的表进行组合和分析。同时,在处理数据过程中还运用了一些hadoop生态体系的其他组件,比如pig和spark等工具,以提高效率和处理这些数据所需的时间。在处理完成之后,用户可以通过hive对用户的学历进行查询,根据自己的需要,可以根据职位、学历、工作年限等限定条件来查询,大大地提高了查询精度,也让招聘和人事等相关部门的工作变得更加轻松便捷。 总的来说,该项目成功运用了hive技术,实现了用户学历查询的目标,提升了工作效率和数据查询的准确度。而且此次项目的经验和教训也可以为其他公司和企业在hive技术的运用方面提供借鉴和参考。 ### 回答3: Hive是Hadoop生态系统中的一项重要技术,它是基于Hadoop的MapReduce框架的数据仓库解决方案,可以进行大规模数据的存储和处理。而学历查询是一个典型的数据查询场景,由于学历查询需要对大量的数据进行快速高效的查询和分析,因此使用Hive进行学历查询可以大大提高查询效率和数据处理能力。 以学历查询为例,如果我们需要查询某个区域内所有人的学历情况,我们需要从海量的数据中筛选出相关的信息,然后进行分析和统计,这个过程需要耗费大量的时间和精力。但是如果使用Hive,我们可以通过Hive的SQL查询语句来快速实现数据查询和分析。 具体来说,如果我们要查询一个城市的所有居民的学历情况,首先要准备好相应的数据表或数据集,然后利用Hive的相关命令将数据导入到Hive表中。在数据导入完成后,我们可以使用类似于SQL的语句来实现查询。例如,我们可以使用Hive的SELECT语句和GROUP BY语句来实现按学历等级进行分组并统计各组的人数。 当然,如果需要更加复杂的查询和分析任务,我们也可以使用Hive进行更多的数据处理和计算任务。例如,Hive支持使用自定义的UDF函数,可以对数据实现更加灵活和精细化的处理。 总而言之,Hive作为一种分布式数据存储和查询解决方案,可以为学历查询等数据处理场景提供快速、高效和可扩展的解决方案。通过合理的数据分析和查询,可以帮助我们更好地了解数据背后的真相,为业务决策提供更多有效的参考和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值