【问题标题】:Unable to create parquet column scanner无法创建镶木地板列扫描仪
【发布时间】:2021-12-26 00:23:40
【问题描述】:

我正在尝试将镶木地板数据从 S3 加载到 redshift 中,并且正在运行以下命令:

COPY sample_table
FROM 's3://sample_s3/parquet_data/'
IAM_ROLE '<arn>'
FORMAT AS PARQUET;

但是一旦我运行这个命令,我就会收到这个错误:

DETAIL:
  -----------------------------------------------
  error:  Spectrum Scan Error
  code:      15001
  context:   Unable to create parquet column scanner
  query:     21099
  location:  dory_util.cpp:1141
  process:   worker_thread [pid=6570]
  -----------------------------------------------

仅供参考,这只发生在少数几张桌子上,而不是所有桌子上。我有 7 张桌子,其中只有 2 张桌子得到了这个,但无法找出问题所在。 有任何帮助或任何人曾经收到过此问题吗?

【问题讨论】:

  • 嗨@arglee 你找到这个错误的原因或解决方案了吗?

标签: amazon-redshift parquet amazon-redshift-spectrum


【解决方案1】:

我遇到了这个问题,结果是十进制值的编码方式。根据 parquet-cli,十进制值被编码为binary (STRING)。 Redshift 想要的是fixed_len_byte_array(5) (DECIMAL(10,4))

为了解决这个问题,我使用以下 Python 代码(使用 Pandas 和 PyArrow)将字符串值转换为十进制:

import pyarrow as pa
new_values = pa.chunked_array(pa.Array.from_pandas(table.column('score').to_pandas().astype(float)).cast(pa.decimal128(10, 4)))
table = table.set_column(position, 'score', new_values)

我还想指出pa.chunked_array 是必要的。仅使用 PyArrow 数组不足以获得正确的类型。

以防万一它可能有助于解决类似问题:我首先使用 UNLOAD 命令从 Redshift 导出一些数据并从那里向后工作,从而发现了这一点。

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多