配置单元导出到AVRO架构中没有列名

时间:2018-10-04 09:04:58

标签: hive avro

我尝试在Hive中创建一个表,并希望将其导出为Avro格式。

最终,我想将此Avro文件加载到Google BigQuery。出于某种原因,导出后,AVRO模式没有正确的列名。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Exemple 1</div>
<div>Exemple 2</div>
<div>Exemple 3</div>
<div>Exemple 4</div>
<div>Exemple 5</div>
<div>Exemple 6</div>

输出的列名应为id,name,但应转换为_col0,_col1。

Objavro.schema▒{“ type”:“ record”,“ name”:“ baseRecord”,“ fields”:[{“ name”:“ _ col0” ,“ type”:[ “ null”,“ int”],“默认”:null},{“名称”:“ _ col1” ,“ type”:[“ null”,{“ type”:“ string”, “ logicalType”:“ varchar”,“ maxLength”:40}],“ default”:null}]}▒Bh▒▒δ* @▒x〜create table if not exists test_txt (id int, name varchar(40)); insert into test values (1, "AK"); insert overwrite directory "/tmp/test" stored as avro select * from test; !sh hadoop fs -cat /tmp/test/*;

谢谢

AK

2 个答案:

答案 0 :(得分:1)

如果需要将avro二进制文件导出到单个文件以进行进一步提取(在我的上下文中为BigQuery),则不要使用hadoop cat /插入覆盖语句。使用avro工具和concat到一个大型avro文件。

hadoop jar avro-tools-1.8.2.jar concat / tmp / test_avro / * big_avro_table.avro

答案 1 :(得分:0)

这似乎是使用insert overwrite directory子句导出时的预期行为。 This个旧线程与此问题有关。它已经很老了,但我相信结论仍然是正确的(至少我找不到保留列名的直接方法)。它确实包含一些可解决此问题的技巧,因此值得一读。