External Functionは、SnowflakeのSQLクエリから クラウドプロバイダーのAPI Gateway経由で外部のREST APIを呼び出すためのスカラー関数です。 バックエンドにAWS Lambda・Azure Functions・Google Cloud Functionsなどを配置し、 ML推論・データエンリッチメント・外部サービス連携をSQL内で完結させることができます。
SELECT external_func(col) FROM table
│
├─ Snowflake Virtual Warehouse
│ └─ 入力行をバッチ化してJSON形式に変換
│
├─ Cloud Services Layer
│ └─ API Integrationの認証情報でAPI Gatewayへリクエスト
│
├─ API Gateway (AWS API Gateway / Azure APIM / GCP API Gateway)
│ └─ 認証・レート制限・ルーティング
│
└─ Backend (Lambda / Azure Functions / Cloud Functions)
└─ ビジネスロジック実行 → JSON形式でレスポンスを返却-- Snowflakeが送信するリクエスト形式
{
"data": [
[0, "Hello world"],
[1, "Snowflake is great"],
[2, "External functions rock"]
]
}
-- バックエンドが返すレスポンス形式
{
"data": [
[0, "positive"],
[1, "positive"],
[2, "positive"]
]
}各行は [行番号, 値...] の配列です。行番号はSnowflakeが自動付与し、 レスポンスでも同じ行番号を返す必要があります。 バックエンドのコードではこの形式をパースし、同じ形式で結果を返却します。
# AWS Lambda関数 (Python)
import json
def lambda_handler(event, context):
body = json.loads(event['body'])
rows = body['data']
results = []
for row in rows:
row_number = row[0]
input_text = row[1]
# ビジネスロジック: テキストの文字数を返す
char_count = len(input_text) if input_text else 0
results.append([row_number, char_count])
return {
'statusCode': 200,
'body': json.dumps({'data': results})
}-- 前提: API Integrationが作成済み
-- (CREATE API INTEGRATIONの詳細はAPI Integrationsの記事を参照)
CREATE OR REPLACE EXTERNAL FUNCTION char_count(input_text VARCHAR)
RETURNS INT
API_INTEGRATION = aws_ml_api
MAX_BATCH_ROWS = 500
AS 'https://abc123.execute-api.us-east-1.amazonaws.com/prod/char-count';CREATE OR REPLACE EXTERNAL FUNCTION translate_text(text VARCHAR, target_lang VARCHAR)
RETURNS VARCHAR
API_INTEGRATION = azure_translate_api
AS 'https://my-apim.azure-api.net/translate/v1';CREATE OR REPLACE EXTERNAL FUNCTION geocode_address(address VARCHAR)
RETURNS VARIANT
API_INTEGRATION = gcp_geocode_api
AS 'https://my-gateway-abc123.uc.gateway.dev/geocode';| 構成要素 | AWS | Azure | GCP |
|---|---|---|---|
| API Gateway | Amazon API Gateway | Azure API Management | Google Cloud API Gateway |
| バックエンド | Lambda | Azure Functions | Cloud Functions |
| API_PROVIDER | aws_api_gateway | azure_api_management | google_api_gateway |
| 認証 | IAM Role + STS | Azure AD | Service Account |
-- 基本的な呼び出し
SELECT id, text, char_count(text) AS count
FROM documents
LIMIT 1000;
-- CASE式と組み合わせて条件付き呼び出し(コスト最適化)
SELECT
id,
text,
CASE
WHEN needs_translation = TRUE
THEN translate_text(text, 'ja')
ELSE text
END AS translated_text
FROM documents;
-- 結果を永続化
CREATE TABLE enriched_documents AS
SELECT
d.*,
geocode_address(d.address) AS geo_result,
geo_result:lat::FLOAT AS latitude,
geo_result:lng::FLOAT AS longitude
FROM documents d
WHERE d.address IS NOT NULL;| パラメータ | デフォルト | 説明 |
|---|---|---|
| MAX_BATCH_ROWS | 自動 | 1リクエストあたりの最大行数。バックエンドのタイムアウト制約に合わせて調整 |
| COMPRESSION | AUTO | リクエスト/レスポンスの圧縮。大量データ送受信時にNONEで無効化も可能 |
| REQUEST_TRANSLATOR / RESPONSE_TRANSLATOR | なし | カスタムのリクエスト/レスポンス変換関数を指定 |
External Functions
問題 1
External Functionのバックエンド(AWS Lambda)が処理するリクエストのJSON形式として正しいものはどれか。
正解: B
SnowflakeのExternal Functionは{"data": [[行番号, 引数1, 引数2, ...], ...]}の形式でリクエストを送信します。各行は配列で、最初の要素が行番号(0始まり)、続く要素が関数の引数です。レスポンスも同じ形式で返す必要があります。この形式はSnowflake固有のプロトコルであり、バックエンドの実装ではこの形式をパースする処理が必要です。
External Functionの呼び出しでバッチサイズを制御できますか?
MAX_BATCH_ROWSパラメータで1回のHTTPリクエストに含める最大行数を制御できます。デフォルトではSnowflakeが自動的に最適なバッチサイズを決定しますが、バックエンドのLambda/Cloud Functionsにタイムアウトやメモリの制約がある場合は、MAX_BATCH_ROWS = 100のように明示的に小さい値を指定します。バッチサイズを小さくするとHTTPリクエスト数が増えるため、レイテンシとのトレードオフがあります。
External Functionは同期呼び出しですか、非同期呼び出しですか?
デフォルトは同期呼び出しです。Snowflakeがバックエンドにリクエストを送信し、レスポンスを受信するまでクエリの実行がブロックされます。バックエンドの処理が長い場合はAPI Gatewayのタイムアウトに注意が必要です(AWS API Gatewayのデフォルトは29秒)。タイムアウトを超える処理が必要な場合はバックエンド側で非同期パターン(SQS + Lambda等)を実装し、API Gateway側でポーリングを行う設計が必要です。
External FunctionのリクエストとレスポンスのJSON形式はどうなっていますか?
リクエストは{"data": [[0, arg1, arg2], [1, arg3, arg4], ...]}の形式で、各行は[行番号, 引数1, 引数2, ...]の配列です。レスポンスも同じ形式で{"data": [[0, result1], [1, result2], ...]}のように行番号と結果値の配列を返す必要があります。バックエンドのLambda/Cloud Functionsはこの形式に準拠して入出力を処理する必要があります。
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)を徹底解説。最も簡単...