簡體   English   中英

Presto SQL WHERE 篩選包含結構數組的列

[英]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 JOINUNNEST的答案僅適用於每個數組包含單個用戶的情況。

像這樣的東西:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM