Snowflake技术问询:如何正确筛选名称包含@domain的特定用户
搞定Snowflake筛选含@domain用户的问题
嘿,作为Snowflake新手遇到这个问题很正常——你的查询之所以返回所有用户,核心是没搞对LIKE操作符的用法~
问题出在哪?
你写的where name like '@domain',Snowflake会理解成只找名称完全等于"@domain"的用户。如果你的用户列表里没有刚好叫这个名字的用户,理论上应该返回空,但你说返回了所有用户,大概率是你查询的users表不是系统用户视图?先不管这个,先把筛选逻辑改对!
正确的筛选语句
要找名称里包含@domain的用户,得用%通配符(这个符号代表任意长度的任意字符,包括空字符),写法如下:
SELECT * FROM users WHERE name LIKE '%@domain%';
如果你的用户都是邮箱格式(比如xxx@domain.com),想精准匹配域名部分,还可以调整成这样(比如只匹配以@domain结尾的):
SELECT * FROM users WHERE name LIKE '%@domain';
要是想匹配完整域名(比如@domain.com),就改成:
SELECT * FROM users WHERE name LIKE '%@domain.com';
额外要注意的点
如果改了语句还是不对,建议排查这两个地方:
- 确认查询的表是否正确:Snowflake里查看所有账户用户,应该用系统视图
SNOWFLAKE.ACCOUNT_USERS,或者当前库的INFORMATION_SCHEMA.USERS。不过要注意,你得有MONITOR USAGE权限才能查看系统用户数据。比如正确的系统用户查询应该是:
SELECT * FROM SNOWFLAKE.ACCOUNT_USERS WHERE NAME LIKE '%@domain%';
- 大小写问题:Snowflake默认不区分大小写,但如果用户名称是创建时加了引号的特殊标识符(比如
"John@Domain"),可以用ILIKE来强制不区分大小写匹配,更稳妥:
SELECT * FROM SNOWFLAKE.ACCOUNT_USERS WHERE NAME ILIKE '%@domain%';
最后总结一下
核心就是用%通配符配合LIKE/ILIKE实现部分匹配,同时确保你查的是正确的用户视图,权限也到位~
内容的提问来源于stack exchange,提问作者SnowPablo
相关产品推荐
相关产品推荐

