Xplenty中級編 Part2: System変数または事前定義済み変数について

今回は[システム変数](https://www.xplenty.com/docs/system-and-pre-defined-variables/)（System Variables）について紹介したいと思います。

# システム変数を変更するメリット
システム変数を使うことにより、リトライ回数や同時実行数などあらかじめ定められている上限をジョブの特性に合わせて変更することが可能です。

# システム変数はどこで設定する？
変数画面の左側で「User」から「System」に切り替えることで設定画面を切り替えることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/4a70f7e4-3f6a-e830-f0d5-fac5966fae2e.png)

# システム変数一覧
***注意点***
以下の表および説明については、2020年4月時点の情報を元に作成しています。
更新される可能性があるため、最新の情報は[こちらのヘルプ](https://www.xplenty.com/docs/system-and-pre-defined-variables/)を参照ください。

| System Variables | 説明 | デフォルト値 | 単位 | MB換算 |
|:--|:--|:--|:--|:--|
| \_MAX\_COMBINED\_SPLIT\_SIZE | 1 つのタスクで処理するデータ量をバイト単位で指定します。小さいファイルは、このサイズに達するまで結合されます。それより大きなファイルは、圧縮されていない場合、もしくはBzip2 を使用して圧縮されている場合ともに設定されたサイズに基づき分割されます。| 67,108,864 | バイト | 64 |
| \_BYTES\_PER\_REDUCER | 1レコードで読み取れる文字列サイズ（バイト単位）。それより大きいサイズのレコードは無視されます。 | 209,715,200 | バイト | 200 |
| \_LINE\_RECORD\_READER\_MAX\_LENGTH | <br/>ファイルから読み取る際の1行の最大バイト長。この値より長い行は破棄されます。 | 1,048,576 | バイト | 1 |
| \_DEFAULT\_TIMEZONE | DateTime FieldでTimezone指定がないものに対してTimezoneを自動追加する際のTimezone。デフォルトはUTC。 | +00:00' |  |  |
| \_DEFAULT\_PARALLELISM | パッケージで使用する並列リデュースタスクのデフォルト数を設定します。一般的に言って、Reducerの数はデータのサイズとディストリビューションに依存します。データが比較的大きいが偏っている場合（たとえば、フィールドで集計する場合、ほとんどのレコードは1つのグループに分類されます）、Reducerを追加してもパフォーマンスにプラスの影響はありません。デフォルト値は0です。これは、Reducerの数が\_BYTES\_PER\_REDUCERによって計算されていることを意味します。 | 0 |  |  |
| \_SHUFFLE\_INPUT\_BUFFER\_PERCENT | シャッフル中(MapperのアウトプットをReducerへ渡す処理)に最大ヒープサイズからMapアウトプットの保存に割り当てられるメモリの割合。 | 70% |  |  |
| \_COPY\_PARALLELISM | コピー前処理アクションで使用されるプロセスの数を制御します | 0 |  |  |
| \_COPY\_TARGET\_PARTITIONS | コピー前処理アクションによってデータが分割されるパーティションの数を制御します。この変数の値を0に設定すると、プロセスはファイルをマージしません。 | 100 |  |  |
| \_COPY\_TARGET\_SIZE | コピー前処理アクションによって連結されたファイルについてパーティション内の1ファイルあたりの最大サイズを制御します。 | 64 |  |  |
| \_PARQUET\_COMPRESSION | 保存時にApache Parquetを利用する場合の圧縮タイプ。使用可能な値は次のとおりです。UNCOMPRESSED、GZIP、SNAPPY。 |  |  |  |
| \_PARQUET\_PAGE\_SIZE | Apache Parquet圧縮用のページサイズ | 1 * 1024 * 1024 |  | 1 |
| \_PARQUET\_BLOCK\_SIZE | Apache Parquetのメモリにバッファされるrow groupのサイズ。<br/>*Apache parquetのドキュメントによると大きいrow groups (512MB - 1GB)を推奨しています<br/>https://parquet.apache.org/documentation/latest/ | 128 * 1024 * 1024 | バイト | 128 |
| \_GA\_API\_REQUEST\_READ\_TIMEOUT | Google Analyticsのリクエストタイムアウト | 30 * 1000 | ミリ秒 |  |
| \_GA\_API\_REQUEST\_MAX\_RESULTS | Google Analyticsのレスポンスに含めることができる行の最大数。(指定できるMaxは10000) | 10,000 |  |  |
| \_GA\_API\_MAX\_INPUT\_SPLITS | Google Analyticsに対して同時実行できるリクエストの最大数 | 10 |  |  |
| \_GA\_API\_SKIP\_BAD\_PROFILES | Google AnalyticsのプロファイルIDにアクセスできないものが含まれている場合にパッケージ実行を正常に完了する場合には、trueに設定します。 | FALSE |  |  |
| \_ADWORDS\_API\_REQUEST\_READ\_TIMEOUT | Google Adwordsへのリクエストのタイムアウト | 180 * 1000 | ミリ秒 |  |
| \_ADWORDS\_API\_MAX\_INPUT\_SPLITS | Google Adwordsに対して同時実行できるリクエストの最大数 | -1 |  |  |
| \_CACHED\_BAG\_MEMORY\_PERCENT | Map もしくは Reduceタスクのすべてのバッグ(データを処理する際、1つもしくは複数のフィールドをグループ化したもの＝つまり処理対象のデータのことです)に割り当てられるヒープの割合。こちらで設定した値がいっぱいになると、データがディスクに流出します。値を大きくすると、ディスクへの流出が減りますが、ヒープメモリが不足する可能性が高くなります。 | 0.2 |  | 20% |
| \_MAP\_MAX\_ATTEMPTS | Mapタスクについて失敗で完了する前に何回リトライを行うか？	 | 3 |  |  |
| \_REDUCER\_MAX\_ATTEMPTS | Reduceタスクについて失敗で完了する前に何回リトライを行うか？         | 3 |  |  |
| \_MAP\_MAX\_FAILURES\_PERCENT | ジョブが失敗で完了となる前に失敗できるMapタスクの最大パーセンテージを制御します。値の範囲は0〜100です。 | 0 |  |  |
| \_REDUCER\_MAX\_FAILURES\_PERCENT | ジョブが失敗で完了となる前に失敗できるReduceタスクの最大パーセンテージを制御します。値の範囲は0〜100です。 | 0 |  |  |
| \_MAP\_TASK\_TIMEOUT | タスクの応答がない場合にどれくらい待ってそのタスクをKillするのかをミリ秒単位で設定します。 | 600 * 1000 | ミリ秒 |  |
| \_BQ\_READER\_POLL\_RETRIES | Google BigQueryからのデータエクスポートをポーリングする際のリトライ回数を制御します。 | 60 | 回数 |  |
| \_BQ\_READER\_POLL\_INTERVAL | Google BigQueryからのデータエクスポートをポーリングする際のリトライの間隔時間をミリ秒単位で制御します。 | 10,000 | ミリ秒 |  |
| \_BQ\_READER\_MAX\_SHARDS | Shardされたテーブルを読み込む際の最大数 | 500 |  |  |
| \_JDBC\_SPLIT\_QUERY\_RETRIES | データベースがソースの場合の並列クエリでキーの最小値と最大値を取得するためのリトライ回数。 | 3 |  |  |
| \_JDBC\_SPLIT\_QUERY\_RETRIES\_INTERVAL\_IN\_SEC | データベースソースの並列クエリでキーの最小値と最大値を取得するためのリトライの間隔。 | 30 |  |  |
| \_SQL\_COMMAND\_TIMEOUT\_IN\_SEC | SQL実行時のタイムアウト。デフォルトはタイムアウトなしです。 | -1 |  |  |
| \_INTERMEDIATE\_COMPRESSION | 結果に対して圧縮するかどうかです。デフォルトは圧縮なしです。 | FALSE |  |  |
| \_SPANNER\_MAX\_WORKERS | Google Cloud Spanner がクエリを分散処理する場合の最大Worker数 | 2 |  |  |
| \_SPANNER\_BATCH\_SIZE | Google Spannerにロードする際の1トランザクションあたりのバッチサイズ（行数）。デフォルトは100です。 | 100 |  |  |
| \_FS\_SFTP\_MAX\_RETRIES | SFTPでファイルやディレクトリを検索時のリトライ回数です。デフォルトは5です. | 5 |  |  |
| \_FS\_SFTP\_RETRY\_SLEEP | SFTPでファイルやディレクトリを検索時のリトライの間隔（ミリ秒）です。デフォルトは500です. | 500 | ミリ秒 |  |
| \_FS\_SFTP\_BLOCK\_SIZE | タスクがSFTPから読み取るブロックのサイズを決定します。大きなファイルを読み取るときにデフォルトより大きい値に変更します。 | 64 * 1024 * 1024 | バイト | 64 |
| \_FACEBOOK\_ADS\_INSIGHTS\_SLEEP | Facebook Ads Insightsレポート取得時のリトライの間隔(ミリ秒）。デフォルトは0です。 | 0 |  |  |
| \_FB\_ASYNC\_REPORT\_TIMEOUT | Facebook Ads Insightsレポートの非同期リクエストのリクエストタイムアウト（試行ごと）。この値を超えると、試行は失敗します（デフォルト-タイムアウトなし）。 | -1 |  |  |
| \_HTTP\_FOLLOW\_REDIRECTS | REST APIソースやCurlコマンドを利用したFunctionがリダイレクトされたステータスコードに従わないようにする場合は、falseに設定します。 | TRUE |  |  |
| \_HTTP\_REQUEST\_MAX\_RETRIES | 例外エラーになる前にHTTPレスポンスコード429または5xxを受信したときに試行されるREST APIソースまたは* Curl *関数のリトライ回数。 | 8 |  |  |
| \_SYNC\_WAIT\_TIME | Amazon RedshiftをDestinationとするデータをステージングしてからRedshiftクラスターでCOPYを実行するまでに待機する時間（秒単位） | 1 |  |  |
| \_XPATH\_IGNORE\_ERRORS | XMLのXpathエラー無視するかどうか。デフォルトは無視しない。 | FALSE |  |  |
| \_FS\_IGNORE\_MISSING\_INPUT\_EXCEPTIONS | ソースパス（ファイルストレージソースコンポーネントを含む）で入力ファイルが見つからない場合にパッケージを正常に完了するには、trueに設定します。 | FALSE |  |  |
| \_ADWORDS\_API\_SKIP\_BAD\_ACCOUNTS | AdWordsのAccount IDにアクセスできないものが含まれている場合にパッケージを正常に完了するには、trueに設定します（Google Adwordsソースコンポーネントを使用）。 | FALSE |  |  |

# MapperとReducerの再試行回数の制御について
### _MAP_MAX_ATTEMPTS：
データソースからデータを取得する際の再試行回数を定義する **_MAP_MAX_ATTEMPTS** の制御対象については、制限があります。以下はスコープ対象外となりますのでご注意ください。

**`_MAP_MAX_ATTEMPTS`の<font color="red">再実行対象外</font>となるデータソース:**

- **JDBC(データベース)**　リトライ回数は`_JDBC_SPLIT_QUERY_RETRIES`で指定可能です。*デフォルトの再施行回数は3回です。
- **SFTP** リトライ回数は`_FS_SFTP_MAX_RETRIES`で指定可能です。*デフォルトの再施行回数は5回です。


### _REDUCE_MAX_ATTEMPTS:
- **_REDUCE_MAX_ATTEMPTS** で再試行回数を制御できるのはCurl関数を使用したリクエストなどHTTPリクエスト（POST)でデータを更新するような場合です。