2012-10-03 23 views
2

要将我的数据从HDFS导出到Postgres,我正在使用Sqoop(1.3.0-cdh3u4)。主要问题是我有一列类型的ltree。使用Sqoop导出到Postgresql ltree

ERROR orm.ClassWriter: Cannot resolve SQL type 1111 
ERROR orm.ClassWriter: No Java type for SQL type 1111 for column path 

即使使用--map列的Java强制字符串解析Sqoop不能出口。

java.io.IOException: org.postgresql.util.PSQLException: ERROR: column "path" is of type ltree but expression is of type character varying 
Hint: You will need to rewrite or cast the expression. 
Position: 106 

任何想法?

+0

我在Sqoop用户组中看到他们没有处理非标准数据类型的规定,所以我会尝试使用纯文本并使用text2ltree()在我的查询中创建铸件。 – jcasalruiz

+0

这项工作?如果这样做你作为一个答案吗? –

+0

没有工作。我们现在不使用ltree。 – jcasalruiz

回答

1

当将数据导入到CSV中时,Sqoop不知道如何将这些类型转换为文本。您可以在Sqoop中添加对它们的支持......或者编写PostgreSQL查询来执行此操作:COLUMN_NAME::text

sqoop import \ 
    --connect jdbc:postgresql://localhost:5432/foobar \ 
    --username ryan -P --direct \ 
    --query "SELECT id,ip::text,my_enum::text,description FROM stuff WHERE \$CONDITIONS" \ 
    --target-dir stuff \ 
    --split-by id 

我还遇到了带有INET字段和ENUM的ERROR orm.ClassWriter: Cannot resolve SQL type 1111

+0

我的问题是关于导出,所以我没有选择来定义查询。正如你所说的,主要的选择是直接在Sqoop上添加对这种类型的支持,但是我不再使用ltree。 – jcasalruiz