Snowflakeの料金は従量課金制で、一般にストレージ・コンピュート・クラウドサービスの3カテゴリに分かれます。ではデータ転送料金はどこに含まれるのでしょうか。データ転送コストはクラウドサービスの一部である「Serverless」に分類されます。詳細を見ていきましょう。
イングレスとエグレス:課金対象はどちら?
データのイングレス、つまりSnowflakeへのデータ取り込みは常に無料です。もちろん使用したコンピュートやストレージには課金されますが、たとえクロスリージョンであってもSnowflakeへの取り込みにデータ転送料金がかかることはありません。ただし、クラウドプロバイダー側でリージョン間のデータ移動に料金が発生する可能性はある点だけ注意が必要です。Snowflake自体がイングレスに課金することは一切ありません。
課金が発生するのはデータのエグレスです。 Snowflakeは、Snowflakeアカウントから同一クラウド上の別リージョン、あるいは別のクラウドプラットフォームへデータを転送する際、バイト単位で料金を請求します。一方、同一リージョン内の転送は無料です。正確な料金はSnowflake Pricing Guideに記載されています。イメージを掴んでいただけるよう、抜粋したスクリーンショットを掲載します。
どの操作でデータ転送コストが発生するのか
データ転送コストは、Snowflakeアカウントから別のリージョンやクラウドプラットフォームへデータを移動するときに発生します。具体的に料金が発生する操作は次のとおりです。
データのアンロード: COPY INTO <location>コマンドでSnowflakeから別リージョンや別クラウド上の外部ストレージ(Amazon S3、Google Cloud Storage、Microsoft Azure)へデータをアンロードすると、転送料金が発生します。
データベースレプリケーション: ディザスタリカバリやデータ共有を目的に、リージョンやクラウドをまたいでデータベースをレプリケートすると転送コストが発生します。初回レプリケーションだけでなく、その後の同期処理でもリージョン間のデータ転送が行われます。
クロスクラウドAuto-Fulfillment: Auto-Fulfillment機能を使ってSnowflake Marketplace経由で他のクラウドリージョンのコンシューマーとデータリスティングを共有する場合、データ転送コストが発生します。
外部関数: SnowflakeアカウントからAWS、Microsoft Azure、Google Cloudの各サービスへデータを送る外部関数を呼び出すと、エグレス料金が発生します。
クロスリージョンのIceberg書き込み: SnowflakeをIcebergテーブルのカタログとして使う場合、ストレージの保存先が別リージョンや別クラウドにあると、新規データの書き込み時に転送コストが発生します。
重要な例外: Snowflakeクライアントやドライバー経由でのクエリ結果の取得には、リージョンやクラウドをまたいだ場合でもデータエグレス料金は発生しません。これは通常のクエリ運用において見逃せないコスト面のメリットです。
データ転送コストはいくらかかるのか
データ転送料金は、Snowflakeアカウントが稼働するクラウドプロバイダーとリージョンによって大きく異なります。詳細はCredit Consumption Tableに記載されていますが、おおまかな目安は以下のとおりです。
同一リージョン内の転送: 無料(課金なし)
クロスリージョン(同一クラウド): 米国リージョンの1TBあたり20ドルから、アジア太平洋の一部リージョンでは1TBあたり140ドルまで幅があります。
クロスクラウドまたはインターネット: 送信元と送信先により、概ね1TBあたり90〜155ドルの範囲です。
たとえばAWS US East(バージニア北部)からインターネットへの転送は1TBあたり約90ドルですが、同じ操作をGoogle Cloud(US East 4)から行うと1TBあたり120〜190ドルになることもあります。
Egress Cost Optimizer:データ共有を一変させる新機能
2025年4月、SnowflakeはEgress Cost Optimizer(ECO)をリリースしました。複数リージョンにまたがってデータを共有するプロバイダーにとって、転送コストを大幅に削減できる機能です。
ECOはインテリジェントなアルゴリズムを用いて、初回のエグレス後にデータをSnowflake管理のストレージへキャッシュし、追加リージョンへのレプリケーションをエグレス料金ゼロで実現します。従来のクロスリージョンレプリケーションと比較して、最大96%のコスト削減が見込めます。
ECOの使い方:
まず、ORGADMINユーザーがProvider Studioから組織レベルで認可する必要があります。認可後は組織内のすべてのアカウントで自動的に有効化されますが、個別アカウントの設定でオプトアウトも可能です。有効化後は、ECOがインテリジェントルーティングによって「キャッシュを使ったほうがコスト削減になるか」を自動判定します。たとえば同一クラウドプロバイダー内の1〜2リージョンへレプリケートするだけなら、すでにコストが最適化されているためキャッシュは使われません。
料金体系:
- クロスクラウドAuto-Fulfillmentでのみ利用可能(手動レプリケーションは対象外)
- キャッシュデータは1TB-monthあたり16.896ドル
- キャッシュが実際に使われた日数のみ課金
- ECOが「キャッシュ利用でコスト削減にならない」と判断した場合は課金なし
クラウドプロバイダー側の注意点
見落とされがちですが、Snowflakeはイングレスに課金しない一方で、データの送信元となるクラウドストレージプロバイダー側がSnowflakeへの転送に対してエグレス料金を請求するケースがあります。Snowflakeアカウントへデータを移す際は、利用中のクラウドプロバイダー(Amazon S3、Google Cloud Storage、Microsoft Azure)のエグレス料金を必ず事前に確認してください。
データ転送コストのモニタリングと最適化
データ転送費用を把握するために、Snowflakeはいくつかのツールを用意しています。
Snowsightダッシュボード
Snowsightでは、指定した期間のデータ転送量とコストをすぐに確認できます。Admin → Cost Management → Consumptionに移動し、Usage Type = Data Transferでフィルタリングしてください。
アカウントレベルのデータ転送履歴をクエリする
ACCOUNT_USAGEスキーマのDATA_TRANSFER_HISTORYビューを使えば、過去365日分のアカウントの詳細な転送データをクエリできます。
-- 過去30日間のデータ転送履歴を表示
SELECT
DATE_TRUNC('day', START_TIME) AS transfer_date,
SOURCE_CLOUD,
SOURCE_REGION,
TARGET_CLOUD,
TARGET_REGION,
TRANSFER_TYPE,
SUM(BYTES_TRANSFERRED) / POWER(1024, 4) AS tb_transferred
FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_TRANSFER_HISTORY
WHERE START_TIME >= DATEADD(day, -30, CURRENT_TIMESTAMP())
GROUP BY 1, 2, 3, 4, 5, 6
ORDER BY transfer_date DESC, tb_transferred DESC;
組織レベルのデータ転送コストをクエリする
組織全体を可視化するには、ORGANIZATION_USAGEスキーマのDATA_TRANSFER_DAILY_HISTORYビューを使用します。
SELECT
USAGE_DATE,
ACCOUNT_NAME,
SERVICE_TYPE,
REGION,
TB_TRANSFERED,
ACCOUNT_LOCATOR
FROM SNOWFLAKE.ORGANIZATION_USAGE.DATA_TRANSFER_DAILY_HISTORY
WHERE USAGE_DATE >= DATEADD(day, -30, CURRENT_DATE())
ORDER BY USAGE_DATE DESC, TB_TRANSFERED DESC;
ベストプラクティス
- 転送はできる限り同一リージョン内で完結させる。これだけで転送料金そのものを回避できます。
- レプリケーションではなくデータ共有を活用し、転送コストを回避する — Snowflakeのネイティブなデータ共有機能を使えば、データを物理的にコピーすることなく他のSnowflakeアカウントと共有できます。データ共有ではコンシューマーがプロバイダーのストレージから直接データをクエリするため(データ移動が発生しない)、リージョンをまたいでも転送料金はかかりません。一方レプリケーションはデータベースの完全なコピーを作成するため、リージョンをまたぐと転送コストが発生します。
- 複数リージョンにレプリケートしている場合はEgress Cost Optimizerを有効化する。最大90%のコスト削減が見込めます。
- 大規模なデータアンロードは慎重にスケジュールし、本当にすべてのデータを動かす必要があるかを見極めましょう。
- Snowflakeのコストモニタリングツールを使い、転送パターンを定期的に確認する。
- アンロード前にデータを圧縮することで、転送量そのものを削減できます。
データ転送にまつわる誤解
「BIツールやPythonアプリケーションでデータを表示するとデータ転送料金が発生する」と思い込んでいる方に何度かお会いしてきましたが、これは事実ではありません。通常のSELECTクエリであれば、Snowflakeのエコシステム外のツールを使っていても、データ転送料金が発生することはありません。
まとめ
データ転送コストの理解は、Snowflake全体の支出を管理するうえで欠かせません。ストレージやコンピュートに注目が集まりがちですが、複数のリージョンやクラウドをまたいで運用している組織、あるいはSnowflakeから他のデータ活用アプリケーションへデータを動かしている組織では、転送料金はあっという間に膨らみます。
JeffはData & Analyticsコンサルタントとして、インサイトの自動化とデータによる業務プロセス制御に15年以上携わってきました。技術面ではSnowflake + dbt + Tableauを得意とし、業務領域では公益事業、臨床試験、出版、CPG、製造業での経験があります。お気軽にご連絡ください:[email protected]