2015-04-20 2 views
3

Я пытаюсь импортировать таблицу из Postgresql в файл Parquet на HDFS.Sqoop + Postgresql: как предотвратить котировки вокруг имени таблицы

Вот что я делаю:

sqoop import \ 
    --connect "jdbc:postgresql://pg.foo.net:5432/bar" \ 
    --username user_me --password $PASSWORD \ 
    --table foo.bar \ 
    --target-dir /user/me/bar \ 
    --as-parquetfile 

и я получаю

INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM "foo.bar" AS t LIMIT 1 
ERROR manager.SqlManager: Error executing statement: org.postgresql.util.PSQLException: ERROR: relation "foo.bar" does not exist 

SELECT t.* FROM "foo.bar" AS t LIMIT 1 не работает на самом деле, но SELECT t.* FROM foo.bar AS t LIMIT 1 делает. Поэтому проблема заключается в том, что имя таблицы цитируется. Я попытался поставить аргументы --table разными способами, но без эффекта.

Как мне это сделать?

EDIT

Как вы документы, связанные состояние, есть --schema аргумент. По некоторым причинам он не упоминается в sqoop help import.

Другая странная вещь, что

--table bar --schema foo 

все еще не работает, но

--table bar -- --schema foo 

делает.

В любом случае, он работает сейчас. Спасибо, что связали соответствующий раздел документов!

+1

Документы объясняют это следующим образом: 'Если аргумент - это заданные в командной строке, последующие аргументы отправляются непосредственно в базовый инструмент. Например, следующее настраивает набор символов, используемый mysqldump: 'Итак, кажется, что -schema предоставляется pg_dump: http://www.postgresql.org/docs/current/static/app-pgdump.html И это означает вы можете использовать остальные элементы управления pg_dump ... Возможно. –

ответ

3

Имя таблицы bar, foo - это название схемы. Согласно docs вы должны сделать это нравится:

sqoop import \ 
    (...) 
    --table bar \ 
    --schema foo 
    (...) 
+0

(upvoted) Это почти решение, спасибо! (Я отредактировал мой ответ с подробностями) –

2

Согласно documentation вам нужно указать схему отдельно:

sqoop import \ 
    --connect "jdbc:postgresql://pg.foo.net:5432/bar" \ 
    --username user_me --password $PASSWORD \ 
    --table bar \ 
    --schema foo \ 
    --target-dir /user/me/bar \ 
    --as-parquetfile 
+0

(upvoted) Это почти решение, спасибо! (Я отредактировал мой ответ с подробностями) –

+0

Кажется, что @Jakub ответил за несколько секунд до вас, поэтому я приму его ответ. –

Смежные вопросы