ビッグデータを取り込む際の考慮事項

■ はじめに

ビッグデータを取り込む依頼を受けたのだが、
色々と想定外のことが起きて、あーすれば良かったなっとか
考慮する事項を纏めておけば見積もりに役立つかなっと思ったので
反省点や自戒の念を込めてメモしておく。

【0】考慮事項

【1】1回にどの位の容量くるのか?
【2】どの位の頻度でくるのか?
【3】過去データを取り込む必要があるのか?
【4】データはどこからきて、どこに取り込むのか?
 補足: データ転送量のコスト
【5】その他
 1)Unloadするか?

【1】1回にどの位の容量くるのか?

* 1回の取り込みでどの位の容量(平均、過去の最大)くるのかを
 事前に知っておいた方がいい
 => どの位の時間が掛かるかを事前知ることができる
 => AWS Glueであれば、Timeout時間やWorker数など
  Snowflakeであれば、サイズアップやデータ分割などの
  チューニング(※)が必要・不要の判断もできる

※
Snowflakeのチューニングについての詳細は、
以下の関連記事を参照のこと

Snowflake ~ データロードのパフォーマンス ~
https://dk521123.hatenablog.com/entry/2022/12/07/111847

【2】どの位の頻度でくるのか?

* 毎日?毎週?毎月?
 => 例えば、毎日で1回の取り込み処理時間が24時間超える場合は
  破綻していることを意味するので、チューニングが必要だと分かる

【3】過去データを取り込む必要があるのか?

* それがどの期間、どの位あるのかを事前に知っておいた方がいい
 => あまりに大量の場合、その過去データを全て取り込む必要があるのかを
  調整可能かどうかも含めて、事前に

【4】データはどこからきて、どこに取り込むのか?

* AWS や Snowflake の場合、
 別リージョン(e.g. US West (Northern California) )から
 別リージョン(e.g. Asia Pacific (Tokyo) )に取り込む際に
 データ転送料金が、データ提供元に掛かる
 => 毎回や過去分でどれだけのコストが掛かるのか?
 (データ提供元はそれを事前に知っているのか?)

補足: データ転送量のコスト

AWS

* 特に、データ(OUT)は、料金が掛かるので注意。
* 同一リージョン間でも多少掛かる

https://aws.amazon.com/jp/ec2/pricing/on-demand/?nc1=h_ls

Snowflake
https://docs.snowflake.com/ja/user-guide/cost-understanding-overall.html

より抜粋
~~~~~~~~~~~~~~~~
データ転送リソース

Snowflakeは、データをアカウントに取り込むための
データイングレス料金を請求しませんが、
データエグレスには料金を請求します。
~~~~~~~~~~~~~~~~
 => AWS とほぼ同じ料金請求

※イングレス(ingress)/ エグレス(egress)とは?
 * ingress:内部へ流れ出る通信
 * egress:外部へ流れ出る通信

【5】その他

1)Unloadするか?

* Snowflake の Unload の場合、1ファイル 5GB の制約があるので注意

https://docs.snowflake.com/ja/user-guide/data-unload-considerations.html#unloading-to-a-single-file

より抜粋
~~~~~~
各ファイルの最大サイズは、
 MAX_FILE_SIZE コピーオプションを使用して設定されます。
デフォルト値は 16777216 (16 MB)ですが、
より大きなファイルに対応するために拡大することができます。
Amazon S3、Google Cloud Storage、またはMicrosoft Azureステージの場合、
サポートされる最大ファイルサイズは5 GB です。
~~~~~~
もし、「1ファイルでUnloadしてほしい」との要望があった場合、
最大ファイルサイズは5 GBなので注意。
また、この要望を実現する場合、オプションも弄る必要がある。

関連記事

Snowflake ~ データロードのパフォーマンス ~
https://dk521123.hatenablog.com/entry/2022/12/07/111847