AnalyticDB for MySQLを使用すると、インポートジョブを非同期に送信できます。
シナリオ
INSERT INTO
またはINSERT OVERWRITE SELECT
ステートメントを実行してデータをインポートすると、このステートメントはデフォルトで同期的に実行されます。 数百ギガバイトのデータがインポートされると、クライアントとAnalyticDB for MySQLサーバー間の接続が閉じられる可能性があります。 この場合、データインポートジョブは失敗します。 大量のデータが含まれる場合は、インポートジョブを非同期に送信することをお勧めします。
ジョブを非同期的に送信する
構文
ジョブ挿入の上書きtable_nameを送信
select_statement;
例
ジョブ挿入上書きテストSELECT * FROM test_external_table;
上記のステートメントを実行すると、ジョブIDが返されます。 ジョブIDを使用して、非同期ジョブのステータスを照会できます。
+ --------------------------------------- +
| job_id |
+ --------------------------------------- +
| 2017112122202917203100908203303000715 |
優先度ベースのスケジューリングの設定
AnalyticDB for MySQL V3.1.3.6以降は、優先度ベースのスケジューリングをサポートしています。 ジョブ送信ステートメントの先頭に /* + async_job_priority=n */
ヒントを追加して、非同期ジョブの優先度を指定できます。 デフォルトの優先度値は1です。 値が大きいほど、ジョブのスケジューリングの優先度が高くなります。
/* + async_job_priority=10 * /ジョブ挿入上書きテストSELECT * FROM test_external_table;
非同期ジョブのステータスの照会
構文
SHOW JOB STATUS WHERE job='job_id';
例
仕事のステータスを表示する場所JOB='2017112122202917203100908203303000715';
次の情報が返されます。
+ --------------------------------------- ---------- ---------------------------------- + ----------------------- + ----------------------- +
| job_id | schema_name | status | fail_msg | create_time | update_time | 定義 |
+ --------------------------------------- + ----------------------------------------- + ----------------------- + ----------------------- +
| 2017112122202917203100908203303000715 | test | RUNNING | NULL | 2023-06-21 22:20:31.0 | 2023-06-21 22:20:40.0 | INSERT OVERWRITEテストSELECT * FROM test_external_table |
返される情報のフィールドは、クラスターマイナーバージョンによって異なります。 statusフィールドに基づいて非同期ジョブを解析することを推奨します。
ジョブのステータスとマッピング
Data Warehouse Editionのステータス | Data Lakehouse Editionのステータス | 説明 |
INIT | SUBMITTING | ジョブが送信されます。 |
提出済み | RUNNING | ジョブは実行中です。 |
RUNNING | ||
仕上げ | SUCCEEDED | 仕事は成功しました。 |
FAILED | FAILED | ジョブが失敗します。 |
なし | キャンセル | ジョブがキャンセルされました。 |
CANCELLED状態は新しく、Data Warehouse Edition (V3.0) では使用できません。
ジョブの終了
説明
予定外、失敗、および成功したジョブはキューから削除されます。
実行中のジョブが終了すると、そのジョブによってインポートされたデータがロールバックされる場合があります。 残りのデータを手動で削除することを推奨します。
構文
キャンセルジョブ 'JOB_id';
例
キャンセルジョブ '2017112122202917203100908203303000715';