我尝试在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
答案 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个旧线程与此问题有关。它已经很老了,但我相信结论仍然是正确的(至少我找不到保留列名的直接方法)。它确实包含一些可解决此问题的技巧,因此值得一读。