Kategorien:

Dateifunktionen

BUILD_SCOPED_FILE_URL

Generiert eine bereichsbezogene Snowflake-Datei-URL, die auf eine Stagingdatei verweist, wobei der Name des Stagingbereichs und der relative Dateipfad als Eingaben verwendet werden. Eine Bereichs-URL ist verschlüsselt und erlaubt den Zugriff auf eine bestimmte Datei für einen begrenzten Zeitraum.

Rufen Sie diese SQL-Funktion in einer Abfrage, Ansicht, benutzerdefinierten Funktion (UDF) oder gespeicherten Prozedur auf. Die in der Ausgabe enthaltene Bereichs-URL ist für den Aufrufer nur so lange gültig, bis der Zeitraum für persistent gespeicherte Abfrageergebnisse endet (d. h. der Ergebnis-Cache abläuft): derzeit 24 Stunden.

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

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

  • Senden Sie die Bereichs-URL in einer Anforderung an die REST-API für Dateisupport. Wenn Benutzer eine Bereichs-URL an die REST-API senden, um auf Dateien zuzugreifen, führt Snowflake die folgenden Aktionen aus:

    1. Authentifizieren des Benutzers. Prüfen, ob es der aktuelle Benutzer war, der die Funktion BUILD_SCOPED_FILE_URL aufgerufen und die Bereichs-URL generiert hat.

    2. Sicherstellen, dass die Bereichs-URL noch gültig ist.

    3. Umleiten des Benutzers zur Stagingdatei im Cloudspeicherdienst.

Syntax

BUILD_SCOPED_FILE_URL( @<stage_name> , '<relative_file_path>' )
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.

Rückgabewerte

Die Funktion gibt eine Bereichs-URL im folgenden Format zurück:

https://<account_identifier>/api/files/<query_id>/<encoded_file_path>
Copy

Wobei:

account_identifier

Hostname des Snowflake-Kontos für Ihren Stagingbereich. Der Hostname beginnt mit einem eindeutigen Konto-Locator (von Snowflake bereitgestellt) und endet mit der Snowflake-Domain (snowflakecomputing.com):

account_locator.snowflakecomputing.com

Weitere Details dazu finden Sie unter Kontobezeichner.

Bemerkung

Für Business Critical-Konten wird der URL direkt vor snowflakecomputing.com ein privatelink-Segment vorangestellt (privatelink.snowflakecomputing.com), auch wenn private Konnektivität zum Snowflake-Dienst für Ihr Konto nicht aktiviert ist.

query_id

Abfrage-ID des BUILD_SCOPED_FILE_URL-Aufrufs, der die Bereichs-URL generiert hat.

encoded_file_path

Kodierter Pfad zu den Dateien, auf die mit der Bereichs-URL zugegriffen werden soll.

Nutzungshinweise

  • Die für den Aufruf dieser SQL-Funktion erforderlichen Berechtigungen hängen von der Art des Aufrufs ab:

    SQL-Operation

    Erforderliche Berechtigungen

    Abfrage

    USAGE (externer Stagingbereich) oder READ (interner Stagingbereich)

    Spaltendefinition in einer Ansicht

    Der Eigentümer der Ansicht (d. h. die Rolle mit OWNERSHIP-Berechtigung für die Ansicht) muss über die Berechtigung für den Stagingbereich verfügen: USAGE (externer Stagingbereich) oder READ (interner Stagingbereich).

    Eine Rolle, die die Ansicht abfragt, benötigt nur die SELECT-Berechtigung für die Ansicht.

    Gespeicherte Prozeduren

    Der Eigentümer der gespeicherten Prozedur (d. h. die Rolle mit OWNERSHIP-Berechtigung für die Ansicht) muss über die Berechtigung für den Stagingbereich verfügen: USAGE (externer Stagingbereich) oder READ (interner Stagingbereich).

    Eine Rolle, die die gespeicherte Prozedur abfragt, benötigt nur die USAGE-Berechtigung für die gespeicherte Prozedur.

    UDF

    Der Eigentümer der UDF (d. h. die Rolle mit OWNERSHIP-Berechtigung für die UDF) muss über die Berechtigung für den Stagingbereich verfügen: USAGE (externer Stagingbereich) oder READ (interner Stagingbereich).

    Eine Rolle, die die UDF abfragt, benötigt nur die USAGE-Berechtigung für die UDF.

  • Ein HTTP-Client, der eine Bereichs-URL an die REST-API sendet, muss so konfiguriert sein, dass er Umleitungen zulässt.

  • Bei einem Zugriff auf eine Bereichs-URL zeigt der Abfrageverlauf an, dass die interne Funktion GET_SCOPED_FILE aufgerufen wurde.

  • 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

Abrufen einer Bereichs-URL für eine Bilddatei im Bitmap-Format in einem externen Stagingbereich:

SELECT BUILD_SCOPED_FILE_URL(@images_stage,'/us/yosemite/half_dome.jpg');
Copy
https://my_account.snowflakecomputing.com/api/files/019260c2-00c0-f2f2-0000-4383001cf046/bXlfZGF0YWJhc2UvbXlfc2NoZW1hL215X3N0YWdlL2ZvbGRlcjEvZm9sZGVyMi9maWxlMQ
Copy

Erstellen Sie eine sichere Ansicht, die die Ergebnisse eines BUILD_SCOPED_FILE_URL-Funktionsaufrufs für eine bestimmte Zielgruppe filtert. Im folgenden Beispiel werden bei Abfrage der sicheren Ansicht nur die Dateien im Stagingbereichs-Dateipfad zurückgegeben, die die Zeichenfolge acct1 enthalten:

-- Create a table that stores the relative file path for each staged file along with any other related data.
CREATE TABLE acct_table (
  acct_name string,
  relative_file_path string
);

-- Create a secure view on the table you created.
-- A role that has the SELECT privilege on the secure view has scoped access to the filtered set of files that include the acct1 text string.
CREATE SECURE VIEW acct1_files
AS
  SELECT BUILD_SCOPED_FILE_URL(@acct_files, relative_file_path) scoped_url
  FROM acct_table
  WHERE acct_name = 'acct1';
Copy