このトピックでは、データ管理 (DMS) のタスクオーケストレーション機能で提供される単一インスタンス SQL ノードを使用して、6 か月前に生成された既存データをソーステーブルからデスティネーションテーブルに移行する方法について説明します。移行後、データはソーステーブルから削除され、デスティネーションテーブルにアーカイブされます。
前提条件
タスクオーケストレーション機能を使用するインスタンスが DMS に登録されていること。ApsaraDB インスタンスの登録方法の詳細については、「Alibaba Cloud データベースインスタンスの登録」をご参照ください。
インスタンスのステータスが正常であること。インスタンスのステータスを表示するには、次の操作を実行します。DMS コンソールのホームページに移動します。左側のナビゲーションウィンドウで、クエリするインスタンスにポインターを移動します。次に、表示されるヒントからインスタンスステータスを表示します。
次のタイプのデータベースがサポートされています。
注意事項
インスタンスのコントロールモードが「柔軟な管理」または「安定的な変更」の場合は、編集するタスクフローのオーナーであることを確認してください。そうでない場合、タスクフローのノード構成を編集した後にタスクフローが失敗する可能性があります。インスタンスのコントロールモードが「セキュリティコラボレーション」の場合は、この要件は不要です。タスクフローのオーナーを指定する方法の詳細については、「概要」をご参照ください。
準備
この例では、test
という名前のソーステーブルを使用します。次のステートメントを実行して、test テーブルを作成し、データを test テーブルに挿入できます。
-- テーブルを作成します。
CREATE TABLE test (
`id` bigint(20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主キー',
`gmt_create` DATETIME NOT NULL COMMENT '作成時間',
`gmt_modified` DATETIME NOT NULL COMMENT '変更時間',
`content` TEXT COMMENT 'テストデータ'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='タスクオーケストレーションテスト用のテーブル';
-- テーブルにデータを挿入します。
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-01-01 01:00:00', '2020-01-01 01:00:00', 'value1');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-02-01 01:00:00', '2020-02-01 01:00:00', 'value2');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-03-01 01:00:00', '2020-03-01 01:00:00', 'value3');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-04-01 01:00:00', '2020-04-01 01:00:00', 'value4');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-05-01 01:00:00', '2020-05-01 01:00:00', 'value5');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-06-01 01:00:00', '2020-06-01 01:00:00', 'value6');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-07-01 01:00:00', '2020-07-01 01:00:00', 'value7');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-08-01 01:00:00', '2020-08-01 01:00:00', 'value8');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-09-01 01:00:00', '2020-09-01 01:00:00', 'value9');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-10-01 01:00:00', '2020-10-01 01:00:00', 'value10');
DMS の [SQL コンソール] タブで、またはデータ変更チケットを送信することによって、test テーブルを作成することもできます。詳細については、「SQL コンソールタブでデータベースを管理する」トピックの「テーブルを作成する」セクションと、「通常のデータ変更」トピックをご参照ください。
手順
手順 1: タスクフローを作成する
- DMS コンソール V5.0 にログインします。
上部のナビゲーションバーで、[すべての機能] > [データ + AI] > [データ開発] > [タスクオーケストレーション] を選択します。
説明通常モードの DMS コンソールを使用している場合は、左上隅にある
アイコンにポインターを移動し、[データ + AI] > [データ開発] > [タスクオーケストレーション] を選択します。
表示されたページで、[タスクフローの作成] をクリックします。
[新しいタスクフロー] ダイアログボックスで、[タスクフロー名] パラメーターと [説明] パラメーターを指定します。次に、[OK] をクリックします。
手順 2: タスクフローの変数を構成する
タスクフローの変数は時間変数です。変数は、${変数名}
の形式ですべてのノードで使用できます。この例では、test テーブルで 6 か月前に生成された既存データを定期的に移行するために、SQL ステートメントのフィルター条件として時間変数を構成する方法について説明します。
この例では、yearmonth6_name
変数と yearmonth6_date
変数が作成されます。
ページの下部で、[変数構成] タブをクリックします。左側のペインで、[タスクフロー変数] をクリックします。
yearmonth6_name
変数を作成します。[時間形式] パラメーターをyyyy-MM
に設定します。[時間形式] パラメーターの下にあるフィールドに、-, 6, および月
を指定します。これは、現在の月から 6 か月前の月を指定します。値は月単位で正確です。現在の日付が 2023 年 6 月 27 日の場合、変数の値は 2022-12 になります。
yearmonth6_date
変数を作成します。[時間形式] パラメーターをyyyy-MM-01
に設定します。[時間形式] パラメーターの下にあるフィールドに、-, 6, および月
を指定します。これは、現在の月から 6 か月前の月の最初の日を指定します。値は日単位で正確です。現在の日付が 2023 年 6 月 27 日の場合、変数の値は 2022-12-01 になります。
変数のルールと使用方法の詳細については、「変数」をご参照ください。
手順 3: タスクフローでノードを作成および構成する
データ移行用のノードを作成する
[タスクオーケストレーション] ページの [タスクタイプ] セクションの左側のノードタイプリストから、[単一インスタンス SQL] ノードをキャンバスの空白領域にドラッグします。
ノードを右クリックします。表示されるショートカットメニューで、[名前の変更] をクリックして、ノードの名前を [データの移行] に変更します。
ノードをダブルクリックして、SQL ステートメントを記述するページに移動します。
データベース検索ボックスで目的のデータベースを検索し、SQL エディターに次の SQL ステートメントを入力します。
CREATE TABLE IF NOT EXISTS `test_${yearmonth6_name}` LIKE test; INSERT INTO `test_${yearmonth6_name}` SELECT * FROM `test` WHERE gmt_create < '${yearmonth6_date}';
上記のステートメントは、現在のデータベースに既存データをアーカイブするための test_${yearmonth6_name} という名前のテーブルを作成し、日付要件を満たす既存データを test テーブルから test_${yearmonth6_name} テーブルに移行するために使用されます。
[プレビュー] をクリックして、SQL ステートメントの有効性を確認します。
既存データをクリアするためのノードを作成する
[タスクオーケストレーション] ページの「タスクの種類」セクションにある左側のノードの種類リストから、Single Instance SQL ノードをキャンバスの空白エリアにドラッグします。
ノードを右クリックします。表示されるショートカットメニューで、[名前の変更] をクリックして、ノードの名前を [既存データのクリア] に変更します。
ノードをダブルクリックして、SQL ステートメントを記述するページに移動します。
データベース検索ボックスで目的のデータベースを検索し、SQL エディターに次の SQL ステートメントを入力します。
警告大量のデータを削除するには、オフピーク時に単一インスタンス SQL ノードを使用して DELETE ステートメントを実行することをお勧めします。これは、長期のテーブルロックによってビジネスが中断されるのを防ぐのに役立ちます。
DELETE FROM `test` WHERE gmt_create < '${yearmonth6_date}';
上記のステートメントは、移行されたデータを test テーブルから削除するために使用されます。
[プレビュー] をクリックして、SQL ステートメントの有効性を確認します。
手順 4: ノードを接続し、スケジューリング情報を構成する
キャンバスで、[データの移行] ノードにポインターを移動し、右側の中抜き円をクリックして、接続線を [既存データのクリア] ノードにドラッグします。
説明接続線をドラッグすることで、ノードの実行順序を指定できます。この例では、[データの移行] ノードが [既存データのクリア] ノードの前に実行されます。
ページの下部で、[タスクフロー情報] タブをクリックします。[スケジューリング設定] セクションで、次のパラメーターを構成します。
パラメーター
例
スケジューリングを有効にする
スケジューリング機能を有効にするかどうかを指定します。[スケジューリングを有効にする] をオンにします。
スケジューリングタイプ
スケジューリングタイプ。[時間指定スケジューリング/循環スケジューリング] を選択します。
有効時間
スケジューリングプロパティが有効になる期間。デフォルト値は 1970-01-01 - 9999-01-01 で、スケジューリングプロパティが永続的に有効になることを示します。
スケジューリングサイクル
スケジュールサイクル。 [月] を選択します。
指定時間
スケジューリングプロパティが有効になる時間。[毎月の 1 日] を選択します。
特定の時点
スケジューリングプロパティが有効になる特定の時点。このパラメーターを 01:00 に設定します。
タイムゾーン
システムがタスクをスケジュールする基準となるタイムゾーン。
Cron 式
CRON 式。指定されたスケジューリングサイクルと時間設定に基づいて自動的に生成されます。
説明この例では、タスクフローは毎月 1 日の 01:00 に実行するようにスケジュールされています。必要に応じて、タスクフローの実行をスケジュールできます。詳細については、「概要」をご参照ください。
手順 5: タスクフローを実行し、結果を確認する
キャンバスの左上隅にある [試行実行] をクリックします。
ログの最後の行に
status SUCCEEDED
と表示された場合、テスト実行は成功です。ログの最後の行に
status FAILED
と表示された場合、テスト実行は失敗です。説明テスト実行が失敗した場合は、ログで障害が発生したノードと障害の理由を確認します。次に、ノードの構成を変更して、再試行します。
[SQL コンソール] タブに移動して、test テーブルの既存データがデスティネーションテーブルに移行されたかどうか、および移行されたデータが test テーブルから削除されたかどうかを確認します。詳細については、「SQL コンソールタブでデータベースを管理する」トピックの「データのクエリ」セクションをご参照ください。