Presto SQL WHERE 筛选包含结构数组的列
Presto SQL WHERE filter for a column that contains an array of structs
在下面的 table 中,我想筛选包含姓名 Alice 的所有行。
WITH data AS (
SELECT ARRAY[CAST(ROW('Bob') AS ROW(name VARCHAR))] AS users
UNION ALL
SELECT ARRAY[CAST(ROW('Alice') AS ROW(name VARCHAR))] AS users
)
SELECT *
FROM data
+-----------------------------------------------------------------+
| users |
+-----------------------------------------------------------------+
| [{name=Bob}] |
| [{name=Alice}] |
+-----------------------------------------------------------------+
如果用户是一个字符串,我可以说:
SELECT * from data where users like '%Alice%'
但是users是一个struct数组。 array<struct<name:string>>
我正在 Amazon AWS Athena which uses Presto 0.172 上执行查询。
像这样:
select t.*
from t cross join
unnest(t.users) u(user)
where user.name = 'Alice';
我不确定“结构”是什么样的。也许你只是想要:
where user like '%Alice%'
您可以使用 array-processing 函数之一 select 相关行。 any_match
returns 如果数组中的任何元素符合给定条件,则为真:
SELECT *
FROM data
WHERE any_match(users, user -> user.name = 'Alice')
请注意,涉及 CROSS JOIN
和 UNNEST
的答案仅在每个数组包含一个用户时才有效。
在下面的 table 中,我想筛选包含姓名 Alice 的所有行。
WITH data AS (
SELECT ARRAY[CAST(ROW('Bob') AS ROW(name VARCHAR))] AS users
UNION ALL
SELECT ARRAY[CAST(ROW('Alice') AS ROW(name VARCHAR))] AS users
)
SELECT *
FROM data
+-----------------------------------------------------------------+
| users |
+-----------------------------------------------------------------+
| [{name=Bob}] |
| [{name=Alice}] |
+-----------------------------------------------------------------+
如果用户是一个字符串,我可以说:
SELECT * from data where users like '%Alice%'
但是users是一个struct数组。 array<struct<name:string>>
我正在 Amazon AWS Athena which uses Presto 0.172 上执行查询。
像这样:
select t.*
from t cross join
unnest(t.users) u(user)
where user.name = 'Alice';
我不确定“结构”是什么样的。也许你只是想要:
where user like '%Alice%'
您可以使用 array-processing 函数之一 select 相关行。 any_match
returns 如果数组中的任何元素符合给定条件,则为真:
SELECT *
FROM data
WHERE any_match(users, user -> user.name = 'Alice')
请注意,涉及 CROSS JOIN
和 UNNEST
的答案仅在每个数组包含一个用户时才有效。