- 类别:
BUILD_SCOPED_FILE_URL¶
使用暂存区名称和相对文件路径作为输入,生成指向暂存文件的有作用域的 Snowflake 文件 URL。
有作用域的 URL 已编码,并允许在有限时间段内访问指定文件。输出中的作用域 URL 在持久查询结果周期结束(结果缓存过期之前)之前对调用方有效。该周期当前为 24 小时。
在查询或视图中调用此 SQL 函数。您也可以使用此 SQL 函数将作用域 URL 传递给用户定义的函数 (UDF) 或存储过程。
语法¶
BUILD_SCOPED_FILE_URL( @<stage_name> , '<relative_file_path>' )
实参¶
stage_name
用于存储文件的内部或外部暂存区的名称。
备注
如果暂存区名称包含空格或特殊字符,则必须将其放在单引号内(例如,对于名为
"my stage"
的暂存区,格式为'@"my stage"'
)。relative_file_path
文件在暂存区相对位置中的路径和文件名。
返回¶
该函数返回一个采用以下格式的作用域 URL :
https://<account_identifier>/api/files/<query_id>/<encoded_file_path>
其中:
account_identifier
暂存区的 Snowflake 账户主机名。主机名以 Snowflake 提供的账户定位器开头,以 Snowflake 域 (
snowflakecomputing.cn
) 结尾:account_locator.snowflakecomputing.cn
有关更多详细信息,请参阅 账户标识符。
备注
对于 业务关键 账户,即使您的账户未启用与 Snowflake 服务的专用连接,也会在 URL 中的
snowflakecomputing.cn
(privatelink.snowflakecomputing.cn
) 之前附加privatelink
段。query_id
生成作用域 URL 的 BUILD_SCOPED_FILE_URL 调用的查询 ID。
encoded_file_path
使用作用域 URL 访问文件的编码路径。
使用说明¶
调用此 SQL 函数所需的权限因调用方式而异:
SQL 操作
所需权限
查询
USAGE(外部暂存区)或 READ(内部暂存区)
视图中的列定义
视图所有者(即拥有视图 OWNERSHIP 权限的角色)必须拥有暂存区权限:USAGE(外部暂存区)或 READ(内部暂存区)。
查询视图的角色只需要视图的 SELECT 权限。
存储过程
存储过程所有者(即对存储过程具有 OWNERSHIP 权限的角色)必须具有暂存区权限:USAGE(外部暂存区)或 READ(内部暂存区)。
查询存储过程的角色只需要存储过程的 USAGE 权限。
UDF
UDF 所有者(即拥有 UDF 的 OWNERSHIP 权限的角色)必须拥有暂存区权限:USAGE(外部暂存区)或 READ(内部暂存区)。
查询 UDF 的角色只需要 UDF 的 USAGE 权限。
向 REST API 发送作用域 URL 的 HTTP 客户端必须配置为允许重定向。
当一个作用域 URL 被访问后,查询历史显示内部 GET_SCOPED_FILE 函数被调用。
如果从内部暂存区下载的文件已损坏,请与暂存区创建者核实是否为该暂存区设置了
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE')
。
示例¶
检索外部暂存区中的位图格式图像文件的作用域 URL:
SELECT BUILD_SCOPED_FILE_URL(@images_stage,'/us/yosemite/half_dome.jpg');
https://my_account.snowflakecomputing.com/api/files/019260c2-00c0-f2f2-0000-4383001cf046/bXlfZGF0YWJhc2UvbXlfc2NoZW1hL215X3N0YWdlL2ZvbGRlcjEvZm9sZGVyMi9maWxlMQ
创建一个安全视图,为特定受众筛选 BUILD_SCOPED_FILE_URL 函数调用的结果。在此示例中,查询安全视图仅返回暂存区文件路径中包含 acct1
字符串的文件:
-- Create a table that stores the relative file path for each staged file along with any other related data.
CREATE TABLE acct_table (
acct_name string,
relative_file_path string
);
-- Create a secure view on the table you created.
-- A role that has the SELECT privilege on the secure view has scoped access to the filtered set of files that include the acct1 text string.
CREATE SECURE VIEW acct1_files
AS
SELECT BUILD_SCOPED_FILE_URL(@acct_files, relative_file_path) scoped_url
FROM acct_table
WHERE acct_name = 'acct1';