繁体   English   中英

从 s3 复制镶木地板时出现 Redshift 外部目录错误

[英]Redshift external catalog error when copying parquet from s3

我正在尝试通过 parquet 格式将 Google Analytics 数据复制到 redshift 中。 当我将列限制为几个选择字段时,我可以复制数据。 但是在包含几个特定列时,我得到一个错误:

ERROR: External Catalog Error. Detail: ----------------------------------------------- error: External Catalog Error. code: 16000 context: Unsupported column type found for column: 6. Remove the column from the projection to continue. query: 18669834 location: s3_request_builder.cpp:2070 process: padbmaster [pid=23607] -----------------------------------------------

我知道问题很可能与数据有关,但我不确定如何调试,因为这个错误无论如何都没有帮助。 我尝试将列的数据类型更改为超级,但没有任何成功。 我在这里没有使用红移光谱。

我找到了解决方案。 在错误消息中,它显示Unsupported column type found for column: 6 Redshift 列序数从 0 开始。我从 1 开始计算列,而不是 0(我的错误)。 所以这意味着问题出在第 6 列(我将其读作第 7 列),在我的例子中它是一个stringvarchar列。 我创建了一个仅包含此列的表,并尝试仅在此列中上传数据。 然后我得到了

redshift_connector.error.ProgrammingError: {'S': 'ERROR', 'C': 'XX000', 'M': 'Spectrum Scan Error', 'D': '\n  -----------------------------------------------\n  error:  Spectrum Scan Error\n  code:      15001\n  context:   The length of the data column display_name is longer than the length defined in the table. Table: 256, Data: 1020

varchar(max)为这些列重新创建列解决了这个问题

我假设您的镶木地板中有半结构化数据(如数组)。

在这种情况下,您可以查看最底部的此页面https://docs.aws.amazon.com/redshift/latest/dg/ingest-super.html

它说:

如果您的半结构化或嵌套数据已经以 Apache Parquet 或 Apache ORC 格式提供,您可以使用 COPY 命令将数据摄取到 Amazon Redshift。

Amazon Redshift 表结构应与 Parquet 或 ORC 文件的列数和列数据类型相匹配。 通过在 COPY 命令中指定 SERIALIZETOJSON,您可以将文件中与表中的 SUPER 列对齐的任何列类型加载为 SUPER。 这包括结构和数组类型。

COPY foo FROM 's3://bucket/somewhere' ... FORMAT PARQUET SERIALIZETOJSON;

对我来说,最后一行

...
FORMAT PARQUET SERIALIZETOJSON;

成功了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM