Datastageで、Snowflakeの巨大データを処理してみた #1

# この記事について
- この記事は[IBMが提供する製品に関する情報やナレッジを共有する Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ibm_data_ai_automation)の12月12日分として記載しています。


# 実施概要

- 対象データベースはSnowflake（Azure/東京）の「SNOWFLAKE_SAMPLE_DATA」を使用します
- 「SF10」「SF100」各スキーマから、「REGION」「NATION」「CUSTOMER」「ORDERS」テーブルを引っこ抜いてJOINしてフィルタリングするフローをDatastageに実行させます
- どの程度のデータ量で、どの程度の処理時間がかかるのかを測ってみます
- Datastage は、IBMCloudの東京リージョン上のOpenshiftに建てたCloud Pak for Data v5.0.3 上のコンテナソフトウェアを使用しています




# スキーマ「SF10」の場合

## 処理対象

- スキーマ「SF10」
    - 「REGION」:5行、4.0KB
    - 「NATION」:25行、4.0KB
    - 「CUSTOMER」:1.5M（150万）行、103.2MB
    - 「ORDERS」:15M（1500万）行、425.8MB


- 最もレコード件数が多いテーブルが「ORDERS」
    - 件数：1千500万行
    - データサイズ：425.8MB
![スクリーンショット 2024-12-12 15.36.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/86462384-1888-7959-99ce-55354b9d235b.png)


---

## Snowflake側の設定
- Computeはデフォルトの「COMPUTE-WH」(X-Smallサイズ)を使用
![スクリーンショット 2024-12-12 10.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/daf89799-34e4-192a-8f7a-b20e61cc1764.png)
---

## Datastage側の設定
- ランタイムは、デフォルト（Small）設定


## Snowflake の結果

- 最大で8秒足らずという感じでした
![スクリーンショット 2024-12-12 15.37.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/b5185a91-0197-9259-7f05-35a67027a6a9.png)

- ORDERSテーブルの場合のSQLはこちら
![スクリーンショット 2024-12-12 15.38.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/e343c7a7-53c3-6c8a-1716-f9e727f19663.png)


## Datastage の結果

### フロー
![スクリーンショット 2024-12-12 15.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/29f4c1af-bff2-dafb-6069-c2f257f3c010.png)


### ジョブ（時間）
![スクリーンショット 2024-12-12 15.40.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/3145a7be-b238-4aed-bdd5-efefbbfd40d5.png)


- 最大1千500万行のデータを含めて、3分足らずで処理終了しました



# スキーマ「SF100」の場合

## 処理対象

- スキーマ「SF100」
    - 「REGION」:5行、4.0KB
    - 「NATION」:25行、4.0KB
    - 「CUSTOMER」:15M（1500万）行、1.0GB
    - 「ORDERS」:150M（1億5千万）行、4.3GB


- 最もレコード件数が多いテーブルが「ORDERS」
    - 件数：1億5千万行
    - データサイズ：4.3GB
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/acaa524c-83b3-ae58-dd8d-919b3087aa43.png)
---

## Snowflake側の設定
- Computeはデフォルトの「COMPUTE-WH」(X-Smallサイズ)を使用
![スクリーンショット 2024-12-12 10.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/daf89799-34e4-192a-8f7a-b20e61cc1764.png)
---

## Datastage側の設定
- ランタイムは、デフォルト（Small）設定
![スクリーンショット 2024-12-12 15.01.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/3c875f20-6c16-1465-2d3f-22ed43bf2d14.png)


## Snowflake の結果

- 各テーブル、1秒もかからずという感じでした
    - （この前にも数回試していたため、キャッシュが効いて早かったのかもしれません）
![スクリーンショット 2024-12-12 15.13.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/96d99879-251f-bc2a-a7ce-3407d2b4968c.png)

- ORDERSテーブルの場合のSQLはこちら
![スクリーンショット 2024-12-12 15.13.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/82ad4245-df62-e3ad-23b2-64eaac3d6f33.png)


## Datastage の結果

### フロー
![スクリーンショット 2024-12-12 15.01.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/3ad4657d-fc88-91c3-a82f-1895506c3d55.png)


### ジョブ（時間）
![スクリーンショット 2024-12-12 15.04.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/6be5dd29-557b-e18f-4b2d-f7c714902704.png)

- 最大1億5千万行のデータを含めて、約25分程度で処理終了しました


# スキーマ「SF1000」の場合

## 処理対象

- スキーマ「SF10」
    - 「REGION」:5行、4.0KB
    - 「NATION」:25行、4.0KB
    - 「CUSTOMER」:150M（1億5千万）行、10.1GB
    - 「ORDERS」:1.5B（15億）行、48.6GB


- 最もレコード件数が多いテーブルが「ORDERS」
    - 件数：1.5B（15億）行
    - データサイズ：48.6GB
![スクリーンショット 2024-12-12 15.45.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/831e355d-c6e4-6acc-486a-2460f1d35381.png)


---

## 以前ためした場合の結果では
以前ためした場合にうまく言っていたので、今回もうまくいくとおもっていました

こんな感じで
![スクリーンショット 2024-12-20 10.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/f5fabc26-af04-a51c-39e8-c337e7c14cbe.png)
![スクリーンショット 2024-12-20 10.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/2a998e49-328f-dce2-b95b-e13254e94691.png)
![スクリーンショット 2024-12-20 10.23.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/397345c0-a4c9-89e8-f7d4-341ccd0df582.png)



- では、今回は上記のような結果は再現できるでしょうか？

## Snowflake側の設定

- XL サイズを使用しました
![スクリーンショット 2024-12-20 9.53.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/4d6bd65c-44c0-d812-00bd-f99ea75de0f1.png)



## Datastage側の設定

- エフェメラルストレージを1000GB程度まで拡張
- （社内の有識者からもらったアドバイス。ただしあくまでテスト用の一時的な処理であり、本番ではストレージを別途準備するように、とのこと）
```
[root@localhost ~]# oc -n ${PROJECT_CPD_INST_OPERANDS} patch pxruntime ds-px-xlarge --patch '{"spec":{"ephemeralStorageLimit": "1000Gi"}}' --type=merge
pxruntime.ds.cpd.ibm.com/ds-px-xlarge patched
[root@localhost ~]# 
```

## Snowflake の結果
- 数十秒かかっていますが、問題なく15億行のデータも含めて処理できていました
![スクリーンショット 2024-12-20 10.31.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/dfba734d-3f2d-bc5e-09cb-d6939b03593a.png)


## Datastage の結果

### フロー

![スクリーンショット 2024-12-20 10.28.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/5277d5b7-2007-aa32-da68-bc89afdf78d4.png)


### ジョブ（時間）
- 2時間くらいたったところで失敗していました。。。

![スクリーンショット 2024-12-20 10.29.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/a164e18a-f948-8e46-f4e4-892ef042951d.png)



# 結論
- このフローでは超巨大データを処理できなかったので、やり方をかえてみます！
- そのリベンジの結末は[こちら](https://qiita.com/Shumpei_Kubo/items/16d2f52e22cd82c3caa9)をご参照ください！