我发现了一个奇怪的问题。使用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?任何帮助表示赞赏!
您使用的是哪个版本的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实用程序错误地使用另一个反斜杠转义反斜杠()。此问题已得到解决。在处理null_as属性时,gpload实用程序已得到改进,可以正确处理反斜杠。