类别:

文件函数

BUILD_SCOPED_FILE_URL

使用暂存区名称和相对文件路径作为输入,生成指向暂存文件的有作用域的 Snowflake 文件 URL。

有作用域的 URL 已编码,并允许在有限时间段内访问指定文件。输出中的作用域 URL 在持久查询结果周期结束(结果缓存过期之前)之前对调用方有效。该周期当前为 24 小时。

在查询或视图中调用此 SQL 函数。您也可以使用此 SQL 函数将作用域 URL 传递给用户定义的函数 (UDF) 或存储过程。

语法

BUILD_SCOPED_FILE_URL( @<stage_name> , '<relative_file_path>' )
Copy

实参

stage_name

用于存储文件的内部或外部暂存区的名称。

备注

如果暂存区名称包含空格或特殊字符,则必须将其放在单引号内(例如,对于名为 "my stage" 的暂存区,格式为 '@"my stage"')。

relative_file_path

文件在暂存区相对位置中的路径和文件名。

返回

该函数返回一个采用以下格式的作用域 URL :

https://<account_identifier>/api/files/<query_id>/<encoded_file_path>
Copy

其中:

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');
Copy
https://my_account.snowflakecomputing.com/api/files/019260c2-00c0-f2f2-0000-4383001cf046/bXlfZGF0YWJhc2UvbXlfc2NoZW1hL215X3N0YWdlL2ZvbGRlcjEvZm9sZGVyMi9maWxlMQ
Copy

创建一个安全视图,为特定受众筛选 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';
Copy
语言: 中文