gpt4 book ai didi

postgresql - 从平面文件插入 GPFdist 在插入时抛出错误 'invalid byte sequence for encoding "UTF 8": 0x00'

转载 作者:行者123 更新时间:2023-11-29 13:47:34 25 4
gpt4 key购买 nike

我在编写从大型平面文件中提取数据的过程中遇到问题。我正在使用具有 UTF8 规范的 python 包装器预处理平面文件,如下所示:
wrFile = io.open("outFile","w+",encoding='utf8')

我正在逐行阅读源文件:
lineACT = linecache.getline("inFile", i+j)
lineNxt = linecache.getline("inFile", i+j+1)

此外,在对行进行预处理后,我正在编写文件,如下所示:wrFile.write(lineACT)因此,遍历输入文件中的行数,我正在创建输出文件。

现在可以使用以下查询将文件提取到外部 postgresql 表中。加载器应用程序是用 Java 编写的,所有配置都使用属性文件传递:

-- CREATE EXTERNAL TABLE FOR A SPECIFIC CLIENT
CREATE EXTERNAL TABLE outTable ( col1 character(3), col2
character(3),..... )
LOCATION ( '<LocationOf outFile>' )
FORMAT 'CUSTOM' (formatter=fixedwidth_in,col1='3',col2='3'......)
LOG ERRORS INTO errorTable SEGMENT REJECT LIMIT 2 ROWS;

-- INSERT INTO DELTA TABLE
INSERT INTO deltaTable
SELECT col1, col2,......
FROM outTable
;

-- DROP EXTERNAL TABLE
DROP EXTERNAL TABLE IF EXISTS outTable;

UNIX 机器上运行它会抛出异常:

Cause: org.postgresql.util.PSQLException: ERROR: Segment reject limit reached. Aborting operation. Last error was: Expected line size from the formatting string: 1655, but the actual size is: 455  (seg43 slice1 uxpbdpsdw06.dstcorp.net:1028 pid=335160)

注意:outFile 中的每一行都是 1655 个字符。 outTabledeltaTable 的列结构也是 1655。当我查看 errorTable 时,我在 errmsg 列中找到了这个:

invalid byte sequence for encoding "UTF8": 0x00

现在,我猜测数据库不接受文件中的 null 字符 '0x00' 因为我检查的数据库的编码属性是 'UTF8'

我尝试使用以下 bash 命令从文件中删除空字符:

sed 's/\x0/-9/g' outFile > outFile_

&

tr < outFile -d '\000' > outFile_

但到目前为止还没有任何效果。有人可以就如何使这项工作提出一些建议吗?

--

提前致谢!

最佳答案

大多数情况下,只要数据具有不可打印的字符,就会遇到此特定错误。我的建议是用空格替换不可打印的字符并执行查询

关于postgresql - 从平面文件插入 GPFdist 在插入时抛出错误 'invalid byte sequence for encoding "UTF 8": 0x00',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45866271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com