このトピックでは、データ管理 (DMS) のタスクオーケストレーション機能が提供するシングルインスタンスSQLノードを使用して、6か月前に生成された履歴データをソーステーブルからターゲットテーブルに移行する方法について説明します。 移行後、データはソーステーブルから削除され、宛先テーブルにアーカイブされます。
前提条件
タスクオーケストレーション機能を使用するインスタンスがDMSに登録されています。 ApsaraDBインスタンスの登録方法の詳細については、「Alibaba Cloudデータベースインスタンスの登録」をご参照ください。
インスタンスのステータスは正常です。 インスタンスのステータスを表示するには、次の操作を実行します。DMSコンソールの [ホーム] ページに移動します。 左側のナビゲーションウィンドウで、クエリするインスタンスの上にポインターを移動します。 次に、表示されるヒントからインスタンスのステータスを表示します。
次の種類のデータベースがサポートされています。
使用上の注意
インスタンスのコントロールモードがFlexible ManagementまたはStable Changeの場合、編集するタスクフローの所有者であることを確認します。 そうしないと、タスクフローのノード設定を編集した後にタスクフローが失敗する可能性があります。 インスタンスの制御モードがSecurity Collaborationの場合、この要件は不要です。 タスクフローの所有者を指定する方法の詳細については、「概要」をご参照ください。
準備
この例では、test
という名前のソーステーブルが使用されます。 次のステートメントを実行して、テストテーブルを作成し、テストテーブルにデータを挿入できます。
-- Create a table.
CREATE TABLE test (
`id` bigint(20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Primary key',
`gmt_create` DATETIME NOT NULL COMMENT 'Creation time',
`gmt_modified` DATETIME NOT NULL COMMENT 'Modification time',
`content` TEXT COMMENT 'Test data'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Table for a task orchestration test';
-- Insert data into the table.
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の [SQLConsole] タブで、またはデータ変更チケットを送信して、テストテーブルを作成することもできます。 詳細については、[SQLConsole] タブの [データベースの管理] トピックの「テーブルの作成」セクションと [通常のデータ変更] トピックをご参照ください。
手順
手順1: タスクフローの作成
DMSコンソールV5.0 にログインします。
上部のナビゲーションバーで、DTS > データ開発 > タスクオーケストレーションを選択します。
説明シンプルモードのDMSコンソールを使用している場合は、左上隅のアイコンをクリックし、[すべての関数] > [DTS] > [データ開発] > [タスクオーケストレーション] を選択します。
表示されるページで、[新しいタスクフロー] をクリックします。
[新しいタスクフロー] ダイアログボックスで、[タスクフロー名] および [説明] パラメーターを指定します。 [OK] をクリックします。
手順2: タスクフローの変数の設定
タスクフローの変数は、時間変数である。 すべてのノードの変数を ${変数名}
の形式で使用できます。 この例では、6か月前にテストテーブルで生成された履歴データを定期的に移行するために、SQL文のフィルタ条件として時間変数を設定する方法について説明します。
この例では、yearmonth6_name
およびyearmonth6_date
変数が作成されます。
ページの下部で、[変数設定] タブをクリックします。 左側のウィンドウで、[タスクフロー変数] をクリックします。
yearmonth6_name
変数を作成します。 Time Formatパラメーターをyyyy-MM
に設定します。[時間形式] パラメーターの下のフィールドに-、6、およびMonth
を指定します。これは、現在の月の6か月前の月を指定します。 値は月に対して正確です。 現在の日付が2023年6月27日の場合、変数の値は2022-12です。
yearmonth6_date
変数を作成します。 Time Formatパラメーターをyyyy-MM-01
に設定します。 [時間形式] パラメーターの下のフィールドに-、6、およびMonth
を指定します。これは、現在の月の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 _${ yearmonth6_name} という名前のテーブルを作成するために使用されます。
[プレビュー] をクリックして、SQL文の有効性を確認します。
履歴データをクリアするノードの作成
[タスクオーケストレーション] ページの [タスクタイプ] セクションの左側のノードタイプリストから、[シングルインスタンスSQL] ノードをキャンバスの空白領域にドラッグします。
ノードを右クリックします。 表示されるショートカットメニューで、[名前の変更] をクリックして、ノードの名前を [履歴データの消去] に変更します。
ノードをダブルクリックしてページに移動し、SQL文を書き込みます。
データベース検索ボックスで目的のデータベースを検索し、SQLエディタで次のSQL文を入力します。
警告大量のデータを削除するには、シングルインスタンスSQLノードを使用して、オフピーク時にdeleteステートメントを実行することを推奨します。 これにより、長期的なテーブルロックによるビジネスの中断を防ぐことができます。
DELETE FROM `test` WHERE gmt_create < '${yearmonth6_date}';
上記の文は、テストテーブルから移行されたデータを削除するために使用されます。
[プレビュー] をクリックして、SQL文の有効性を確認します。
手順4: ノードを接続してスケジューリング情報を設定
キャンバス上で、[データの移行] ノードの上にポインターを移動し、右側の中空の円をクリックしてから、接続線を [履歴データの消去] ノードにドラッグします。
説明接続線をドラッグすることで、ノードの実行順序を指定できます。 この例では、[データの移行] ノードが [履歴データの消去] ノードの前に実行されます。
ページ下部の [タスクフロー情報] タブをクリックします。 [スケジューリング設定] セクションで、次のパラメーターを設定します。
パラメーター
例
スケジューリングの有効化
スケジューリング機能を有効にするかどうかを指定します。 [スケジューリングの有効化] をオンにします。
スケジューリングタイプ
スケジューリングタイプ。 [Timed Scheduling/Cyclic scheduling] を選択します。
有効期間
スケジューリングプロパティが有効になる期間。 デフォルト値は1970-01-01 - 9999-01-01で、スケジューリングプロパティが永続的に有効になることを示します。
スケジューリングサイクル
スケジューリングサイクル。 [月] を選択します。
指定時刻
スケジューリングプロパティが有効になる時刻。 [毎月1日] を選択します。
特定の時点
スケジューリングプロパティが有効になる特定の時点。 このパラメーターを01:00に設定します。
Cron式
指定されたスケジューリングサイクルと時間の設定に基づいて自動的に生成されるCRON式。
説明この例では、タスクフローは毎月初日の01:00に実行されるようにスケジュールされています。 必要に応じてタスクフローを実行するようにスケジュールできます。 詳細については、「概要」をご参照ください。
ステップ5: タスクフローを実行して結果を確認
キャンバスの左上隅にある [Try Run] をクリックします。
ログの最後の行に
ステータスSUCCEEDED
が表示された場合、テストの実行は成功です。ログの最後の行に
status FAILED
が表示された場合、テストの実行は失敗します。説明テストの実行が失敗した場合は、失敗が発生したノードと失敗の理由をログに表示します。 次に、ノードの設定を変更して、もう一度お試しください。
[SQLConsole] タブに移動して、テストテーブルの履歴データがターゲットテーブルに移行されているかどうか、および移行されたデータがテストテーブルから削除されているかどうかを確認します。 詳細については、「SQLConsoleタブのデータベースの管理」トピックの「クエリデータ」セクションをご参照ください。