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

Sqoop + Postgresql: how to prevent quotes around table name

我正在尝试将 table 从 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 名字被引用了。我尝试以不同的方式提供 --table 参数,但没有效果。

我该如何解决?

编辑

正如您链接的文档所述,有一个 --schema 参数。由于某种原因,sqoop help import.

中未提及

另一个奇怪的是

--table bar --schema foo

还是不行,但是

--table bar -- --schema foo

会。

无论如何,现在可以了。感谢您链接相关文档部分!

table 名称是 barfoo 是架构的名称。 根据 docs 你应该这样做:

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

根据documentation需要单独指定schema:

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