概要
- AppFlowのパーティションと集約の設定についてまとめる。
情報
- 今回説明で使用するAppFlowの送信先はS3として任意のバケットとフォルダを選択済み。
- 出力はCSVとしてマッピングも設定済み。
前提
- 説明の都合上AppFlowの送信先S3バケット名は「Fooバケット」とし、フロー名は「foo-test」とする。
ご注意
- 日時系情報はUTCで変更できないので注意する
パーティションの設定と集約の設定
- パーティションの設定は下記の三種類である。
- 日時
- 実行ID
- 送信先フィールド
- 集約の設定は下記の三種類である。
- 集約しない
- 全てのレコードを各パーティションの1ファイルに集約する
- レコードを各パーティションの複数ファイルに集約する
- 上記の設定の組み合わせによって出力されるCSVの位置やファイル名が異なる。
パーティションはチェックしない 集約「集約しない」の場合 パーティション「実行ID」をチェックしない 集約「すべてのレコードを各パーティションの 1 ファイルに集約する」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成し、実行ID名のCSVファイルを出力する。
-
なので今回の場合下記のようにCSVファイルが生成されてゆく。(特に削除したりしなければ、フローが実行されるたびにどんどんfoo-testフォルダ内にCSVが出力されてゆく)
Fooバケット └foo-test └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487(CSVファイル) └0-5f15a3e9ded929ab75943c1e886684a1-0063CF4D7BF0A69AD7(CSVファイル) ・ ・ ・
パーティション「実行ID」と「日時(オプションは毎年)」 集約「集約しない」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成、更にその中にYYYYのフォルダを作成、更にその中に実行ID名のフォルダを作成し、その中にCSVファイルを出力する。
-
今回の場合下記のようになる。(フローが実行されるたびにYYYYフォルダ直下の実行IDフォルダが作成されてゆく。)
Fooバケット └foo-test └YYYY └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437 └0-(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487 └0-(CSVファイル) ・ ・ ・
パーティション「実行ID」と「日時(オプションは毎月)」 集約「集約しない」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成、更にその中にYYYYのフォルダを作成、更にその中にMMのフォルダを作成、更にその中に実行ID名のフォルダを作成し、その中にCSVファイルを出力する。
-
今回の場合下記のようになる。(フローが実行されるたびにMMフォルダ直下の実行IDフォルダが作成されてゆく。)
Fooバケット └foo-test └YYYY └MM └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437 └0-(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487 └0-(CSVファイル) ・ ・ ・
パーティション「実行ID」と「日時(オプションは毎日)」 集約「集約しない」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成、更にその中にYYYYのフォルダを作成、更にその中にMMのフォルダを作成、更にその中にDDのフォルダを作成、更にその中に実行ID名のフォルダを作成し、その中にCSVファイルを出力する。
-
今回の場合下記のようになる。(フローが実行されるたびにDDフォルダ直下の実行IDフォルダが作成されてゆく。)
Fooバケット └foo-test └YYYY └MM └DD └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437 └0-(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487 └0-(CSVファイル) ・ ・ ・
パーティション「実行ID」と「日時(オプションは毎時)」 集約「集約しない」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成、更にその中にYYYYのフォルダを作成、更にその中にMMのフォルダを作成、更にその中にDDのフォルダを作成、更にその中にHHのフォルダを作成、更にその中に実行ID名のフォルダを作成し、その中にCSVファイルを出力する。
-
今回の場合下記のようになる。(フローが実行されるたびにHHフォルダ直下の実行IDフォルダが作成されてゆく。)
Fooバケット └foo-test └YYYY └MM └DD └HH └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437 └0-(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487 └0-(CSVファイル) ・ ・ ・
パーティション「実行ID」と「日時(オプションは分)」 集約「集約しない」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成、更にその中にYYYYのフォルダを作成、更にその中にMMのフォルダを作成、更にその中にDDのフォルダを作成、更にその中にHHのフォルダを作成、更にその中にMMのフォルダを作成、更にその中に実行ID名のフォルダを作成し、その中にCSVファイルを出力する。
-
今回の場合下記のようになる。(フローが実行されるたびにMMフォルダ直下の実行IDフォルダが作成されてゆく。)
Fooバケット └foo-test └YYYY └MM └DD └HH └MM └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437 └0-(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487 └0-(CSVファイル) ・ ・ ・
パーティション「実行ID」と「送信先フィールド(フィールドは任意のものを指定)」 集約「集約しない」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成、更にその中にフローのスキーマバージョン名のフォルダを作成、更にその中に、更にその中に実行ID名のフォルダを作成、更にその中にフィールドと値名のフォルダを作成、その中にCSVファイルを出力する。
-
今回の場合下記のようになる。ちなみにフィールドは複数設定可能である。
Fooバケット └foo-test └schemaVersion_スキーマバージョン数 └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437 └フィールド名=値 └0-(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487 └フィールド名=値 └0-(CSVファイル) ・ ・ ・
パーティション「実行ID」 集約「すべてのレコードを各パーティションの 1 ファイルに集約する」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成し、その中にフローのスキーマバージョン名のフォルダを作成、その中に実行ID名のCSVファイルを出力する。
-
なので今回の場合下記のようにCSVファイルが生成されてゆく。複数回フローが実行された場合、スキーマバージョン名フォルダーにCSVが都度生成される。
Fooバケット └foo-test └schemaVersion_スキーマバージョン数 └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487(CSVファイル) └0-5f15a3e9ded929ab75943c1e886684a1-0063CF4D7BF0A69AD7(CSVファイル) ・ ・ ・
パーティション「実行ID」 集約「レコードを各パーティションの複数のファイルに集約する」の場合
-
この場合、出力先のフォルダ直下にフロー名のフォルダーを作成し、その中にフローのスキーマバージョン名のフォルダを作成、その中に実行ID名のCSVファイルを出力する。
-
一見「すべてのレコードを各パーティションの 1 ファイルに集約する」と「レコードを各パーティションの複数のファイルに集約する」で同じ様に見えるが、これはフロー実行時の送信元の状態によって異なる気がする。(複数のデータ変更があった場合、1CSVに1レコードだけしか出力せず複数ファイル設置するか、1CSVファイルに複数レコード分の情報を出力するのか)
-
なので今回の場合下記のようにCSVファイルが生成されてゆく。複数回フローが実行された場合、スキーマバージョン名フォルダーにCSVが都度生成される。
Fooバケット └foo-test └schemaVersion_スキーマバージョン数 └0-985d7648653e3bf185091d78a018a61d-0063CF51FCBF1CC437(CSVファイル) └0-2fb6d65d74ff5b51410c9778a7c7fce9-0063CF4D863AD02487(CSVファイル) └0-5f15a3e9ded929ab75943c1e886684a1-0063CF4D7BF0A69AD7(CSVファイル) ・ ・ ・
まとめ
- パーティションは出力を行うディレクトリの情報を設定する。
- 集約は出力するファイルの出力方法を設定する。
- 「AppFlow出力ファイルを使ってlambdaでなにかする。終わったらAppFlowのファイルを削除する。」とかならパーティション「実行ID」、集約「集約しない」で十分かも。