Kategorien:

Dateifunktionen

GET_PRESIGNED_URL

Generiert eine vorsignierte URL, die auf eine Datei in einem Stagingbereich verweist, wobei der Name des Stagingbereichs und der relative Dateipfad als Eingaben verwendet werden.

Greifen Sie mit einer der folgenden Methoden auf Dateien in einem Stagingbereich zu:

  • Navigieren Sie direkt in einem Webbrowser zu der vorsignierten URL.

  • Rufen Sie in Snowsight eine vorsignierte URL ab. Klicken Sie auf die vorsignierte URL in der Ergebnistabelle.

  • Senden Sie die vorsignierte URL in einer Anforderung an die REST-API für Dateisupport.

Bemerkung

Beim Aufruf dieser Funktion für Dateien in einem externen Stagingbereich, der auf Microsoft Azure-Cloudspeicher verweist: Diese Funktion gibt nur dann eine Ausgabe zurück, wenn der Zugriff auf den Azure-Container, in dem das Blob-Objekt gespeichert ist, über eine Speicherintegration erfolgt. Die Abfrage der Funktion schlägt fehl, wenn der Zugriff auf den Container über ein von Ihnen generiertes SAS-Token (Shared Access Signature) erfolgt.

Die Funktion GET_PRESIGNED_URL erfordert eine Azure Active Directory-Authentifizierung, um das SAS-Token der Benutzerdelegierung zu erstellen. Zu diesem Zweck speichert ein Speicherintegrationsobjekt einen generierten Dienstprinzipal für Ihren Azure-Cloudspeicher. Dem Snowflake-Dienstprinzipal wird eine Rolle zugewiesen, die die Berechtigung (oder Aktion) Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey enthält. Sowohl die Storage Blob Data Reader- als auch die Storage Blob Data Contributor-Rolle enthält diese Berechtigung. Weitere Informationen zu dieser Berechtigung finden Sie in der Microsoft-Dokumentation.

Weitere Informationen zum Zugriff auf einen Azure-Container finden Sie unter Konfigurieren eines Azure-Containers zum Laden von Daten.

Syntax

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

Argumente

stage_name

Name des internen oder externen Stagingbereichs, in dem die Datei gespeichert ist.

Bemerkung

Wenn der Stagingbereichsname Leerzeichen oder Sonderzeichen enthält, muss er in einfache Anführungszeichen eingeschlossen werden (z. B. '@"my stage"' für einen Stagingbereich mit dem Namen "my stage").

relative_file_path

Pfad und Dateiname der Datei relativ zu ihrem Speicherort im Stagingbereich.

expiration_time

Dauer (in Sekunden), nach der das Kurzzeit-Zugriffstoken abläuft.

Standardwert: 3600 (60 Minuten).

Maximaler Wert: Wenn der Stagingbereich eine AWS-IAM-Rolle (AWS_ROLE) verwendet, um eine sichere Verbindung zu Ihrem S3-Bucket herzustellen, beträgt die maximale Ablaufzeit 3600 (60 Minuten). Ansonsten beträgt die maximale Ablaufzeit 604800 (7 Tage).

Rückgabewerte

Vorsignierte URL der Stagingdatei

Bemerkung

Diese SQL-Funktion generiert eine vorsignierte URL für den von Ihnen angegebenen Dateipfad, auch wenn die Datei nicht im Stagingbereich vorhanden ist. Um sicherzustellen, dass die generierte URL die erwartete Datei zurückgibt, öffnen Sie die URL in einem Webbrowser. Wenn die Datei nicht existiert, gibt der Browser einen NoSuchKey-Fehler im XML-Format zurück.

Nutzungshinweise

  • Die serverseitige Verschlüsselung ist im internen oder externen Stagingbereich erforderlich. Weitere Details dazu finden Sie unter CREATE STAGE.

  • Diese SQL-Funktion gibt einen Wert für jede Rolle zurück, die über die folgende Berechtigung für den Stagingbereich verfügt:

    Externer Stagingbereich:

    USAGE

    Interner Stagingbereich:

    READ

  • Wenn aus einem internen Stagingbereich heruntergeladene Dateien beschädigt sind, überprüfen Sie mit dem Ersteller des Stagingbereichs, ob ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE') für den Stagingbereich eingestellt ist.

Beispiele

Abfragen der Funktion

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

Laden von Metadaten eine Bilddatei und Abrufen der vorsignierten URL

Verwenden Sie die API Ihres Cloudspeicherdienstes, um eine Liste von JSON-Dokumenten zu erstellen, die die aus den Bildern extrahierten Metadaten enthalten.

Angenommen, das JSON-Dokument einer Bitmap-Bilddatei sieht wie folgt aus:

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

Erstellen Sie eine Tabelle für die Bild-Metadaten, laden Sie die Metadaten in die Tabelle, und generieren Sie die vorsignierte URL für das Bild:

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