- Categorias:
GET_PRESIGNED_URL¶
Gera um URL pré-assinado para um arquivo em um estágio usando o nome de estágio e o caminho relativo de arquivo como entradas.
Acessar os arquivos em um estágio usando qualquer um dos seguintes métodos:
Navegue até o URL pré-assinado diretamente em um navegador da web.
Recupere um URL pré-assinado em Snowsight. Clique no URL pré-assinado na tabela de resultados.
Envie o URL pré-assinado em uma solicitação ao REST API para suporte de arquivo.
Nota
Ao chamar esta função para arquivos em um estágio externo que faz referência ao armazenamento em nuvem do Microsoft Azure: Esta função retorna a saída somente quando o contêiner do Azure que armazena o objeto blob é acessado usando uma integração de armazenamento; consultar a função falha se o contêiner for acessado usando um token de assinatura de acesso compartilhado (SAS) que você gera.
A função GET_PRESIGNED_URL exige autenticação do Azure Active Directory para criar o token SAS da delegação do usuário. Para isso, um objeto de integração de armazenamento armazena uma entidade de serviço gerada para seu armazenamento em nuvem Azure. A entidade do serviço Snowflake recebeu uma função que inclui a permissão Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey
(ou ação). Tanto as funções Storage Blob Data Reader
como Storage Blob Data Contributor
incluem esta permissão. Para obter mais informações sobre esta permissão, consulte a Documentação Microsoft.
Para obter mais informações sobre como acessar um contêiner Azure, consulte Configuração de um contêiner Azure para carregamento de dados.
Sintaxe¶
GET_PRESIGNED_URL( @<stage_name> , '<relative_file_path>' , [ <expiration_time> ] )
Argumentos¶
stage_name
Nome do estágio interno ou externo em que o arquivo está armazenado.
Nota
Se o nome do estágio incluir espaços ou caracteres especiais, ele deve ser colocado entre aspas simples (por exemplo,
'@"my stage"'
para um estágio chamado"my stage"
).relative_file_path
Caminho e nome do arquivo em relação ao seu local no estágio.
expiration_time
Tempo (em segundos) após o qual o token de acesso de curto prazo expira.
Valor padrão:
3600
(60 minutos).Valor máximo: se o estágio usar uma função AWS IAM (
AWS_ROLE
) para se conectar com segurança ao seu bucket S3, o tempo máximo de expiração será de3600
(60 minutos). Caso contrário, o prazo máximo de expiração será de604800
(7 dias).
Retornos¶
URL pré-assinado do arquivo preparado.
Nota
Esta função SQL gera um URL pré-assinado para o caminho do arquivo especificado, mesmo que o arquivo não exista no estágio. Para garantir que o URL gerado retorne o arquivo esperado, abra o URL em um navegador da web. Se o arquivo não existir, o navegador retornará um erro NoSuchKey
no formato XML.
Notas de uso¶
A criptografia do lado do servidor é necessária no estágio interno ou externo. Para obter mais detalhes, consulte CREATE STAGE.
Esta função SQL retorna um valor para qualquer função que tenha o seguinte privilégio no estágio:
- Estágio externo:
USAGE
- Estágio interno:
READ
Se os arquivos baixados de um estágio interno estiverem corrompidos, verifique com o criador do estágio se
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE')
está definido para o estágio.
Exemplos¶
Consulta da função¶
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 |
+================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================-------+
Carregamento de metadados para um arquivo de imagem e recuperação do URL pré-assinado¶
Use o API para seu serviço de armazenamento em nuvem para gerar uma lista de documentos JSON que contenham os metadados extraídos das imagens.
Por exemplo, suponha que o documento JSON para um arquivo de imagem bitmap seja o seguinte:
{
"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"
}
Criar uma tabela para os metadados da imagem, carregar os metadados na tabela e gerar o URL pré-assinado para a imagem:
-- 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
);