athena presto-基于多个嵌套结构的过滤器



以下是数据结构:

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

最新更新