如何停止获取错误并保留数据:缺少换行符:在位置 116 发现意外字符 0x31

Posted

技术标签:

【中文标题】如何停止获取错误并保留数据:缺少换行符:在位置 116 发现意外字符 0x31【英文标题】:How to stop getting error and keep data: Missing newline: Unexpected character 0x31 found at location 116 【发布时间】:2019-06-06 15:27:54 【问题描述】:

我正在尝试将数据从 Amazon s3 复制到 Amazon Redshift,但每次都在同一行出现“意外字符”换行错误。它是文件中间的随机行,我试图复制的很多文件都发生了这种情况。

这里是副本声明:

COPY sample_table FROM "S3://bucket/file.psv' iam_role 'role' delimiter '|'
ACCEPTINVCHARS IGNOREBLANKLINES DATEFORMAT 'auto' TIMEFORMAT 'auto'
emptyasnull blanksasnull maxerror as 100000 ;

表格格式如下:

create table sample_table (
id varchar (25),
model varchar (25),
api varchar (25),
msgdatetime timestamp,
msgdate date,
alias bigint,
key varchar (255),
value varchar (50)
) ;

这是来自数据的原始行:

AAA111111111|AA1111111|sample_API|2019-06-06 11:20:00|2019-06-06|111111111|Sample_key|1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

还应注意,这是自动化过程的一部分,上面的 sql 用于复制大量文件,这些文件都导致相同的问题。

【问题讨论】:

这个例子有效吗?我的意思是,如果您有 1 行的 s3,它会因该复制命令而失败吗?请检查,如果不是,您需要更新您的示例。 @JonScott 它之所以有效,是因为它复制了同一文件中的其余数据,但跳过了这一行并吐出一个错误,并且所有其他行的格式都相同 如果我用这一行创建一个 s3,然后运行创建表和复制命令 - 它工作得很好,那 1 行已正确加载到表中。为了获得帮助,请确保您可以获得一个实际失败的可验证示例。另外 - 您可能希望更新您的标题,因为这不是错误吗? @JonScott 这确实是我得到的确切错误,这个 s3 文件是从另一个来源提取的文件,不是直接在 s3 中创建的。值得一提的是,该文件是 psv。 psv 究竟是什么?只是一个文本文件?在您的文本中,您的信息与标题不同。 (也许?)。请问你能提供更多的行吗?我无法帮助您提供您所提供的内容 - 正如我上面所说的 - 它有效!您需要帮助我重新创建它 - 尝试使用您提供的信息自己重新创建它? 【参考方案1】:

数据中的列比表格中的多

id = AAA111111111
model = AA1111111
api = sample_API
msgdatetime = 2019-06-06 11:20:00
msgdate  = 2019-06-06
key = 111111111
value = Sample_key

在末尾留下“1”作为下一列。 1 是 0x31

您可能需要一个新列(我在下面称为 newcol)

create table sample_table (
id varchar (25),
model varchar (25),
api varchar (25),
msgdatetime timestamp,
msgdate date,
newcol varchar(255),
key varchar (255),
value varchar (50)
) ;

【讨论】:

我复制错误。我已经有一个额外的专栏(请参阅编辑后的帖子)

以上是关于如何停止获取错误并保留数据:缺少换行符:在位置 116 发现意外字符 0x31的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 <pre> 标记的值并保留所有空格?

如何获取 Mandrill/Mailchimp 模板以在合并标签中保留换行符

linux获取保留yum源并获取安装位置

sql带条件多条数据合并为一条数据并换行

从文本区域获取文本时如何保留换行符?

从批处理脚本启动exe并在缺少dll时获取错误代码