- 类别:
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 Reader
和 Storage 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> ] )
实参¶
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 |
+================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================-------+
加载图像文件的元数据并检索预签名 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"
}
创建图像元数据表,将元数据加载到表中,并生成图像的预签名 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
);