- Kategorien:
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> ] )
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 Ablaufzeit3600
(60 Minuten). Ansonsten beträgt die maximale Ablaufzeit604800
(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 |
+================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================-------+
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"
}
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
);