変換ルール式を使用した列の内容の定義 - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

変換ルール式を使用した列の内容の定義

新しい列と既存の列の内容を定義するには、変換ルール内で式を使用します。たとえば、式を使用すると、列を追加したり、ソーステーブルヘッダーをターゲットにレプリケートしたりできます。また、式を使用して、ターゲットテーブルのレコードに、ソースで挿入済み、更新済み、または削除済みというフラグを付けることもできます。

式を使用した列の追加

変換ルールの式を使用してテーブルに列を追加するには、add-column ルールアクションと column ルールターゲットを使用します。

次の使用例は、ITEM テーブルに新しい列を追加します。新しい列名が FULL_NAME に設定されます。データ型は string、長さは 50 文字です。式は、2 つの既存の列の値 FIRST_NAME および LAST_NAME を連結して FULL_NAME を評価します。schema-name および table-name、式パラメータは、ソース データベーステーブル内のオブジェクトを参照します。Valuedata-type ブロックは、ターゲット データベーステーブル内のオブジェクトを参照します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "Test", "table-name": "ITEM" }, "value": "FULL_NAME", "expression": "$FIRST_NAME||'_'||$LAST_NAME", "data-type": { "type": "string", "length": 50 } } ] }

式を使用したターゲットレコードのフラグ付け

ターゲットテーブルのレコードにソーステーブルで挿入済み、更新済み、または削除済みというフラグを付けるには、変換ルールで式を使用します。式は、operation_indicator 関数を使用してレコードにフラグを付けます。ソースから削除されたレコードは、ターゲットから削除されません。代わりに、ターゲットレコードには、ソースから削除されたことを示すユーザー指定の値でフラグが付けられます。

注記

operation_indicator 関数は、ソースデータベースとターゲットデータベースの両方にプライマリキーがあるテーブルでのみ機能します。

たとえば、次の変換ルールは、まずターゲットテーブルに新しい Operation 列を追加します。次に、ソーステーブルからレコードが削除されるたびに、値 D で列を更新します。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "Operation", "expression": "operation_indicator('D', 'U', 'I')", "data-type": { "type": "string", "length": 50 } }

式を使用したソーステーブルヘッダーのレプリケート

デフォルトでは、ソーステーブルのヘッダーはターゲットにレプリケートされません。レプリケートするヘッダーを指定するには、テーブルの列ヘッダーを含む式を含む変換ルールを使用します。

式では、次の列ヘッダーを使用できます。

[Header] (ヘッダー) 継続的なレプリケーションの値 全ロードの値 データ型
AR_H_STREAM_POSITION ソースからのストリーム位置の値。この値は、ソースエンドポイントに応じて、システム変更番号 (SCN) またはログシーケンス番号 (LSN) になります。 空の文字列。 STRING
AR_H_TIMESTAMP 変更の時刻を示すタイムスタンプ。 現在のデータがターゲットに到着した時刻を示すタイムスタンプ。 DATETIME (スケール=7)
AR_H_COMMIT_TIMESTAMP コミットの時刻を示すタイムスタンプ。 現在の時刻を示すタイムスタンプ。 DATETIME (スケール=7)
AR_H_OPERATION INSERT、UPDATE、または DELETE INSERT STRING
AR_H_USER 変更を行ったユーザーについて、ソースから提供されるユーザー名、ID、またはその他の情報。

このヘッダーは、SQL Server および Oracle (バージョン 11.2.0.3 以上) のソースエンドポイントでのみサポートされます。

オブジェクトに適用する変換。変換ルールアクションでは、大文字と小文字が区別されます。 STRING
H_H_CHANGE_SEQ タイムスタンプと自動インクリメント番号で構成される、ソース データベースの一意のインクリメント番号。値は、ソース データベースシステムによって異なります。 空の文字列。 STRING

次の例では、ソースからのストリーム位置の値を使用して、ターゲットに新しい列を追加します。SQL サーバー の場合、ストリーム位置の値は、ソース エンドポイントの SCN です。Oracle の場合、ストリーム位置の値はソースエンドポイントの LSN です。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "transact_id", "expression": "$AR_H_STREAM_POSITION", "data-type": { "type": "string", "length": 50 } }

次の使用例は、ソースから一意の増分番号を持つ新しい列をターゲットに追加します。この値は、タスクレベルでの 35 桁の一意の数字を表します。最初の 16 桁はタイムスタンプの一部であり、最後の 19 桁は DBMS によって増分された record_id 番号です。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "transact_id", "expression": "$AR_H_CHANGE_SEQ", "data-type": { "type": "string", "length": 50 } }

SQLite 関数を使用して式を構築する

テーブル設定を使用して、指定されたオペレーションで選択されたテーブルまたはビューに適用する設定を指定します。テーブル設定ルールはオプションです。

注記

