非構造化データ型¶
Snowflakeは3種類のデータをサポートしています。
構造化データ (CSV ファイルなど)は、厳密な表形式のスキーマに従っています。構造化データは SQL テーブルに簡単に読み込めます。
半構造化データ (JSON、XML ファイルなど)には柔軟なスキーマがあります。Snowflakeは特別な関数を使用して半構造化データのフィールドにアクセスできますが、構造化データのように簡単にクエリできません。半構造化データは、VARIANT 列を使用して SQL テーブルに読み込むことができます。
非構造化データ (ドキュメント、画像、音声ファイルなど)には固有のスキーマがありません。非構造化データにも内部構造があるかもしれません(例えば、PNG 画像ファイルは文書化された形式に従わなければなりません)が、そのような技術的な詳細は一般的にファイル内の情報とは関係ありません。
Snowflakeには、 AI COMPLETE 関数 や Document AI など、非構造化ファイルのデータを扱う方法が用意されています。
Snowflakeで非構造化データを使用するには、まず内部または外部ステージに格納する必要があります。非構造化データを処理するSnowflake関数は、そこからデータを読み込みます。関数によって、以下の1つ以上の方法でファイルを指定します。
ステージ名とファイルへの相対パスを、それを使用する関数への2つの別々の引数として渡します。
TO_FILE または TRY_TO_FILE 関数を使用して作成された FILE オブジェクトを渡します。
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 関数¶
サブカテゴリ |
関数 |
---|---|
コンストラクター |
|
アクセサー |
|
ユーティリティ関数 |
|
使用上の注意¶
FILE 値が基になるステージングされたファイルと矛盾することがあります。基になるファイルを変更または削除しても、FILE 値は更新されません。逆に、FILE 値がテーブルから削除されても、基になるファイルに影響はありません。
基になるファイルに対する許可は、FILE を作成する際に指定された URL のタイプによって管理されます。ステージファイル URLs、ステージ/パスの組み合わせは、関連するステージにアクセスできる呼び出し元に対して永続的なアクセス許可を与えます。スコープされた URLs は、基になるファイルへのユーザーベースのアクセスを24時間の期間、仮に与えます。
SQL 経由でSnowflakeで非構造化データを使用する方法¶
FILE 列を持つテーブルを作成します。
CREATE TABLE images_table(img FILE);
画像ファイルを含む外部ステージ my_images
からテーブルにデータを読み込みます。 mpy_images
は内部ステージでも外部ステージでもかまいません。
注釈
このプロセスには、ステージ上にディレクトリテーブルのサポートが必要です。必要に応じて、以下の SQL を使用して有効にします。
ALTER STAGE my_images DIRECTORY=(ENABLE=true);
Snowflakeテーブルにデータを読み込みます。
INSERT INTO images_table
SELECT TO_FILE(file_url) FROM DIRECTORY(@my_images);
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';
既知の制限¶
FILE データ型は現在以下で使用できません。
CLUSTER BY、GROUP BY、および ORDER BY 句
ハイブリッドテーブル、Icebergテーブル、外部テーブル
SnowScript
セキュアビュー
バインド
検索最適化
Snowpark Python以外のクライアントとコネクタ