我想使用sqoop (2) export从avro文件填充postgres表,但我在源文件中没有id字段,应该自动填充(序列类型),但我得到了一个错误。
表DDL:
CREATE TABLE test
(
id serial primary key,
partner_id varchar,
column1 varchar,
column2 varchar
)
avro模式:
{
"namespace": "avro_test",
"type": "record",
"name": "test",
"fields": [
{"name": "partner_id", "type": "string"},
{"name": "column1", "type": ["string","null"]},
{"name": "column2", "type": ["string","null"]}
]
}
我使用的导出命令:
./sqoop-1.4.5.bin__hadoop-2.0.4-alpha/bin/sqoop export \
--connect jdbc:postgresql://host/db \
--username user_test --password pass_test \
--table test \
--export-dir path \
--columns partner_id,column1,column2
但是我得到了一个错误,我在avro模式中没有id:
Status : FAILED
Error: java.io.IOException: Cannot find field id in Avro schema
我尝试使用--column参数指定目标列,但它不起作用。如何加载上述avro文件?
如果我从表中删除id字段,它会成功导出
提前感谢
发布于 2018-08-06 03:32:54
简单的解决方案是在avro模式中添加id,默认情况下将为空
{
"namespace": "avro_test",
"type": "record",
"name": "test",
"fields": [
{"name": "id", "type": ["null", "int"]},
{"name": "partner_id", "type": "string"},
{"name": "column1", "type": ["string","null"]},
{"name": "column2", "type": ["string","null"]}
]
}
通过Sqoop导出到mysql时,会自动填充主键Id。希望这能有所帮助!
https://stackoverflow.com/questions/29032873
复制相似问题