gp加载文本文件

时间:2019-04-09 12:36:39

标签: copy greenplum

我发现了一个奇怪的问题。使用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? 任何帮助表示赞赏!

1 个答案:

答案 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属性时正确处理反斜杠。