首页 > 解决方案 > 无法使用 Redshift Spectrum 查询镶木地板数据

问题描述

我正在使用 AWS Redshift Spectrum 来查询一些以 parquet 格式存储的数据。检查 Glue 中的类型,我可以看到数据是一个结构数组。鉴于我想取消嵌套这个数组,我找到了这个AWS 文档,昨天使用它工作得非常好。

SELECT JSON_PARSE(LOWER(array_col))

我应用 json_parse 将数组转换为 SUPER 类型,由于某些原因,它仅适用于小写字符串,因此较低。

今天早上运行查询时,出现以下错误

ERROR: Spectrum Scan Error Detail: 
error: Spectrum Scan Error code: 15001
context: File ...

svl_s3log按照有关故障排除 Spectrum 的文档进行了检查,但错误没有出现在那里。我在网上检查了错误代码,据说是同一列的类型不匹配,但是在检查分区中的镶木地板文件时(到目前为止我只有 3 个),parquet-tools我没有发现给定同一对的任何差异名称和级别。

今天我尝试使用ARRAY(array_col)将数组转换为超类型,但它失败并出现错误

ERROR: Invalid protocol sequence 'P' while in PortalSuspended state.

有人可以在这里阐明一下吗?

笔记:

  1. 不确定这是否相关,但我将 JSON_SERIALIZATION_ENABLE文档设置为 true。
  2. 正在使用 pyarrow 5.0 保存数据
  3. 使用 select * from table 可以正常工作,仅选择列也可以正常工作。
  4. 将昨天的架构与今天的架构进行比较,它没有改变
  5. 我打算沿取消嵌套应用行排序。不确定这是否相关
  6. 我需要在 Looker 中运行查询

标签: parquetamazon-redshift-spectrum

解决方案


对于所有列名,Redshift 默认为小写,因此 KEY 被视为键。但是镶木地板中的数据名称具有大写名称,因此内容不匹配。您可以通过将 enable_case_sensitive_identifier 连接变量设置为 true 并引用所有需要大写字符的列名来启用区分大小写的列名。我怀疑如果你

SET enable_case_sensitive_identifier TO true; 

并在您的 SQL 中将 KEY 更改为“KEY”。


推荐阅读