我们可以在 avro 模式支持的配置单元表中使用分桶吗

Posted

技术标签:

【中文标题】我们可以在 avro 模式支持的配置单元表中使用分桶吗【英文标题】:Can we use bucketing in hive table backed by avro schema 【发布时间】:2016-07-13 13:28:35 【问题描述】:

我正在尝试创建一个由 avro 架构支持的配置单元表。下面是它的 DDL

CREATE TABLE avro_table
ROW FORMAT 
  SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'    
CLUSTERED BY (col_name) INTO N BUCKETS    
STORED AS 
  INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'  
TBLPROPERTIES ( 'avro.schema.url' = 'hdfs://sandbox.hortonworks.com:8020/avroschema/test_schema.avsc')

但它抛出了下面提到的错误

失败:ParseException line 3:3 在“org.apache.hadoop.hive.serde2.avro.AvroSerDe”附近的“clustered”处缺少 EOF

我不确定我们是否可以在由 AVRO 支持的 Hive 中使用分桶

蜂巢版本--1.2

任何人都可以帮助我或提供任何想法来实现这一目标.....

【问题讨论】:

【参考方案1】:

您的语法顺序错误,并且缺少内容。 ROW FORMATCLUSTERED BY 之后定义,CLUSTERED BY 需要一个列名,该列名可能需要定义为CREATE TABLE 命令的一部分。

我假设N BUCKETS 中的N 确实被替换为您的实际存储桶数,但如果不是,那是另一个错误。

我已对您问题中的查询进行了格式化,以便我可以阅读它,and comparing to syntax here 更容易发现解析器不喜欢的内容。

【讨论】:

CREATE TABLE s.TEST_OD_V( UniqueId int, dtCd string, SysSK int, Ind string) PARTITIONED BY (vcd STRING) CLUSTERED BY (UniqueId) INTO 500 Bucket 存储为 AVRO;如果我们使用上面的 HQL 创建表 ....架构文件的位置是什么...如果我必须更改架构,如何编辑架构文件

以上是关于我们可以在 avro 模式支持的配置单元表中使用分桶吗的主要内容,如果未能解决你的问题,请参考以下文章

如何使用最新的 AVRO 模式文件更新配置单元表元数据

如何在配置单元表中插入具有地图列的数据框

avro时间戳字段上的配置单元外部表返回一样长

我们可以使用嵌入在 avro 记录中的模式来反序列化值吗?

Schema注册和解决

在 spark 中创建带有模式的配置单元外部表