非構造化データ型

Snowflakeは3種類のデータをサポートしています。

  • 構造化データ (CSV ファイルなど)は、厳密な表形式のスキーマに従っています。構造化データは SQL テーブルに簡単に読み込めます。

  • 半構造化データ (JSON、XML ファイルなど)には柔軟なスキーマがあります。Snowflakeは特別な関数を使用して半構造化データのフィールドにアクセスできますが、構造化データのように簡単にクエリできません。半構造化データは、VARIANT 列を使用して SQL テーブルに読み込むことができます。

  • 非構造化データ (ドキュメント、画像、音声ファイルなど)には固有のスキーマがありません。非構造化データにも内部構造があるかもしれません(例えば、PNG 画像ファイルは文書化された形式に従わなければなりません)が、そのような技術的な詳細は一般的にファイル内の情報とは関係ありません。

Snowflakeには、 AI COMPLETE 関数Document AI など、非構造化ファイルのデータを扱う方法が用意されています。

Snowflakeで非構造化データを使用するには、まず内部または外部ステージに格納する必要があります。非構造化データを処理するSnowflake関数は、そこからデータを読み込みます。関数によって、以下の1つ以上の方法でファイルを指定します。

FILE データ型

Snowflakeは非構造化データ用に FILE データ型を提供します。FILE 値は、内部または外部ステージに格納されたファイルを表しますが、ファイルのデータは格納されず、ファイルへの参照のみが格納されます。以下のメタデータが含まれています。

  • STAGE: ファイルが存在するステージの名前。

  • RELATIVE_PATH: ステージングされたファイルの相対パス。

  • STAGE_FILE_URL: ステージングされたファイル URL。

  • SCOPED_FILE_URL: スコープされたファイル URL。

  • CONTENT_TYPE: ファイルの MIME 型。

  • SIZE: バイト単位のファイルサイズ。

  • ETAG: ファイルコンテンツの一意なハッシュ。

  • LAST_MODIFIED: ファイルが最後に更新されたタイムスタンプ。

これらのフィールドはすべて必須ではありません。FILE は、CONTENT_TYPE、SIZE、ETAG、LAST_MODIFIED のフィールドと、STAGE、RELATIVE_PATH、STAGE_FILE_URL、または SCOPED_FILE_URL で指定されたファイルの場所を持っていなければなりません。

TO_FILE または TRY_TO_FILE 関数に、スコープされたファイル URL、ステージとパス、またはメタデータオブジェクトを渡すことで、ファイルを作成できます。

FILE 関数

サブカテゴリ

関数

コンストラクター

TO_FILE

TRY_TO_FILE

アクセサー

FL_GET_CONTENT_TYPE

FL_GET_ETAG

FL_GET_FILE_TYPE

FL_GET_LAST_MODIFIED

FL_GET_RELATIVE_PATH

FL_GET_SCOPED_FILE_URL

FL_GET_SIZE

FL_GET_STAGE

FL_GET_STAGE_FILE_URL

ユーティリティ関数

FL_IS_AUDIO

FL_IS_COMPRESSED

FL_IS_DOCUMENT

FL_IS_IMAGE

FL_IS_VIDEO

使用上の注意

  • FILE 値が基になるステージングされたファイルと矛盾することがあります。基になるファイルを変更または削除しても、FILE 値は更新されません。逆に、FILE 値がテーブルから削除されても、基になるファイルに影響はありません。

  • 基になるファイルに対する許可は、FILE を作成する際に指定された URL のタイプによって管理されます。ステージファイル URLs、ステージ/パスの組み合わせは、関連するステージにアクセスできる呼び出し元に対して永続的なアクセス許可を与えます。スコープされた URLs は、基になるファイルへのユーザーベースのアクセスを24時間の期間、仮に与えます。

SQL 経由でSnowflakeで非構造化データを使用する方法

FILE 列を持つテーブルを作成します。

CREATE TABLE images_table(img FILE);
Copy

画像ファイルを含む外部ステージ my_images からテーブルにデータを読み込みます。 mpy_images は内部ステージでも外部ステージでもかまいません。

注釈

このプロセスには、ステージ上にディレクトリテーブルのサポートが必要です。必要に応じて、以下の SQL を使用して有効にします。

ALTER STAGE my_images DIRECTORY=(ENABLE=true);
Copy

Snowflakeテーブルにデータを読み込みます。

INSERT INTO images_table
    SELECT TO_FILE(file_url) FROM DIRECTORY(@my_images);
Copy

images_table に対して SQL ステートメントを実行します。例えば、以下のクエリは、2021年1月1日から2023年1月1日の間に最後に変更されたテーブル内の各ファイルの相対パスを返します。

SELECT FL_GET_RELATIVE_PATH(f)
    FROM images_table
    WHERE FL_GET_LAST_MODIFIED(f) BETWEEN '2021-01-01' and '2023-01-01';
Copy

既知の制限

FILE データ型は現在以下で使用できません。

  • CLUSTER BY、GROUP BY、および ORDER BY 句

  • ハイブリッドテーブル、Icebergテーブル、外部テーブル

  • SnowScript

  • セキュアビュー

  • バインド

  • 検索最適化

  • Snowpark Python以外のクライアントとコネクタ