[英]How to use WHERE statement on JSON stored in Presto SQL column to filter?
[英]Presto SQL WHERE filter for a column that contains an array of structs
在下表中,我想篩選包含姓名 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%'
但用戶是一個結構數組。 array<struct<name:string>>
我正在使用 Presto 0.172 的 Amazon AWS Athena上執行查詢。
您可以使用數組處理函數之一來選擇相關行。 如果數組中的任何元素與給定條件匹配,則any_match
返回 true:
SELECT *
FROM data
WHERE any_match(users, user -> user.name = 'Alice')
請注意,涉及CROSS JOIN
和UNNEST
的答案僅適用於每個數組包含單個用戶的情況。
像這樣的東西:
select t.*
from t cross join
unnest(t.users) u(user)
where user.name = 'Alice';
我不確定“結構”是什么樣的。 也許你只是想要:
where user like '%Alice%'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.