我有一个使用频谱的用例,其中使用了来自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,并且在尝试查询嵌套数据时遇到了同样的问题。
这是胶水表定义:
这是演员结构:
答案 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
)都可以解决此问题。
@@ hyruma92