Sqoop + Postgresql:如何防止表名周围的引号

时间:2015-04-20 12:40:55

标签: postgresql hadoop jdbc sqoop cloudera-cdh

我正在尝试将一个表从Postgresql导入到HDFS上的Parquet文件中。

以下是我的工作:

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

确实

无论如何,它现在有效。感谢您关联相关文档部分!

2 个答案:

答案 0 :(得分:3)

表名为barfoo是架构的名称。 根据{{​​3}}你应该这样做:

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

答案 1 :(得分: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