【发布时间】:2021-04-03 04:43:10
【问题描述】:
来自 SQLSERVER 领域,我真的很喜欢使用 CROSS APPLY / OUTER APPLY 模式查询表值函数。看来 snowsql 没有那种命令,但我能够复制该功能。你能告诉我这是如何连接的性能问题吗?
TVF
create or replace function udf_user_friends(user_id varchar)
returns table(user_id varchar,friend_id varchar)
as
$$
select
userjson:user_id::string as user_id
, f.value::string as friend_id
from yelp.user u,
lateral flatten (input=>split(u.userjson:friends, ',')) f
where userjson:user_id = user_id
$$;
使用 udf 的查询
SELECT
u.userjson:user_id::string as user_id
, t.friend_id
FROM yelp.user u
LEFT JOIN TABLE(udf_user_friends(u.userjson:user_id::string)) t;
【问题讨论】:
-
如果 user_id 是一个 ID aka number 将其转换为一个字符串并在其上执行 join 将不会很好。只需将其保留为 NUMBER。
-
“我真的开始享受使用 CROSS APPLY / OUTER APPLY 模式查询表值函数的乐趣了。” - 毫无疑问,有时会导致性能缓慢!
-
@MitchWheat 有时!
标签: snowflake-cloud-data-platform