Snowflake

Snowflake Document AIで非構造化文書からデータを抽出する方法

2026-03-26
更新: 2026-03-27
NicheeLab編集部
目次
  1. Document AIのアーキテクチャ
  2. Document AIモデルの作成
  3. ファイル参照関数
  4. PREDICT関数による推論
  5. バッチ処理パイプライン
  6. 明細行(配列データ)の抽出
  7. 信頼度スコアの活用
  8. 必要な権限
  9. ベストプラクティス
  10. 問題で確認
  11. よくある質問

Document AIは、Snowflake上でPDFや画像などの非構造化ドキュメントから テキスト・数値・日付などの構造化データを抽出するマネージド機能です。 OCR(光学文字認識)とNER(固有表現認識)を組み合わせた事前学習済みモデルを使い、 請求書・領収書・契約書・医療記録などから必要なフィールドをSQLで取得できます。

Document AIのアーキテクチャ

ドキュメント(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モデルの作成

-- 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_URLSnowflake内部処理(Document AI, UDFなど)セッション内
BUILD_STAGE_FILE_URLSnowflake内部参照ステージへの権限がある限り有効
GET_PRESIGNED_URL外部アプリケーションへの一時共有指定した有効期限まで

PREDICT関数による推論

-- 単一ドキュメントの推論
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権限

ベストプラクティス

  • サンプルドキュメントで精度を検証してからバッチ化:5〜10件のテスト推論で抽出精度とコストを確認し、本番バッチに進む
  • 信頼度閾値を設定し人間レビューフローを構築:0.85以上を自動承認、それ以下をレビューキューに振り分けるなど
  • Directory Tables + Streamで到着駆動処理:新着ドキュメントを自動検知してPREDICT→抽出結果テーブルに格納するパイプラインを構築する
  • 抽出結果はVARIANTのまま保存し後から構造化:モデル更新で抽出フィールドが変わる可能性があるため、生のVARIANTも保持しておく

問題で確認

Cortex AI

問題 1

SnowflakeのDocument AIを使ってInternal Stage上のPDFファイルからデータを抽出したい。PREDICT関数にファイルを渡す際に使用する関数として最も適切なものはどれか。

  1. GET_PRESIGNED_URL(@stage, path, 3600)
  2. BUILD_SCOPED_FILE_URL(@stage, path)
  3. STAGE_FILE_URL(@stage, path)
  4. READ_FILE(@stage, path)

正解: 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で課金されます。コストはドキュメントのページ数と複雑さに依存し、処理するページ数に比例して増加します。大量のドキュメントを処理する場合は、まず少数のサンプルで精度とコストを検証し、問題がなければバッチ処理に拡大する段階的アプローチが推奨されます。

クラウドの基礎から読む

資格の話をしない、クラウドそのものの入門 8 章があります。登録なしで全部読めます。

第 0 部・無料

クラウド自体がはじめての方へ

サーバー・ネットワーク・データベースの前提知識なしで読める 8 章。登録不要・無料。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。SnowparkとDat...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate(SOL-C01)完全解説|現在は予約不可・試験内容と次の受験先

SnowPro Associate: Platform(SOL-C01)は2026年10月時点でSnowflakeの公式...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.