“解析列类型时出错”Redshift Spectrum

Posted

技术标签:

【中文标题】“解析列类型时出错”Redshift Spectrum【英文标题】:"Error parsing the type of column" Redshift Spectrum 【发布时间】:2018-09-26 19:35:42 【问题描述】:

我有一个频谱用例,它使用来自 s3 的大量 json 文件。我首先使用 Glue 爬虫来爬取数据以创建数据目录。然后使用该目录,我创建了一个外部模式来引用 Glue 数据库,以便我可以访问该目录。现在我可以对根级字符串执行选择语句,并且可以正常工作 例如:

select t.id from glue_db.test t

问题是,当我对结构对象执行选择语句时,我收到此错误“解析列 't.actor.name' 的类型时出错”。这是一个示例选择(id 是 actor 结构中的一个字符串):

select t.actor.name from glue_db.test t

我错过了什么?我还尝试将 json 转换为镶木地板,并且在尝试查询嵌套数据时遇到了同样的问题。

这是胶水表定义:

这是演员结构:

【问题讨论】:

【参考方案1】:

需要在 FROM 子句中指定包含嵌套值的属性,以便 Redshift 知道如何访问它们。还需要确认 Glue 生成的目录正确指定了表。

select a.id 
from glue_db.test t, t.actor a

有关使用 Redshift Spectrum 查询嵌套数据的帮助,请参阅本教程。 https://docs.aws.amazon.com/redshift/latest/dg/tutorial-query-nested-data-sqlextensions.html

【讨论】:

我遇到了同样的解析错误。我正在更新问题,并添加胶水表定义。【参考方案2】:

我遇到了完全相同的错误,在与 AWS Support 联系后,我发现字段名称中的反斜杠 ( \ ) 字符会导致这个确切的异常,在您的情况下是字段 bb\user.idbb\user.externalId

所以对我来说,编辑架构并临时删除包含“\”的字段或重命名删除反斜杠的字段(例如bbuser.id)解决了这个问题。

学分@hyruma92

【讨论】:

以上是关于“解析列类型时出错”Redshift Spectrum的主要内容,如果未能解决你的问题,请参考以下文章

Redshift - 终止启动 Redshift 查询的应用程序并不会终止它

从 Redshift 读取到 Spark Dataframe(Spark-Redshift 模块)

由于 Databricks 不公开支持 spark-redshift lib,使用 Scala spark 从 Redshift 读取/写入 Redshift 的最佳方法是啥

spark和aws redshift:java.sql.SQLException:没有找到适合jdbc的驱动程序:redshift://xxx.us-west-2.redshift.amazonaws

Firebase Analytics 数据到 Redshift - BigQuery RECORD 数据类型到 Redshift

Redshift - 更新 Redshift DB 中的特定列