Catégories :

Nouvelles fonctions

GET_PRESIGNED_URL

Génère l’URL pré-signée vers un fichier en zone de préparation en utilisant le nom de la zone de préparation et le chemin de fichier relatif comme entrées.

Accédez aux fichiers d’une zone de préparation en utilisant l’une des méthodes suivantes :

  • Accédez à l’URL pré-signée directement dans un navigateur Web.

  • Récupérez une URL pré-signée dans Snowsight. Cliquez sur l’URL pré-signée dans la table des résultats.

  • Envoyez l’URL pré-signée dans une requête dans l’API REST pour la prise en charge de fichiers.

Note

Lorsque vous appelez cette fonction pour des fichiers dans une zone de préparation externe qui fait référence au stockage Cloud Microsoft Azure : Cette fonction renvoie un résultat uniquement lorsque le conteneur Azure qui stocke l’objet blob est accessible à l’aide d’une intégration de stockage ; l’interrogation de la fonction échoue si le conteneur est accessible à l’aide d’un jeton de signature d’accès partagé (SAS) que vous générez.

La fonction GET_PRESIGNED_URL nécessite une authentification Azure Active Directory pour créer le jeton SAS de délégation de l’utilisateur. À cette fin, un objet d’intégration de stockage stocke un principal de service généré pour votre stockage dans le Cloud Azure. Le principal du service Snowflake se voit attribuer un rôle qui inclut l’autorisation Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey (ou action). Les rôles Storage Blob Data Reader et Storage Blob Data Contributor comprennent tous deux cette autorisation. Pour plus d’informations sur cette autorisation, consultez la documentation Microsoft.

Pour plus d’informations sur l’accès à un conteneur Azure, voir Configuration d’un conteneur Azure pour le chargement de données.

Syntaxe

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

Arguments

stage_name

Nom de la zone de préparation interne ou externe où le fichier est stocké.

Note

Si le nom de la zone de préparation comprend des espaces ou des caractères spéciaux, il doit être placé entre guillemets simples (par exemple, '@"my stage"' pour une zone de préparation nommée "my stage").

relative_file_path

Chemin et nom de fichier du fichier relatif à son emplacement dans la zone de préparation.

expiration_time

Durée (en secondes) après laquelle le jeton d’accès à court terme expire.

Valeur par défaut : 3600 (60 minutes).

Valeur maximale : si la zone de préparation utilise un rôle AWS IAM (AWS_ROLE) pour se connecter en toute sécurité à votre compartiment S3, le délai d’expiration maximal est de 3600 (60 minutes). Sinon, le délai d’expiration maximal est de 604800 (7 jours).

Renvoie

URL pré-signée du fichier en zone de préparation.

Note

Cette fonction SQL génère une URL pré-signée pour le chemin de fichier que vous spécifiez, même si le fichier n’existe pas sur la zone de préparation. Pour vous assurer que l’URL générée renvoie le fichier attendu, ouvrez l’URL dans un navigateur Web. Si le fichier n’existe pas, le navigateur renvoie une erreur NoSuchKey au format XML.

Notes sur l’utilisation

  • Le chiffrement côté serveur est nécessaire sur la zone de préparation interne ou externe. Pour plus de détails, voir CREATE STAGE.

  • Cette fonction SQL renvoie une valeur pour tout rôle qui possède le privilège suivant sur la zone de préparation :

    Zone de préparation externe:

    USAGE

    Zone de préparation interne:

    READ

  • Si les fichiers téléchargés à partir d’une zone de préparation interne sont corrompus, vérifiez avec le créateur de zone de préparation que ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE') est défini pour la zone de préparation.

Exemples

Interrogation de la fonction

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

Chargement des métadonnées d’un fichier image et récupération de l’URL pré-signée

Utilisez l’API de votre service de stockage dans le Cloud pour générer une liste de documents JSON contenant les métadonnées extraites des images.

Par exemple, supposons que le document JSON pour un fichier image bitmap soit le suivant :

{
  "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

Créez une table pour les métadonnées de l’image, chargez les métadonnées dans la table et générez l’URL pré-signée pour l’image :

-- 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