MongoDB と DocumentDB データベースでは、テーブルやビューという概念の代わりに、コレクションにまとめられたドキュメントとしてデータレコード保存します。そのため、MongoDB ソースまたは DocumentDB ソースから移行する場合は、テーブルやビューではなく、選択したコレクションに対する並列ロード設定の範囲セグメンテーションタイプを考慮します。

変換ルール式を作成するために使用できる文字列関数を以下に示します。

文字列関数 説明

lower(x)

lower(x) 関数はすべての文字が小文字に変換された文字列のコピー x を返します。デフォルトの、組み込み lower 関数は ASCII 文字に対してのみ機能します。

upper(x)

upper(x) 関数は、すべての文字が小文字に変換された文字列 x のコピーを返す。デフォルトの、組み込み upper 関数は ASCII 文字に対してのみ機能します。

ltrim(x,y)

ltrim(x,y) 関数は、x の左辺から y に現れるすべての文字を削除して形成された文字列を返します。y の値がない場合、ltrim(x) は x の左辺からスペースを削除します。

replace(x,y,z)

replace(x,y,z) 関数は、文字列 x 内の文字列 y の出現ごとに文字列 z を代入して形成された文字列を返します。

rtrim(x,y)

rtrim(x,y) 関数は、x の右側から y に現れるすべての文字を削除して形成された文字列を返します。y の値がない場合、rtrim(x) は x の右側からスペースを削除します。

substr(x,y,z)

substr(x,y,z) 関数は、y 番目の文字で始まる、文字長 z の入力文字列 x の部分文字列を返します。

z が省略され、substr(x,y) は、y 番目の文字で始まる文字列 x の最後を通してすべての文字を返します。x の左端の文字は番号 1 です。y が負の場合、部分文字列の最初の文字は左ではなく右から数えて見つけられます。z が負の場合、y 番目の文字より前にある abs(z) 文字が返されます。x が文字列の場合、文字のインデックスは実際の UTF-8 文字を参照します。x が BLOB の場合、インデックスはバイトを参照します。

trim(x,y)

trim(x,y) 関数は、x の両側から y に表示されるすべての文字を削除して形成された文字列を返します。。y に値がない場合、trim(x)は、x の両側からスペースを削除します。

変換ルール式の作成に使用できる LOB 関数を以下に示します。

LOB 関数 説明

hex(x)

hex 関数は BLOB を引数として受け取り、BLOB コンテンツの大文字 16 進文字列バージョンを返します。

randomblob (N)

randomblob(N) 関数は疑似乱数バイトを含む N バイト BLOB を返します。N が 1 未満の場合、1 バイトのランダム BLOB が返されます。

zeroblob(N)

zeroblob(N) 関数は、0x00 の N バイトで構成される BLOB を返します。

変換ルール式の作成に使用できる数値関数を以下に示します。

数値関数 説明

abs(x)

abs(x) 関数は、数値引数 x の絶対値を返します。abs(x) 関数は x が NULL の場合 NULL を返します。abs(x) 関数は、x が数値に変換できない文字列または BLOB の場合に 0.0 を返します。

random()

random 関数は、-9,223,372,036,854,775,808 から +9,223,372,036,854,775,807 の擬似乱数を返します。

round (x,y)

round (x,y) 関数は四捨五入して小数点の右側の y 桁までとした浮動小数点値 x を返します。y に値がない場合、0 と仮定されます。

max (x,y...)

複数引数 max 関数は、最大値を持つ引数を返すか、引数が NULL の場合は NULL を返します。

max 関数は、引数を左から右へ検索し照合関数を定義する引数を探します。見つかった場合は、その照合関数をすべての文字列比較に使用します。照合関数を定義する max への引数がない場合、BINARY の照合機能が使用されます。max 関数は、複数の引数を持つ場合は単純な関数ですが、引数が 1 つの場合は集計関数として動作します。

min (x,y...)

複数 引数min 関数は、最小値を持つ引数を返します。

min 関数は、引数を左から右へ検索し照合関数を定義する引数を探します。見つかった場合は、その照合関数をすべての文字列比較に使用します。照合関数を定義する min への引数がない場合、BINARY の照合機能が使用されます。min 関数は、複数の引数を持つ場合は単純な関数ですが、引数が 1 つの場合は集計関数として動作します。

変換ルール式を作成するために使用できる NULL チェック関数を以下に示します。

NULL チェック関数 説明

coalesce (x,y...)

coalesce 関数は、最初の非 NULL 引数のコピーを返しますが、すべての引数が NULL の場合は NULL を返します。coalesce 関数には、少なくとも 2 つの引数があります。

ifnull(x,y)

ifnull 関数は、最初の非 NULL 引数のコピーを返しますが、両方の引数が NULL の場合は NULL を返します。ifnull 関数にはちょうど 2 つの引数があります。ifnull 関数は 2つの引数を持つ coalesce と同じです。

nullif(x,y)

