gpload引发异常,错误为“错误:编码“ UTF8”的字节序列无效:0xe5b82e”

时间:2019-08-19 12:22:46

标签: utf-8 greenplum

当我使用gpload将某些数据转储到greenplum中时,由于以下错误而失败:“错误:编码“ UTF8”的字节序列无效:0xe5b82e”。

我做了一些搜索。我的greenplum是5.18.0,“ show client_encoding”显示为“ UTF8”,当我使用“ file”命令检查数据文件时,它也显示为:text / plain; charset = utf-8。这就是让我感到困惑的地方:数据文件是utf8,客户端也是utf8,为什么会引发此类错误?我未能在此字符串中找到一些\ x0或\ u0000字符,这是某些帖子中相同问题的关键问题。

我发现一个链接似乎与此问题有关:https://jira.pentaho.com/browse/PDI-6191 这个greenplum版本真的是一个错误吗?

关于数据文件的另一件事是带有'|'的文本文件作为分隔符,其内容如下:

|Hibernate operation: could not insert: [net.xiaofei.apps.wbps.channel.entity.IntSoapContent]; uncategorized SQLException for SQL [insert into int_soap_content (case_id, casetype, channel, content, create_time, handle_flag, handle_time, srccaseid, subcasetype) values (?, ?, ?, ?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\xA1\x8D\xB2\xE5\xB8...' for column 'content' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\xA1\x8D\xB2\xE5\xB8...' for column 'content' at row 1|20190818

感谢您的帮助!

我不想为此帖子开始新的话题,所以我在这里显示步骤:

  1. 在greenplum db中创建表:`
  

创建表测试(id bigint,结果文本)WITH(appendonly = true,   compresstype = quicklz,orientation = column)(ID);

`

  1. 将以下内容写入数据文件:`
  

5661083 |休眠操作:无法插入:   [net.xiaofei.apps.wbps.channel.entity.IntSoapContent];未分类   SQL的SQLException [插入int_soap_content(case_id,casetype,   频道,内容,create_time,handle_flag,handle_time,srccaseid,   subcasetype)值(?,?,?,?,?,?,?,?,?)]]; SQL状态[HY000];   错误代码[1366];字符串值不正确:   第1行的'内容'列的'\ xF0 \ xA1 \ x8D \ xB2 \ xE5 \ xB8 ...';嵌套的   异常是java.sql.SQLException:不正确的字符串值:   '\ xF0 \ xA1 \ x8D \ xB2 \ xE5 \ xB8 ...'位于第1行的'content'列

`

  1. 按如下所示编写yaml文件:
VERSION: 1.0.0.1
DATABASE: test
USER: userXXX
PASSWORD: passYYY
HOST: ip1.ip2.ip3.ip4
PORT: 3421
GPLOAD:
    INPUT:
        - SOURCE:
            LOCAL_HOSTNAME:
                - ip1.ip2.ip3.ip4
            PORT: 6006
            FILE:
                - /tmp/gpdb_test/test/*
        - COLUMNS:
               - id:  integer
               - result:  text
        - FORMAT: text
        - DELIMITER: '|'
        - ESCAPE: OFF
        - NULL_AS: '\N'
        - ERROR_LIMIT: 0
    OUTPUT:
        - TABLE: test
        - MODE: INSERT
    PRELOAD:
        - TRUNCATE: true
    SQL:
        - BEFORE: "INSERT INTO gpload_audit VALUES(nextval('gpload_audit_seq'), 'start', 'insert', 'test', current_timestamp)"
        - AFTER: "INSERT INTO gpload_audit VALUES(nextval('gpload_audit_seq'), 'end', 'insert', 'test', current_timestamp)"
  1. 运行“ gpload -f test.yaml”,它将引发错误:
2019-08-20 10:27:14|INFO|gpload session started 2019-08-20 10:27:14
2019-08-20 10:27:14|INFO|setting schema 'public' for table 'test'
2019-08-20 10:27:19|INFO|started gpfdist -p 6006 -P 6007 -f "/home/work/gpdb_test/test/*" -t 30
2019-08-20 10:27:20|ERROR|ERROR:  invalid byte sequence for encoding "UTF8": 0xe5b82e  (seg9 slice1 10.136.173.8:33001 pid=339845)
DETAIL:  External table ext_gpload_05bdc0fe_c2f2_11e9_bb6b_246e9677a1f0, line 1 of  gpfdist://10.136.157.44:6006//home/work/gpdb_test/test/*:  "5661083|Hibernate operation: could not insert:  [net.xiaofei.apps.wbps.channel.entity.IntSoapContent]..."       encountered while running INSERT INTO public."test" ("id","result") SELECT "id","result" FROM ext_gpload_05bdc0fe_c2f2_11e9_bb6b_246e9677a1f0

2019-08-20 10:27:20|INFO|rows Inserted          = 0
2019-08-20 10:27:20|INFO|rows Updated           = 0
2019-08-20 10:27:20|INFO|data formatting errors = 0
2019-08-20 10:27:20|INFO|gpload failed

1 个答案:

答案 0 :(得分:0)

首先,请确保源文件的编码是什么。 其次,如果您有权访问该文件,请运行“ locale; grep -axv file.txt”。如果返回某些内容,则意味着您的文件包含无效的字节序列或文件已损坏。 第三,您可以使用iconv修复/跳过无效的序列字节,或者返回源以获取正确的编码。