“错误分析列的类型” Redshift Spectrum

时间:2018-09-26 19:35:42

标签: amazon-web-services amazon-redshift amazon-redshift-spectrum

我有一个使用频谱的用例,其中使用了来自s3的大量json文件。我首先使用Glue搜寻器搜寻数据以创建数据目录。然后使用该目录,我创建了一个外部架构来引用Glue数据库,以便可以访问目录。现在,我可以在根级别字符串上执行select语句,并且可以正常运行:

select t.id from glue_db.test t

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

select t.actor.name from glue_db.test t

我想念什么?我还试图将json转换为parquet,并且在尝试查询嵌套数据时遇到了同样的问题。

这是胶水表定义:

enter image description here

这是演员结构:

enter image description here

2 个答案:

答案 0 :(得分:0)

需要在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

答案 1 :(得分:0)

我遇到了完全相同的错误,在与AWS Support联系后,我发现字段名称中的反斜杠(\)字符会导致此确切的异常,在您的情况下,字段bb\user.id和{{1 }}。

因此,对于我来说,编辑架构并临时删除包含“ \”的字段,或者重命名该字段以删除反斜杠(例如bb\user.externalId)都可以解决此问题。

enter image description here

@@ hyruma92