以下是数据结构:
TEST: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- id: string (nullable = true)
| | |-- name: string (nullable = true)
| | |-- TEST2: array (nullable = true)
| | | |-- element: struct (containsNull = true)
| | | | |-- title: string (nullable = true)
我想做的是在TEST2.title = 'A'
时过滤我的整个表
我可以为第一级的name
执行此操作,但在第二个嵌套数组(结构(中执行此操作时遇到问题
这是我的第一级过滤解决方案。这也可能是低效的:
从表中选择TEST其中基数(筛选器(TEST,e->e.name="A"(>0
注:any_match
在Athena Presto 中不可用
您可以通过将(transform
(外部数组映射到其内部数组来实现这一点,此时您就有了一个数组[array[t]]。然后,如果您调用flatn((,它将转换一个数组[array[t]]->您可以对其进行决策的数组[t]。应该看起来像这样:
where cardinality(filter(flatten(transform(test, e -> e.test2)), e -> e.title = 'A')) > 0