nullif(x,y) 関数は、引数が異なる場合は最初の引数のコピーを返しますが、引数が同じ場合は NULL を返します。

nullif(x,y) 関数は、引数を左から右へ検索し照合関数を定義する引数を探します。見つかった場合は、その照合関数をすべての文字列比較に使用します。nullifのどちらの引数も照合関数を定義していない場合、BINARY 照合機能が使用されます。

変換ルール式を作成するために使用できる日付と時刻関数を以下に示します。

日付および時刻関数 説明

date(timestring, modifier, modifier...)

date 関数は、YYYY-MM-DD 形式で日付を返します。

time(timestring, modifier, modifier...)

time 関数は、HH: MM: SS の形式で時刻を返します。

datetime(timestring, modifier, modifier...)

datetime 関数は、YYYY-MM-DD HH: MM: SS の形式で日付と時刻を返します。

julianday(timestring, modifier, modifier...)

julianday 関数は、グリニッジで紀元前4714年11月24日の正午からの日数を返します。

strftime(format, timestring, modifier, modifier...)

strftime 関数は、次のいずれかの変数を使用して、最初の引数として指定された書式文字列に従って日付を返します:

%d: 月の日

%H: 時間 00—24

%f: ** 分数秒 SS.SSS

%j: 年始からの日 001~366

%J: ** ユリウス日数

%m: 月 01—12

%M: 分 00~59

%s: 1970-01-01 からの秒

%S: 秒 00~59

%w: 週初からの日 0~6、日曜日 == 0)

%W: 00-53 の週

%Y: 0000—9999 年

%%: %

変換ルール式を作成するために使用できるハッシュ関数を以下に示します。

ハッシュ関数 説明

hash_sha256(x)

hash 関数は、(SHA-256 アルゴリズムを使用して)入力列のハッシュ値を生成し、生成されたハッシュ値の 16 進値を返します。

式内の hash 関数を使用するには、hash_sha256(x) を式に追加し、x をソース列名で置換します。

CASE 式の使用

SQLite CASE 式は、条件のリストを評価し、結果に基づいて式を返します。構文を以下に示します。

CASE case_expression WHEN when_expression_1 THEN result_1 WHEN when_expression_2 THEN result_2 ... [ ELSE result_else ] END # Or CASE WHEN case_expression THEN result_1 WHEN case_expression THEN result_2 ... [ ELSE result_else ] END

例 ケース条件を使用してターゲット テーブルに新しい文字列列を追加する

例えば、次の変換ルールは、まずターゲットテーブル employee に新しい emp_seniority 列を追加します。給与列に SQLite round 関数を使って、給与が 20,000 に等しいか超えるかをチェックするケース条件を指定します。そうであれば、列は値 SENIOR を取得し、それ以外は何でもその値が JUNIOR となります。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "emp_seniority", "expression": " CASE WHEN round($emp_salary)>=20000 THEN ‘SENIOR’ ELSE ‘JUNIOR’ END", "data-type": { "type": "string", "length": 50 } }
例 ターゲット テーブルに新しい日付列を追加する

次の使用例は、ターゲット テーブル,createdate, に新しい日付列を追加します employee 。SQLite の日付関数 datetime を使用する場合、挿入された各行について、新しく作成されたテーブルに日付が追加されます。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "createdate", "expression": "datetime ()", "data-type": { "type": "datetime", "precision": 6 } }
例 ターゲット テーブルに新しい数値列を追加する

次の使用例は、ターゲット テーブル rounded_emp_salary に新しい列 employee を追加します。SQLite round 関数を使って四捨五入された給与を追加します。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "rounded_emp_salary", "expression": "round($emp_salary)", "data-type": { "type": "int8" } }
例 ハッシュ関数を使用してターゲット テーブルに新しい文字列カラムを追加する

次の使用例は、ターゲット テーブル employee に新しい列 hashed_emp_number を追加します。SQLite hash_sha256(x) 関数は、ソース列 emp_number のターゲットにハッシュ値を作成します。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "hashed_emp_number", "expression": "hash_sha256($emp_number)", "data-type": { "type": "string", "length": 64 } }

式を使用したターゲット テーブルへのメタデータ追加

次の式を使用して、メタデータ情報をターゲット テーブルに追加できます:

  • $AR_M_SOURCE_SCHEMA – ソーススキーマの名前。

  • $AR_M_SOURCE_TABLE_NAME – ソーステーブルの名前。

  • $AR_M_SOURCE_COLUMN_NAME – ソーステーブルの列の名前。

  • $AR_M_SOURCE_COLUMN_DATATYPE – ソーステーブルの列のデータ型。

例 ソースのスキーマ名を使用してスキーマ名の列を追加する

次の例では、ソースからのスキーマ名を使用して、ターゲットに新しい列 schema_name を追加します。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value":"schema_name", "expression": "$AR_M_SOURCE_SCHEMA", "data-type": { "type": "string", "length": 50 } }