カテゴリ:

ファイル関数

GET_PRESIGNED_URL

ステージ名と相対ファイルパスを入力として使用して、ステージ上のファイルに事前署名付き URL を生成します。

次の方法のいずれかを使用して、ステージ内のファイルにアクセスします。

  • ウェブブラウザーで直接、事前署名済み URL に移動します。

  • Snowsightで事前署名済み URL を取得します。結果テーブルで事前署名済み URL をクリックします。

  • リクエストで事前署名済み URL をファイルサポートの REST API に送信します。

注釈

Microsoft Azureクラウドストレージを参照する外部ステージのファイルに対してこの関数を呼び出す場合: この関数は、ストレージ統合を使用してBlobオブジェクトを保存するAzureコンテナーにアクセスしたときに のみ、出力を返します。生成した共有アクセス署名(SAS)トークンを使用してコンテナーにアクセスすると、関数のクエリに失敗します。

GET_PRESIGNED_URL 関数では、ユーザー委任 SAS トークンを作成するためにAzure Active Directory認証が必要です。この目的のために、ストレージ統合オブジェクトは、Azureクラウドストレージ用に生成されたサービスプリンシパルを保存します。Snowflakeサービスプリンシパルには、 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 権限(または アクション)を含むロールが付与されます。 Storage Blob Data ReaderStorage Blob Data Contributor の両方のロールにこの権限が含まれています。この権限の詳細については、 Microsoftドキュメント をご参照ください。

Azureコンテナーへのアクセスの詳細については、 データをロードするためのAzureコンテナーの構成 をご参照ください。

構文

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

引数

stage_name

ファイルが保存される内部ステージまたは外部ステージの名前。

注釈

ステージ名にスペースまたは特殊文字が含まれている場合は、一重引用符で囲む必要があります(例: "my stage" という名前のステージの場合は '@"my stage"')。

relative_file_path

ステージ上の場所を基準にしたファイルのパスとファイル名。

expiration_time

短期アクセストークンの有効期限が切れるまでの時間(秒単位)。

デフォルト値: 3600 (60分)。

最大値: ステージが AWS IAM ロール(AWS_ROLE)を使用してS3バケットにセキュアに接続する場合、最大有効期限は 3600 (60分間)です。それ以外の場合、最大有効期限は 604800 (7日間)です。

戻り値

ステージングされたファイルの事前署名済み URL。

注釈

この SQL 関数は、指定したファイルパスに対して、たとえそのファイルがステージ上に存在しなくても、事前署名付きの URL を生成します。生成された URL が期待したファイルを返すことを確認するには、 URL をウェブブラウザーで開きます。ファイルが存在しない場合、ブラウザーは NoSuchKey エラーを XML 形式で返します。

使用上の注意

  • サーバー側の暗号化は、内部ステージまたは外部ステージで必要です。詳細については、 CREATE STAGE をご参照ください。

  • この SQL 関数は、ステージに対する次の権限を持つすべてのロールの値を返します。

    外部ステージ:

    USAGE

    内部ステージ:

    READ

  • 内部ステージからダウンロードしたファイルが破損している場合は、ステージに ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE') が設定されていることをステージの作成者で確認してください。

関数のクエリ

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

画像ファイルのメタデータのロードおよび事前署名付き URL の取得

クラウドストレージサービスの API を使用して、画像から抽出されたメタデータを含む JSON ドキュメントのリストを生成します。

たとえば、1つのビットマップイメージファイルの JSON ドキュメントが次のようになっているとします。

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

画像メタデータのテーブルを作成し、メタデータをテーブルにロードして、画像の事前署名済み URL を生成します。

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