Categorias:

Funções de arquivo

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> ] )
Copy

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á de 3600 (60 minutos). Caso contrário, o prazo máximo de expiração será de 604800 (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   |
+================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================-------+
Copy

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"
}
Copy

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
);
Copy