类别:

文件函数

GET_PRESIGNED_URL

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

使用以下任一方法访问暂存区中的文件:

  • 直接在 Web 浏览器中导航到预签名 URL。

  • 在 Snowsight 中检索预签名 URL。点击结果表中的预签名 URL。

  • 在请求中向 REST API 发送预签名 URL 以获得文件支持。

备注

为引用 Microsoft Azure 云存储的外部暂存区中的文件调用此函数时: 当使用存储集成访问存储 Blob 对象的 Azure 容器时,此函数才会返回输出;如果使用您生成的共享访问签名 (SAS) 令牌访问容器,则查询函数失败。

GET_PRESIGNED_URL 函数需要 Azure AD 身份验证才能创建用户委派 SAS 令牌。为此,存储集成对象会为您的 Azure 云存储存储一个生成的服务主体。Snowflake 服务主体被授予一个角色,其中包括 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 许可(或 操作)。Storage Blob Data ReaderStorage Blob Data Contributor 角色都包括此权限。有关此权限的更多信息,请参阅 Microsoft 文档 (https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key#authorization)。

有关访问 Azure 容器的详细信息,请参阅 配置 Azure 容器以加载数据

语法

GET_PRESIGNED_URL( @<stage_name> , '<relative_file_path>' , [ <expiration_time> ] )
Copy

实参

stage_name

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

备注

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

relative_file_path

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

expiration_time

短期访问令牌过期的时间长度(以秒为单位)。

默认值:3600 (60 分钟)。

最大值:如果暂存区使用 AWS IAM 角色 (AWS_ROLE) 安全连接到您的 S3 存储桶,则最长到期时间为 3600``(60 分钟)。否则,最长到期时间为 ``604800 (7 天)。

返回

暂存文件的预签名 URL。

备注

此 SQL 函数为您指定的文件路径生成预签名 URL,即使该文件不存在于暂存区上。为确保生成的 URL 返回预期的文件,请在网络浏览器中打开 URL。如果文件不存在,浏览器会以 XML 格式返回 NoSuchKey 错误。

使用说明

  • 内部暂存区或外部暂存区需要服务器端加密。有关详细信息,请参阅 CREATE STAGE

  • 此 SQL 函数为在暂存区上具有以下权限的任何角色返回一个值:

    外部暂存区:

    USAGE

    内部暂存区:

    READ

  • 如果从内部暂存区下载的文件已损坏,请与暂存区创建者核实是否为该暂存区设置了 ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE')

示例

查询函数

SELECT GET_PRESIGNED_URL(@images_stage, 'us/yosemite/half_dome.jpg', 3600);

+================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================-------+
| GET_PRESIGNED_URL(@IMAGES_STAGE, 'US/YOSEMITE/HALF_DOME.JPG', 3600)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================-------|
| http://myaccount.s3.amazonaws.com/national_parks/us/yosemite/half_dome.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAus-west-xxxxxxxxxaws1_request&X-Amz-Date=20200625T162738Z&X-Amz-Expires=3600&X-Amz-Security-Token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-Amz-SignedHeaders=host&X-Amz-Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   |
+================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================-------+
Copy

加载图像文件的元数据并检索预签名 URL

使用 API 为您的云存储服务生成一个 JSON 文档的列表,其中包含从图像中提取的元数据。

例如,假设一个位图图像文件的 JSON 文档如下:

{
  "file_url": "s3://photos/national_parks/us/yosemite/half_dome.jpg",
  "image_format": "jpeg",
  "dimensions": {"x" : 1024, "y" : 768},
  "tags":[
    "rock",
    "cliff",
    "valley"
  ],
  "dominant_color": "gray"
}
Copy

创建图像元数据表,将元数据加载到表中,并生成图像的预签名 URL:

-- Create a table to store the file metadata

  CREATE TABLE images_table
  (
      file_url string,
      image_format string,
      dimensions_X number,
      dimensions_Y number,
      tags array,
      dominant_color string,
      relative_path string
  );

-- Load the metadata from the JSON document into the table.

COPY INTO images_table
  FROM
  (SELECT $1:file_url::STRING, $1:image_format::STRING, $1:size::NUMBER, $1:tags, $1:dominant_color::STRING, GET_RELATIVE_PATH(@images_stage, $1:file_url)
  FROM
  @images_stage/image_metadata.json)
  FILE_FORMAT = (type = json);

-- Create a view that queries the pre-signed URL for an image as well as the image metadata stored in a table.
CREATE VIEW image_catalog AS
(
  SELECT
   size,
   get_presigned_url(@images_stage, relative_path) AS presigned_url,
   tags
  FROM
    images_table
);
Copy
语言: 中文