我发现了一个奇怪的问题。使用greenplum gpload工具,我尝试将数据从单个文本文件导入到greenplum db。 文件t1.out的内容为:
\N|24234243
\N|\N
12342|\N
和gpload版本为:
gpload version 5.3.0 build
commit:2155c5a8cf8bb7f13f49c6e248fd967a74fed591
表t1如下:
test=# \d t1;
Table "public.t1"
Column | Type | Modifiers
--------+--------+-----------
id1 | bigint |
id2 | bigint |
当我将gpload与t1.yaml一起使用时,出现以下错误:
2019-04-09 20:12:18|WARN|Please use following query to access the detailed error
2019-04-09 20:12:18|WARN|select * from p_read_error_log('ext_gpload_reusable_b7ef1344_5ac0_11e9_b6fc_fa163e2d09a1') where cmdtime > to_timestamp('1554811937.76')
当我在PostgreSQL中运行此sql(仅选择两个关键字段进行了小的更改)时,出现以下错误:
errmsg | rawdata
invalid input syntax for integer: "\N", column id1 | \N|24234243
invalid input syntax for integer: "\N", column id1 | \N|\N
invalid input syntax for integer: "\N", column id2 | 12342|\N
它显示所有3行均未使用“整数输入无效的语法:\ N”导入。
但是我可以使用COPY命令将上述3项成功导入t1。
我尝试了几种方法来找到原因,但是失败了。我的t1.yaml的一部分如下:
- FORMAT: text
- DELIMITER: '|'
- ESCAPE: 'OFF'
- NULL_AS: '\N'
- ERROR_LIMIT: 100
BTW:https://gpdb.docs.pivotal.io/530/utility_guide/admin_utilities/gpload.html#topic1__cfnullas已显示默认NULL_AS为\ N,而gpload已找到\ N,为什么它未能将两个字段标记为NULL? 任何帮助表示赞赏!
答案 0 :(得分:0)
您使用的是哪个版本的GPDB? v5中存在一个已知问题,该问题已在5.6+中修复
https://gpdb.docs.pivotal.io/560/relnotes/GPDB_561_README.html
29197-gpload / gpfdist
运行gpload操作时,当gpload配置文件指定空字符null_as:'\ N'时,gpfdist实用程序无法将\ N识别为NULL字符。处理配置文件时,gpload实用程序错误地用另一个反斜杠转义了反斜杠()。 此问题已得到解决。 gpload实用程序已得到改进,可以在处理null_as属性时正确处理反斜杠。