Как я могу указать столбцы экспорта sqoop в целевой БД?

Я хотел бы заполнить таблицу postgres из файла avro с помощью экспорта sqoop (2), но у меня нет поля 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:

Status : FAILED
Error: java.io.IOException: Cannot find field id in Avro schema

Я попытался указать целевые столбцы с помощью аргумента --columns, но это не сработало. Как я могу загрузить указанный выше файл avro?

Если я удалю поле идентификатора из таблицы, он успешно экспортируется

заранее спасибо


person clairvoyant    schedule 13.03.2015    source источник


Ответы (1)


Простое решение - добавить идентификатор в вашу схему avro, по умолчанию он будет нулевым.

{
  "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». Надеюсь это поможет!

person blueberry    schedule 05.08.2018