parquet - 无法使用 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.
有人可以在这里阐明一下吗?
笔记:
- 不确定这是否相关,但我将 JSON_SERIALIZATION_ENABLE文档设置为 true。
- 正在使用 pyarrow 5.0 保存数据
- 使用 select * from table 可以正常工作,仅选择列也可以正常工作。
- 将昨天的架构与今天的架构进行比较,它没有改变
- 我打算沿取消嵌套应用行排序。不确定这是否相关
- 我需要在 Looker 中运行查询
解决方案
对于所有列名,Redshift 默认为小写,因此 KEY 被视为键。但是镶木地板中的数据名称具有大写名称,因此内容不匹配。您可以通过将 enable_case_sensitive_identifier 连接变量设置为 true 并引用所有需要大写字符的列名来启用区分大小写的列名。我怀疑如果你
SET enable_case_sensitive_identifier TO true;
并在您的 SQL 中将 KEY 更改为“KEY”。
推荐阅读
- python - 在pygame中使矩形透明
- list - Ansible 从两个列表中生成列表(归因于两个列表中的第一个列表)
- javascript - Axios POST 请求仅在页面刷新且不起作用后记录
- react-native - 使用动态参数调用函数
- ssl - `openssl genrsa`和`openssl genpkey -algorithm rsa`之间的区别?
- python - 有没有办法根据列表的长度动态更改变量
- vb.net - sqldataadapter在目标表中插入重复行
- amazon-web-services - 安装 kube-prometehus-stack 卡在钩子并发症上
- javascript - JavaScript IF 语句和 While 循环无法正常工作
- python - (Python)如何将 3 个递减列表合并为一个递减列表?