Snowflake跨Schema、跨数据库的表Join关联查询方法咨询
Snowflake 跨表关联查询问题解答
1. 同一数据库下不同Schema的表Join实现
Snowflake的对象层级为数据库.模式.表,同库场景下只需在表名前指定对应的Schema即可完成关联。
语法规则
关联时无需重复指定数据库名,直接使用SCHEMA名.表名的格式标识不同Schema下的表即可,也可补全数据库三层路径保证查询兼容性。
示例代码
假设公共关联字段为user_id,需要关联USER_SCHEMA下的users表和ORDER_SCHEMA下的orders表,两个Schema同属MY_PROD_DB数据库:
SELECT u.user_id, u.user_name, o.order_id, o.order_amount -- 可省略数据库前缀,直接指定Schema和表名 FROM USER_SCHEMA.users u INNER JOIN ORDER_SCHEMA.orders o ON u.user_id = o.user_id WHERE o.create_time >= '2024-01-01';
2. 不同数据库下不同Schema的表Join实现
跨库场景下需要补全两个表的完整三层对象路径,同时保证执行查询的角色具备两个库对应资源的访问权限。
语法规则
两张表都使用数据库名.Schema名.表名的完整格式标识即可,关联逻辑和普通Join完全一致。
示例代码
假设users表属于USER_DB库的USER_SCHEMA,orders表属于ORDER_DB库的ORDER_SCHEMA,公共关联字段为user_id:
SELECT u.user_id, u.mobile, o.order_id, o.pay_status -- 补全两张表的完整三层路径 FROM USER_DB.USER_SCHEMA.users u LEFT JOIN ORDER_DB.ORDER_SCHEMA.orders o ON u.user_id = o.user_id WHERE u.register_channel = 'app';
补充说明:如果查询触发权限报错,需要先确认当前角色已获得两个表所属数据库、Schema的
USAGE权限,以及对应表的SELECT权限。
内容的提问来源于stack exchange,提问作者testbg testbg
相关产品推荐
相关产品推荐

