6.3. Debezium Oracle コネクターによるデータ型のマッピング方法
Debezium Oracle コネクターは、テーブル行の値の変化を検出すると、その変化を表す change イベントを発行します。各変更イベントレコードは、元のテーブルと同じように構造化されており、イベントレコードは各カラム値のフィールドを含んでいます。テーブルカラムのデータ型は、以下のセクションの表に示すように、コネクターが変更イベントフィールドでカラムの値をどのように表現するかを決定します。
テーブルの各カラムに対して、Debezium はソースデータ型を対応するイベントフィールドの リテラル型、場合によっては セマンティック型 にマッピングします。
- リテラル型
-
以下のカフカコネクトスキーマタイプのいずれかを使用して、値が文字通りどのように表現されるかを記述します。
INT8
、INT16
、INT32
、INT64
、FLOAT32
、FLOAT64
、BOOLEAN
、STRING
、BYTES
、ARRAY
、MAP
、およびSTRUCT
。 - セマンティック型
- フィールドの Kafka Connect スキーマの名前を使用して、Kafka Connect スキーマがフィールドの 意味 をキャプチャーする方法を記述します。
デフォルトのデータ型変換がニーズを満たさない場合、コネクター用の カスタムコンバータを作成 することができます。
一部の Oracle ラージオブジェクト (CLOB、NCLOB、BLOB) および数値データ型については、デフォルトの設定プロパティー設定を変更することにより、コネクターがタイプマッピングを実行する方法を操作することができます。Debezium プロパティーがこれらのデータ型のマッピングをどのように制御するかの詳細については、Binary and Character LOB types および Numeric types をご覧ください。
Debezium コネクターによる Oracle データ型のマッピング方法に関する詳細は、以下を参照してください。
文字タイプ
以下の表は、コネクターによる基本の文字タイプへのマッピング方法を説明しています。
Oracle データ型 | リテラル型 (スキーマ型) | セマンティック型 (スキーマ名) および注記 |
---|---|---|
|
| 該当なし |
|
| 該当なし |
|
| 該当なし |
|
| 該当なし |
|
| 該当なし |
Debezium Oracle コネクターでの BLOB
、CLOB
、NCLOB の
使用は、技術プレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
以下の表は、コネクターによるバイナリーおよび文字 LOB (Large Object) 型へのマッピング方法を説明しています。
Oracle データ型 | リテラル型 (スキーマ型) | セマンティック型 (スキーマ名) および注記 |
---|---|---|
| 該当なし | このデータ型はサポートされていません。 |
|
|
|
|
| 該当なし |
| 該当なし | このデータタイプはサポートされていません。 |
| 該当なし | このデータタイプはサポートされていません。 |
|
| 該当なし |
| 該当なし | このデータタイプはサポートされていません。 |
Oracle は、CLOB
、NCLOB
、および BLOB
データタイプのカラム値を、SQL ステートメントで明示的に設定または変更された場合にのみ供給します。その結果、変更イベントには、変更されていない CLOB
、NCLOB
、または BLOB
カラムの値が含まれることはありません。代わりに、コネクタープロパティー unavailable.value.placeholder
で定義されているプレースホルダーが含まれます。
CLOB
、NCLOB
、または BLOB
列の値が更新されると、対応する更新変更イベントの after
要素に新しい値が追加されます。before
要素には使用できない値プレースホルダーが含まれます。
数字型
以下の表は、Debezium Oracle コネクターによる数値型のマッピング方法を説明しています。
コネクターの decimal.handling.mode
設定プロパティーの値を変更することで、コネクターが Oracle DECIMAL
、NUMBER
、NUMERIC
、および REAL
データ型をマッピングする方法を変更できます。このプロパティーをデフォルト値の precise
に設定すると、コネクターは、表に示すように、これらの Oracle データ型を Kafka Connect org.apache.kafka.connect.data.Decimal
論理型にマッピングします。プロパティーの値を double
または string
に設定すると、コネクターは一部の Oracle データ型に別のマッピングを使用します。詳しくは、以下の表の セマンティックタイプおよび注意 事項の欄をご覧ください。
Oracle データ型 | リテラル型 (スキーマ型) | セマンティック型 (スキーマ名) および注記 |
---|---|---|
|
| 該当なし |
|
| 該当なし |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
スケールが 0 の
|
|
|
|
|
|
|
|
|
|
|
|
|
ブール値型
Oracle は、BOOLEAN
データ型のネイティブサポートを提供しません。ただし、論理 BOOLEAN
データ型の概念をシミュレートするために、特定のセマンティクスと他のデータ型を使用することが一般的です。
ソースカラムをブール型に変換できるように、Debezium は NumberOneToBooleanConverter
custom converter を提供しており、以下のいずれかの方法で使用することができます。
-
すべての
NUMBER(1)
列をBOOLEAN
タイプにマッピングします。 正規表現のコンマ区切りリストを使用して、列のサブセットを列挙します。
このタイプの変換を使用するには、以下の例のようにselector
パラメーターを使用してconverters
設定プロパティーを設定する必要があります。converters=boolean boolean.type=io.debezium.connector.oracle.converters.NumberOneToBooleanConverter boolean.selector=.*MYTABLE.FLAG,.*.IS_ARCHIVED
時間型
Oracle INTERVAL
、TIMESTAMP WITH TIME ZONE
、および TIMESTAMP WITH LOCAL TIME ZONE
データ型以外では、コネクターが時間型を変換する方法は time.precision.mode
設定プロパティーの値に依存します。
time.precision.mode
設定プロパティーが adaptive
(デフォルト) に設定された場合、コネクターは列のデータ型を基に時間型のリテラルおよびセマンティック型を決定し、イベントが正確にデータベースの値を表すようにします。
Oracle データ型 | リテラル型 (スキーマ型) | セマンティック型 (スキーマ名) および注記 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time.precision.mode
設定プロパティーが connect
に設定された場合、コネクターは事前定義された Kafka Connect の論理型を使用します。これは、コンシューマーが組み込みの Kafka Connect の論理型のみを認識し、可変精度の時間値を処理できない場合に便利です。Oracle がサポートする精度レベルは、Kafka Connect サポートの論理型を超過するため、time.precision.mode
を connect
に設定していて、データベース列の fractional second precision の値が 3 より大きい場合には a loss of precision という結果になります。
Oracle データ型 | リテラル型 (スキーマ型) | セマンティック型 (スキーマ名) および注記 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ROWID タイプ
次の表は、コネクターが ROWID (行アドレス) データ型をどのようにマッピングするかを説明したものです。
Oracle データ型 | リテラル型 (スキーマ型) | セマンティック型 (スキーマ名) および注記 |
---|---|---|
|
| 該当なし |
| 該当なし | このデータ型はサポートされていません。 |
ユーザー定義のタイプ
オラクルでは、組み込みのデータ型では要件を満たせない場合に、カスタムデータ型を定義して柔軟性を持たせることができます。オブジェクト型、REF データ型、Varrays、Nested Tables などのユーザー定義型があります。現時点では、Debezium Oracle コネクターをこれらのユーザー定義タイプで使用することはできません。
Oracle によって提供されたタイプ
Oracle は、組み込み型や ANSI でサポートされている型では不十分な場合に、新しい型を定義するために使用できる SQL ベースのインタフェースを提供しています。Oracle は、任意 の、XML、または Spatial 型など、幅広い目的に対応するために一般的に使用されるデータ型をいくつか提供しています。現時点では、Debezium Oracle コネクターはこれらのデータ型では使用できません。
デフォルト値
データベーススキーマのカラムにデフォルト値が指定されている場合、Oracle コネクターはこの値を対応する Kafka レコードフィールドのスキーマに伝搬させようと試みます。ほとんどの一般的なデータタイプがサポートされています。
-
文字型 (
CHAR
、NCHAR
、VARCHAR
、VARCHAR2
、NVARCHAR
、NVARCHAR2)
-
数値型 (
INTEGER
、NUMERIC
、など) -
時間型 (
DATE
、TIMESTAMP
、INTERVAL
など)。
一時的なタイプが TO_TIMESTAMP
や TO_DATE
などの関数呼び出しを使用してデフォルト値を表す場合、コネクターは関数を評価するために追加のデータベース呼び出しを行うことでデフォルト値を解決します。例えば、DATE
カラムが TO_DATE('2021-01-02', 'YYYY-MM-DD')
というデフォルト値で定義されている場合、そのカラムのデフォルト値はその日付の UNIX エポックからの日数、この場合は 18629
となります。
一時的な型がデフォルト値を表すために SYSDATE
定数を使用する場合、コネクターは、列が NOT NULL
または NULL
として定義されているかどうかに基づいてこれを解決します。カラムが NULL 可能な場合、デフォルト値は設定されません。しかし、カラムが NULL 可能でない場合、デフォルト値は 0
(DATE
または TIMESTAMP(n)
データ型の場合) または 1970-01-01T00:00:00Z
(TIMESTAMP WITH TIME ZONE
または TIMESTAMP WITH LOCAL TIME ZONE
データ型の場合) のいずれかに解決されます。デフォルトの値のタイプは数値です。ただし、カラムが TIMESTAMP WITH TIME ZONE
または TIMESTAMP WITH LOCAL TIME ZONE
の場合は文字列として出力されます。