Document AIは、Snowflake上でPDFや画像などの非構造化ドキュメントから テキスト・数値・日付などの構造化データを抽出するマネージド機能です。 OCR(光学文字認識)とNER(固有表現認識)を組み合わせた事前学習済みモデルを使い、 請求書・領収書・契約書・医療記録などから必要なフィールドをSQLで取得できます。
ドキュメント(PDF/画像)
→ Stage(Internal or External)に格納
→ BUILD_SCOPED_FILE_URL() でファイル参照
→ Document AI モデル(PREDICT関数で推論)
→ VARIANT型の抽出結果
→ FLATTEN + SELECTで構造化テーブルに格納Document AIの処理はSnowflakeのServerless Computeで実行されるため、 ユーザーがWarehouseをプロビジョニングする必要はありません。 抽出結果はVARIANT型で返され、JSONパス表記で個別フィールドにアクセスできます。
-- Document AIモデルの作成(Snowsight UIで作成するのが推奨)
-- SQLでの作成例
CREATE OR REPLACE SNOWFLAKE.ML.DOCUMENT_INTELLIGENCE
invoice_extractor
FROM @doc_stage
USING (
SELECT
BUILD_SCOPED_FILE_URL(@doc_stage, relative_path) AS file_url
FROM DIRECTORY(@doc_stage)
WHERE relative_path LIKE '%.pdf'
LIMIT 10
);Snowsight UIでは、アップロードしたサンプルドキュメントに対して 抽出したいフィールド(Value)を視覚的にアノテーションし、 モデルのファインチューニングを行えます。
| フィールド名 | 抽出対象 | データ型 |
|---|---|---|
| invoice_number | 請求書番号 | VARCHAR |
| invoice_date | 請求日 | DATE |
| total_amount | 合計金額 | NUMBER |
| vendor_name | 取引先名 | VARCHAR |
| line_items | 明細行(複数) | ARRAY |
-- BUILD_SCOPED_FILE_URL: セッションスコープの一時URL
-- Document AIのPREDICT関数への入力として最も一般的
SELECT BUILD_SCOPED_FILE_URL(
@invoice_stage,
'invoices/2026/INV-001.pdf'
) AS scoped_url;
-- BUILD_STAGE_FILE_URL: ステージ参照URL
SELECT BUILD_STAGE_FILE_URL(
@invoice_stage,
'invoices/2026/INV-001.pdf'
) AS stage_url;
-- GET_PRESIGNED_URL: 署名付きURL(外部共有用)
SELECT GET_PRESIGNED_URL(
@invoice_stage,
'invoices/2026/INV-001.pdf',
3600 -- 有効期限: 秒
) AS presigned_url;| 関数 | 用途 | 有効範囲 |
|---|---|---|
| BUILD_SCOPED_FILE_URL | Snowflake内部処理(Document AI, UDFなど) | セッション内 |
| BUILD_STAGE_FILE_URL | Snowflake内部参照 | ステージへの権限がある限り有効 |
| GET_PRESIGNED_URL | 外部アプリケーションへの一時共有 | 指定した有効期限まで |
-- 単一ドキュメントの推論
SELECT invoice_extractor!PREDICT(
BUILD_SCOPED_FILE_URL(@invoice_stage, 'invoices/INV-001.pdf')
) AS result;
-- 結果から個別フィールドを抽出
SELECT
result:invoice_number::VARCHAR AS invoice_number,
result:invoice_date::DATE AS invoice_date,
result:total_amount::NUMBER(12,2) AS total_amount,
result:vendor_name::VARCHAR AS vendor_name,
result:__confidence::FLOAT AS overall_confidence
FROM (
SELECT invoice_extractor!PREDICT(
BUILD_SCOPED_FILE_URL(@invoice_stage, 'invoices/INV-001.pdf')
) AS result
);-- Directory Tablesと組み合わせてバッチ推論
INSERT INTO extracted_invoices (file_path, invoice_number, invoice_date, total_amount, vendor_name, confidence, extracted_at)
SELECT
d.relative_path,
r.result:invoice_number::VARCHAR,
r.result:invoice_date::DATE,
r.result:total_amount::NUMBER(12,2),
r.result:vendor_name::VARCHAR,
r.result:__confidence::FLOAT,
CURRENT_TIMESTAMP()
FROM DIRECTORY(@invoice_stage) d,
LATERAL (
SELECT invoice_extractor!PREDICT(
BUILD_SCOPED_FILE_URL(@invoice_stage, d.relative_path)
) AS result
) r
WHERE d.relative_path LIKE '%.pdf'
AND d.relative_path NOT IN (
SELECT file_path FROM extracted_invoices
);-- FLATTEN で明細行を展開
SELECT
result:invoice_number::VARCHAR AS invoice_number,
item.value:description::VARCHAR AS item_description,
item.value:quantity::INT AS quantity,
item.value:unit_price::NUMBER(10,2) AS unit_price,
item.value:amount::NUMBER(12,2) AS line_amount
FROM (
SELECT invoice_extractor!PREDICT(
BUILD_SCOPED_FILE_URL(@invoice_stage, 'invoices/INV-001.pdf')
) AS result
),
LATERAL FLATTEN(input => result:line_items) AS item;各抽出フィールドには信頼度スコア(0.0〜1.0)が付与されます。 信頼度が低いフィールドは人間によるレビューが必要なため、 閾値を設けてレビューキューに振り分けるのが実務上のベストプラクティスです。
-- 信頼度の低い抽出結果をレビューキューに投入
INSERT INTO review_queue (file_path, field_name, extracted_value, confidence)
SELECT
relative_path,
'total_amount',
result:total_amount::VARCHAR,
result:total_amount_confidence::FLOAT
FROM extracted_results
WHERE result:total_amount_confidence::FLOAT < 0.85;| 操作 | 必要な権限 |
|---|---|
| モデルの作成 | データベースに対するCREATE SNOWFLAKE.ML.DOCUMENT_INTELLIGENCE権限 |
| PREDICT関数の実行 | モデルに対するUSAGE権限 + ステージに対するREAD権限 |
| BUILD_SCOPED_FILE_URL | ステージに対するREAD権限 |
Cortex AI
問題 1
SnowflakeのDocument AIを使ってInternal Stage上のPDFファイルからデータを抽出したい。PREDICT関数にファイルを渡す際に使用する関数として最も適切なものはどれか。
正解: B
Document AIのPREDICT関数にファイルを渡す際はBUILD_SCOPED_FILE_URL()が推奨されます。この関数はセッションスコープの一時URLを生成し、Snowflake内部での処理に最適化されています。GET_PRESIGNED_URLは外部共有用であり、Document AIへの入力には適しません。STAGE_FILE_URLやREAD_FILEという関数は存在しません(BUILD_STAGE_FILE_URLは存在しますが、PREDICT関数の入力にはBUILD_SCOPED_FILE_URLが推奨されます)。
Document AIで処理できるファイル形式は何ですか?
Document AIはPDF、PNG、JPEG、TIFF形式のドキュメントを処理できます。スキャンされた紙文書の画像やデジタルPDFの両方に対応しています。ファイルはSnowflakeのInternal StageまたはExternal Stageに格納し、BUILD_SCOPED_FILE_URL()やBUILD_STAGE_FILE_URL()で参照します。1ファイルあたりのサイズ上限やページ数上限はリリースノートで確認してください。
Document AIのモデルをカスタムトレーニングする必要がありますか?
基本的な項目(日付・金額・住所・名前など)は事前学習済みモデルで抽出可能です。業界固有のフォーマットや独自の帳票レイアウトに対応する場合はSnowsight上でアノテーション付きサンプルを提供してモデルをファインチューニングできます。5〜10枚のサンプルドキュメントでアノテーションを行うだけで精度が大幅に向上します。
Document AIの処理コストはどのように計算されますか?
Document AIはServerless Creditで課金されます。コストはドキュメントのページ数と複雑さに依存し、処理するページ数に比例して増加します。大量のドキュメントを処理する場合は、まず少数のサンプルで精度とコストを検証し、問題がなければバッチ処理に拡大する段階的アプローチが推奨されます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...