我想從Postgresql將表導入到HDFS上的Parquet文件。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
參數,但沒有效果。
我該如何解決它?
編輯
當你鏈接狀態的文檔,有一個--schema
的說法。由於某種原因,在sqoop help import
中未提及。
另一個奇怪的是,
--table bar --schema foo
仍然無法正常工作,但
--table bar -- --schema foo
一樣。
無論如何,它現在有效。感謝您鏈接相關的文檔部分!
該文檔解釋如下:'如果參數 - 是在命令行給出,然後後續參數直接發送到底層工具。例如,下面調整mysqldump使用的字符集:'所以看起來--schema被賦予了pg_dump:http://www.postgresql.org/docs/current/static/app-pgdump.html這意味着你可以使用其他的pg_dump控件...也許。 –