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

8iwquhpp  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(392)

我尝试在配置单元中创建一个表,并希望将其导出为avro格式。
最后我想把这个avro文件加载到googlebigquery。由于某些原因,在导出之后,avro模式没有正确的列名。

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/*;

输出的列名应为id,name,但翻译为\u col0,\u col1。
objavro.schema▒{"type“:”record“,”name“:”baserecord“,”fields“:[{”name“:”varchar“,”type“:[”null“,”int“,”default“:null},{”name“:”null“,”type“,{”type“:”string“,”logicaltype“:”varchar“,”maxlength“:40}],”default“:null}}▒波黑▒▒δ*@▒十~ AK▒Bh▒▒δ*@▒x~ 谢谢,
阿克

vtwuwzda

vtwuwzda1#

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

t9eec4r0

t9eec4r02#

如果一个avro二进制文件需要导出到一个单独的文件以便进一步接收(在bigquery的上下文中),那么不要使用hadoopcat/insert overwrite语句。使用avro工具和concat创建一个大的avro文件。
hadoop jar avro-tools-1.8.2.jar concat/tmp/test\u avro/*big\u avro\u table.avro

相关问题