|-- arrival_pages: array
| |-- element: struct
| | |-- hierarchy: long
| | |-- id: long
| | |-- recency: long
(partial output from pyspark's dataframe.printSchema)
为了读取属性,我在雅典娜中定义了一个具有这种类型的列:
arrival_pages array<struct<id: bigint, hierarchy: bigint, recency: bigint>>
任何涉及此列的select查询都会成功执行,但生成的结构不会保留其属性名称对应关系。也就是说,属性名称从拼花映射到雅典娜,如下所示:
(parquet -> Athena)
hierarchy -> id
id -> hierarchy
recency -> recency
当我在雅典娜的表定义中设置随机属性名时,例如:
arrival_pages array<struct<foo: bigint, bar: bigint, baz: bigint>>
执行查询
成功地
生成的映射如下所示:
(parquet -> Athena)
hierarchy -> foo
id -> bar
recency -> baz
因此,雅典娜似乎只是按照预定义的顺序读取struct的属性,并将它们映射到所需的结构中,而不管它有什么属性名称。这是故意的还是我遗漏了什么?