“解析列类型时出错”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.id
和 bb\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