Oracle® Fusion Middleware

Oracle GoldenGate for Big Dataの統合

リリース12.3.1.1

E89944-01(原本部品番号:E89478-01)

2017年8月

Oracle Fusion Middleware Oracle GoldenGate for Big Dataの統合, リリース12.3.1.1

E89944-01

Copyright © 2015, 2017, Oracle and/or its affiliates  All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連情報

- 表記規則

1 GoldenGate for Big Dataの概要

- 1.1 概要

- 1.2 サポート対象の理解

- 1.2.1 動作保証要件とシステム要件の確認

- 1.2.2 ハンドラの互換性の理解

- 1.2.2.1 Cassandraハンドラ

- 1.2.2.2 Flumeハンドラ

- 1.2.2.3 Elasticsearchハンドラ

- 1.2.2.4 HBaseハンドラ

- 1.2.2.5 HDFSハンドラ

- 1.2.2.6 JDBCハンドラ

- 1.2.2.7 KafkaおよびKafka Connectハンドラ

- 1.2.2.8 Kinesis Streamsハンドラ

- 1.2.2.9 MongoDBハンドラ

- 1.2.3 その他のサポートに関する考慮事項

- 1.3 Oracle GoldenGate for Big Dataの設定

- 1.3.1 Java環境設定

- 1.3.2 プロパティ・ファイル

- 1.3.3 トランザクションのグループ化

- 1.4 GoldenGate for Big Dataの構成

- 1.4.1 Replicatによる実行

- 1.4.1.1 Replicatの構成

- 1.4.1.2 Replicatプロセスの追加

- 1.4.1.3 Replicatのグループ化

- 1.4.1.4 Replicatのチェックポイント化

- 1.4.1.5 初期ロードのサポート

- 1.4.1.6 サポートされないReplicatの機能

- 1.4.1.7 マッピング機能

- 1.4.2 ロギング

- 1.4.2.1 Replicatプロセスのロギング

- 1.4.2.2 Java層のロギング

- 1.4.3 スキーマ展開およびメタデータ変更イベント

- 1.4.4 構成プロパティCDATA[]のラッピング

- 1.4.5 正規表現を使用した検索と置換

- 1.4.5.1 スキーマ・データの置換の使用

- 1.4.5.2 コンテンツ・データの置換の使用

- 1.4.6 Oracle GoldenGate for Big Data配信のスケーリング

- 1.4.7 Oracle GoldenGate資格証明ストアでの識別子の使用

- 1.4.7.1 資格証明ストアの作成

- 1.4.7.2 資格証明ストアへのユーザーの追加

- 1.4.7.3 資格証明ストアにアクセスするためのプロパティの構成

2 Cassandraハンドラの使用

- 2.1 概要

- 2.2 詳細な機能

- 2.2.1 Cassandraのデータ型

- 2.2.2 カタログ、スキーマ、表および列の名前マッピング

- 2.2.3 DDL機能

- 2.2.3.1 キースペース

- 2.2.3.2 表

- 2.2.3.3 列の追加機能

- 2.2.3.4 列の削除機能

- 2.2.4 操作の処理

- 2.2.5 圧縮更新と完全イメージ更新

- 2.2.6 主キーの更新

- 2.3 Cassandraハンドラの設定および実行

- 2.3.1 Cassandraハンドラ構成

- 2.3.2 サンプル構成

- 2.3.3 セキュリティ

- 2.4 自動DDL処理

- 2.4.1 表チェックおよび調整プロセス

- 2.5 パフォーマンスに関する考慮事項

- 2.6 その他の考慮事項

- 2.7 トラブルシューティング

- 2.7.1 Javaクラスパス

- 2.7.2 ロギング

- 2.7.3 書込みタイムアウトの例外

- 2.7.4 ロギング

3 Elasticsearchハンドラの使用

- 3.1 概要

- 3.2 詳細な機能

- 3.2.1 Elasticsearchのバージョン

- 3.2.2 Elasticsearchのインデックスおよびタイプ

- 3.2.3 Elasticsearchのドキュメント

- 3.2.4 Elasticsearchの主キーの更新

- 3.2.5 Elasticsearchのデータ型

- 3.2.6 Elasticsearchの操作サポート

- 3.2.7 Elasticsearchの接続

- 3.3 Elasticsearchハンドラの設定および実行

- 3.3.1 Elasticsearchハンドラ構成

- 3.3.2 Elasticsearchトランスポート・クライアントの設定プロパティ・ファイル

- 3.4 Elasticsearchのパフォーマンスに関する考慮事項

- 3.5 Elasticsearchのプラグイン・サポート

- 3.6 ElasticsearchのDDL処理

- 3.7 Elasticsearchの操作モード

- 3.8 トラブルシューティング

- 3.8.1 不適切なJavaクラスパス

- 3.8.2 Elasticsearchのバージョン不一致

- 3.8.3 Elasticsearchトランスポート・クライアントのプロパティ・ファイルが見つからない

- 3.8.4 Elasticsearchのクラスタ接続の問題

- 3.8.5 ElasticsearchのサポートされていないTRUNCATE操作

- 3.8.6 Elasticsearchの一括実行のエラー

- 3.9 ロギング

- 3.10 Elasticsearchハンドラの既知の問題

4 Flumeハンドラの使用

- 4.1 概要

- 4.2 Flumeハンドラの設定および実行

- 4.2.1 クラスパス構成

- 4.2.2 Flumeハンドラ構成

- 4.2.3 サンプル構成

- 4.3 操作からFlumeイベントへのデータ・マッピング

- 4.3.1 操作モード

- 4.3.2 トランザクション・モードとEventMapsTo操作

- 4.3.3 トランザクション・モードとEventMapsToトランザクション

- 4.4 パフォーマンスに関する考慮事項

- 4.5 メタデータ変更イベント

- 4.6 Flumeソース構成の例

- 4.6.1 Avro Flumeソース

- 4.6.2 Thrift Flumeソース

- 4.7 高度な機能

- 4.7.1 スキーマの伝播

- 4.7.2 セキュリティ

- 4.7.3 フェイルオーバー機能

- 4.7.4 ロード・バランシング機能

- 4.8 Flumeハンドラのトラブルシューティング

- 4.8.1 Javaクラスパス

- 4.8.2 Flumeフロー制御の問題

- 4.8.3 Flumeエージェント構成ファイルが見つからない

- 4.8.4 Flume接続の例外

- 4.8.5 その他のエラー

5 HBaseハンドラの使用

- 5.1 概要

- 5.2 詳細な機能

- 5.3 HBaseハンドラの設定および実行

- 5.3.1 クラスパス構成

- 5.3.2 HBaseハンドラ構成

- 5.3.3 サンプル構成

- 5.3.4 パフォーマンスに関する考慮事項

- 5.3.5 セキュリティ

- 5.4 メタデータ変更イベント

- 5.5 その他の考慮事項

- 5.6 HBaseハンドラのトラブルシューティング

- 5.6.1 Javaクラスパス

- 5.6.2 HBase接続プロパティ

- 5.6.3 ハンドラ構成のロギング

- 5.6.4 HBaseハンドラの削除-挿入の問題

- 5.6.5 Cloudera CDHのHBase互換性

6 HDFSハンドラの使用

- 6.1 概要

- 6.2 SequenceFile形式でのHDFSへの書込み

- 6.2.1 Hiveとの統合

- 6.2.2 データ形式の理解

- 6.2.3 HDFSハンドラの設定および実行

- 6.2.3.1 クラスパス構成

- 6.2.3.2 HDFSハンドラ構成

- 6.2.3.3 サンプル構成

- 6.2.3.4 パフォーマンスに関する考慮事項

- 6.2.3.5 セキュリティ

- 6.3 Avroオブジェクト・コンテナ・ファイル形式でのHDFSへの書き込み

- 6.4 テンプレート文字列を使用したHDFSファイル名の生成

- 6.5 メタデータ変更イベント

- 6.6 パーティショニング

- 6.7 その他の考慮事項

- 6.8 ベスト・プラクティス

- 6.9 HDFSハンドラのトラブルシューティング

- 6.9.1 Javaクラスパス

- 6.9.2 HDFS構成プロパティ

- 6.9.3 ハンドラとフォーマッタ構成

7 Java Database Connectivityハンドラの使用

- 7.1 概要

- 7.2 詳細な機能

- 7.2.1 単一操作モード

- 7.2.2 Oracle Databaseデータ型

- 7.2.3 MySQL Databaseデータ型

- 7.2.4 Netezzaデータベース・データ型

- 7.2.5 Redshiftデータベース・データ型

- 7.3 JDBCハンドラの設定および実行

- 7.3.1 Javaクラスパス

- 7.3.2 ハンドラ構成

- 7.3.3 文のキャッシュ

- 7.3.4 エラー処理の設定

- 7.4 サンプル構成

- 7.4.1 Oracle Databaseターゲットの例

- 7.4.2 JDBCメタデータ・プロバイダを使用したOracle Databaseターゲットの例

- 7.4.3 MySQL Databaseターゲットの例

- 7.4.4 JDBCメタデータ・プロバイダを使用したMySQL Databaseターゲットの例

8 Kafkaハンドラの使用

- 8.1 概要

- 8.2 詳細な機能

- 8.3 Kafkaハンドラの設定および実行

- 8.3.1 クラスパス構成

- 8.3.2 Kafkaハンドラ構成

- 8.3.3 Javaアダプタ・プロパティ・ファイル

- 8.3.4 Kafkaプロデューサ構成ファイル

- 8.3.5 テンプレートを使用したトピック名とメッセージ・キーの解決

- 8.4 スキーマの伝播

- 8.5 パフォーマンスに関する考慮事項

- 8.6 セキュリティ

- 8.7 メタデータ変更イベント

- 8.8 Snappyに関する考慮事項

- 8.9 トラブルシューティング

- 8.9.1 Kafka設定の検証

- 8.9.2 クラスパスの問題

- 8.9.3 無効なKafkaバージョン

- 8.9.4 Kafkaプロデューサ・プロパティ・ファイルが見つからない

- 8.9.5 Kafka接続の問題

9 Kafka Connectハンドラの使用

- 9.1 概要

- 9.2 詳細な機能

- 9.3 Kafka Connectハンドラの設定および実行

- 9.3.1 Kafka Connectハンドラの構成

- 9.3.2 テンプレートを使用したトピック名とメッセージ・キーの解決

- 9.3.3 Kafka Connectハンドラでのセキュリティの構成

- 9.4 Kafka Connectハンドラのパフォーマンスに関する考慮事項

- 9.5 Kafka Connectハンドラのトラブルシューティング

- 9.5.1 Kafka Connectハンドラ用のJavaクラスパス

- 9.5.2 無効なKafkaバージョン

- 9.5.3 Kafkaプロデューサ・プロパティ・ファイルが見つからない

- 9.5.4 Kafka接続の問題

10 Kinesis Streamsハンドラの使用

- 10.1 概要

- 10.2 詳細な機能

- 10.2.1 Amazon Kinesis Java SDK

- 10.2.2 Kinesis Streamsの入力制限

- 10.3 Kinesis Streamsハンドラの設定および実行

- 10.3.1 Kinesis Streamsハンドラでのクラスパスの設定

- 10.3.2 Kinesis Streamsハンドラの構成

- 10.3.3 テンプレートを使用したストリーム名とパーティション名の解決

- 10.3.4 KinesisハンドラでのクライアントIDとシークレットの構成

- 10.3.5 Kinesis Streamsハンドラ用のプロキシ・サーバーの構成

- 10.3.6 Kinesis Streamsハンドラでのセキュリティの構成

- 10.4 Kinesisハンドラのパフォーマンスに関する考慮事項

- 10.4.1 Kinesis Streamsの入力制限

- 10.4.2 トランザクションのバッチ処理

- 10.4.3 トランザクション・コミット時のフラッシュの遅延

- 10.5 トラブルシューティング

- 10.5.1 Javaクラスパス

- 10.5.2 Kinesisハンドラの接続に関する問題

- 10.5.3 ロギング

11 メタデータ・プロバイダの使用

- 11.1 メタデータ・プロバイダについて

- 11.2 Avroメタデータ・プロバイダ

- 11.2.1 詳細な機能

- 11.2.2 実行時の前提条件

- 11.2.3 クラスパス構成

- 11.2.4 Avroメタデータ・プロバイダの構成

- 11.2.5 サンプル構成

- 11.2.6 メタデータ変更イベント

- 11.2.7 制限事項

- 11.2.8 トラブルシューティング

- 11.2.8.1 無効なスキーマ・ファイルの場所

- 11.2.8.2 無効なスキーマ・ファイル名

- 11.2.8.3 スキーマ・ファイルでの無効なネームスペース

- 11.2.8.4 スキーマ・ファイルでの無効な表名

- 11.3 Java Database Connectivityメタデータ・プロバイダ

- 11.3.1 JDBCの詳細な機能

- 11.3.2 Javaクラスパス

- 11.3.3 JDBCメタデータ・プロバイダの構成

- 11.3.4 サンプル構成

- 11.4 Hiveメタデータ・プロバイダ

- 11.4.1 詳細な機能

- 11.4.2 リモート・メタストア・データベースを使用するHiveの構成

- 11.4.3 クラスパス構成

- 11.4.4 Hiveメタデータ・プロバイダの構成

- 11.4.5 サンプル構成

- 11.4.6 セキュリティ

- 11.4.7 メタデータ変更イベント

- 11.4.8 制限事項

- 11.4.9 その他の考慮事項

- 11.4.10 トラブルシューティング

12 MongoDBハンドラの使用

- 12.1 概要

- 12.2 詳細な機能

- 12.2.1 ドキュメント・キー列

- 12.2.2 主キーの更新操作

- 12.2.3 MongoDB証跡のデータ型

- 12.3 MongoDBハンドラの設定および実行

- 12.3.1 クラスパス構成

- 12.3.2 MongoDBハンドラ構成

- 12.3.3 接続および認証

- 12.3.4 一括書込みの使用

- 12.3.5 書込み確認の使用

- 12.3.6 3部構成の表名の使用

- 12.3.7 元に戻す処理の使用

- 12.4 サンプル構成

13 プラガブル・フォーマッタの使用

- 13.1 操作ベースと行ベースのフォーマット

- 13.1.1 操作フォーマッタ

- 13.1.2 行フォーマッタ

- 13.1.3 表の行または列の値の状態

- 13.2 区切りテキスト・フォーマッタ

- 13.2.1 メッセージのフォーマットの詳細

- 13.2.2 フォーマットしたメッセージの例

- 13.2.2.1 挿入メッセージの例

- 13.2.2.2 更新メッセージの例

- 13.2.2.3 削除メッセージの例

- 13.2.2.4 切捨てメッセージの例

- 13.2.3 その他の考慮事項

- 13.2.3.1 主キーの更新

- 13.2.3.2 データの統合

- 13.2.4 出力形式サマリーのログ

- 13.2.5 区切りテキスト形式の構成

- 13.2.6 サンプル構成

- 13.2.7 メタデータ変更イベント

- 13.3 JSONフォーマッタ

- 13.3.1 操作メタデータのフォーマットの詳細

- 13.3.2 操作データのフォーマットの詳細

- 13.3.3 行データのフォーマットの詳細

- 13.3.4 JSONメッセージの例

- 13.3.4.1 操作モデル化JSONメッセージの例

- 13.3.4.2 フラット化操作モデル化JSONメッセージの例

- 13.3.4.3 行モデル化JSONメッセージの例

- 13.3.4.4 主キー出力JSONメッセージの例

- 13.3.5 JSONスキーマ

- 13.3.6 JSONフォーマッタの構成

- 13.3.7 サンプル構成

- 13.3.8 メタデータ変更イベント

- 13.3.9 JSON主キーの更新

- 13.3.10 Oracle Stream Analyticsの統合

- 13.4 Avroフォーマッタ

- 13.4.1 Avro行フォーマッタ

- 13.4.1.1 操作メタデータのフォーマットの詳細

- 13.4.1.2 操作データのフォーマットの詳細

- 13.4.1.3 Avro行メッセージの例

- 13.4.1.3.1 挿入メッセージの例

- 13.4.1.3.2 更新メッセージの例

- 13.4.1.3.3 削除メッセージの例

- 13.4.1.3.4 切捨てメッセージの例

- 13.4.1.4 Avroスキーマ

- 13.4.1.5 Avro行の構成

- 13.4.1.6 サンプル構成

- 13.4.1.7 メタデータ変更イベント

- 13.4.1.8 特別な考慮事項

- 13.4.1.8.1 トラブルシューティング

- 13.4.1.8.2 主キーの更新

- 13.4.1.8.3 汎用のラッパー機能

- 13.4.2 Avro操作フォーマッタ

- 13.4.2.1 操作メタデータのフォーマットの詳細

- 13.4.2.2 操作データのフォーマットの詳細

- 13.4.2.3 Avro操作メッセージの例

- 13.4.2.3.1 挿入メッセージの例

- 13.4.2.3.2 更新メッセージの例

- 13.4.2.3.3 削除メッセージの例

- 13.4.2.3.4 切捨てメッセージの例

- 13.4.2.4 Avroスキーマ

- 13.4.2.5 Avro操作フォーマッタの構成

- 13.4.2.6 サンプル構成

- 13.4.2.7 メタデータ変更イベント

- 13.4.2.8 特別な考慮事項

- 13.4.2.8.1 トラブルシューティング

- 13.4.2.8.2 主キーの更新

- 13.4.2.8.3 汎用のラッパー・メッセージ

- 13.4.3 Avroオブジェクト・コンテナ・ファイル・フォーマッタ

- 13.4.3.1 Avro OCFフォーマッタの構成

- 13.5 XMLフォーマッタ

- 13.5.1 メッセージのフォーマットの詳細

- 13.5.2 XMLメッセージの例

- 13.5.2.1 挿入メッセージの例

- 13.5.2.2 更新メッセージの例

- 13.5.2.3 削除メッセージの例

- 13.5.2.4 切捨てメッセージの例

- 13.5.3 XMLスキーマ

- 13.5.4 XML構成

- 13.5.5 サンプル構成

- 13.5.6 メタデータ変更イベント

- 13.5.7 主キーの更新

A Cassandraハンドラ・クライアント依存性

- A.1 Cassandra Datastax Java Driver 3.1.0

B Elasticsearchハンドラ・クライアント依存性

- B.1 Elasticsearchハンドラ・クライアント依存性

- B.2 Elasticsearch 2.4.4およびShield Plugin 2.2.2

- B.3 Elasticsearch 5.1.2とX-Pack 5.1.2

C Flumeハンドラ・クライアント依存性

- C.1 Flumeクライアント依存性

- C.1.1 Flume 1.7.0

- C.1.2 Flume 1.6.0

- C.1.3 Flume 1.5.2

- C.1.4 Flume 1.4.0

D HBaseハンドラ・クライアント依存性

- D.1 HBaseクライアント依存性

- D.1.1 HBase 1.2.5

- D.1.2 HBase 1.1.1

- D.1.3 HBase 1.0.1.1

E HDFSハンドラ・クライアント依存性

- E.1 Hadoopクライアント依存性

- E.1.1 HDFS 2.8.0

- E.1.2 HDFS 2.7.1

- E.1.3 HDFS 2.6.0

- E.1.4 HDFS 2.5.2

- E.1.5 HDFS 2.4.1

- E.1.6 HDFS 2.3.0

- E.1.7 HDFS 2.2.0

F Kafkaハンドラ・クライアント依存性

- F.1 Kafkaクライアント依存性

- F.1.1 Kafka 0.11.0.0

- F.1.2 Kafka 0.10.2.0

- F.1.3 Kafka 0.10.1.1

- F.1.4 Kafka 0.10.0.1

- F.1.5 Kafka 0.9.0.1

G Kafka Connectハンドラ・クライアント依存性

- G.1 Kafka Connectクライアント依存性

- G.1.1 Kafka 0.11.0.0

- G.1.2 Kafka 0.10.2.0

- G.1.3 Kafka 0.10.2.0

- G.1.4 Kafka 0.10.0.0

- G.1.5 Kafka 0.9.0.1

- G.2 Confluent IOのAvroコンバータおよびスキーマ・レジストリ

- G.2.1 Confluent IO 3.2.1

- G.2.2 Confluent IO 3.2.0

- G.2.3 Confluent IO 3.2.1

- G.2.4 Confluent IO 3.1.1

- G.2.5 Confluent IO 3.0.1

- G.2.6 Confluent IO 2.0.1

- G.2.7 Confluent IO 2.0.1

H MongoDBハンドラ・クライアント依存性

- H.1 MongoDB Java Driver 3.2.2

はじめに

このガイドには、Oracle GoldenGate for Big Dataの構成および実行、Oracle GoldenGateインスタンスの機能の拡張に関する情報が含まれています。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連情報

- 表記規則

対象読者

このガイドは、Oracle GoldenGate for Big Dataを構成および実行するシステム管理者を対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWeb サイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連情報

Oracle GoldenGate製品のドキュメント・ライブラリは、次の場所にあります。

Oracle GoldenGate

Oracle GoldenGate Applicationアダプタ

Oracle GoldenGate for Big Data

Oracle GoldenGate Plug-in for EMCC

Oracle GoldenGate Monitor

Oracle GoldenGate for HP NonStop (Guardian)

Oracle GoldenGate Veridata

Oracle GoldenGate Studio

Oracle GoldenGateのベスト・プラクティス、記事およびソリューションを含む追加情報は、次の場所にあります。

Oracle GoldenGate A-Team Chronicles

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

monospace

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 GoldenGate for Big Dataの概要

この章では、Oracle GoldenGate for Big Dataの概念および機能の概要を示します。環境を検証および設定する方法、Replicatとともに使用する方法、ロギング・データ、その他の構成の詳細について説明します。内容は次のとおりです。

トピック:

- 概要

- サポート対象の理解

- Oracle GoldenGate for Big Dataの設定

- GoldenGate for Big Dataの構成

1.1 概要

Oracle GoldenGate for Big Data統合は、Oracle GoldenGate Java Deliveryフレームワークへのプラガブル機能として実行され、Javaアダプタ・フレームワークとも言います。この機能は、Java Deliveryの機能を拡張します。「Javaメッセージの配信」で、Java配信の説明を参照することをお薦めします。

1.2 サポート対象の理解

Oracle GoldenGate for Big Dataは特定の構成をサポートし、ハンドラは明確に定義されたソフトウェア・バージョンと互換性があり、多くのサポート・トピックがあります。この項では、関連するすべてのサポート情報を示します。

トピック:

- 動作保証要件とシステム要件の確認

- ハンドラの互換性の理解

- その他のサポートに関する考慮事項

1.2.1 動作保証要件とシステム要件の確認

サポートされているハードウェアまたはソフトウェア構成で製品をインストールしていることを確認します。詳細は、「Oracle Fusion Middleware Supported System Configurations」ページのリリースの動作保証に関するドキュメントを参照してください。

Oracleでは、動作保証済のすべてのシステムおよび環境で製品のパフォーマンスをテストおよび検証しており、新しい動作保証情報が発表された場合は、適切な動作保証ドキュメントにすぐに追加されます。新しい動作保証情報は常に発生する可能性があるため、動作保証ドキュメントはドキュメント・ライブラリの外部に保持され、Oracle Technology Networkで利用できます。

1.2.2 ハンドラの互換性の理解

この項では、Oracle GoldenGate for Big Dataのそれぞれのハンドラが、ディストリビューション、データベース・リリース、ドライバなどの様々なデータ・コレクションとどのように互換性があるかについて説明します。

トピック:

- Cassandraハンドラ

- Flumeハンドラ

- Elasticsearchハンドラ

- HBaseハンドラ

- HDFSハンドラ

- JDBCハンドラ

- KafkaおよびKafka Connectハンドラ

- Kinesis Streamsハンドラ

- MongoDBハンドラ

1.2.2.1 Cassandraハンドラ

Cassandraハンドラは、Apache CassandraのDatastax 3.1.0 Java Driverを使用します。このドライバは、ソース証跡ファイルからCassandraデータベース内の対応する表に変更データ取得をストリーミングします。

Cassandraハンドラは、次のバージョンと連動する設計になっています。

ディストリビューション

バージョン

Apache Cassandra

1.2

2.0

2.1

2.2

3.x

Datastax Enterprise Cassandra

3.2

4.0

4.5

4.6

4.7

4.8

1.2.2.2 Flumeハンドラ

Oracle GoldenGate for Big DataのFlumeハンドラは、バージョン1.6.x、1.5.x、1.4.xおよび2.8.0のApache Flumeと連動します。1.4.0より前のバージョンのFlumeについては、互換性は保証されません。

Flumeハンドラは次のバージョンと互換します。

ディストリビューション

バージョン

ディストリビューション: Apache Flume

バージョン: 1.7.x、1.6.x、1.5.xおよび1.4.x

Hortonworks Data Platform (HDP)

HDP 2.6 (Flume 1.5.2)

HDP 2.5 (Flume 1.5.2)

HDP 2.4 (Flume 1.5.2)

HDP 2.3 (Flume 1.5.2)

HDP 2.2 (Flume 1.5.2)

HDP 2.1 (Flume 1.4.0)

Cloudera Distribution Including Apache Hadoop (CDH)

CDH 5.11x (Flume 1.6.0)

CDH 5.10x (Flume 1.6.0)

CDH 5.9.x (Flume 1.6.0)

CDH 5.8.x (Flume 1.6.0)

CDH 5.7.x (Flume 1.6.0)

CDH 5.6.x (Flume 1.6.0)

CDH 5.5.x (Flume 1.6.0)

CDH 5.4.x (Flume 1.5.0)

CDH 5.3.x (Flume 1.5.0)

CDH 5.2.x (Flume 1.5.0)

CDH 5.1.x (Flume 1.5.0)

1.2.2.3 Elasticsearchハンドラ

Elasticsearchハンドラは、次のバージョンと連動する設計になっています。

ディストリビューション

バージョン

Elasticsearch 2.X

- 2.0.X

- 2.1.X

- 2.2.X

- 2.3.X

- 2.4.X

Elasticsearch 5.X

- 5.0.X

- 5.1.X

- 5.2.X

1.2.2.4 HBaseハンドラ

Cloudera HBase 5.4.x以降にはApache HBase 1.0.0クライアント・インタフェースが完全に採用されていないため、そのHBaseクライアント・インタフェースに下位互換性を提供するApache HBaseコード行と完全に同期しません。つまり、Cloudera HBaseは新しいHBase 1.0.0インタフェースのバイナリ互換性を損ない、Oracle GoldenGate for Big Data HBase Handlerと統合するときに、NoSuchMethodErrorが生じます。これは次の2つの方法のいずれかで解決できます。

- HBaseハンドラの構成プロパティhBase98Compatibleをtrueに設定して、0.98.xのHBaseインタフェースを使用するようにHBaseハンドラを構成します。

- または、CDH 5.4.x以降のHBaseに接続する際に、Apache HBaseクライアント・ライブラリを使用できます。

Cloudera HBaseの互換性の問題は、Javaリフレクションを使用して動的に解決されます。Oracle GoldenGate 12.3.1.1.0以降を使用してCloudera CDH 5.4.x以降でHBaseにデータをストリーミングできます。hBase98Campatibilityプロパティを設定解除のままにしておくか、または新しいHBase 1.0インタフェースを使用するfalseに設定します。

HBaseハンドラは、次と連動する設計になっています。

ディストリビューション

バージョン

Apache HBase

hBase98Compatibleプロパティをtrueに設定した場合は0.98.xおよび0.96.x

1.2.x、1.1.xおよび1.0.x

Hortonworks Data Platform (HDP)

HDP 2.6 (HBase 1.1.2)

HDP 2.5 (HBase 1.1.2)

HDP 2.4 (HBase 1.1.2)

HDP 2.3 (HBase 1.1.1)

hBase98Compatibleプロパティをtrueに設定した場合はHDP 2.2 (HBase 0.98.4)。

Cloudera Distribution Including Apache Hadoop (CDH)

CDH 5.11.x (HBase 1.2.0)

CDH 5.10.x (HBase 1.2.0)

CDH 5.9.x (HBase 1.2.0)

CDH 5.8.x (HBase 1.2.0)。

CDH 5.7.x (HBase 1.2.0)。

CDH 5.6.x (HBase 1.0.0)。

CDH 5.5.x (HBase 1.0.0)。

CDH 5.4.x (HBase 1.0.0)。

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.3.x (HBase 0.98.6)。

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.2.x (HBase 0.98.6)。

hBase98Compatibleプロパティをtrueに設定した場合はCDH 5.1.x (HBase 9.98.1)。

1.2.2.5 HDFSハンドラ

HDFSハンドラは、次のバージョンと連動する設計になっています。

ディストリビューション

バージョン

Apache Hadoop

2.8.x

2.7.x

2.6.0

2.5.x

2.4.x

2.3.0

2.2.0

3.0.0-アルファ

Hortonworks Data Platform (HDP)

HDP 2.6 (HDFS 2.7.3)

HDP 2.5 (HDFS 2.7.3)

HDP 2.4 (HDFS 2.7.1)

HDP 2.3 (HDFS 2.7.1)

HDP 2.2 (HDFS 2.6.0)

HDP 2.1 (HDFS 2.4.0)

Cloudera Distribution Include Apache Hadoop (CDH)

CDH 5.11.x (HDFS 2.6.0)

CDH 5.10.x (HDFS 2.6.0)

CDH 5.9.x (HDFS 2.6.0)

CDH 5.8.x (HDFS 2.6.0)

CDH 5.7.x (HDFS 2.6.0)

CDH 5.6.x (HDFS 2.6.0)

CDH 5.5.x (HDFS 2.6.0)

CDH 5.4.x (HDFS 2.6.0)

CDH 5.3.x (HDFS 2.5.0)

CDH 5.2.x (HDFS 2.5.0)

CDH 5.1.x (HDFS 2.3.0)

1.2.2.6 JDBCハンドラ

JDBCハンドラは、汎用JDBC APIを内部的に使用します。これは、JDBC準拠のデータベース・ドライバに準拠する必要がありますが、次のターゲットに対してJDBCハンドラが動作保証されています。

- Oracle JDBCドライバを使用したOracle Databaseターゲット。

- MySQL JDBCドライバを使用したMySQL Databaseターゲット。

- Netezza JDBCドライバを使用したIBM Netezzaターゲット。

- Redshift JDBCドライバを使用したAmazon Redshiftターゲット。

- OracleブランドのDataDirect Greenplum JDBCドライバを使用したGreenplumターゲット。OracleブランドのJDBCドライバ・ファイルについては、Oracleサポートに連絡してください。

1.2.2.7 KafkaおよびKafka Connectハンドラ

これらのハンドラは、Kafkaバージョン8.2.2.2以降とは互換性がありません。

これらのハンドラは、次と連動する設計になっています。

ディストリビューション

バージョン

Apache Kafka

0.11.0.x

0.10.2.x

0.10.1.x

0.10.0.x

0.9.0.x

Hortonworks Data Platform (HDP)

HDP 2.6 (Kafka 0.10.1.2)

HDP 2.5 (Kafka 0.10.0)

HDP 2.4 (Kafka 0.9.0)

Cloudera Distribution Including Apache Hadoop (CDH)には現在Kafkaは含まれていません。Clouderaは現在KafkaをApache KafkaのCloudera Distributionとして別途配布しています

Cloudera Distribution of Apache Kafka 2.1.x (Kafka 0.10.0.0)

Cloudera Distribution of Apache Kafka 2.0.x (Kafka 0.9.0.0)

Confluent Platform

3.2.x (Kafka 0.10.2.x)

3.1.x (Kafka 0.10.1.x)

3.0.x (Kafka 0.10.0.x)

2.0.0 (Kafka 0.9.0.0)

1.2.2.8 Kinesis Streamsハンドラ

Kinesis StreamsハンドラはAmazonクラウドでホストされているため、パブリック・バージョンはありません。Amazon Software Development Kit(SDK)との互換性が維持されているかぎり、Kinesisとの互換性が保証されることを前提としています。Kinesis Streamsハンドラは、Amazon SDKの1.11.xバージョンを使用して開発されました。

1.2.2.9 MongoDBハンドラ

MongoDBハンドラでは、ネイティブJavaドライバのバージョン3.2.2を使用します。次のMongoDBバージョンと互換します。

- MongoDB 2.4

- MongoDB 2.6

- MongoDB 3.0

- MongoDB 3.2

- MongoDB 3.4

1.2.3 その他のサポートに関する考慮事項。

この項では、Oracle GoldenGate for Big Dataのハンドラのその他のサポートに関する考慮事項について説明します。

プラガブル・フォーマッタ - サポート

次に示すように、ハンドラは、「プラガブル・フォーマッタの使用」で説明されているプラガブル・フォーマッタをサポートします。

- HDFSハンドラは、すべてのプラガブル・ハンドラをサポートします。

- プラガブル・フォーマッタは、HBaseハンドラには適用されません。データは、プロプライエタリなHBaseクライアント・インタフェースを使用してHBaseにストリーミングされます。

- Flumeハンドラは、「プラガブル・フォーマッタの使用」で説明されているすべてのプラガブル・ハンドラをサポートします。

- Kafkaハンドラは、「プラガブル・フォーマッタの使用」で説明されているすべてのプラガブル・ハンドラをサポートします。

- Kafka Connectハンドラは、プラガブル・フォーマッタをサポートしていません。Kafka Connectのデータ・コンバータを使用してデータをJSONまたはAvroに変換できます。

- Kinesis Streamsハンドラは、「プラガブル・フォーマッタの使用」で説明されているすべてのプラガブル・ハンドラをサポートします。

- Cassandra、MongoDBおよびJDBCハンドラは、プラガブル・フォーマッタを使用しません。

Avroフォーマッタ - バイナリ・ソース・データのサポートの向上

以前のリリースでは、AvroフォーマッタはAvroのbyteデータ型をサポートしていませんでした。バイナリ・データがかわりにBase64に変換され、stringデータ型のフィールドとしてAvroメッセージに保存されていました。これには、Base64からバイナリにデータを戻すための追加の変換手順が必要でした。

Avroフォーマッタは、Avroバイト・フィールドにマップされるバイナリ・ソース・フィールドを識別できるようになりました。ソース証跡ファイルからの元のバイト・ストリームは、Base64に変換せずに対応するAvroメッセージに伝播されます。

Avroフォーマッタ - 汎用ラッパー

schema_hashフィールドはschema_fingerprintフィールドに変更されました。schema_fingerprintはlong型で、org.apache.avro.SchemaNormalizationクラスのparsingFingerprint64(Schema s)メソッドを使用して生成されます。この識別子によって、汎用ラッパー・メッセージから、汎用ラッパー・メッセージに含まれるAvroペイロード・メッセージの生成に使用されるAvroスキーマへのトレーサビリティが向上します。

JSONフォーマッタ - 行モデル化データ

JSONフォーマッタは、操作モデル化データに加えて、行モデル化データもサポートします。行モデル化データには、挿入操作後のイメージ・データ、更新操作後のイメージ・データ、削除操作前のイメージ・データ、および主キー更新の特別な処理が含まれます。

Extractを使用するJava配信

Extractを使用するJava配信はサポートされておらず、このリリースで非推奨となりました。Java配信のサポートは、Replicatプロセスの使用でのみサポートされています。Replicatにより、パフォーマンスが向上し、チェックポイントのサポートが改善され、トランザクションのグループ化の制御が改善されます。

Kafkaハンドラ - バージョン

Kafkaバージョン0.8.2.2、0.8.2.1および0.8.2.0のサポートは中止されました。これにより、Kafkaプロデューサでのフラッシュ・コールの実装が可能になり、フロー制御およびチェックポイント化のサポートが改善されました。

HDFSハンドラ - ファイル作成

抽出、ロード、変換(ELT)を使用できるように、HDFSハンドラに新機能が追加されました。前のファイルが閉じるとただちに新しいファイルを作成するgg.handler.name.openNextFileAtRoll=trueプロパティが新しく追加されました。前のファイル・ストリームをクローズした直後に、新しいファイルがHDFSディレクトリに表示されます。

Avroオブジェクト・コンテナ・ファイル(OCF)形式または順序ファイル形式でHDFSファイルを書き込む際には、この機能は動作しません。

MongoDBハンドラ - サポート

- このハンドラのみが、ソース表から一意の行を複製できます。ソース表に定義済の主キーがなく、重複行がある場合、MongoDBターゲットに重複行を複製すると、重複キー・エラーが発生し、Replicatプロセスが異常終了します。

- 欠落した更新および削除は検出されないため、無視されます。

- シャード・コレクションでテストされていません。

- ミリ秒の精度の日時データ型のみをサポートします。証跡からの値でマイクロ秒またはナノ秒の精度のものは、ミリ秒の精度に切り捨てられます。

- 証跡でtimezoneを含むdatetimeデータ型は、サポートされていません。

- BSONドキュメントの最大サイズは16MBです。証跡レコード・サイズがこの制限を超えると、ハンドラはレコードを複製できません。

- DDL伝播はありません。

- 切捨て操作はありません。

JDBCハンドラ - サポート

- JDBCハンドラは汎用JDBC APIを使用します。つまりJDBCドライバが実装されたターゲット・データベースは、このハンドラを使用できる必要があります。JDBC APIをサポートする様々なデータベースが無数にあるため、OracleではすべてのターゲットのJDBCを動作保証できるわけではありません。Oracleでは、次のRDBMSターゲットのJDBCハンドラが動作保証されています。

- Oracle

- MySQL

- Netezza

- Redshift

- Greenplum

- ハンドラはREPERRORおよびHANDLECOLLISIONSパラメータを使用したReplicatをサポートします。『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

- Redshift JDBCドライバを介して取得されたデータベース・メタデータには、既知の制約事項があります。『Oracle GoldenGate for Big Dataリリース・ノート』を参照してください。
Replicatパラメータ・ファイルのRedshiftターゲット表名は、小文字で、二重引用符で囲む必要があります。次に例を示します。

MAP SourceSchema.SourceTable, target “public”.”targetable”;

- DDL操作はデフォルトで無視され、WARNレベルで記録されます。

- 調整Replicatは、シリアルではなくパラレルでトランザクションを適用するマルチスレッド・プロセスです。個々のスレッドは割り当てられたワークロードに対するフィルタリング、マッピング、変換、SQL構築およびエラー処理をすべて扱います。コーディネータ・スレッドは依存関係を示すようにスレッド間のトランザクションを調整します。これにより、データベース固有のルールに基づいた行ロック、ブロック・ロックまたは表ロックの問題が原因で同時に同じオブジェクトで特定のDMLが発生することを回避する同期的な方法で、DMLが適用されます。 データベース・ロックの問題がある場合、調整Replicatのパフォーマンスは、非常に遅くなるか一時停止します。『Oracle GoldenGateの管理for Windows and UNIX』を参照してください

デリミタ付きフォーマッタ - 制限

デリミタ付きフォーマッタ出力を生成するように構成されたハンドラは、単一の文字区切りフィールドのみを許可します。デリミタ・フィールドの長さが1文字より大きい場合、ハンドラで次のようなエラー・メッセージが表示され、Replicatは異常終了します。

oracle.goldengate.util.ConfigException: Delimiter length cannot be more than one character. Found delimiter [||]

1.3 Oracle GoldenGate for Big Dataの設定

ビッグ・データ・ターゲットとのOracle GoldenGate for Big Data統合を設定するために実行する必要のある様々なタスク。

トピック:

- Java環境設定

- プロパティ・ファイル

- トランザクションのグループ化

1.3.1 Java環境設定

Oracle GoldenGate for Big Data統合は、実行時にJava仮想マシンのインスタンスを作成します。Oracle GoldenGate for Big Dataには、最低でもOracle Java 8 JREをインストールする必要があります。

Java 8のインストール・ディレクトリを指すようにJAVA_HOME環境変数を設定することをお薦めします。また、Java配信プロセスでは、Java共有ライブラリのlibjvm.soおよびlibjsig.soをロードする必要があります。これらのライブラリは、JREの一部としてインストールされます。これらの共有ライブラリの場所を解決する必要があり、動的なライブラリを解決するように設定された適切な環境変数を、実行時にロードできます(つまり、LD_LIBRARY_PATH、PATHまたはLIBPATH)。

1.3.2 プロパティ・ファイル

Oracle GoldenGate Java Deliverのユーザー・イグジット(Oracle GoldenGate Javaアダプタとも言う)を実行するために必要なOracle GoldenGateプロパティ・ファイルが、2つあります。ビッグ・データ統合を含むJava統合をホストするOracle GoldenGate Java Deliveryです。いずれかのプロセスを実行するには、Replicatプロパティ・ファイルが必要です。Replicatファイル名に必要な命名規則は、process_name.prmです。Replicatプロパティ・ファイルでのエグジット構文には、Javaアダプタ・プロパティ・ファイルの名前と場所を指定します。Javaアダプタの構成プロパティにGoldenGate for Big Data統合が含まれるのは、Javaアダプタ・プロパティ・ファイルです。Oracle GoldenGate for Big Data統合を実行するには、ReplicatとJavaアダプタのプロパティ・ファイルが必要です。

あるいは、デフォルト構文process_name.propertiesを使用しても、Javaアダプタ・プロパティは解決できます。Javaアダプタ・プロパティ・ファイルのデフォルトの命名を使用すると、Javaアダプタ・プロパティ・ファイルの名前をReplicatプロパティ・ファイルから省略できます。

Oracle GoldenGate for Big Data統合のプロパティ・ファイルの例は、次のディレクトリのサブディレクトリにあります。

GoldenGate_install_dir/AdapterExamples/big-data

1.3.3 トランザクションのグループ化

Oracle GoldenGate for Big Data統合でパフォーマンスを向上させる主な方法は、トランザクションのグループ化を利用する方法です。トランザクションのグループ化では、複数のトランザクションの操作をグループ化し、1つの大きいトランザクションにまとめます。大きいグループにまとめられたトランザクションを実行したほうが、通常は、小さい個別のトランザクションを実行するより効率的だからです。「Replicatによる実行」で説明されているように、トランザクションのグループ化は、Replicatプロセスで可能です。

1.4 GoldenGate for Big Dataの構成

この項では、GoldenGate for Big Dataのハンドラの構成方法について説明します。

トピック:

- Replicatによる実行

- ロギング

- スキーマ展開およびメタデータ変更イベント

- 構成プロパティCDATA[]のラッピング

- 正規表現を使用した検索と置換

- Oracle GoldenGate for Big Data配信のスケーリング

- Oracle GoldenGate資格証明ストアでの識別子の使用

1.4.1 Replicatによる実行

この項では、Oracle GoldenGate ReplicatプロセスでJavaアダプタを実行する方法について説明します。内容は次のとおりです。

トピック:

- Replicatの構成

- Replicatプロセスの追加

- Replicatのグループ化

- Replicatのチェックポイント化

- 初期ロードのサポート

- サポートされないReplicatの機能

- マッピング機能

1.4.1.1 Replicatの構成

Javaアダプタで仕様するReplicatプロセス・プロパティ・ファイルの構成方法の例を次に示します。

REPLICAT hdfs
TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.properties
--SOURCEDEFS ./dirdef/dbo.def
DDL INCLUDE ALL
GROUPTRANSOPS 1000
MAPEXCLUDE dbo.excludetable
MAP dbo.*, TARGET dbo.*;

次に示すのは、このReplicat構成エントリの説明です。

REPLICAT hdfs - Replicatプロセスの名前。

TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.properties - 終了時のターゲット・データベースをlibggjava.soに設定し、Javaアダプタのプロパティ・ファイルをdirprm/hdfs.propertiesに設定します。

--SOURCEDEFS ./dirdef/dbo.def - ソース・データベース定義ファイルを設定します。これは、Oracle GoldenGateの証跡ファイルが証跡でメタデータを提供するため、コメント・アウトされています。

GROUPTRANSOPS 1000 - ソース証跡ファイルからの1000個のトランザクションを1つのターゲット・トランザクションにグループ化します。これがデフォルトで、ビッグ・データ統合のパフォーマンスが向上します。

MAPEXCLUDE dbo.excludetable - 除外する表を設定します。

MAP dbo.*, TARGET dbo.*; - 入力表から出力表へのマッピングを設定します。

1.4.1.2 Replicatプロセスの追加

ggsciでReplicatプロセスを追加して起動するコマンドは、次のとおりです。

ADD REPLICAT hdfs, EXTTRAIL ./dirdat/gg
START hdfs

1.4.1.3 Replicatのグループ化

Replicatプロセスは、Replicat構成プロパティGROUPTRANSOPSを提供してトランザクションのグループ化を制御します。デフォルトでは、Replicatプロセスは1000個のトランザクションを1つのターゲット・トランザクションにグループ化します。トランザクションのグループ化をオフにする場合は、ReplicatプロパティGROUPTRANSOPSを1に設定します。

1.4.1.4 Replicatのチェックポイント化

Replicatチェックポイント・ファイル.cprのほか、データベースのReplicatにおけるCHECKPOINTTABLEと似た情報を含む追加のチェックポイント・ファイルdirchk/group.cpjも作成されます。

1.4.1.5 初期ロードのサポート

Replicatではすでに、一連の証跡ファイルに書き込むオンライン・キャプチャ・プロセスおよび初期ロード・プロセスの両方からの証跡ファイルを読み取ることができます。さらに、Extractパラメータ・ファイルでRMTTASKの指定を使用して、特別実行の初期ロード・プロセスの配信をサポートするようにReplicatを構成することもできます。ダイレクト・ロードの構成の詳細は、Oracle GoldenGateダイレクト・ロードを使用したデータのロードに関する項を参照してください。

1.4.1.6 サポートされないReplicatの機能

次のReplicat機能は、このリリースではサポートされません。

- BATCHSQL

- SQLEXEC

- ストアド・プロシージャ

- 競合の解決および検出(CDR)

1.4.1.7 マッピング機能

Oracle GoldenGate Replicatプロセスは、カスタム・ターゲット・スキーマへのマッピングをサポートしています。メタデータ・プロバイダ機能を使用して、ターゲット・スキーマ(複数も可)を定義してから、Replicat構成ファイルで標準のReplicatマッピング構文を使用して、マッピングを定義する必要があります。レプリケーション構成ファイルのReplicatマッピング構文の詳細は、データのマッピングと操作に関する項を参照してください。

1.4.2 ロギング

ビッグ・データのターゲットに対して使用するOracle GoldenGate for Big Data統合をトラブルシューティングするには、ロギングが必須です。この項では、Oracle GoldenGate for Big Data統合のログと、ロギングのベスト・プラクティスについて説明します。

トピック:

- Replicatプロセスのロギング

- Java層のロギング

1.4.2.1 Replicatプロセスのロギング

Oracle GoldenGate for Big Data統合は、「Javaメッセージの配信」で説明されているJava配信の機能を利用します。この設定では、Oracle GoldenGateのReplicatプロセスがユーザー・エグジット共有ライブラリをロードします。この共有ライブラリは次に、Java仮想マシンをロードし、それによってJavaインタフェースを提供するターゲットとのインタフェースをとります。したがって、データのフローは次のようになります。

Replicatプロセス —> ユーザー・イグジット —> Java層

ユーザーがログを見直して新しいインストールと統合をトラブルシューティングするには、すべての層で正しくログを記録することが重要です。また、問題が発生してOracleサポートへの連絡が必要になった場合も、ログ・ファイルは問題を効率的に解決するために、Oracleサポートに提供する情報としても重要です。

Replicatプロセスを実行すると、GoldenGate_Home/dirrptディレクトリにログ・ファイルが作成または追加されます。ファイルの命名規則は、process_name.rpt.です。新しいOracle GoldenGateプロセスをデプロイするときに問題が発生した場合は、最初に問題の有無を調べるべきログ・ファイルの候補です。ビッグ・データ・アプリケーションと統合する場合、Java層は重要です。

1.4.2.2 Java層のロギング

Oracle GoldenGate for Big Data製品には、Java層からログを記録できる柔軟性があります。ベスト・プラクティスとしては、Log4jロギングを使用してJava層からログを記録することをお薦めします。単純なLog4jロギングを有効にするには、Javaアダプタ構成ファイルで2つの構成値を設定する必要があります。

gg.log=log4j
gg.log.level=INFO

gg.log設定で、Log4jファイルはGoldenGate_Home/dirrptディレクトリに作成され、ファイル名はprocess_name_log level_log4j.logという命名規則に従います。サポートされるLog4jログ・レベルは、ロギングの粒度の順に次のリストになります。

- OFF

- FATAL

- ERROR

- WARN

- INFO

- DEBUG

- TRACE

ロギング・レベルの選択には、粒度が低いほうのロギング・レベルがすべて含まれます(つまり、WARNを選択した場合は、FATAL、ERROR、WARNのログ・メッセージがログ・ファイルに書き込まれます)。Log4jロギングはまた、個々のLog4jプロパティ・ファイルでも制御できます。こうした個別のLog4jプロパティ・ファイルを有効にするには、Javaアダプタ・プロパティ・ファイルでbootoptionsプロパティを編集します。Log4jプロパティ・ファイルの3つの例が、インストール時に追加され、次のクラスパスにも含まれています。

log4j-default.properties
log4j-debug.properites
log4j-trace.properties

これらのファイルのいずれかで、次のようにbootoptionsを変更できます。

javawriter.bootoptions=-Xmx512m -Xms64m -Djava.class.path=.:ggjava/ggjava.jar -Dlog4j.configuration=samplelog4j.properties

カスタマイズした独自のLog4jプロパティ・ファイルを使用してロギングを制御できます。カスタマイズしたLog4jプロパティ・ファイルを、JVMが検索してロードするには、それがJavaクラスパスに存在する必要があります。カスタムLog4jプロパティ・ファイルの例を次に示します。

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=sample.log
log4j.appender.file.MaxFileSize=1GB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

カスタムのLog4jプロパティ・ファイルを使用する場合には、重要な要件が2つあります。1つ目に、カスタムLog4jプロパティ・ファイルのパスがjavawriter.bootoptionsプロパティに含まれる必要があります。ロギングは、ロギングの書記化後にgg.classpathプロパティの内容が実際にclassloaderに追加されるとき、JVMが初期化されるとただちに初期化されます。2つ目に、プロパティ・ファイルを正しくロードするclasspathは、ワイルドカードを追加していないプロパティ・ファイルを含むディレクトリである必要があります。

1.4.3 スキーマ展開およびメタデータ変更イベント

証跡内のメタデータは、スキーマ展開およびビッグ・データのターゲット・アプリケーションへのスキーマ伝播を含む、Oracle GoldenGate for Big Dataによるメタデータ変更イベントのシームレスな実行時処理を可能にする機能です。NO_OBJECTDEFSは、ExtractおよびReplicatのEXTTRAILおよびRMTTRAILパラメータのサブパラメータで、証跡機能の重要なメタデータを抑制し、静的なメタデータ定義の使用に戻すことができます。

Oracle GoldenGate for Big Dataのハンドラとフォーマッタには、メタデータ変更イベントが発生したときにアクションを実行する機能があります。メタデータ変更イベントが発生したときにアクションを実行できる機能は、ソース証跡ファイルで利用できるメタデータ変更イベントによって異なります。Oracle GoldenGate は、ソースのOracleデータベースからの証跡のメタデータと、DDLデータを伝播をサポートします。ソース証跡ファイルに、証跡のメタデータとDDLデータ(メタデータ変更イベント)がない場合、Oracle GoldenGate for Big Dataはメタデータ変更イベントを処理できません。

1.4.4 構成プロパティCDATA[]のラッピング

GoldenGate for Big Dataのハンドラおよびフォーマッタでは、値を空白として解釈できるJavaプロパティ・ファイルで、多くのパラメータの構成がサポートされています。Javaアダプタの構成処理では、Java構成ファイルの構成値から空白が削除されます。空白を削除するこの動作は、構成値によっては望ましいこともありますか、別の構成値には望ましくない場合もあります。また、選択した構成変数で空白が維持されるように、空白値を特殊な構文でラップできます。GoldenGate for Big Dataは、空白を維持するためにCDATA[]のXML構文を借用しています。空白文字と見なされる値を、CDATA[]の内部にラップできます。

区切りテキスト・フォーマッタで、改行を区切り文字として設定しようとする例を次に示します。

gg.handler.{name}.format.lineDelimiter=\n

この構成は成功しません。改行文字は空白として解釈され、構成値から削除されてしまうからです。したがって、gg.handler設定では実質的に、行区切り文字が空白文字列に設定されます。

改行文字の構成を維持するには、次のように、その文字をCDATA[]ラッパーでラップするだけです。

gg.handler.{name}.format.lineDelimiter=CDATA[\n]

CDATA[]のラッピングでプロパティを構成すると、空白が維持され、行区切り文字は改行文字になります。

1.4.5 正規表現を使用した検索と置換

個別に構成されるスキーマ・データ(カタログ名、スキーマ名、表名、列名)と列値データの両方についてより強力な検索および置換操作を実行できます。正規表現(regex)は、パターン・マッチングを通じて検索文字列をカスタマイズする文字列です。文字列を1つのパターンまたは正確に一致する部分に一致させることができます。Oracle GoldenGate for Big Dataでは、標準のOracle Java正規表現パッケージjava.util.regexを使用します。詳細は、『The Single UNIX Specification, Version 4』の基本的な定義部にある「Regular Expressions」を参照してください。

トピック:

- スキーマ・データの置換の使用

- コンテンツ・データの置換の使用

1.4.5.1 スキーマ・データの置換の使用

gg.schemareplaceregexおよびgg.schemareplacestringプロパティを使用してスキーマ・データを置換できます。gg.schemareplaceregexを使用して正規表現を設定してから、それを使用してカタログ名、スキーマ名、表名、および列名で対応する一致項目を検索します。一致項目はgg.schemareplacestring値の内容に置き換えられます。gg.schemareplacestringのデフォルト値は空の文字列または""です。

たとえば、システム表名の中には、$mytableのようにドル記号から始まるものがあります。ほとんどのビッグ・データ・ターゲットでは表名にドル記号を使用できませんが、これらの表を複製する必要がある場合があります。ドル記号を削除するには、次の置換文字列を構成できます。

gg.schemareplaceregex=[$]
gg.schemareplacestring=

検索および置換された表名の結果の例はmytableです。これらのプロパティはCDATA[]ラッピングもサポートして、構成値の値の空白を保持します。したがって、前と同じ例でCDATA[]ラッピングすると次のようになります。

gg.schemareplaceregex=CDATA[[$]]
gg.schemareplacestring=CDATA[]

スキーマの検索および置換機能は、次の構成構文を使用した複数の検索正規表現および置換文字列の使用をサポートします。

gg.schemareplaceregex=some_regex
gg.schemareplacestring=some_value
gg.schemareplaceregex1=some_regex
gg.schemareplacestring1=some_value
gg.schemareplaceregex2=some_regex
gg.schemareplacestring2=some_value

1.4.5.2 コンテンツ・データの置換の使用

gg.contentreplaceregexおよびgg.contentreplacestringプロパティを使用してコンテンツ・データを置換し、構成された正規表現を使用して列値を検索して、一致項目を置換文字列で置換できます。たとえば、これは列値の改行文字を置き換えるのに役立ちます。区切りテキスト・フォーマッタが使用された場合、データに含まれる改行文字は分析ツールで行区切り文字として誤って解釈されます。

n個のコンテンツ置換regex検索値を構成できます。regex検索および置換は、構成の順序で実行されます。構成される値は、次の特定の順序に従う必要があります。

gg.contentreplaceregex=some_regex
gg.contentreplacestring=some_value
gg.contentreplaceregex1=some_regex
gg.contentreplacestring1=some_value
gg.contentreplaceregex2=some_regex
gg.contentreplacestring2=some_value

添え字2を使用せずに添え字3を構成すると、添え字3の構成が無視されます。

注意:

正規表現の検索と置換にはコンピューティング処理が必要で、Oracle GoldenGate for Big Dataプロセスのパフォーマンスが低下する可能性があります。

改行を空白文字に置き換えるには、次のプロパティ構成を使用できます。

gg.contentreplaceregex=[\n]
gg.contentreplacestring=CDATA[ ]

これによって、列値が次の値から変更されます。

this is
me

変更後:

this is me

どちらの値もCDATAラッピングをサポートします。2つ目の値はCDATA[]ラッパーでラップする必要があります。1つの空のスペースは空白と解釈されて、Oracle GoldenGate for Big Data構成層でトリミングされます。さらに、複数の検索および置換文字列を構成できます。たとえば、次の文字列から改行を削除するのに加え、列値から先頭および末尾の空白も削除します。

^\\s+|\\s+$

gg.contentreplaceregex1=^\\s+|\\s+$
gg.contentreplacestring1=CDATA[]

1.4.6 Oracle GoldenGate for Big Data配信のスケーリング

Oracle GoldenGate for Big Dataは、スループット向上のために、ソース証跡ファイルの分割をサポートします。複数のReplicatプロセスに分割するか、またはCoordinated Deliveryを使用して単一のReplicatプロセス内で複数のJavaアダプタ・インスタンスをインスタンス化します。これにより、Oracle GoldenGate for Big Data配信をスケーリングできます。

パフォーマンスが最大となるようにハンドラをチューニングした後でも、Oracle GoldenGate for Big Data統合ターゲットへのスループットが、サービス・レベル合意を満たすのに不十分な場合があります。これが発生すると、次のいずれかの方法を使用して、パラレル処理を構成し、ターゲットに配信できます。

- 複数のReplicatプロセスを、同じソース証跡ファイルからデータを読み取るように構成できます。すべてのプロセスがソース証跡ファイル全体をまとめて処理するように、これらの各Replicatプロセスは、ソース証跡ファイルのデータのサブセットを処理するよう構成されます。 このソリューションを使用した別々のReplicatプロセス間の調整はありません。

- Oracle GoldenGate Coordinated Deliveryは、単一のReplicatプロセス内のソース証跡ファイルからのデータの処理をパラレル化するために使用できます。このソリューションは、構成済の各サブセットが別の配信スレッドによって処理される論理サブセットへの証跡ファイルの分割を伴います。Coordinated Deliveryの詳細は、https://blogs.oracle.com/dataintegration/entry/goldengate_12c_coordinated_replicatを参照してください。

どちらの方法でも、スループットの向上のため、データをパラレル処理に分割できます。次の2つの方法のいずれかでデータを分割することをお薦めします。

- ソース・データをソース表別に分割 - データはソース表別のサブセクションに分割されます。たとえば、Replicatプロセス1はソース表(表1および表2)を処理しますが、Replicatプロセス2はソース表(表3および表2)のデータを処理します。データはソース表ごとに分割され、個々の表データはさらに分割されることはありません。

- ソース表データをサブストリームに分割 - ソース表のデータが分割されます。たとえば、Replicatプロセス1はソース表1のデータ範囲の半分を処理し、Replicatプロセス2はソース表1のもう半分のデータを処理します。

その他の制限事項:

- パラレル適用はサポートされていません。

- BATCHSQLパラメータはサポートされていません。

例1-1 Oracle GoldenGate for Big Dataのハンドラのスケーリング・サポート

ハンドラ名

ソース・データをソース表別に分割

ソース表データをサブストリームに分割

Cassandra

サポート

次の場合にサポートされます。

- Cassandraで必要なターゲット表が事前作成されている場合。

- メタデータ変更イベントが発生しない場合。

Elastic Search

Flume

サポート

Avroなど、スキーマの伝播をサポートするフォーマットに対してサポートされます。これは、複数のインスタンスによって同じスキーマ情報がターゲットにフィードされるため、あまり望ましくありません。

HBase

必要なすべてのHBaseネームスペースがHBaseで事前作成されている場合にサポートされます。

次の場合にサポートされます。

- 必要なすべてのHBaseネームスペースがHBaseで事前作成されている場合。

- 必要なすべてのHBaseターゲット表がHBaseで事前作成されている場合。HBase表にはスキーマ定義がなく、ソース・メタデータ変更にHBaseでのスキーマ変更は必要ではないため、スキーマ展開は問題ではありません。

- ソース・データに切捨て操作が含まれない場合。

HDFS

サポート

いくつかの制限付きでサポートされています。

- 生成されるHDFSファイルの命名規則を、ファイル名が衝突しないように選択する必要があります。HDFSファイル名が衝突すると、Replicatが異常終了します。調整された適用を使用する場合は、${groupName}をgg.handler.name.fileNameMappingTemplateプロパティの構成の一部として構成することをお薦めします。${groupName}テンプレートによってReplicatのスレッド番号に連結されたReplicat名に解決され、Replicatスレッドごとに一意の命名が提供されます。

- HDFSとHiveの統合へのスキーマの伝播は、現在はサポートされていません。

JDBC

サポート

サポート

Kafka

サポート

Avroなど、スキーマの伝播をサポートするフォーマットに対してサポートされます。これは、複数のインスタンスによって同じスキーマ情報がターゲットにフィードされるため、あまり望ましくありません。

Kafka Connect

サポート

サポート

Kinesis Streams

サポート

サポート

MongoDB

サポート

サポート

1.4.7 Oracle GoldenGate資格証明ストアでの識別子の使用

Oracle GoldenGateの資格証明ストアはユーザーIDおよびその暗号化されたパスワード(ともに資格証明と呼ばれます)を管理します。これらはOracle GoldenGateプロセスにより使用され、ローカル・データベースと対話します。資格証明ストアを使用すると、Oracle GoldenGateのパラメータ・ファイルにユーザー名およびクリアテキスト・パスワードを指定する必要がなくなります。ユーザーIDのかわりにパラメータ・ファイルのオプションの別名を使用して、資格証明ストアのユーザーIDとパスワードのペアにマップすることもできます。資格証明ストアはOracle Credential Store Framework (CSF)内の自動ログイン・ウォレットとして実装されます。LDAPディレクトリの使用は、Oracle GoldenGate資格証明ストアではサポートされていません。自動ログイン・ウォレットは、必要なパスワードを指定するための人の介在を必要とせず、Oracle GoldenGateプロセスの自動再起動をサポートします。

Oracle GoldenGate for Big Dataでは、実際のユーザーIDまたはパスワードではなく、別名およびドメインをプロパティ・ファイルで指定します。ユーザー資格証明は、セキュアなウォレット・ストレージで管理されます。

トピック:

- 資格証明ストアの作成

- 資格証明ストアへのユーザーの追加

- 資格証明ストアにアクセスするためのプロパティの構成

1.4.7.1 資格証明ストアの作成

ビッグ・データ環境用の資格証明ストアを作成できます。

GGSCI ADD CREDENTIALSTOREコマンドを使用して、Oracle GoldenGateインストール・ディレクトリ(デフォルト)のdircrd/サブディレクトリにあるcwallet.ssoという名前のファイルを作成します。

資格証明ストアcwallet.ssoファイルの場所を指定するには、GLOBALSファイルのCREDENTIALSTORELOCATIONパラメータで目的の場所を指定します。

資格証明ストアのコマンドの詳細は、『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

注意:

Oracle GoldenGateインスタンスごとに1つの資格証明ストアのみ使用できます。

1.4.7.2 資格証明ストアへのユーザーの追加

ビッグ・データ環境の資格証明ストアを作成した後、ストアにユーザーを追加できます。

各ユーザーを作成するにはGGSCI ALTER CREDENTIALSTORE ADD USER userid PASSWORD password [ALIAS alias] [DOMAIN domain]コマンドを実行します。

- useridはユーザー名です。資格証明ストアに配置できるユーザー名のインスタンスは1つのみです(ALIASまたはDOMAINオプションが使用されていない場合)。

- passwordはユーザーのパスワードです。このオプションを使用すると、パスワードはエコーされます(不明瞭化されません)。このオプションを省略すると、コマンドはパスワードを要求しますが、入力時に不明瞭化されます(より安全な方法として推奨されます)。

- aliasはユーザー名の別名です。ログイン資格証明が必要なパラメータとコマンドでは、資格証明のかわりに別名を使用します。ALIASオプションを省略すると、別名はデフォルトでユーザー名に設定されます。

次に例を示します。

ALTER CREDENTIALSTORE ADD USER scott PASSWORD tiger ALIAS scsm2 domain ggadapters

資格証明ストアのコマンドの詳細は、『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

1.4.7.3 資格証明ストアにアクセスするためのプロパティの構成

Oracle GoldenGate Java Adapterプロパティ・ファイルでは、実行時に資格証明ストアのユーザー名とパスワード・エントリを解決する固有の構文が必要です。ユーザー名を解決するための構文は次のとおりです。

ORACLEWALLETUSERNAME alias domain_name

パスワードを解決するための構文は次のとおりです。

ORACLEWALLETPASSWORD alias domain_name

次の例は、myaliasという別名とmydomainというドメインで資格証明ストアのエントリを構成する方法を示しています。

注意:

HDFS Hive JDBCでは、ユーザー名とパスワードが暗号化されます。

Oracle Walletの統合は、文字列usernameまたはpasswordを含む構成プロパティに対してのみ機能します。次に例を示します。

gg.handler.hdfs.hiveJdbcUsername=ORACLEWALLETUSERNAME[myalias mydomain]
gg.handler.hdfs.hiveJdbcPassword=ORACLEWALLETPASSWORD[myalias mydomain]

ユーザー名とパスワードのエントリは資格証明ストアでアクセス可能な値と見なされます。Java Adapter層で解決される(Cユーザー・イグジット層ではアクセスされない)構成プロパティは資格証明ストアから解決できます。これにより、機密情報を含む構成エントリを保護する方法に柔軟性を持たせることができます。

2 Cassandraハンドラの使用

この章では、Cassandraハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- 詳細な機能

- Cassandraハンドラの設定および実行

- 自動DDL処理

- パフォーマンスに関する考慮事項

- その他の考慮事項

- トラブルシューティング

2.1 概要

Cassandraハンドラは、Apache Cassandraデータベースへのインタフェースを提供します。Apache Cassandraは、大量のデータを格納するために設計されたNoSQLデータベース管理システムです。Cassandraクラスタ構成によって、複数のマシン間でデータの水平スケーリングおよびレプリケーションが行われます。Cassandraクラスタ内の複数のノードにデータを複製することによって、高可用性が実現し、単一点障害を防ぐことができます。Apache Cassandraはオープン・ソースで、低価格のコモディティ・ハードウェアで実行できるように設計されています。

Cassandraでは、原子性、整合性、独立性および永続性に関して、従来のリレーショナル・データベース管理システムの原理が緩和されています。Cassandraの実装を検討する場合は、従来のRDBMSとの相違点と、その相違点が個々のユースケースにどのように影響するかを理解しておくことが重要です。

Cassandraでは最終的に整合性が保たれます。最終的整合性モデルでは、特定の行のデータの状態にアクセスすると、最新の変更によって定義されたとおりに、その行のデータの最新状態を最終的には返します。ただし、行の状態の作成および変更と、その行の状態を問い合せたときの戻り値の間に、レイテンシ期間が生じる場合があります。最終的整合性では、Cassandra構成およびCassandraクラスタが現在置かれているワークロードのレベルに応じてレイテンシ期間は予測可能であることが約束されます。詳細は、次に示すApache CassandraのWebサイトを参照してください。

http://cassandra.apache.org/

Cassandraハンドラは、Javaアダプタ・プロパティ・ファイルのgg.handler.name.consistencyLevelプロパティの構成を使用して、整合性の一部を制御します。

2.2 詳細な機能

トピック:

- Cassandraのデータ型

- カタログ、スキーマ、表および列の名前マッピング

- DDL機能

- 操作の処理

- 圧縮更新と完全イメージ更新

- 主キーの更新

2.2.1 Cassandraのデータ型

Cassandraには多くの列データ型が用意されており、そのデータ型のほとんどがCassandraハンドラでサポートされています。ソース証跡ファイルの列値から、CassandraハンドラでCassandra列タイプを表す対応するJavaタイプへのデータ型変換が必要です。このデータ変換プロセスは、実行時変換エラーのリスクを引き起こします。フィールドが適切にマップされていないと(英数字データを含むvarcharのソースをCassandraのintにマップするなど)、実行時エラーが発生し、Cassandraハンドラが異常終了することがあります。Cassandraデータ型のマッピングを説明するリンクを次に示します。

https://github.com/datastax/java-driver/tree/3.x/manual#cql-to-java-type-mapping

次のCassandra列データ型はサポートされていません。

- list

- map

- set

- tuple

Cassandraに取り込むために対応するJavaタイプにデータを変換する特別な処理が必要になるユースケースが存在する場合があります。この場合、次のオプションがあります。

1. 一般的な正規表現の検索と置換機能を使用して、Cassandraで使用するJavaデータ型に変換できる方法にフォーマットされたソース列値データを取得できる場合があります。

2. デフォルトのデータ型変換ロジックを実装または拡張して、個々のユースケース用のカスタム・ロジックにオーバーライドできます。これが必要な場合、詳細はOracleサポートに連絡してください。

2.2.2 カタログ、スキーマ、表および列の名前マッピング

従来のRDBMSでは、構造化データを表に分割します。関連表は、データベースと呼ばれる高いレベルのコレクションに含まれます。Cassandraには、これら両方の概念が含まれています。RDBMSでの表はCassandraでも表ですが、RDBMSでのデータベース・スキーマはCassandraではキースペースになります。

ソース証跡ファイルのメタデータ定義からのデータ・マップを対応するCassandraのキースペースと表にマップする方法を理解することが重要です。ソース表は通常、schema.tableで定義される2部構成の名前またはcatalog.schema.tableで定義される3部構成の名前のいずれかになります。

次の表では、カタログ、スキーマおよび表の名前をCassandraにマップする方法について説明します。特別な構文を使用しないかぎり、Cassandraでは、すべてのキースペース、表名および列名は小文字に変換されます。

ソース証跡ファイルの表名

Cassandraキースペース名

Cassandra表名

QASOURCE.TCUSTMER

qasource

tcustmer

dbo.mytable

dbo

mytable

GG.QASOURCE.TCUSTORD

gg_qasource

tcustord

2.2.3 DDL機能

トピック:

- キースペース

- 表

- 列の追加機能

- 列の削除機能

2.2.3.1 キースペース

Cassandraハンドラは、Cassandraのキースペースを自動的に作成しません。Cassandraのキースペースでは、レプリケーション・ファクタ、レプリケーション・ストラテジおよびトポロジを定義します。Cassandraハンドラには、キースペースを作成するための十分な情報がないため、キースペースを手動で作成する必要があります。

CassandraシェルからCREATE KEYSPACEコマンドを使用して、Cassandraのキースペースを作成できます。

2.2.3.2 表

Cassandraハンドラは、Cassandraの表を作成するよう構成した場合、自動的に作成できます。ソース表定義は、Cassandraの表を作成するための情報のソースが不十分でもかまいません。Cassandraの主キーは次の部分に分かれます。

- パーティショニング・キーは、表のデータをCassandraのパーティションに分割する方法を定義します。

- クラスタリング・キーパーティション内のアイテムの順序を定義します。

自動表作成のデフォルト・マッピングでは、最初の主キーがパーティショニング・キーになり、その他の主キーがクラスタリング・キーになるようにマッピングされます。

Cassandraハンドラによる自動表作成は、概念の証明としては適切ですが、データ定義で正常にスケーリングが行われない可能性があります。Cassandraで主キーの構成が不十分な表を作成した場合、Cassandraに格納されるデータの量が増えると、収集および取得のパフォーマンスが低下する可能性があります。複製される表のメタデータを分析し、対応するCassandraの表を戦略的に手動で作成することをお薦めします。その表は適切にパーティション化およびクラスタ化され、正常にスケーリングできるものにします。

Cassandraの表の主キー定義は、いったん作成すると変更することができません。Cassandra表の主キー定義を変更するには、次の手動の手順を実行する必要があります。

1. ステージング表を作成します。

2. 元の表からステージング表にデータを移入します。

3. 元の表を削除します。

4. 変更された主キー定義を使用して、元の表を再作成します。

5. ステージング表から元の表にデータを移入します。

6. ステージング表を削除します。

2.2.3.3 列の追加機能

Cassandraハンドラを構成して、ソース証跡ファイルの表定義には存在するが、Cassandra表定義には存在しない列を追加できます。Cassandraハンドラは、列を追加するメタデータ変更イベントに対応できます。ソース表定義をターゲットCassandra表定義に調整する調整プロセスが発生します。列を追加するよう構成すると、ソース表定義に存在し、Cassandra表定義には存在しない列が追加されます。表の調整プロセスは、アプリケーションの起動後、表に対する操作が最初に発生したときに実行されます。調整プロセスは、ソース表でのメタデータ変更イベント後、その変更イベント後にソース表に対する操作が最初に発生したときに再実行されます。

2.2.3.4 列の削除機能

Cassandraハンドラを構成して、ソース証跡ファイルの定義には存在しないが、Cassandra表定義には存在する列を削除できます。Cassandraハンドラは、列を削除するメタデータ変更イベントに対応できます。ソース表定義をターゲットCassandra表定義に調整する調整プロセスが発生します。列を削除するよう構成すると、Cassandra表定義に存在し、ソース表定義には存在しない列が削除されます。

注意:

列を削除すると、Cassandra表からデータが永久に削除されるため、危険を伴う可能性があります。このモードを構成する前に、個々のユースケースを慎重に考慮する必要があります。

注意:

主キー列は削除できません。試行すると、異常終了します。

注意:

実際にDDL処理が行われないため、列名の変更は適切に処理されません。ソース・データベースでの列名の変更イベントは、Cassandraハンドラでは、既存の列を削除し新しい列を追加した場合と同じように解釈されます。

2.2.4 操作の処理

Cassandraハンドラは、非同期APIまたは同期APIのいずれかを使用して、Cassandraに操作をプッシュします。非同期モードでは、トランザクションのコミット(GROUPTRANSOPSを使用したグループ化されたトランザクションのコミット)時に操作がフラッシュされ、書込み永続性が保証されます。Cassandraハンドラは、トランザクションの方法でのCassandraとのインタフェースがありません。

Cassandraでは、挿入、更新および削除操作が、従来のRDBMSとは異なる方法で処理されます。次に、挿入、更新および削除操作がCassandraでどのように解釈されるかについて説明します。

- 挿入 - Cassandraに行がまだ存在しない場合、挿入操作は挿入として処理されます。Cassandraに行がすでに存在する場合、挿入操作は更新として処理されます。

- 更新 - Cassandraに行が存在しない場合、更新操作は挿入として処理されます。Cassandraに行がすでに存在する場合、更新操作は挿入として処理されます。

- 削除 - Cassandraに行が存在しない場合、削除操作は無効です。Cassandraに行が存在する場合、削除操作は削除として処理されます。

Cassandraのデータの状態は、最終的には冪等です。ソース証跡ファイルまたは証跡ファイルのセクションを再生できます。最終的には、証跡データがCassandraに書き込まれた回数に関係なく、Cassandraデータベースの状態は同じになります。

2.2.5 圧縮更新と完全イメージ更新

Oracle GoldenGateを使用すると、更新が発生した場合にソース証跡ファイルに伝播されるデータを制御できます。ソース証跡ファイルの更新のデータは、更新の圧縮または完全イメージのいずれかで、次のように列情報が指定されます。

圧縮

値が変更された主キーおよび列が対象です。変更されなかった列のデータは、証跡ファイルには提供されません。

完全イメージ

値が変更された主キーおよび列を含むすべての列と、値が変更されなかった列が対象です。

Cassandraハンドラにとっては、更新で使用可能な情報の量が重要です。ソース証跡ファイルに完全イメージの変更データが含まれる場合、Cassandraハンドラはプリコンパイルされた文を使用して、Cassandraで行更新を実行できます。完全イメージを使用すると、CassandraハンドラはCassandraの行に対して主キー更新を実行することもできます。Cassandraでは、主キーを変更することができないため、主キーを変更する更新は、削除と挿入として処理される必要があります。逆に、圧縮更新は、Cassandraの行更新にプリコンパイルされた文を使用できないということです。値と主キーの変更を特定する単純な文を動的に作成し、実行する必要があります。つまり、圧縮更新では、主キー更新は不可能で、その結果Cassandraハンドラは異常終了します。

ハンドラが圧縮更新または完全イメージ更新を指定できるように、制御プロパティgg.handler.name.compressedUpdatesおよびgg.handler.name.compressedUpdatesforを設定する必要があります。

デフォルト値のtrueは、Cassandraハンドラが圧縮更新を指定することを意味します。プリコンパイルされた文は更新に使用されず、主キー更新によってハンドラは異常終了します。

値をfalseに設定すると、プリコンパイルされた文は更新に使用され、主キー更新を処理できます。ソース証跡ファイルに完全イメージ・データが含まれていないと、危険を伴い、データが破損する可能性があります。これは、データが欠落している列がnullと見なされてしまい、null値がCassandraにプッシュされるためです。ソース証跡ファイルに圧縮データまたは完全イメージ・データのどちらが含まれているか疑わしい場合は、gg.handler.name.compressedUpdatesをtrueに設定する必要があります。

また、CLOBおよびBLOBデータ型は、LOB列値が変更された場合を除き、更新時にLOBデータを伝播しません。そのため、ソース表にLOBデータが含まれる場合は、gg.handler.name.compressedUpdatesをtrueに設定する必要があります。

2.2.6 主キーの更新

主キーの更新

Cassandraの行の主キー値は、変更することができません。Cassandraの行の主キー値を変更する更新操作は、削除と挿入として処理される必要があります。Cassandraハンドラは、削除と挿入としてのみCassandraの主キーの変更となる更新操作を処理できます。この操作を正常に処理するには、ソース証跡ファイルに、すべての列の変更前と変更後の完全なデータ・イメージが含まれている必要があります。主キーの更新を正常に処理するには、Cassandraハンドラのgg.handler.name.compressed構成プロパティをfalseに設定する必要があります。

2.3 Cassandraハンドラの設定および実行

ここでは、Cassandraハンドラのコンポーネントの構成とハンドラの実行について説明します。

次を構成する必要があります。

ドライバ・ライブラリの取得

Datastax Java Driver for Cassandraは、Oracle GoldenGate for Big Dataに付属しません。Datastax Java Driver for Cassandraの推奨バージョンは3.1で、次の場所からダウンロードします。

https://github.com/datastax/java-driver

クラスパスの設定

Javaアダプタ・プロパティ・ファイルのgg.classpath構成プロパティを構成して、Datastax Java Driver for CassandraのJARを指定する必要があります。

gg.classpath={download_dir}/cassandra-java-driver-3.1.0/*:{download_dir}/cassandra-java-driver-3.1.0/lib/*

トピック:

- Cassandraハンドラ構成

- サンプル構成

- セキュリティ

2.3.1 Cassandraハンドラ構成

Cassandraハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表2-1 Cassandraハンドラの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handlerlist

必須

任意の文字列

なし

Cassandraハンドラの名前を指定します。Cassandraハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type=cassandra

必須

cassandra

なし

Cassandraハンドラを選択し、変更データ取得をCassandraにストリーミングします。

gg.handler.name.mode

オプション

op | tx

op

デフォルトが推奨されます。opモードでは、操作は受信したとおりに処理されます。txモードでは、操作はトランザクションのコミット時にキャッシュされ、処理されます。txモードのほうが低速で、作成されるメモリー・フットプリントが大きくなります。

gg.handler.name.contactPoints=

オプション

Cassandraハンドラの接続先となるホスト名のカンマ区切りリスト。

localhost

Cassandraクラスタへの初期接続を確立するドライバのCassandraホスト・マシンのカンマ区切りリスト。この構成プロパティには、Cassandraクラスタに登録されたすべてのマシンを含める必要はありません。1つのマシンに接続することによって、ドライバはCassandraクラスタ内の他のマシンについて理解し、必要に応じてそのマシンへの接続を確立できます。

gg.handler.name.username

オプション

有効なユーザー名の文字列。

なし

Cassandraに接続するためのユーザー名。これは、資格証明が必要なCassandraを構成する場合に必須です。

gg.handler.name.password

オプション

有効なパスワードの文字列。

なし

Cassandraに接続するためのパスワード。これは、資格証明が必要なCassandraを構成する場合に必須です。

gg.handler.name.compressedUpdates

オプション

true | false

true

Cassandraハンドラがソース証跡ファイルからの完全イメージ更新を必要とするかどうかを設定します。trueに設定すると、ソース証跡ファイルの更新には、変更された主キーおよび列の列データのみが含まれます。Cassandraハンドラは、変更された列のみを更新する単純な文として更新を実行します。

falseに設定すると、ソース証跡ファイルの更新には、列値が変更されたかどうかに関係なく、主キーおよびすべての列の列データが含まれます。Cassandraハンドラは、プリコンパイルされた文を更新に使用できます。これにより、Cassandraへのデータのストリーミングのパフォーマンスが向上します。

gg.handler.name.ddlHandling

オプション

CREATE | ADD | DROP (任意の組合せ。値はカンマで区切る)

なし

指定するDDL機能についてCassandraハンドラを構成します。オプションには、CREATE、ADDおよびDROPがあります。これらのオプションは、任意の組合せをカンマで区切って設定できます。

CREATEを有効にすると、Cassandraハンドラは、対応する表が存在しない場合にCassandraに表を作成します。

ADDを有効にすると、Cassandraハンドラは、対応するCassandra表定義に存在しないソース表定義に存在する列を追加します。

DROPを有効にすると、ハンドラは、対応するソース表定義に存在しないCassandra表定義に存在する列を削除します。

gg.handler.name.cassandraMode

オプション

async | sync

async

CassandraハンドラとCassandraの間の相互作用を設定します。な相互作用の場合はasyncに設定します。操作はCassandraに非同期的に送信され、トランザクションのコミット時にフラッシュされて、永続性が保証されます。非同期にすると、パフォーマンスが向上します。

同期的な相互作用の場合はsyncに設定します。操作はCassandraに同期的に送信されます。

gg.handler.name.consistencyLevel

オプション

ALL | ANY | EACH_QUORUM | LOCAL_ONE | LOCAL_QUORUM | ONE | QUORUM | THREE | TWO

Cassandraのデフォルト。

Cassandraでの操作の整合性レベルを設定します。操作の実行時にCassandraクラスタに格納するために満たす必要がある基準を構成します。整合性レベルを低くするとパフォーマンスが向上し、高くすると安全になります。

SSLのjavax.net.ssl.SSLContextおよび暗号スイートを上書きできる、高度な構成プロパティ。ここには完全修飾クラス名を指定し、クラスパスにクラスを含める必要があります。クラスでは、Datastax Cassandra Javaドライバでcom.datastax.driver.core.SSLOptionsインタフェースを実装する必要があります。この構成プロパティは、gg.handler.name.withSSLがtrueに設定されている場合にのみ適用されます。詳細は、http://docs.datastax.com/en/developer/java-driver/3.3/manual/ssl/を参照してください。

gg.handler.name.withSSL

オプション

true | false

false

SSLを使用したCassandraクラスタへのセキュアな接続を有効にするには、trueに設定します。これには、追加のJavaブート・オプションの構成が必要です。詳細は、http://docs.datastax.com/en/developer/java-driver/3.3/manual/ssl/を参照してください。

2.3.2 サンプル構成

Javaアダプタ・プロパティ・ファイルからのCassandraハンドラの構成例を次に示します。

gg.handlerlist=cassandra

#The handler properties
gg.handler.cassandra.type=cassandra
gg.handler.cassandra.mode=op
gg.handler.cassandra.contactPoints=localhost
gg.handler.cassandra.ddlHandling=CREATE,ADD,DROP
gg.handler.cassandra.compressedUpdates=true
gg.handler.cassandra.cassandraMode=async
gg.handler.cassandra.consistencyLevel=ONE

2.3.3 セキュリティ

CassandraクラスタへのCassandraハンドラ接続は、ユーザー名とパスワードの資格証明を使用して保護できます。これは、次の構成プロパティを使用して設定します。

gg.handler.name.username
gg.handler.name.password

オプションで、SSLを使用してCassandraクラスタへの接続を保護できます。SSLのセキュリティを有効にするには、次のパラメータを設定します。

gg.handler.name.withSSL=true

さらに、Javaのbootoptionsは、keystoreの場所とパスワード、truststoreの場所とパスワードを含むように構成する必要があります。次に例を示します。

javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm
-Djavax.net.ssl.trustStore=/path/to/client.truststore
-Djavax.net.ssl.trustStorePassword=password123
-Djavax.net.ssl.keyStore=/path/to/client.keystore
-Djavax.net.ssl.keyStorePassword=password123

2.4 自動DDL処理

起動すると、Cassandraハンドラは、ソース表に対する操作が最初に発生したときに表チェックおよび調整プロセスを実行します。また、DDLイベントやメタデータ変更イベントが発生すると、Cassandraハンドラの表定義がダーティとマークされるため、次に表に対する操作が発生したとき、ハンドラは、次の項で説明されている表チェックおよび調整プロセスを繰り返します。

トピック:

- 表チェックおよび調整プロセス

2.4.1 表チェックおよび調整プロセス

Cassandraハンドラは、最初に、ターゲットCassandraキースペースが存在するかどうかをターゲットCassandraデータベースに問い合せます。ターゲットCassandraキースペースが存在しない場合、Cassandraハンドラは異常終了します。キースペースはユーザーが作成する必要があります。ログ・ファイルには、Cassandraハンドラが必要とする正確なキースペース名のエラーが含まれている必要があります。

次に、Cassandraハンドラは、表定義が存在するかどうかをターゲットCassandraデータベースに問い合せます。表が存在しない場合、Cassandraハンドラは次の2つのいずれかを実行します。gg.handler.name.ddlHandlingにCREATEが含まれる場合、Cassandraに表が作成されます。それ以外の場合、プロセスは異常終了します。Cassandraに表が存在しないことを示すメッセージが記録されます。

Cassandraに表が存在する場合、Cassandraハンドラは、ソース証跡ファイルの表定義とCassandraの表定義の間で調整を実行します。この調整プロセスは、ソース表定義に存在し、対応するCassandra表定義に存在しない列を検索します。この基準に一致する列が見つかり、gg.handler.name.ddlHandlingプロパティにADDが含まれている場合、Cassandraハンドラは、新しい列を追加するCassandraのターゲット表を変更します。それ以外の場合、これらの列は無視されます。

次に、調整プロセスは、ターゲットCassandra表に存在するが、ソース表定義に存在しない列を検索します。この基準に一致する列が見つかり、gg.handler.name.ddlHandlingプロパティにDROPが含まれている場合、Cassandraハンドラは、これらの列を削除するCassandraのターゲット表を変更します。それ以外の場合、これらの列は無視されます。

最後に、プリコンパイルされた文が作成されます。

2.5 パフォーマンスに関する考慮事項

Cassandraハンドラをasyncモードに構成すると、syncモードの場合よりパフォーマンスが向上します。ReplicatプロパティGROUPTRANSOPSをデフォルトの1000に設定する必要があります。

整合性レベルの設定は、パフォーマンスに直接影響します。整合性レベルを高くするほど、特定の操作の伝送が完了と見なされる前に、Cassandraクラスタでの動作が適切になります。個々のユースケースの要件を満たす最低限の整合性レベルを選択する必要があります。整合性レベルの情報は、次を参照してください。

https://docs.datastax.com/en/cassandra/3.x/cassandra/dml/dmlConfigConsistency.html

Cassandraハンドラは、操作(op)モードまたはトランザクション(tx)モードのいずれかで動作します。最高のパフォーマンスを得るためには、操作モードが推奨されます。

gg.handler.name.mode=op

2.6 その他の考慮事項

- Cassandraデータベースでは少なくとも1つの主キーが必要で、主キーの値はnullにできません。主キーがないソース表の自動表作成は失敗します。

- gg.handler.name.compressedUpdates=falseを設定すると、Cassandraハンドラは、データの完全な操作前イメージと操作後イメージを更新する必要があります。部分的なイメージ更新が行われたソース証跡ファイルでこのプロパティを設定すると、データが欠落した列に対してnull値が更新されます。この構成は正しくありません。更新操作を行うと、変更されなかった列のnull値のターゲット・データは汚染されます。

- ソース・データベースでDDLが指定されていても、Cassandraハンドラはソース・データベースからのDDLを処理しません。かわりに、ソース表定義とターゲットCassandra表定義の間で調整プロセスを実行します。ソース・データベースで実行される、列名を変更するDDL文は、Cassandraハンドラでは、列がソース表から削除され、新しい列がソース表に追加された場合と同じように解釈されます。この動作は、gg.handler.name.ddlHandlingプロパティがどのように構成されているかに応じて異なります。

gg.handler.name.ddlHandlingの構成

動作

ADDとDROPのどちらも構成しない

Cassandraで古い列名とデータが保持されます。Cassandraで新しい列が作成されないため、DDLの変更から新しい列名のデータは複製されません。

ADDのみを構成する

Cassandraで古い列名とデータが保持されます。Cassandraで新しい列が追加され、DDLの変更から新しい列名のデータが複製されます。DDL変更の前と後で、データが存在する列が一致しません。

DROPのみを構成する

Cassandraで古い列名とデータが削除されます。Cassandraで新しい列が作成されないため、新しい列名のデータは複製されません。

ADDとDROPを構成する

Cassandraで古い列名とデータが削除されます。Cassandraで新しい列が作成され、DDLの変更から新しい列名のデータが複製されます。

2.7 トラブルシューティング

この項では、様々な問題のトラブルシューティングに役立つ情報を示します。その他のヘルプについては、次のトピックを確認してください。

- Javaクラスパス

- ロギング

- 書込みタイムアウトの例外

- ロギング

2.7.1 Javaクラスパス

最も一般的な初期エラーは、必要なすべてのクライアント・ライブラリを含めるクラスパスが正しくないことす。ログ・ファイルにClassNotFound例外が作成されます。Javaアダプタ・ロギングをDEBUGに設定してトラブルシューティングを行い、プロセスを再実行できます。デバッグ・レベルで、ロギングには、gg.classpath構成変数からクラスパスに追加されたJARの情報が含まれます。gg.classpath変数は、構成されたディレクトリのすべてのJARを選択するワイルドカード(*)文字をサポートします。たとえば、/usr/cassandra/cassandra-java-driver-3.1.0/*:/usr/cassandra/cassandra-java-driver-3.1.0/lib/*のようになります。

クラスパスの設定の詳細は、「Cassandraハンドラの設定および実行」および「Cassandraハンドラ・クライアント依存性」を参照してください。

2.7.2 ロギング

Cassandraハンドラは、ハンドラの構成の状態をJavaログ・ファイルに記録します。これは、Cassandraハンドラの構成値を確認できるため、役に立ちます。構成の状態のロギングのサンプルは、次のようになります。

**** Begin Cassandra Handler - Configuration Summary ****
Mode of operation is set to op.
The Cassandra cluster contact point(s) is [localhost].
The handler has been configured for GoldenGate compressed updates (partial image updates).
Sending data to Cassandra in [ASYNC] mode.
The Cassandra consistency level has been set to [ONE].
Cassandra Handler DDL handling:
The handler will create tables in Cassandra if they do not exist.
The handler will add columns to Cassandra tables for columns in the source metadata that do not exist in Cassandra.
The handler will drop columns in Cassandra tables for columns that do not exist in the source metadata.
**** End Cassandra Handler - Configuration Summary ****

2.7.3 書込みタイムアウトの例外

Cassandraハンドラを実行すると、Replicatプロセスが異常終了する原因となるcom.datastax.driver.core.exceptions.WriteTimeoutException例外が発生することがあります。これは、次に示す一部またはすべての条件下で発生する可能性があります。

- Cassandraハンドラが、かなりの処理ロードでCassandraクラスタを配置する多数の操作を処理する。

- GROUPTRANSOPSがデフォルトの1000より高く構成されている。

- Cassandraハンドラが非同期モードで構成されている。

- CassandraハンドラがONEより高い整合性レベルで構成されている。

問題は、CassandraハンドラがCassandraクラスタの処理速度より速くデータをストリーミングすることです。Cassandraクラスタの書込みレイテンシは、最終的に書込みリクエスト・タイムアウト期間を超え、例外が発生します。

考えられる解決策は、次のとおりです。

- 書込みリクエスト・タイムアウト期間を増やします。これは、Cassandraのwrite_request_timeout_in_msプロパティで制御され、cassandra_install/confディレクトリのcassandra.yamlファイルにあります。デフォルトは2000 (2秒)です。この値を増やすと、エラーを回避できます。変更を有効にするには、Cassandraノードを再起動します。

- このエラーが発生した場合、ReplicatプロセスのGROUPTRANSOPS構成値を減らすことも推奨されています。通常、GROUPTRANSOPS構成を減らすと、処理されるトランザクションのサイズが減少し、CassandraハンドラがCassandraクラスタに負担をかけすぎる可能性が少なくなります。

- Cassandraハンドラの整合性レベルを下げると、書込みと見なされている操作に対してCassandraクラスタが完了する必要がある作業の量が減少します。

2.7.4 ロギング

java.lang.NoClassDefFoundError: io/netty/util/Timerエラーは、ダウンロードしたDatastax Java Driverの3.3および3.2の両方のバージョンで発生します。これは、JARファイルのnetty-commonが、誤ってDatastaxドライバのtarファイルに存在しないためです。同じnettyバージョンのJARファイルnetty-commonを手動で取得してクラスパスに追加する必要があります。

3 Elasticsearchハンドラの使用

この章では、Elasticsearchハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- 詳細な機能

- Elasticsearchハンドラの設定および実行

- Elasticsearchのパフォーマンスに関する考慮事項

- Elasticsearchのプラグイン・サポート

- ElasticsearchのDDL処理

- Elasticsearchの操作モード

- トラブルシューティング

- ロギング

- Elasticsearchハンドラの既知の問題

3.1 概要

Elasticsearchは、拡張性の高い、オープン・ソースのフルテキスト検索および分析エンジンです。Elasticsearchを使用すると、大量のデータをすばやく、ほぼリアルタイムで保存、検索および分析できます。通常、複雑な検索機能を備えたアプリケーションを駆動する基盤となるエンジンやテクノロジとして使用されます。

Elasticsearchハンドラでは、Elasticsearch Javaクライアントを使用してElasticsearchノードに接続し、データを受信します。詳細は、次に示すElasticsearchのWebサイトを参照してください。

https://www.elastic.co

3.2 詳細な機能

トピック:

- Elasticsearchのバージョン

- Elasticsearchのインデックスおよびタイプ

- Elasticsearchのドキュメント

- Elasticsearchの主キーの更新

- Elasticsearchのデータ型

- Elasticsearchの操作サポート

- Elasticsearchの接続

3.2.1 Elasticsearchのバージョン

Elasticsearchハンドラのプロパティgg.handler.name.versionは、Elasticsearchクラスタのバージョンに従って設定する必要があります。ElasticsearchハンドラはJavaのTransportクライアントを使用し、そのバージョンは、クラスタ内のノードと同じメジャー・バージョン(2.xまたは5.xなど)である必要があります。新しい機能はサポートされない可能性はありますが、Elasticsearchハンドラは、マイナー・バージョン(2.3.xなど)の異なるクラスタにも接続できます。

3.2.2 Elasticsearchのインデックスおよびタイプ

Elasticsearchのインデックスは、類似した特性を持つドキュメントの集まりです。インデックスは小文字でのみ作成できます。Elasticsearchのタイプは、インデックス内の論理グループです。インデックスまたはタイプ内のすべてのドキュメントは、同じ番号およびタイプのフィールドを持つ必要があります。

Elasticsearchハンドラでは、ソース証跡スキーマをソース証跡表名と連結してインデックスが構築されます。ソース証跡の3つの部分からなる表名の場合、インデックスはソース・カタログ、スキーマおよび表名を連結して構成されます。

Elasticsearchハンドラでは、ソース表名がElasticsearchのタイプにマッピングされます。タイプ名は大文字と小文字を区別します。

表3-1 Elasticsearchのマッピング

ソース証跡

Elasticsearchのインデックス

Elasticsearchのタイプ

schema.tablename

schema_tablename

tablename

catalog.schema.tablename

catalog_schema_tablename

tablename

Elasticsearchクラスタにまだインデックスが存在しない場合は、Elasticsearchハンドラがデータを受信すると(ソース証跡でのINSERTまたはUPDATE操作)、新しいインデックスが作成されます。

3.2.3 Elasticsearchのドキュメント

Elasticsearchのドキュメントは、インデックス付けのできる情報の基本単位です。インデックスまたはタイプ内に、必要な数のドキュメントを格納できます。各ドキュメントには_idフィールドに基づく一意の識別子があります。

Elasticsearchハンドラでは、ソース証跡の主キー列の値がドキュメント識別子としてマッピングされます。

3.2.4 Elasticsearchの主キーの更新

Elasticsearchのドキュメント識別子はソース表の主キー列の値に基づいて作成されます。ドキュメント識別子は変更できません。Elasticsearchハンドラでは、DELETEに続いてINSERTを実行することによってソース主キーの更新操作が処理されます。INSERTの実行中、新しいドキュメントのフィールドが必要なフィールド数よりも少ないことがあります。ソース表内のすべてのフィールドをINSERT操作に含めるには、更新操作用にデータ全体のビフォア・イメージをキャプチャするように証跡のExtractを有効にするか、GETBEFORECOLSを使用して必要な列のビフォア・イメージを書き込みます。

3.2.5 Elasticsearchのデータ型

Elasticsearchでは次のデータ型がサポートされています。

- 32ビット整数

- 64ビット整数

- Double

- Date

- String

- Binary

3.2.6 Elasticsearchの操作サポート

ソース証跡の3つの部分からなる表名の場合、インデックスはソース・カタログ、スキーマおよび表名を連結して構成されます。

Elasticsearchハンドラでは、ソース表名がElasticsearchのタイプにマッピングされます。タイプ名は大文字と小文字を区別します。

表3-2 Elasticsearchの操作

操作

説明

INSERT

Elasticsearchハンドラでは、インデックスが存在しない場合、新規インデックスが作成されて新規ドキュメントが挿入されます。

UPDATE

Elasticsearchのインデックスやドキュメントが存在する場合は、そのドキュメントが更新されます。Elasticsearchのインデックスやドキュメントが存在しない場合は、新規インデックスが作成され、UPDATE操作の列の値が新規ドキュメントとして挿入されます。

DELETE

Elasticsearchのインデックスやドキュメントが存在する場合は、そのドキュメントが削除されます。Elasticsearchのインデックスやドキュメントが存在しない場合は、フィールドがゼロの新規インデックスが作成されます。

注意:
TRUNCATE操作はサポートされていません。

3.2.7 Elasticsearchの接続

クラスタは、データ全体を保持する1つまたは複数のノード(サーバー)の集合です。すべてのノードにわたるフェデレーテッド索引付けおよび検索機能が提供されます。

ノードはクラスタの一部であり、データを格納し、クラスタの索引付けおよび検索に参加する単一のサーバーです。

Elasticsearchハンドラのプロパティgg.handler.name.ServerAddressListは、クラスタで使用可能なノードを指すように設定できます。

3.3 Elasticsearchハンドラの設定および実行

Elasticsearchクラスタが正しく設定され、そのクラスタが稼働していることを確認する必要があります(https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.htmlを参照)。また、Kibanaを使用して設定を確認することもできます。

クラスパスの設定

プロパティgg.classpathには、Javaのトランスポート・クライアントに必要なすべてのjarが含まれている必要があります。必要なクライアントJARファイルのバージョン別リストは、「Elasticsearchハンドラ・クライアント依存性」を参照してください。

Default location of 2.X JARs:

Elasticsearch_Home/lib/*
Elasticsearch_Home/plugins/shield/*

Default location of 5.X JARs:

Elasticsearch_Home/lib/*
Elasticsearch_Home/plugins/x-pack/*
Elasticsearch_Home/modules/transport-netty3/*
Elasticsearch_Home/modules/transport-netty4/*
Elasticsearch_Home/modules/reindex/*

パス内のワイルドカード(*)は、(*)のワイルドカード文字により、そのディレクトリ内のすべてのJARファイルを関連するクラスパスに含めることができます。*.jarは使用しないでください

正しく構成されたクラスパスの例を次に示します。

gg.classpath=Elasticsearch_Home/lib/*

トピック:

- Elasticsearchハンドラ構成

- Elasticsearchトランスポート・クライアントの設定プロパティ・ファイル

3.3.1 Elasticsearchハンドラ構成

Elasticsearchハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表3-3 Elasticsearchハンドラの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handlerlist

必須

名前(任意の名前)

なし

使用するハンドラのリスト。

gg.handler.name.type

必須

elasticsearch

なし

使用するハンドラのタイプ。たとえば、Elasticsearch、Kafka、Flume、HDFSなどです。

gg.handler.name.ServerAddressList

オプション

Server:Port[, Server:Port]

localhost:9300

Elasticsearchクラスタに接続するノードの連絡ポイントのカンマ区切りのリスト。

gg.handler.name.clientSettingsFile

必須

トランスポート・クライアントのプロパティ・ファイル。

なし

Elasticsearchハンドラで使用されるElasticsearchトランスポート・クライアントのプロパティを保持するクラスパスのファイル名。

gg.handler.name.version

オプション

2.x | 5.x

2.x

Elasticsearchハンドラで使用されるトランスポート・クライアントのバージョンで、これはElasticsearchクラスタとの互換性が必要です。

gg.handler.name.bulkWrite

オプション

true | false

false

このプロパティがtrueの場合、Elasticsearchハンドラでは、一括書込みAPIを使用してElasticsearchクラスタにデータが収集されます。一括書込みのバッチ・サイズは、ReplicatパラメータのMAXTRANSOPSを使用して制御できます。

gg.handler.name.numberAsString

オプション

true | false

false

このプロパティがtrueの場合、Elasticsearchハンドラでは、ソース証跡内のすべての数値列の値(Long、IntegerまたはDouble)が文字列としてElasticsearchクラスタに受信されます。

gg.handler.elasticsearch.upsert

オプション

true | false

true

このプロパティがtrueの場合、UPDATE操作の実行時にドキュメントが存在しないとき、新規ドキュメントが挿入されます。

例3-1 サンプルのハンドラ・プロパティ・ファイル:

2.x Elasticsearchクラスタの場合:

gg.handlerlist=elasticsearch
gg.handler.elasticsearch.type=elasticsearch
gg.handler.elasticsearch.ServerAddressList=localhost:9300
gg.handler.elasticsearch.clientSettingsFile=client.properties
gg.handler.elasticsearch.version=2.x
gg.classpath=/path/to/elastic/lib/*

2.x Elasticsearchクラスタ(Shieldあり)の場合:

gg.handlerlist=elasticsearch
gg.handler.elasticsearch.type=elasticsearch
gg.handler.elasticsearch.ServerAddressList=localhost:9300
gg.handler.elasticsearch.clientSettingsFile=client.properties
gg.handler.elasticsearch.version=2.x
gg.classpath=/path/to/elastic/lib/*:/path/to/elastic/plugins/shield/*

5.x Elasticsearchクラスタの場合:

gg.handlerlist=elasticsearch
gg.handler.elasticsearch.type=elasticsearch
gg.handler.elasticsearch.ServerAddressList=localhost:9300
gg.handler.elasticsearch.clientSettingsFile=client.properties
gg.handler.elasticsearch.version=5.x
gg.classpath=/path/to/elastic/lib/*:/path/to/elastic/modules/transport-netty4/*:/path/to/elastic/modules/reindex/*

5.x Elasticsearchクラスタ(x-packあり)の場合:

gg.handlerlist=elasticsearch
gg.handler.elasticsearch.type=elasticsearch
gg.handler.elasticsearch.ServerAddressList=localhost:9300
gg.handler.elasticsearch.clientSettingsFile=client.properties
gg.handler.elasticsearch.version=5.x
gg.classpath=/path/to/elastic/lib/*:/path/to/elastic/plugins/x-pack/*:/path/to/elastic/modules/transport-netty4/*:/path/to/elastic/modules/reindex/*

サンプルのReplicat構成およびJavaアダプタのプロパティ・ファイルは、次のディレクトリにあります。

GoldenGate_install_directory/AdapterExamples/big-data/elasticsearch

3.3.2 Elasticsearchトランスポート・クライアントの設定プロパティ・ファイル

Elasticsearchハンドラは、JavaのTransportクライアントを使用してElasticsearchクラスタとやりとりします。Elasticsearchクラスタには、shieldやx-packのような追加のプラグインがあり、追加の構成が必要な場合があります。

gg.handler.name.clientSettingsFileプロパティは、Elasticsearchクラスタのバージョンに基づく追加のクライアント設定のあるファイルを指している必要があります。Elasticsearchハンドラは、Javaクラスパスを使用してクライアント設定ファイルの検索とロードを試みます。Javaクラスパスには、プロパティ・ファイルのあるディレクトリが含まれている必要があります。

Elasticsearch 2.x(プラグインなし)のクライアント・プロパティ・ファイル:

cluster.name=Elasticsearch_cluster_name

Shieldプラグインを使用するElasticsearch 2.Xのクライアント・プロパティ・ファイル:

cluster.name=Elasticsearch_cluster_name
shield.user=shield_username:shield_password

Shieldプラグインは、SSLやIPフィルタリングなどの追加機能もサポートしています。プロパティはclient.propertiesファイルで設定できます(https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/transport-client.htmlおよびhttps://www.elastic.co/guide/en/shield/current/_using_elasticsearch_java_clients_with_shield.htmlを参照)。

X-Packプラグインを使用するElasticsearch 5.xのclient.propertiesファイル:

cluster.name=Elasticsearch_cluster_name
xpack.security.user=x-pack_username:x-pack-password

X-Packプラグインも追加の機能をサポートしています。プロパティはclient.propertiesファイルで設定できます(https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.1/transport-client.htmlおよびhttps://www.elastic.co/guide/en/x-pack/current/java-clients.htmlを参照)。

3.4 Elasticsearchのパフォーマンスに関する考慮事項

Elasticsearchハンドラのgg.handler.name.bulkWriteプロパティは、Elasticsearchクラスタにソース証跡レコードをプッシュする際に、一度に1つずつ行うか、または一括書込みAPIを使用して一括で行うかを判断するために使用されます。このプロパティがtrueの場合、ソース証跡の操作は、一般的なReplicatパラメータ・ファイルのMAXTRANSOPSパラメータによってサイズを制御されるバッチでElasticsearchクラスタにプッシュされます。一括書込みAPIを使用するとパフォーマンスが向上します。

Elasticsearchは、ノード内で管理されるスレッド・プールのメモリー消費量を改善するために、異なるスレッド・プールを使用します。また、これらのプールの多くにはそれに関連付けられたキューも存在し、保留中のリクエストは廃棄されずに保持されます。

一括操作の場合、デフォルトのキュー・サイズは50(バージョン5.2)および200(バージョン5.3)です。

一括APIのエラーを回避するには、ReplicatのMAXTRANSOPSサイズを一括スレッドのプール・キュー・サイズの最小値と一致するように設定する必要があります。thread_pool.bulk.queue_size構成プロパティはelasticsearch.yamlファイルで変更できます。

3.5 Elasticsearchのプラグイン・サポート

Elasticsearchバージョン2.xでは、基本認証、SSLおよびIPフィルタリングを提供するShieldプラグインがサポートされています。Elasticsearch 5.xのX-Packプラグインにも同様の機能があります。追加のトランスポート・クライアントの設定は、gg.handler.name.clientSettingsFileプロパティを使用してElasticsearchハンドラで構成できます。

3.6 ElasticsearchのDDL処理

Elasticsearchハンドラはソース証跡内のDDLレコードには反応しません。新規ソース表のデータ操作レコードにより、Elasticsearchクラスタでインデックスまたはタイプの自動作成が行われます。

3.7 Elasticsearchの操作モード

Elasticsearchハンドラでは、パフォーマンスを向上させるために操作モードが使用されます。gg.handler.name.modeプロパティはハンドラでは使用されません。

3.8 トラブルシューティング

この項では、様々な問題のトラブルシューティングに役立つ情報を示します。

トピック:

- 不適切なJavaクラスパス

- Elasticsearchのバージョン不一致

- Elasticsearchトランスポート・クライアントのプロパティ・ファイルが見つからない

- Elasticsearchのクラスタ接続の問題

- ElasticsearchのサポートされていないTRUNCATE操作

- Elasticsearchの一括実行のエラー

3.8.1 不適切なJavaクラスパス

最も一般的な初期エラーは、必要なすべてのクライアント・ライブラリを含めるクラスパスが正しくないことす。log4jログ・ファイルにClassNotFound例外が作成されます。

また、gg.classpath変数に表記上の誤りがある場合、クラスパス解決エラーの原因となる可能性があります。

Elasticsearchのトランスポート・クライアント・ライブラリには、Oracle GoldenGate for Big Data製品は付属していません。クライアント・ライブラリを正しく解決するには、Javaアダプタのプロパティ・ファイルでgg.classpathプロパティを正しく構成する必要があります(「Elasticsearchハンドラの設定および実行」を参照)。

3.8.2 Elasticsearchのバージョン不一致

Elasticsearchクラスタのメジャー・バージョン番号と一致させるには、Elasticsearchハンドラのgg.handler.name.versionプロパティを2.xまたは5.xに設定する必要があります。

バージョン構成に誤りがあると、次のエラーが発生することがあります。

Error: NoNodeAvailableException[None of the configured nodes are available:]

ERROR 2017-01-30 22:35:07,240 [main] Unable to establish connection. Check handler properties and client settings configuration.

java.lang.IllegalArgumentException: unknown setting [shield.user]

必要なすべてのプラグインがインストールされていることを確認し、削除されたすべての設定に関するドキュメントの変更点を確認します。

3.8.3 Elasticsearchトランスポート・クライアントのプロパティ・ファイルが見つからない

この例外を解決するには:

ERROR 2017-01-30 22:33:10,058 [main] Unable to establish connection. Check handler properties and client settings configuration.

gg.handler.name.clientSettingsFile構成プロパティに、Elasticsearchトランスポート・クライアントの設定ファイル名が正しく設定されていることを確認します。gg.classpath変数に正しいファイル名へのパスが含まれ、プロパティ・ファイルへのパスの最後にアスタリスク(*)のワイルドカードが含まれていないことを確認します。

3.8.4 Elasticsearchのクラスタ接続の問題

このエラーは、ElasticsearchハンドラがElasticsearchクラスタに接続できない場合に発生します。

Error: NoNodeAvailableException[None of the configured nodes are available:]

この問題をデバッグするには、次の手順を実行します。

1. Elasticsearchのサーバー・プロセスが実行中であることを確認します。

2. クライアント・プロパティ構成ファイルで、cluster.nameプロパティを確認します。

3. クライアント・プロパティ・ファイルで、x-PackまたはShieldプラグインの認証の資格証明を確認します。

4. gg.handler.name.ServerAddressListハンドラ・プロパティを確認します。

3.8.5 ElasticsearchのサポートされていないTRUNCATE操作

Elasticsearchハンドラがソース証跡でTRUNCATE操作を検出すると、次のエラーが発生します。

oracle.goldengate.util.GGException: Elasticsearch Handler does not support the operation: TRUNCATE

この例外エラー・メッセージは、RAeplicatプロセスが異常終了する前にハンドラのログ・ファイルに書き込まれます。Replicatのパラメータ・ファイルからGETTRUNCATESパラメータを削除すると、このエラーが解決します。

3.8.6 Elasticsearchの一括実行のエラー

ハンドラが一括API(bulkWrite=true)を使用して操作を処理しているときに、次のエラーが発生することがあります。

"DEBUG [main] (ElasticSearch5DOTX.java:130) - Bulk execute status: failures:[true] buildFailureMessage:[failure in bulk execution: [0]: index [cs2cat_s1sch_n1tab], type [N1TAB], id [83], message [RemoteTransportException[[UOvac8l][127.0.0.1:9300][indices:data/write/bulk[s][p]]]; nested: EsRejectedExecutionException[rejected execution of org.elasticsearch.transport.TransportService$7@43eddfb2 on EsThreadPoolExecutor[bulk, queue capacity = 50, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@5ef5f412[Running, pool size = 4, active threads = 4, queued tasks = 50, completed tasks = 84]]];]"
Elasticsearchが操作を処理するためのリソースが不足している可能性があります。MAXTRANSOPSを使用してReplicatのバッチ・サイズを制限し、Elasticsearchの構成パラメータthread_pool.bulk.queue_sizeの値と一致させることができます。

注意:
Elasticsearchのパラメータthread_pool.bulk.queue_sizeの変更は、Elasticsearchノードの再起動後にのみ有効です。

3.9 ロギング

接続に成功すると、ハンドラのログ・ファイルに次のログ・メッセージが表示されます。

2.x Elasticsearchクラスタへの接続:

INFO 2017-01-31 01:43:38,814 [main] **BEGIN Elasticsearch client settings**
INFO 2017-01-31 01:43:38,860 [main]     key[cluster.name] value[elasticsearch-user1-myhost]
INFO 2017-01-31 01:43:38,860 [main]    key[request.headers.X-Found-Cluster] value[elasticsearch-user1-myhost]
INFO 2017-01-31 01:43:38,860 [main]     key[shield.user] value[es_admin:user1]
INFO 2017-01-31 01:43:39,715 [main] Connecting to Server[myhost.us.example.com] Port[9300]
INFO 2017-01-31 01:43:39,715 [main] Client node name:  Smith
INFO 2017-01-31 01:43:39,715 [main] Connected nodes: [{node-myhost}{vqtHikpGQP-IXieHsgqXjw}{10.196.38.196}{198.51.100.1:9300}]
INFO 2017-01-31 01:43:39,715 [main] Filtered nodes: []
INFO 2017-01-31 01:43:39,715 [main] **END Elasticsearch client settings**

5.x Elasticsearchクラスタへの接続:

INFO [main] (Elasticsearch5DOTX.java:38) - **BEGIN Elasticsearch client settings**
INFO [main] (Elasticsearch5DOTX.java:39) - {xpack.security.user=user1:user1_kibana, cluster.name=elasticsearch-user1-myhost, request.headers.X-Found-Cluster=elasticsearch-user1-myhost}
INFO [main] (Elasticsearch5DOTX.java:52) - Connecting to Server[myhost.us.example.com] Port[9300]
INFO [main] (Elasticsearch5DOTX.java:64) - Client node name:  _client_
INFO [main] (Elasticsearch5DOTX.java:65) - Connected nodes: [{node-myhost}{w9N25BrOSZeGsnUsogFn1A}{bIiIultVRjm0Ze57I3KChg}{myhost}{198.51.100.1:9300}]
INFO [main] (Elasticsearch5DOTX.java:66) - Filtered nodes: []
INFO [main] (Elasticsearch5DOTX.java:68) - **END Elasticsearch client settings**

3.10 Elasticsearchハンドラの既知の問題

Elasticsearch: 非常に大きな数を入力しようとしています

非常に大きな数値は、Elasticsearchのドキュメントでは不正確な値になります。たとえば、9223372036854775807、-9223372036854775808。これは、Elasticsearchサーバーの問題であり、Elasticsearchハンドラの制限ではありません。

この問題の回避策は、gg.handler.name.numberAsString=trueプロパティを使用してすべての数値を文字列として収集することです。

Elasticsearch: インデックスの問題

類似した列名で異なる列データ型を持つ複数の表がある場合、Elasticsearchハンドラでは同じインデックスにデータを入力できません。

証跡内のcatalog/schema/tablenameは、大文字と小文字を区別することがありますが、インデックス名は常に小文字です。

4 Flumeハンドラの使用

この章では、Flumeハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- Flumeハンドラの設定および実行

- 操作からFlumeイベントへのデータ・マッピング

- パフォーマンスに関する考慮事項

- メタデータ変更イベント

- Flumeソース構成の例

- 高度な機能

- Flumeハンドラのトラブルシューティング

4.1 概要

Flumeハンドラは、Oracle GoldenGate証跡からFlumeソースに変更取得データをストリーミングするために設計されています。Apache Flumeは、ビッグ・データ・アプリケーションにデータをストリーミングすることを主な目的とするオープン・ソース・アプリケーションです。Flumeアーキテクチャには、ソース、チャネル、シンクという3つの主コンポーネントがあり、その全体がデータのパイプラインになります。Flumeソースは、データをFlumeチャネルに公開します。Flumeシンクは、Flumeチャネルからデータを取得し、そのデータを別のターゲットにストリーミングします。Flumeエージェントは、ソース、チャネル、シンクを所有し管理するコンテナ・プロセスです。単一のFlumeインストールに、複数のエージェント・プロセスをホストできます。Flumeハンドラは、証跡ファイルからAvroまたはThrift RPCのFlumeソースへデータをストリーミングできます。

4.2 Flumeハンドラの設定および実行

ここでは、Flumeハンドラのコンポーネントの構成およびハンドラの実行について説明します。

Flumeハンドラを実行するには、AvroまたはThrift Flumeソースとともに構成されたFlumeエージェントが稼働している必要があります。Oracle GoldenGateは、Flumeと同じ場所に配置することも、別のマシンに配置することもできます。別のマシンに配置する場合は、ネットワーク接続でFlumeソースのホストとポートにアクセスできる必要があります。Flumeエージェント・プロセスの構成および起動方法については、次の場所にあるFlumeのユーザーズ・ガイドを参照してください。

https://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.pdf

トピック:

- クラスパス構成

- Flumeハンドラ構成

- サンプル構成

4.2.1 クラスパス構成

Flumeソースに接続して実行するには、Flumeハンドラのgg.classpathconfiguration変数で2つのものを構成する必要があります。Flumeエージェントの構成ファイルと、FlumeクライアントJARです。Flumeハンドラは、Flumeエージェント構成ファイルの内容を使用して、Flumeソースに接続する際のホスト、ポートおよびソース・タイプを解決します。Flumeクライアント・ライブラリは、Oracle GoldenGate for Big Dataに付属しません。Flumeクライアント・ライブラリのバージョンは、Flumeハンドラが接続するFlumeのバージョンと一致する必要があります。必要なFlumeクライアントJARファイルのバージョン別リストは、「Flumeハンドラ・クライアント依存性」を参照してください。

Oracle GoldenGateのプロパティgg.classpathは、次のデフォルトの場所を含むように設定する必要があります。

- core-site.xmlファイルのデフォルトの場所は、Flume_Home/confです。

- FlumeクライアントJARのデフォルトの場所は、Flume_Home/lib/*です。

gg.classpathは、上の例に示したとおり正確に構成する必要があります。Flumeエージェント構成ファイルのパス指定に含めるパスには、ワイルドカードを使用しないでください。Flumeエージェント構成ファイルのパスに*wildcardを含めると、アクセスできなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=dirprm/:/var/lib/flume/lib/*

FlumeハンドラとFlumeを同じ場所に配置していない場合は、Flumeハンドラ・プロセスをホストしているマシンに、Flumeエージェント構成ファイルとFlumeクライアント・ライブラリをコピーする必要があります。

4.2.2 Flumeハンドラ構成

Flumeハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

プロパティ名

プロパティ値

必須

説明

gg.handlerlist

flumehandler (任意の名前を選択)

はい

ハンドラのリスト。グループ化プロパティがONのときは1つのみ許可されます。

gg.handler.flumehandler.type

flume

はい

使用するハンドラのタイプ。

gg.handler.flumehandler.format

フォーマッタ・クラスまたはショート・コード

いいえ。デフォルトはdelimitedtext

使用するフォーマッタ。次のいずれかを指定できます。

- avro_row

- avro_op

- delimitedtext

- xml

- json

- json_row

あるいは、カスタム・フォーマッタを記述し、完全修飾クラス名をここに含めることもできます。

gg.handler.flumehandler.RpcClientPropertiesFile

任意のファイル名

いいえ。デフォルトはdefault-flume-rpc.properties

デフォルトのdefault-flume-rpc.properties、または指定したカスタムのRPCクライアント・プロパティ・ファイルがクラスパスに存在する必要があります。

gg.handler.flumehandler.mode

op|tx

いいえ。デフォルトはop

操作モードまたはトランザクション・モード。Javaアダプタのグループ化オプションは、txモードでのみ使用できます。

gg.handler.flumehandler.EventHeaderClass

カスタム実装の完全修飾クラス名

いいえ。デフォルトはDefaultFlumeEventHeader

flumeイベントにどんなヘッダー・プロパティを追加するかを決めるクラス。

gg.handler.flumehandler.EventMapsTo

op|tx

いいえ。デフォルトはop

各flumeイベントが操作かトランザクションかを定義する。handler mode = opの場合、EventMapsToは常にopです。

gg.handler.flumehandler.PropagateSchema

true|false

いいえ。デフォルトはfalse

trueに設定すると、Flumeハンドラはスキーマ・イベントを公開し始めます。

gg.handler.flumehandler.includeTokens

true|false

いいえ。デフォルトはfalse

trueに設定すると、ソース証跡ファイルからのトークン・データが出力に含まれます。falseに設定すると、ソース証跡ファイルからのトークン・データが出力から除外されます。

4.2.3 サンプル構成

gg.handlerlist = flumehandler
gg.handler.flumehandler.type = flume
gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties
gg.handler.flumehandler.format =avro_op
gg.handler.flumehandler.mode =tx
gg.handler.flumehandler.EventMapsTo=tx
gg.handler.flumehandler.PropagateSchema =true
gg.handler.flumehandler.includeTokens=false

4.3 操作からFlumeイベントへのデータ・マッピング

この項では、Oracle GoldenGate証跡ファイルからの操作データが、異なる構成に基づいてFlumeハンドラによってどのようにFlumeイベントにマップされるかを説明します。Flumeイベントとは、Flumeエージェントを通過するデータの単位です。イベントはソースからチャネルへ、チャネルからシンクへと移動し、イベント・インタフェースの実装として表されます。イベントは、オプションでヘッダー(文字列属性)のセットを伴うペイロード(バイト配列)を搬送します。

トピック:

- 操作モード

- トランザクション・モードとEventMapsTo操作

- トランザクション・モードとEventMapsToトランザクション

4.3.1 操作モード

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.{name}.mode=op

Oracle GoldenGate証跡ファイルからの個々の操作のデータが、1つのFlumeイベントにマップされます。各イベントはすぐにFlumeにフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

- TABLE_NAME: 操作の表名。

- SCHEMA_NAME: 操作のカタログ名(使用可能な場合)とスキーマ名。

- SCHEMA_HASH: Avroスキーマのハッシュ・コード。(Avro行フォーマッタとAvro操作フォーマッタにのみ該当します。)

4.3.2 トランザクション・モードとEventMapsTo操作

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.flume_handler_name.mode=tx
gg.handler.flume_handler_name.EventMapsTo=op

Oracle GoldenGate証跡ファイルからの個々の操作のデータが、1つのFlumeイベントにマップされます。イベントは、トランザクションのコミット時にFlumeにフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

- TABLE_NAME: 操作の表名。

- SCHEMA_NAME: 操作のカタログ名(使用可能な場合)とスキーマ名。

- SCHEMA_HASH: Avroスキーマのハッシュ・コード。(Avro行フォーマッタとAvro操作フォーマッタにのみ該当します。)

データをAvroまたは区切りテキストとしてフォーマットする場合には、このモードを使用することをお薦めします。Replicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。

4.3.3 トランザクション・モードとEventMapsToトランザクション

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.flume_handler_name.mode=tx
gg.handler.flume_handler_name.EventMapsTo=tx

ソース証跡ファイルからのトランザクションの操作すべてのデータが、連結されて1つのFlumeイベントにマップされます。イベントはトランザクションのコミット時にフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

- GG_TRANID: トランザクションのトランザクションID

- OP_COUNT: このFlumeペイロード・イベントに含まれる操作の数

JSONやXMLなど自己記述型のフォーマットを使用する場合には、このモードを使用することをお薦めします。Replicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。

4.4 パフォーマンスに関する考慮事項

- パフォーマンス向上のために、Replicatベースのグループ化を使用することをお薦めします。

- gg.handler.flume_handler_nameのトランザクション・モード。最高のパフォーマンスを得るためには、 EventMapsTo=tx設定が推奨されます。

- Flumeハンドラの最大ヒープ・サイズがパフォーマンスに影響する場合があります。ヒープが小さすぎると、JVMによるガベージ・コレクションが頻繁に発生することがあります。Oracle GoldenGate Javaプロパティ・ファイルでJVMの最大ヒープ・サイズを増やすと、パフォーマンスが向上する場合があります。

4.5 メタデータ変更イベント

Flumeハンドラは、メタデータ変更イベントに適応します。 メタデータ変更イベントを処理するには、ソース証跡ファイルに、その証跡ファイルのメタデータが必要です。ただし、この機能はソースで複製されるデータベースとアップストリームのOracle GoldenGate Captureプロセスを利用してDDLイベントを取得し、複製します。この機能は、Oracle GoldenGateのすべてのデータベース実装で使用できるわけではありません。DDLレプリケーションがサポートされているかどうかを確認するには、適切なデータベース用のOracle GoldenGateのインストレーションおよび構成ガイドを参照してください。

メタデータの変更がソースで発生する場合、Flumeハンドラはそのメタデータ変更イベントを、対応するフォーマッタに通知します。フォーマッタがその表のために保持しているキャッシュ済のスキーマがある場合には、削除されます。対応するフォーマッタで、その表に対する操作が次に発生したとき、スキーマが再生成されます。

4.6 Flumeソース構成の例

トピック:

- Avro Flumeソース

- Thrift Flumeソース

4.6.1 Avro Flumeソース

Flumeエージェント構成ファイルからのAvro Flumeソースの構成例を次に示します。

client.type = default
hosts = h1
hosts.h1 = host_ip:host_port
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.6.2 Thrift Flumeソース

Flumeエージェント構成ファイルからのAvro Flumeソースの構成例を次に示します。

client.type = thrift
hosts = h1
hosts.h1 = host_ip:host_port

4.7 高度な機能

トピック:

- スキーマの伝播

- セキュリティ

- フェイルオーバー機能

- ロード・バランシング機能

4.7.1 スキーマの伝播

FlumeハンドラはFlumeにスキーマを伝播できます。これがサポートされているのは現在、Avroの行フォーマッタと操作フォーマッタのみです。この機能を有効にするには、次のプロパティを設定します。

gg.handler.name.propagateSchema=true

Avro行フォーマッタまたは操作フォーマッタは、ジャスト・イン・タイム・ベースでAvroスキーマを生成します。Avroスキーマは、表に対する操作が最初に発生したときに生成されます。メタデータ変更イベントがあると、クリアする表に対するスキーマ参照が発生するため、新しいスキーマは、その表で次に操作が発生したときに生成されます。

スキーマの伝播を有効にすると、FlumeハンドラはAvroイベントが発生したときにスキーマを伝播します。

Avroに対するデフォルトのFlumeスキーマ・イベント・ハンドラには、次の情報が含まれます。

- SCHEMA_EVENT: true

- GENERIC_WRAPPER: trueまたはfalse

- TABLE_NAME: 証跡に表れる表名

- SCHEMA_NAME: カタログ名(使用可能な場合)とスキーマ名

- SCHEMA_HASH: Avroスキーマのハッシュ・コード

4.7.2 セキュリティ

Oracle GoldenGate for Big Data Flume HandlerからFlumeソースへの接続ではKerberos認証が機能します。この機能は、Thrift Flumeソースを使用するFlume 1.6.0以降でのみサポートされています。これを有効にするには、Flumeエージェント構成ファイルでFlumeソースの構成を変更します。

Flumeエージェント構成ファイルで、Kerberos認証を有効にするFlumeソース構成の例を次に示します。クライアントとサーバーのKerberosプリンシパル名を指定する必要があります。クライアント・プリンシパルのパスワードを実行時に解決できるように、Kerberos keytabファイルへのパスを指定する必要があります。Kerberosの管理方法、Kerberosプリンシパルおよび対応するパスワード、Kerberos keytabファイルの作成については、Kerberosのドキュメントを参照してください。

client.type = thrift
hosts = h1
hosts.h1 =host_ip:host_port
kerberos=true
client-principal=flumeclient/client.example.org@EXAMPLE.ORG
client-keytab=/tmp/flumeclient.keytab
server-principal=flume/server.example.org@EXAMPLE.ORG

4.7.3 フェイルオーバー機能

Flumeハンドラは、プライマリのFlumeソースが使用できなくなった場合にフェイルオーバーするように構成できます。この機能は現在、Avro Flumeソースを使用するFlume 1.6.0以降でのみサポートされています。これは、Flumeエージェント構成ファイルのFlumeソースの構成で有効にします。フェイルオーバー機能を有効にする構成例を次に示します。

client.type=default_failover
hosts=h1 h2 h3
hosts.h1=host_ip1:host_port1
hosts.h2=host_ip2:host_port2
hosts.h3=host_ip3:host_port3
max-attempts = 3
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.7.4 ロード・バランシング機能

発生するFlumeイベントが、複数のFlumeソース間でロード・バランシングされるように、Flumeハンドラを構成できます。これは現在、Avro Flumeソースを使用するFlume 1.6.0以降でのみサポートされています。この機能は、Flumeエージェント構成ファイルのFlumeソースの構成で有効にします。ロード・バランシング機能を有効にする構成例を次に示します。

client.type = default_loadbalance
hosts = h1 h2 h3
hosts.h1 = host_ip1:host_port1
hosts.h2 = host_ip2:host_port2
hosts.h3 = host_ip3:host_port3
backoff = false
maxBackoff = 0
host-selector = round_robin
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.8 Flumeハンドラのトラブルシューティング

トピック:

- Javaクラスパス

- Flumeフロー制御の問題

- Flumeエージェント構成ファイルが見つからない

- Flume接続の例外

- その他のエラー

4.8.1 Javaクラスパス

Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることは、Oracle GoldenGate Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。この方法で、必要な依存性JARがすべて解決されることを確認できます。「クラスパス構成」を参照してください。

4.8.2 Flumeフロー制御の問題

状況によっては、Flumeハンドラは、Flumeシンクがメッセージをディスパッチするより早くFlumeソースに書込みを行う場合があります。この場合、Flumeハンドラはしばらく動作しますが、いったんFlumeがメッセージを受け付けなくなると、異常終了します。Oracle GoldenGate Javaログ・ファイルに記録された原因はEventDeliveryExceptionである可能性があり、これはFlumeハンドラがイベントを送信できなかったことを示します。問題の正確な原因は、Flumeのログを確認してください。FlumeエージェントでOutOfMemoryExceptionが発生している場合には、Flumeチャネルを構成して、Javaヒープの容量を増やすか、構成を増やすことができます。これで問題が完全に解決しない場合もあります。Flumeシンクがメッセージをディスパッチするより早くFlumeハンドラがFlumeソースにデータをプッシュする場合は、いずれかを変更すれば、エラーになるまでFlumeハンドラが稼働する期間が広がります。

4.8.3 Flumeエージェント構成ファイルが見つからない

Flumeエージェント構成ファイルがクラスパスにない場合は、Flumeハンドラが起動時に異常終了します。その結果、通常は、Flumeプロデューサのプロパティをロードする際のエラーとしてConfigExceptionに問題がリストされます。gg.handler.nameをチェックします。 RpcClientProperites構成ファイルで、Flumeエージェント・プロパティ・ファイルの命名が正しいことを確認します。GoldenGateのgg.classpathプロパティをチェックして、Flumeエージェント・プロパティ・ファイルを含むディレクトリがクラスパスに存在することを確認します。また、クラスパスをチェックして、Flumeエージェント・プロパティ・ファイルへのパスがワイルドカード(*)文字で終わっていないことも確認します。

4.8.4 Flume接続の例外

Flumeソースに接続できない場合、Flumeハンドラが起動時に異常終了します。この問題の根本原因は、Oracle GoldenGate Java log4jファイルでIOExeptionとしてレポートされ、特定のホストおよびポートでFlumeに接続できなかったことを示します。次の点を確認します。

- Flumeエージェント・プロセスが実行されていること。

- FlumeハンドラがアクセスするFlumeエージェント構成ファイルに、正しいホストとポートが指定されていること。

4.8.5 その他のエラー

Oracle GoldenGate Java log4jファイルの内容を確認して、修正するその他の問題を特定します。

5 HBaseハンドラの使用

HBaseハンドラでは、既存のOracle GoldenGateでサポートされているソースからHBase表に移入することができます。

トピック:

- 概要

- 詳細な機能

- HBaseハンドラの設定および実行

- メタデータ変更イベント

- その他の考慮事項

- HBaseハンドラのトラブルシューティング

5.1 概要

HBaseは、リレーショナル・データベース管理システム(RDBMS)の機能をほとんどエミュレートできるオープン・ソースのビッグ・データ・アプリケーションです。Hadoopは、大量の非構造化データを格納する目的で設計されています。逆に、データベースに格納され、Oracle GoldenGateを通じて複製されるデータは、高度に構造化されています。HBaseには、データの重要な構造を維持しながら、Hadoop Distributed File System (HDFS)によって提供される水平方向のスケーリングの利点を活かす方法があります。

5.2 詳細な機能

HBaseハンドラは、ソース証跡ファイルから操作を取得し、対応する表をHBaseに作成してから、変更取得データをその表にロードします。

HBase表名

HBaseに作成される表名は、ソース証跡ファイルからの操作の対応する表名にマップされます。大文字と小文字は区別されます。

HBase表のネームスペース

表名が2つの部分(スキーマ名と表名)からなる場合、スキーマ名はHBase表のネームスペースにマップされます。Catalog.Schema.MyTableのように表名が3つの部分からなる場合、作成されるHBaseネームスペースはCatalog_Schemaとなります。HBase表のネームスペースは大/小文字が区別されます。NULLスキーマ名もサポートされており、デフォルトのHBaseネームスペースにマップされます。

HBase行キー

HBaseには、データベースの主キーと似たHBase行キーという概念があります。HBase行キーは、表の行を示す一意の識別子です。HBaseがサポートするのは1行当たり1つの行キーのみで、空またはNULLにはできません。HBaseハンドラは、主キー値をHBase行キー値にマップします。ソース表に複数の主キーがある場合、主キー値は連結され、パイプ区切り文字(|)で区切られます。HBase行キーの区切り文字を構成できます。

ソース表には、少なくとも1つの主キー列が必要です。主キーのない表を複製すると、HBaseハンドラが異常終了します。

HBaseの列ファミリ

HBaseには、列ファミリという概念があります。列ファミリは、列データをグループ化するメカニズムです。サポートされるのは、1つの列ファミリのみです。HBaseの各列は、1つの列ファミリに属している必要があります。HBaseハンドラには、表ごとに1つの列ファミリがあり、デフォルトはcfです。列ファミリ名は、ユーザーが設定を変更できます。ただし、いったん特定の列ファミリ名で表を作成した場合、先にその表を変更または削除せずにHBaseサンプルで列ファミリ名を再構成すると、Oracle GoldenGate Replicatプロセスが異常終了します。

5.3 HBaseハンドラの設定および実行

ここでは、HBaseハンドラのコンポーネントの構成およびハンドラの実行について説明します。

HBaseは、HBaseハンドラプロセスと同じ場所に配置して稼働しているか、HBaseハンドラ・プロセスをホストしているマシンからネットワーク接続できる別のマシン上で稼働している必要があります。HDFSのリポジトリとして機能している、基礎となるHDFSの単一インスタンスまたはクラスタ化されたインスタンスが稼働している必要があります。

トピック:

- クラスパス構成

- HBaseハンドラ構成

- サンプル構成

- パフォーマンスに関する考慮事項

- セキュリティ

5.3.1 クラスパス構成

HBaseハンドラをHBaseに接続してデータをストリーミングするには、gg.classpath構成変数に2つのものを含める必要があります。1つ目はhbase-site.xmlファイル、2つ目はHBaseクライアントjarです。HBaseクライアントjarは、HBaseハンドラが接続するHBaseのバージョンと一致する必要があります。HBaseクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。

バージョンごとに必要なHBaseクライアントjarのリストは、「HBaseハンドラ・クライアント依存性」を参照してください。

hbase-site.xmlファイルのデフォルトの場所は、HBase_Home/confです。

HBaseクライアントJARのデフォルトの場所は、HBase_Home/lib/*です。

HBaseハンドラがWindowsで実行されている場合は、Windowsのクラスパス指定構文に従います。

gg.classpathは、説明に従って正確に構成する必要があります。hbase-site.xmlのパス指定に含めるパスには、ワイルドカードを使用しないでください。hbase-site.xmlファイルのパスにワイルドカード(*)を含めると、アクセスできなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=/var/lib/hbase/lib/*:/var/lib/hbase/conf

5.3.2 HBaseハンドラ構成

HBaseハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表5-1 HBaseハンドラの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handlerlist

必須

任意の文字列

なし

HBaseハンドラの名前を指定します。HBaseハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type=hbase

必須

-

-

HBaseハンドラを選択し、変更データ取得をHBaseにストリーミングします

gg.handler.name.hBaseColumnFamilyName

オプション

HBase列ファミリ名として有効な任意の文字列

cf

列ファミリは、HBaseで列をグループ化するメカニズムです。12.2リリースでは、HBaseハンドラは1つの列ファミリのみサポートします。

gg.handler.name.includeTokens

オプション

true | false

false

trueの使用は、HBaseの出力にトークン値が含まれることを示します。falseを使用すると、トークン値は含まれません。

gg.handler.name.keyValueDelimiter

オプション

任意の文字列

=

マップにおけるキーと値の間の区切り文字を指定します。たとえば、key=value,key1=value1,key2=value2となります。トークンはマップされた値です。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.keyValuePairDelimiter

オプション

任意の文字列

,

マップにおけるキー/値ペアの間の区切り文字を指定します。たとえば、key=value,key1=value1,key2=value2key=value,key1=value1,key2=value2となります。トークンはマップされた値です。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.encoding

オプション

Javaでサポートされるエンコーディング名または別名Foot 1。サポートされるオプションのリストは、Oracle JavaドキュメントのWebサイトを参照してください

https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html

Oracle GoldenGateプロセスをホストしているマシンのネイティブのシステム・エンコーディング

HBaseに書き込まれる値のエンコーディングを決めます。HBase値はバイトとして書き込まれます。

gg.handler.name.pkUpdateHandling

オプション

abend | update | delete-insert

abend

HBaseハンドラが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとHBaseハンドラで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します

- update - プロセスでこれが通常の更新として扱われることを示します

- delete-insert - プロセスでこれが削除および挿入として扱われることを示します。この機能が正常に動作するためには、完全な操作前イメージが必要です。そのためには、Oracleデータベースで完全なサプリメンタル・ロギングを使用します。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.nullValueRepresentation

オプション

任意の文字列

NULL

列の値がNULLの場合にHBaseに送信される内容を構成できます。デフォルトはNULLです。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.authType

オプション

kerberos

なし

このプロパティをkerberosに設定すると、Kerberos認証が有効になります。

gg.handler.name.kerberosKeytabFile

オプション(authType=kerberosの場合は必須)

Kerberos keytabファイルの相対パスまたは絶対パス

-

keytabファイルを使用すると、HDFSハンドラがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.handler.name.kerberosPrincipal

オプション(authType=kerberosの場合は必須)

user/FQDN@MY.REALMなどの有効なKerberosプリンシパル名。

-

Kerberos認証で用いるKerberosプリンシパル名。

gg.handler.name.hBase98Compatible

オプション

true | false

false

この構成プロパティをtrueに設定して、HBase 0.98.xおよび0.96.xリリースとの統合を有効にします。

gg.handler.name.rowkeyDelimiter

オプション

任意の文字列

|

HBase Rowkeyが生成されるときに、ソース表からの主キー値の間に区切り文字が構成されます。このプロパティは値のCDATA[]ラッピングをサポートし、ユーザーが受信した主キー値を空白と判断される1つ以上の文字で区切る場合に空白を維持します。

gg.handler.name.setHBaseOperationTimestamp

オプション

true | false

false

trueに設定すると、HBaseがサーバー側でタイムスタンプを割り当てるのではなく、HBaseハンドラでHBase操作のタイムスタンプを設定します。このプロパティを使用すると、行削除の直後に再挿入した行がHBaseに表示されないという問題を解決できます(「HBaseハンドラの削除-挿入の問題」を参照)。

脚注1

Javaの詳細は、https://docs.oracle.com/javase/8/docs/technotes/guides/intl/でJava国際化のサポートを参照してください。

5.3.3 サンプル構成

Javaアダプタ・プロパティ・ファイルからのHBaseハンドラの構成例を次に示します。

gg.handlerlist=hbase
gg.handler.hbase.type=hbase
gg.handler.hbase.mode=tx
gg.handler.hbase.hBaseColumnFamilyName=cf
gg.handler.hbase.includeTokens=true
gg.handler.hbase.keyValueDelimiter=CDATA[=]
gg.handler.hbase.keyValuePairDelimiter=CDATA[,]
gg.handler.hbase.encoding=UTF-8
gg.handler.hbase.pkUpdateHandling=abend
gg.handler.hbase.nullValueRepresentation=CDATA[NULL]
gg.handler.hbase.authType=none

5.3.4 パフォーマンスに関する考慮事項

トランザクションをコミットするたびに、HBaseハンドラがフラッシュ・コールを実行し、バッファされていたデータをHBaseリージョン・サーバーにフラッシュします。書込み永続性を維持するために、これを実行する必要があります。HBaseリージョン・サーバーへのフラッシュは負荷の高いコールなので、Replicat GROUPTRANSOPSパラメータを使用して、ソース証跡ファイルの複数の小さいトランザクションを、HBaseに適用される1つの大きいトランザクションにグループ化すると、パフォーマンスが大幅に向上することがあります。Replicat構成ファイルで構成構文を追加すると、Replicatベースのバッチ処理を使用できます。

複数のトランザクションからの操作は、大きいトランザクションにまとめられますが、これはトランザクション・コミットが実行されたグループ化されたトランザクションの最後だけです。

5.3.5 セキュリティ

HBase接続は、Kerberos認証を使用して保護できます。HBaseクラスタを保護するには、HBaseリリースの関連するドキュメントに従ってください。HBaseハンドラは、Kerberosで保護されたクラスタに接続できます。HBase hbase-site.xmlがハンドラのクラスパスにあり、hbase.security.authenticationプロパティをkerberosに、hbase.security.authorizationプロパティをtrueに設定する必要があります。

また、HBaseハンドラのJava構成ファイルで次のプロパティを設定する必要があります。

gg.handler.{name}.authType=kerberos
gg.handler.{name}.keberosPrincipalName={legal Kerberos principal name}
gg.handler.{name}.kerberosKeytabFile={path to a keytab file that contains the password for the Kerberos principal so that the Oracle GoldenGate HDFS handler can programmatically perform the Kerberos kinit operations to obtain a Kerberos ticket}.

5.4 メタデータ変更イベント

Oracle GoldenGate 12.2は、証跡にメタデータを含み、実行時にメタデータ変更イベントを処理できます。HBaseハンドラも、実行時にメタデータ変更イベントを処理できます。最も一般的なシナリオの1つは、新しい列の追加です。HBaseでの結果としては、メタデータ変更イベントの後に、新しい列とそれに関連するデータのストリーミングが始まります。

メタデータ変更イベントを有効にするには、レプリケーション・チェーン全体をOracle GoldenGate 12.2にアップグレードする必要があることに注意してください。12.2のHBaseハンドラは、Oracle GoldenGate 12.1以上で生成された証跡ファイルを処理できます。ただし、これらの証跡ファイルには証跡のメタデータが含まれていないため、メタデータ変更イベントを実行時には処理できません。

5.5 その他の考慮事項

HBaseは、過去数回のリリースでクライアント・インタフェースが変更されています。HBase 1.0.0では、推奨されるクライアント・インタフェースが新たに導入され、12.2のHBaseハンドラは、最新の変更に対応するように、新しいインタフェースに移行しました。ただし、これで下位互換性の問題は発生しません。HBaseハンドラは、1.0.0より古いバージョンのHBaseとは互換性がありません。Oracle GoldenGateが、0.99.x以下のバージョンのHBaseとの統合を必要とする場合には、12.1.2.1.xのHBaseハンドラを使用する必要があります。12.1.2.1.xのHBaseハンドラのZIPファイルが必要な場合には、Oracleサポートに連絡してください。

HBaseハンドラの初期設定でよくあるエラーは、クラスパスの問題です。典型的に示しているのが、Java log4jログ・ファイルに出現するClassNotFoundExceptionです。HBaseクライアントJARは、Oracle GoldenGate for Big Data製品に付属しません。必要なHBaseクライアントJARを解決する必要があります。「HBaseハンドラ・クライアント依存性」には、サポートされている各バージョンのHBaseクライアントJARのリストがあります。hbase-site.xml、または1つ以上の必須のクライアントJARがクラスパスに含まれていません。HBaseハンドラのクラスパスの構成については、「クラスパス構成」を参照してください。

5.6 HBaseハンドラのトラブルシューティング

HBaseハンドラのトラブルシューティングは、Java log4jファイルの内容から始まります。Javaロギング構成にある指示に従って、Java log4jログ・ファイルを正しく生成するようにランタイムを構成してください。

トピック:

- Javaクラスパス

- HBase接続プロパティ

- ハンドラ構成のロギング

- HBaseハンドラの削除-挿入の問題

- Cloudera CDHのHBase互換性

5.6.1 Javaクラスパス

Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることは、Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。DEBUGレベルのロギングを有効にし、ログ・ファイルで次のようなメッセージを探すと、必要な依存性jarがすべて解決されることを確認できます。

2015-09-29 13:04:26 DEBUG ConfigClassPath:74 -  ...adding to classpath:
url="file:/ggwork/hbase/hbase-1.0.1.1/lib/hbase-server-1.0.1.1.jar"

5.6.2 HBase接続プロパティ

HDFS hbase-site.xmlファイル(デフォルト設定を含んでいる)の内容は、ロギング・レベルを DEBUGまたはTRACEに設定している場合に、Java log4jログ・ファイルに出力されます。これには、HBaseへの接続プロパティが示されます。Javaのlog4jログ・ファイルで次のものを検索します。

2015-09-29 13:04:27 DEBUG HBaseWriter:449 - Begin - HBase configuration object contents for connection troubleshooting.
Key: [hbase.auth.token.max.lifetime] Value: [604800000].

よくあるエラーは、hbase-site.xmlファイルがクラスパスに含まれていないか、hbase-site.xmlでパス指定にエラーがあるかのいずれかです。この場合、HBaseハンドラはHBaseへの接続を確立できず、Oracle GoldenGateプロセスは異常終了します。Java log4jファイルでは、次のエラーが報告されます。

2015-09-29 12:49:29 ERROR HBaseHandler:207 - Failed to initialize the HBase handler.
org.apache.hadoop.hbase.ZooKeeperConnectionException: Can't connect to ZooKeeper

クラスパスに正しくhbase-site.xmlファイルが含まれており、HBaseが稼働していることを確認してください。

5.6.3 ハンドラ構成のロギング

Javaのlog4jログ・ファイルには、HBaseハンドラの構成状態に関する情報が含まれています。この情報は、INFOログ・レベルで出力されます。サンプルの出力は、次のようになります。

2015-09-29 12:45:53 INFO HBaseHandler:194 - **** Begin HBase Handler - Configuration Summary ****
Mode of operation is set to tx.
HBase data will be encoded using the native system encoding.
In the event of a primary key update, the HBase Handler will ABEND.
HBase column data will use the column family name [cf].
The HBase Handler will not include tokens in the HBase data.
The HBase Handler has been configured to use [=] as the delimiter between keys and values.
The HBase Handler has been configured to use [,] as the delimiter between key values pairs.
The HBase Handler has been configured to output [NULL] for null values.
Hbase Handler Authentication type has been configured to use [none]

5.6.4 HBaseハンドラの削除-挿入の問題

HBaseハンドラのgg.handler.name.setHBaseOperationTimestamp構成プロパティを使用している場合、ソース・データベースがHBaseハンドラの表内のデータと同期しなくなることがあります。これは、行の削除に続く、その行の即時再挿入が原因で発生します。HBaseでは、特定のタイムスタンプで識別される、削除用のツームストン・マーカーが作成されます。このツームストン・マーカーは、HBase内の同じ行キーを持つすべての行レコードに削除のマークを付け、これらのレコードにはツームストン・マーカーよりも前か、または同じタイムスタンプが付いています。これは、削除された行がすぐに再挿入されたときに発生します。挿入操作にたまたま削除操作と同じタイムスタンプがあると、その削除操作によって後続の挿入操作が誤って削除されたように見えることがあります。

この問題を回避するには、gg.handler.name.setHbaseOperationTimestamp=をtrueに設定する必要があり、これは次の2つのことを行います。

- HBaseハンドラの行操作用のタイムスタンプの設定。

- 挿入操作がその挿入の後のタイムスタンプを持つことを保証する、削除-挿入操作の検出。

gg.handler.name.setHbaseOperationTimestampのデフォルトはfalseで、これは、HBaseサーバーが行のタイムスタンプを提供することを意味します。これは、同期外れの問題を引き起こす可能性があります。

HBaseハンドラで行操作のタイムスタンプを設定すると、次のような結果になります。

1. タイムスタンプがクライアント側で設定されているため、複数のアプリケーションが同じHBase表にデータをフィードしている場合に問題が発生する可能性があります。

2. 削除と再挿入がユースケースの一般的なパターンである場合、HBaseハンドラでは、このシナリオに遭遇するたびにタイムスタンプを1ミリ秒増分する必要があります。

処理をあまり先送りにはできないため、HBaseハンドラでは、プロセスを待機させる前にタイムスタンプを100ミリ秒未来に進めることのみを許し、クライアント側のHBase操作のタイムスタンプと実際の時間との同期が戻るようにしています。ソース・データベースで更新のかわりに削除-挿入が使用される場合、この同期シナリオはよくあることです。このシナリオが一般的な場合、未来に向けて100ミリ秒を超えるHBaseのタイムスタンプが許されないことが処理速度に影響する可能性があります。

5.6.5 Cloudera CDHのHBase互換性

Cloudera CDHは、CDH 5.4.0バージョンでHBase 1.0.0に移行しました。HBase 0.98.x以前との互換性を維持するため、CDHのHBaseクライアントはApache HBase 1.0.0とのバイナリ互換性を放棄しました。これにより、CDHバージョン5.4 - 5.11のCloudera CDH HBaseに接続する場合に、HBaseハンドラとの互換性の問題が発生しました。この問題の解決には、旧0.98 HBaseインタフェースを使用して次の構成パラメータを設定することをお薦めします。

gg.handler.name.hBase98Compatible=true

この互換性の問題は、Javaリフレクションを使用して解決されます。HBaseハンドラを使用してCDH 5.4xに接続する場合は、HBaseハンドラの構成プロパティを次のように変更する必要があります。

gg.handler.name.hBase98Compatible=false

デフォルト値はfalseなので、プロパティそのものを省略することもできます。

6 HDFSハンドラの使用

この章では、変更取得データをHadoop Distributed File System (HDFS)にストリーミングする目的で設計されているHDFSハンドラについて説明します。

トピック:

- 概要

- SequenceFile形式でのHDFSへの書込み

- Avroオブジェクト・コンテナ・ファイル形式でのHDFSへの書込み

- テンプレート文字列を使用したHDFSファイル名の生成

- メタデータ変更イベント

- パーティショニング

- その他の考慮事項

- ベスト・プラクティス

- HDFSハンドラのトラブルシューティング

6.1 概要

HDFSは、ビッグ・データのための主要なアプリケーションです。Hadoopは通常、Hadoopクラスタとして機能する複数のマシンにインストールされます。Hadoopでは、きわめて大量のデータをクラスタに格納でき、そのデータはクラスタ内のマシン全体で水平方向にスケーリングされます。そのうえで、様々なビッグ・データ・アプリケーションを使用してそのデータの分析を実行できます。

6.2 SequenceFile形式でのHDFSへの書込み

HDFS SequenceFileはバイナリ・キーと値のペアで構成されているフラット・ファイルです。gg.handler.name.formatプロパティをsequencefileに設定してデータをSequenceFile形式で書き込むことができます。レコードのkey部分はnullに設定され、実際のデータはvalue部分に設定されます。Hadoop SequenceFileの詳細は、https://wiki.apache.org/hadoop/SequenceFileを参照してください。

トピック:

- Hiveとの統合

- データ形式の理解

- HDFSハンドラの設定および実行

6.2.1 Hiveとの統合

HDFSハンドラには必要なHive機能がすべて用意されているため、Oracle GoldenGate for Big DataリリースにはHiveハンドラが含まれていません。

Hive統合を作成すると、表を作成してDDLイベント発生時に表定義を更新できます。これは、Avroオブジェクト・コンテナ・ファイル形式でフォーマットされたデータにのみ制限されます。詳細は、「Avroオブジェクト・コンテナ・ファイル形式でのHDFSの書き込み」および「HDFSハンドラ構成」を参照してください。

Hive表を作成するDDLには、Hiveで順序ファイルを使用するためのSTORED as sequencefileが含まれています。表作成スクリプトのサンプルを次に示します。

CREATE EXTERNAL TABLE table_name (
col1 string,
...
...
col2 string)
ROW FORMAT DELIMITED
STORED as sequencefile
LOCATION '/path/to/hdfs/file';

注意:

ファイルがHiveで使用されるようにする場合は、gg.handler.name.partitionByTableプロパティをtrueに設定する必要があります。

6.2.2 データ形式の理解

データは各レコードのvalue部分に書き込まれ、区切りText Formatで表されます。区切りテキスト・フォーマッタで説明されているすべてのオプションが、HDFS SequenceFileにデータを書き込む際に適用されます。

次に例を示します。

gg.handler.name.format=sequencefile
gg.handler.name.format.includeColumnNames=true
gg.handler.name.format.includeOpType=true
gg.handler.name.format.includeCurrentTimestamp=true
gg.handler.name.format.updateOpKey=U

6.2.3 HDFSハンドラの設定および実行

HDFSハンドラを実行するには、Hadoop単一インスタンスまたはHadoopクラスタをインストールして実行する必要があり、HDFSハンドラを実行しているマシンからネットワークにアクセスできなければなりません。Apache Hadoopはオープン・ソースであり、http://hadoop.apache.org/でダウンロードできます。単一ノード・クラスタ(疑似分散操作モードとも言う)またはクラスタ化設定(完全分散操作モードとも言う)のインストール方法は、「Getting Started」リンクをたどってください。

ここでは、HDFSハンドラのコンポーネントの構成とハンドラの実行について説明します。

- クラスパス構成

- HDFSハンドラ構成

- サンプル構成

- パフォーマンスに関する考慮事項

- セキュリティ

6.2.3.1 クラスパス構成

HDFSハンドラをHDFSに接続して実行するには、gg.classpath構成変数に2つのものを含める必要があります。1つ目はHDFS core-site.xmlファイル、2つ目はHDFSクライアントjarです。HDFSクライアントjarは、HDFSハンドラが接続するHDFSのバージョンと一致する必要があります。必要なクライアントJARファイルのリリース別リストは、「HDFSハンドラ・クライアント依存性」を参照してください。

core-site.xmlファイルのデフォルトの場所は、次のとおりです。

Hadoop_Home/etc/hadoop

HDFSクライアントjarのデフォルトの場所は次のディレクトリです。

Hadoop_Home/share/hadoop/common/lib/*

Hadoop_Home/share/hadoop/common/*

Hadoop_Home/share/hadoop/hdfs/lib/*

Hadoop_Home/share/hadoop/hdfs/*

gg.classpathは、指示に従って正確に構成する必要があります。core-site.xmlのパス指定には、ワイルドカードを付けずにcore-site.xmlファイルがあるディレクトリのパスを含めてください。core-site.xml ファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるjarファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください

正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=/ggwork/hadoop/hadoop-2.6.0/etc/hadoop:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/lib/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/hdfs/*:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/hdfs/lib/*

Kerberosセキュリティを有効にする場合には、HDFS構成ファイルhdfs-site.xmlもクラスパスに存在する必要があります。hdfs-site.xmlファイルは、デフォルトではHadoop_Home/etc/hadoopディレクトリに配置されます。HDFSハンドラがHadoopと同じ場所に配置されていない場合には、どちらか、または両方のファイルを別のマシンにコピーできます。

6.2.3.2 HDFSハンドラ構成

HDFSハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表6-1 HDFSハンドラの構成プロパティ

プロパティ

オプション / 必須

有効な値

デフォルト

説明

gg.handlerlist

必須

任意の文字列

なし

HDFSハンドラの名前を指定します。HDFSハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type=hdfs

必須

-

-

HDFSハンドラを選択し、変更データ取得をHDFSにストリーミングします。

gg.handler.name.mode

オプション

tx | op

op

ハンドラの操作(op)モードかトランザクション(tx)モードかを選択します。ほぼどんな場合でも、トランザクション・モードのほうがパフォーマンスは良くなります。

gg.handler.name.maxFileSize

オプション

デフォルトの測定単位はバイトです。k、mまたはgがそれぞれキロバイト、メガバイト、ギガバイトを表すように指定できます。有効な値は、10000、10k、100m、1.1gなどです。

1g

作成されるHDFSファイルの最大ファイル・サイズを選択します。

gg.handler.name.rootFilePath

オプション

HDFSで有効な任意のパス名。

/ogg

HDFSハンドラは、データ・ストリーミングをHDFSに格納するために、HDFSにサブディレクトリを作成し、その下にファイルを作成します。

gg.handler.name.fileRollInterval

オプション

デフォルトの測定単位はミリ秒です。ms、s、m、hがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、10000、10000ms、10s、10m、1.5hなどです。0以下の値を指定すると、ファイルのローリング・オン時間がオフになります。

ファイルのローリング・オン時間がオフ。

タイマーはHDFSファイルが作成されるときにスタートします。間隔が経過したときにまだファイルが開いている場合、そのファイルは閉じられます。新しいファイルはすぐ開かれません。新しいHDFSファイルは、ジャスト・イン・タイム・ベースで作成されます。

gg.handler.name.inactivityRollInterval

オプション

デフォルトの測定単位はミリ秒です。ms、s、m、hがそれぞれ、ミリ秒、秒、分、時間を表すように指定できます。有効な値は、10000、10000ms、10s、10.5m、1hなどです。0以下の値を指定すると、ファイルの非アクティブ・ローリング・オン時間がオフになります。

ファイルの非アクティブ・ローリング・オン時間がオフ。

タイマーは、HDFSファイルへの前回の書込みからスタートします。HDFSファイルへの新しい書込みでカウンタが再開されます。カウンタが経過したときにまだファイルが開いている場合、そのHDFSファイルは閉じられます。新しいファイルはすぐ開かれません。新しいHDFSファイルは、ジャスト・イン・タイム・ベースで作成されます。

gg.handler.name.fileNameMappingTemplate

オプション

実行時にHDFSファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。

${fullyQualifiedTableName}_${groupName}_${currentTimeStamp}.txt

一意のHDFSファイル名を実行時に動的に生成するために、定数とともにインタレースされるキーワードを使用できます(「テンプレート文字列を使用したHDFSファイル名の生成」を参照)。ファイル名は通常、${fullyQualifiedTableName}_${groupName}_${currentTimeStamp}{.txt}の形式に従います。

gg.handler.name.partitionByTable

オプション

true | false

true (データは表ごとにパーティション化される)

HDFSに書き込まれるデータを表ごとにパーティション化するかどうかを決定します。trueに設定すると、異なる表のデータは異なるHDFSファイルに書き込まれます。falseの場合、異なる表からのデータが同じHDFSファイルにインタレースされます。

Avroオブジェクト・コンテナ・ファイル・フォーマッタを使用するにはtrueに設定する必要があります。falseに設定すると、初期化時に構成の例外が発生します。

gg.handler.name.rollOnMetadataChange

オプション

true | false

true (HDFSファイルは、メタデータ変更イベント時にロールされます)

メタデータの変更があった場合に、HDFSファイルをロールするかどうかを決定します。trueの場合はHDFSがロールされ、falseの場合はHDFSがロールされません。

Avroオブジェクト・コンテナ・ファイル・フォーマッタを使用するにはtrueに設定する必要があります。falseに設定すると、初期化時に構成の例外が発生します。

gg.handler.name.format

オプション

delimitedtext | json | json_row | xml | avro_row | avro_op | avro_row_ocf | avro_op_ocf | sequencefile

delimitedtext

出力データのフォーマット方法について、HDFSハンドラのフォーマッタを選択します

- delimitedtext - 区切りテキスト

- json - JSON

- json_row - JSON出力モデリング行データ

- xml - XML

- avro_row - 行コンパクト形式のAvro

- avro_op - 操作詳細形式のAvro。

- avro_row_ocf - Avroオブジェクト・コンテナ・ファイル(OCF)形式でHDFSに書き込まれる行コンパクト形式のAvro。

- avro_op_ocf: Avroオブジェクト・コンテナ・ファイル形式でHDFSに書き込まれる詳細形式のAvro。

- sequencefile: 順序ファイル形式でHDFSに順番に書き込まれる区切りテキスト。

gg.handler.name.includeTokens

オプション

true | false

false

トークン・フィールドとトークン・キーや値を出力に含める場合はtrueに設定し、トークン出力を表示しない場合はfalseに設定します。

gg.handler.name.partitioner.fully_qualified_table_ name

カンマで区切られた1つ以上の列名と等しい。

オプション

完全修飾の表名と列名が存在する必要があります。

-

これは、par_{column name}={column value}という形式で、HDFSのデータをサブディレクトリに分割します。

gg.handler.name.authType

オプション

kerberos

none

このプロパティを

kerberos
Kerberos認証が有効になります。

gg.handler.name.kerberosKeytabFile

オプション(次の場合は必須

authType=Kerberos
)

Kerberos keytabファイルの相対パスまたは絶対パス。

-

keytabファイルを使用すると、HDFSハンドラがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.handler.name.kerberosPrincipal

オプション(次の場合は必須

authType=Kerberos
)

user/FQDN@MY.REALMなどの有効なKerberosプリンシパル名。

-

Kerberos認証で用いるKerberosプリンシパル名。

gg.handler.name.schemaFilePath

オプション

null

HDFSの有効なパスに設定して、スキーム(使用可能な場合)はHDFSディレクトリに書きこまれるようにします。スキーマは現在AvroおよびJSONフォーマッタでのみ使用できます。メタデータ変更イベントが発生すると、スキーマが上書きされてスキーマの変更が反映されます。

gg.handler.name.compressionType

順序ファイル形式にのみ適用可能。

オプション

block | none | record

none

Hadoop順序ファイル圧縮タイプ。gg.handler.name.formatがsequencefileに設定されている場合にのみ適用可能です。

gg.handler.name.compressionCodec

順序ファイルに適用可能で、HDFSへの書き込みはAvro OCF形式のみ。

オプション

org.apache.hadoop.io.compress.DefaultCodec | org.apache.hadoop.io.compress. BZip2Codec | org.apache.hadoop.io.compress.SnappyCodec | org.apache.hadoop.io.compress. GzipCodec

org.apache.hadoop.io.compress.DefaultCodec

Hadoop順序ファイル圧縮コーデック。gg.handler.name.formatがsequencefileに設定されている場合にのみ適用可能です。

オプション

null | snappy | bzip2 | xz | deflate

null

Avro OCFフォーマッタ圧縮コード。この構成では、生成されたAvro OCFファイルに使用される圧縮ライブラリの選択を制御します。

SnappyはSnappy JARファイルにネイティブ・バイナリを含み、圧縮または圧縮解除の実行時にJava-nativeトラバーサルを実行します。Snappyを使用することで、Javaを使っているときは発生しない実行時の問題やプラットフォームの移植の問題が生じる場合があります。場合によっては、追加のテストを実施して、Snappyが必要なすべてのプラットフォームで確実に動作するか確認する必要があります。Snappyはオープン・ソース・ライブラリであるため、Oracleは必要なすべてのプラットフォームでの稼動を保証できません。

gg.handler.name.hiveJdbcUrl

オプション

Hive JDBCインタフェースを使用してHiveに接続するための有効なURL。

null (Hive統合は無効)

Avro OCFフォーマッタにのみ適用できます。

この構成値では、Hive JDBCインタフェースを通じてHiveに接続するためのJDBC URLを指定します。このプロパティを使用するには、gg.classpathにHive JDBCライブラリを含める必要があります。

Hive JDBC接続は、基本の資格証明、SSL/TLS、またはKerberosを介して保護できます。基本の資格証明では、ユーザー名およびパスワードの構成プロパティが指定されます。

SSL/TLSでのHive JDBC URLの生成方法については、Hiveドキュメントを参照してください。

KerberosでのHive JDBC URLの生成方法については、Hiveドキュメントを参照してください。(Hive JDBCのセキュリティにKerberosを使用する場合、HDFS接続に対してKerberosを有効にする必要があります。この場合、Hive JDBC接続は同じKerberosプリンシパルを使用してHDFS Kerberos機能でピギーバックすることができます)。

gg.handler.name.hiveJdbcUsername

オプション

Hive JDBC接続が資格証明により保護される場合の有効なユーザー名。

System.getProperty(user.name)からのJavaの呼び出し結果

Avroオブジェクト・コンテナ・ファイルOCFフォーマッタにのみ適用できます。

このプロパティは、hiveJdbcUrlプロパティが設定されている場合にのみ関連します。JDBC接続が資格証明により保護されている場合に、環境に必要になる場合があります。Hiveでは、Hive DDL操作がユーザーに関連付けられている必要があります。値を設定しない場合、デフォルトはJavaの呼び出しSystem.getProperty(user.name)の結果になります。

gg.handler.name.hiveJdbcPassword

オプション

Hive JDBC接続にパスワードが必要な場合の有効なパスワード。

なし

Avro OCFフォーマッタにのみ適用できます。

このプロパティは、hiveJdbcUrlプロパティが設定されている場合にのみ関連します。JDBC接続が資格証明により保護されている場合に、環境に必要になる場合があります。これは、JDBC接続にパスワードが必要となるようHiveが構成されている場合に必須です。

gg.handler.name.hiveJdbcDriver

オプション

完全修飾のHive JDBCドライバ・クラス名。

org.apache.hive.jdbc.HiveDriver

Avro OCFフォーマッタにのみ適用できます。

このプロパティは、hiveJdbcUrlプロパティが設定されている場合にのみ関連します。デフォルトはHive Hadoop2 JDBCドライバ名です。通常、このプロパティは構成が不要で、Apache Hiveに新しいJDBCドライバ・クラスが導入される場合に使用されます。

gg.handler.hdfs.openNextFileAtRoll

オプション

false

抽出、ロード、変換(ELT)の状況をサポートするために、Avro OCFまたは順序ファイルの書込みを行わないHDFSハンドラにのみ適用できます。

このプロパティをtrueに設定すると、ファイル・ロールが発生した場合に新しいファイルがただちに作成されます。

ファイル・ロールは次のいずれかによってトリガーされます

- メタデータ変更

- ファイル・ロールの経過間隔

- 非アクティブの経過間隔

データ・ファイルはHDFSにロードされ、監視プログラムはデータの消費を待機する書込みディレクトリを監視します。消費アプリケーションによって前のファイルを消費できるように、監視プログラムは新しいファイルの出現をトリガーとして使用します。

6.2.3.3 サンプル構成

Javaアダプタ・プロパティ・ファイルからのHDFSハンドラの構成例を次に示します。

gg.handlerlist=hdfs
gg.handler.hdfs.type=hdfs
gg.handler.hdfs.mode=tx
gg.handler.hdfs.includeTokens=false
gg.handler.hdfs.maxFileSize=1g
gg.handler.hdfs.rootFilePath=/ogg
gg.handler.hdfs.fileRollInterval=0
gg.handler.hdfs.inactivityRollInterval=0
gg.handler.hdfs.partitionByTable=true
gg.handler.hdfs.rollOnMetadataChange=true
gg.handler.hdfs.authType=none
gg.handler.hdfs.format=delimitedtext

6.2.3.4 パフォーマンスに関する考慮事項

HDFSハンドラは、書込み永続性を維持する目的で、各トランザクションの最後にHDFSデータ・ノードにデータをフラッシュするために、HDFS書込みストリームでHDFSフラッシュ・メソッドを呼び出します。これは負荷の高いコールなので、1つまたは複数の操作のトランザクションで多数のHDFSフラッシュ・コールが発生する場合には特に、パフォーマンスが悪影響を受ける可能性があります。

複数の小さいトランザクションを1つの大きいトランザクションのバッチ処理にまとめると、HDFSハンドラのパフォーマンスが大幅に向上する可能性があります。高いパフォーマンスが必要な場合には、Replicatプロセスのバッチ処理機能を構成する必要があります。詳細は、「Replicatのグループ化」を参照してください。

HDFSクライアント・ライブラリは、HDFSハンドラがオープンするHDFSファイル・ストリームごとにスレッドを生成します。そのため、JMVを実行するスレッドの数は、オープンしているHDFSファイル・ストリームの数に比例して増加します。オープンしているHDFSファイル・ストリームが増えると、HDFSハンドラのパフォーマンスが低下する可能性があります。ソース・レプリケーション表が多い、またはパーティション化を多用しているという理由で、多くのHDFSファイルに書き込むようHDFSハンドラを構成すると、パフォーマンスが低下することがあります。ユースケースによって、多くの表への書込みが必要な場合は、HDFSファイル・ストリームをクローズするロール・オン時間またはロール・オン非アクティブの機能を有効にすることをお薦めします。HDFSファイル・ストリームをクローズすると、HDFSクライアント・スレッドが終了し、関連するリソースをJVMが再利用できるようになります。

6.2.3.5 セキュリティ

HDFSクラスタは、Kerberos認証を使用して保護できます。HDFSハンドラは、Kerberosで保護されたクラスタに接続できます。HDFS core-site.xmlがハンドラのクラスパスにあり、hadoop.security.authenticationプロパティをkerberosに、hadoop.security.authorizationプロパティをtrueに設定する必要があります。また、HDFSハンドラのJava構成ファイルで次のプロパティを設定する必要があります。

gg.handler.name.authType=kerberos
gg.handler.name.kerberosPrincipalName=legal Kerberos principal name
gg.handler.name.kerberosKeytabFile=path to a keytab file that contains the password for the Kerberos principal so that the HDFS Handler can programmatically perform the Kerberos kinit operations to obtain a Kerberos ticket

Kerberosを使用してHadoopクラスタを保護する方法については、HDFSのドキュメントを参照してください。

6.3 Avroオブジェクト・コンテナ・ファイル形式でのHDFSへの書込み

HDFSハンドラには、Avroオブジェクト・コンテナ・ファイル(OCF)形式でHDFSに書き込むための特殊な機能が含まれています。このAvro OCFはAvro仕様の一部です。詳細は次の場所にあるAvroドキュメントを参照してください。

https://avro.apache.org/docs/current/spec.html#Object+Container+Files

次の理由からAvro OCF形式は最適な選択です。

- Apache Hive (HDFSに書き込まれる未加工のAvroはHiveでサポートされない)と統合できる

- スキーマ展開に対する適切なサポートを提供する。

HDFSにAvro OCF形式で書込みできるようにするには、次の構成を行います。

行データをHDFSにAvro OCF形式で書き込むには、gg.handler.name.format=avro_row_ocfプロパティを構成します。

操作データをHDFSにAvro OCF形式で書き込むには、gg.handler.name.format=avro_op_ocfプロパティを構成します。

HDFSおよびAvro OCF統合には、Hiveで対応する表を作成し、メタデータ変更イベントについてスキーマを更新するためのオプション機能が含まれています。構成の項では、Hiveとの統合を有効にするプロパティに関する情報を説明しています。Oracle GoldenGate Hive統合はJDBCインタフェースを使用してHiveにアクセスするため、この統合を有効にするにはHive JDBCサーバーを実行する必要があります。

6.4 テンプレート文字列を使用したHDFSファイル名の生成

HDFSハンドラでは、テンプレート文字列を使用してHDFSファイル名を動的に生成できます。テンプレート文字列を使用すると、静的な文字列とともに実行時に動的に解決されるキーワードの組合せを生成することで、生成されるHDFSファイル名をより詳細に制御できます。テンプレート・ファイル名は、gg.handler.name.fileNameMappingTemplate構成プロパティを使用して制御できます。このパラメータのデフォルト値は次のとおりです。

${fullyQualifiedTableName}_${groupName}_${currentTimestamp}.txt

実行時に動的に置き換えられるキーワードは、次のものがサポートされています。

キーワード

置換

${fullyQualifiedTableName}

名前をピリオド(.)で区切った完全修飾表名。たとえば、oracle.test.table1。

${catalogName}

ソース表のカタログ名。たとえば、oracle。

${schemaName}

ソース表のスキーマ名。たとえば、test。

${tableName}

ソース表の短い表名。たとえば、table1。

${groupName}

調整された適用を使用する場合は、スレッドIDと連結されたReplicatプロセス名。たとえば、HDFS001。

${currentTimestamp}

日時のデフォルトの出力形式はyyyy-MM-dd_HH-mm-ss.SSSです。たとえば、2017-07-05_04-31-23.123。

または、構文${currentTimestamp[yyyy-MM-dd_HH-mm-ss.SSS]}を使用して、独自の日付の書式マスクを構成することもできます。日時の書式マスクはJavaクラスjava.text.SimpleDateFormatの規則に従います。

有効なテンプレートおよび解決された文字列の例を次に示します。

有効なテンプレート

置換

${schemaName}.${tableName}__${groupName}_${currentTimestamp}.txt

test.table1__HDFS001_2017-07-05_04-31-23.123.txt

${fullyQualifiedTableName}--${currentTimestamp}.avro

oracle.test.table1—2017-07-05_04-31-23.123.avro

${fullyQualifiedTableName}_${currentTimestamp[yyyy-MM-ddTHH-mm-ss.SSS]}.json

oracle.test.table1—2017-07-05T04-31-23.123.json

テンプレートを使用してHDFSファイル名を生成する場合は、次の制限に注意してください。

- 生成されるHDFSファイル名は、有効なHDFSファイル名である必要があります。

- 調整された適用および分割されたソース表データを異なるReplicatスレッドに使用する場合は、HDFSファイルの命名テンプレートの一部として${groupName}を使用することを強くお薦めします。生成されるHDFS名の一意性を提供するのはグループ名で、${currentTimestamp}単独では保証されません。HDFSファイル名の衝突により、Replicatプロセスの異常終了が発生します。

6.5 メタデータ変更イベント

メタデータ変更イベントが、HDFSハンドラによって処理されるようになりました。HDFSハンドラのデフォルトの動作では、メタデータ変更イベントが発生した場合、現在の関連ファイルがロールされます。この動作により、メタデータ変更の結果は少なくとも複数のファイルに分割できます。メタデータ変更に対するファイル・ローリングは設定変更が可能なので、オフにすることができます。

メタデータ変更イベントをサポートするには、ソース・データベースで変更を取得するプロセスが、DDL変更と証跡でのメタデータの両方をサポートする必要があります。Oracle GoldenGateでは、すべてのデータベース実装でDDLレプリケーションがサポートされているわけではありません。DDLレプリケーションがサポートされているかどうかを確認するには、適切なデータベース用のOracle GoldenGateのインストレーションおよび構成ガイドを参照してください。

6.6 パーティショニング

HDFSハンドラは、1つ以上の列値による表データのパーティション化をサポートしています。パーティション化を有効にする構成構文は、次のとおりです。

gg.handler.name.partitioner.fully qualified table name=one mor more column names separated by commas

次の例で考えてみます。

gg.handler.hdfs.partitioner.dbo.orders=sales_region

この例では、HDFSでファイルが次のように分割されます。

/ogg/dbo.orders/par_sales_region=west/data files
/ogg/dbo.orders/par_sales_region=east/data files
/ogg/dbo.orders/par_sales_region=north/data files
/ogg/dbo.orders/par_sales_region=south/data files

パーティション化する列は、慎重に選択してください。重要なのは、値の候補が少ない(10個以下)列を選択することと、その値がグループ化とデータの分析に有意であることです。たとえばセールス地域は、パーティション化列として適切です。顧客の生年月日などは、パーティション化列に適していません。値の候補が多い列でパーティション化を構成すると、問題が起きる可能性があります。選択を誤ると、数百ものHDFSファイル・ストリームがオープンし、「パフォーマンスに関する考慮事項」で説明したように、パフォーマンスが低下する恐れがあります。また、パーティション化が不適切だと、データの分析を実行する際にも問題が起きます。Apache Hiveで、Hiveデータをパーティション化する場合には、where句のすべてにパーティション基準を指定する必要があります。

6.7 その他の考慮事項

特に一般的なのが、Javaクラスパスに関する問題です。Oracle HDFSハンドラでは、HDFSにデータをストリーミングする前提条件として、特定のHDFSクライアント・ライブラリをクラスパスで解決する必要があります。

必要なクライアントJARファイルのバージョン別リストは、「HDFSハンドラ・クライアント依存性」を参照してください。HDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。HDFSハンドラは複数のバージョンのHDFSをサポートし、HDFSクライアントjarはHDFSハンドラが接続するHDFSと同じバージョンである必要があります。HDFSクライアントjarはオープン・ソースであり、Apache HadoopサイトやMaven中央リポジトリなどのサイトから無償でダウンロードできます。

HDFSへの接続を確立するには、HDFSハンドラのクラスパスにHDFS core-site.xmlファイルが存在する必要があります。core-site.xmlファイルがクラスパスに存在しない場合、HDFSクライアント・コードのデフォルトは、ローカル・ファイル・システムに書き込もうとするモードになります。HDFSではなくローカル・ファイル・システムに書き込むと、トラブルシューティングや、連絡ポイント(POC)の構築に、またはHDFS統合を確立するプロセスの手順の1つとして便利です。

もう1つ気を付けたいのは、HDFSハンドラを使用してHDFSにストリーミングされるデータは、Hiveなどのビッグ・データ分析ツールですぐには利用できない場合も多いということです。これは主に、HDFSファイルに対してオープンしている書込みストリームをHDFSハンドラが保有している場合に発生します。デフォルトでは、HDFSは128MBのブロックで書き込みます。構築中のHDFSブロックは、分析ツールが認識されないことがあります。また、HDFSシェルで-ls、-cat、-getの各コマンドを使用するとき、ファイル・サイズ間に矛盾が見られるのも一般的です。これはHDFSストリーミングの異常であり、HDFS仕様にも書かれています。HDFSのこの異常が原因で、分析データにはファイルごとに128MBのブラインド・スポットが発生することがあります。レプリケーション・データのストリームが一定しており、HDFSからの分析データに低レベルのレイテンシが必要なければ、これは問題になりません。ただし、HDFS書込みストリームをクローズすると、ブロック書込みがファイナライズされるため、場合によってはこれが問題になることがあります。データは分析ツールですぐに認識され、ファイル・サイズの測定は再び安定します。そのため、HDFSハンドラに追加されたファイル・ローリング機能を使用すると、HDFS書込みストリームをクローズしてすべてのデータを認識させることができます。

重要:

ファイル・ローリング・ソリューションは、それ自体に問題がある場合もあります。ファイル・ローリングを多用すると、HDFSに小さいファイルが大量に発生します。HDFSに小さいファイルが大量にあると、それ自体が分析ツールのパフォーマンス低下の原因になります。

次の場合にも、HDFSに矛盾の問題が発生する可能性があります。

- HDFSハンドラ・プロセスがクラッシュする。

- HDFSハンドラ・プロセスで強制シャットダウンが呼び出される。

- ネットワークの停止、その他の原因でHDFSハンドラ・プロセスが異常終了する。

どの場合にもHDFSハンドラは、HDFS書込みストリームを明示的にクローズして書込みブロックをファイナライズせずに終了する可能性があります。内部プロセスとしてHDFSは、書込みストリームが破損していることを最終的に認識するため、HDFSが書込みブロックをファイナライズします。この場合、HDFSプロセスが書込みブロックをファイナライズする前に短時間の遅延が発生することがあります。

6.8 ベスト・プラクティス

HDFSクラスタは、クラスタ・ノードと呼ばれる専用サーバーで稼働させるのが、ビッグ・データのベスト・プラクティスと考えられています。エッジ・ノードとは、HDFSクラスタ・ノードにデータをストリーミングし、HDFSクラスタ・ノードからデータを取得するアプリケーションをホストするサーバー・マシンです。HDFSクラスタ・ノードとエッジ・ノードの間に存在するこの物理的なアーキテクチャ構造には、次のように様々なメリットがあります。

- HDFSクラスタ・ノードが、クラスタのインタフェースを提供するアプリケーションと、リソースをめぐって競合しない。

- HDFSクラスタ・ノードとエッジ・ノードで要件が異なる可能性がある。この物理トポロジのために、特定のニーズに応じて適切なハードウェアを構成できます。

ベスト・プラクティスとして、HDFSハンドラはエッジ・ノードにインストールして実行し、ネットワーク接続を使用してHDFSクラスタにデータをストリーミングするようにします。HDFSハンドラは、ネットワーク上でHDFSクラスタに認識されればどのマシン上でも実行できます。HDFSハンドラをエッジ・ノードにインストールするには、core-site.xmlファイルと依存性jarをエッジ・ノードにコピーし、HDFSハンドラがアクセスできるようにする必要があります。必要に応じて、HDFSハンドラはHDFSクラスタ・ノード上に共存させることもできます。

6.9 HDFSハンドラのトラブルシューティング

HDFSハンドラのトラブルシューティングは、Java log4jファイルの内容から始まります。Javaロギング構成にある指示に従って、Java log4jログ・ファイルを正しく生成するようにランタイムを構成してください。

トピック:

- Javaクラスパス

- HDFS接続プロパティ

- ハンドラとフォーマッタ構成

6.9.1 Javaクラスパス

前述したように、Javaクラスパスは非常によくある問題の1つです。クラスパスに問題があることは通例、Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。この方法では、DEBUGレベルのロギングを有効にし、ログ・ファイルで次のようなメッセージを探すと、必要な依存性jarがすべて解決されることを確認できます。

2015-09-21 10:05:10 DEBUG ConfigClassPath:74 - ...adding to classpath: url="file:/ggwork/hadoop/hadoop-2.6.0/share/hadoop/common/lib/guava-11.0.2.jar

6.9.2 HDFS構成プロパティ

HDFS core-site.xmlファイル(デフォルト設定を含んでいる)の内容は、ロギング・レベルを DEBUGまたはTRACEに設定している場合に、Java log4jログ・ファイルに出力されます。これには、HDFSへの接続プロパティが示されます。Java log4jログ・ファイルで次のものを検索します。

2015-09-21 10:05:11 DEBUG HDFSConfiguration:58 - Begin - HDFS configuration object contents for connection troubleshooting.

fs.defaultFSプロパティが次のように設定されている場合(ローカル・ファイル・システムを示している)、core-site.xmlファイルはgg.classpathプロパティで適切に設定されていません。

Key: [fs.defaultFS] Value: [file:///].

適切にHDFSホストおよびポートが指定されたfs.defaultFSは、次のようになります。

Key: [fs.defaultFS] Value: [hdfs://hdfshost:9000].

6.9.3 ハンドラとフォーマッタ構成

Java log4jログ・ファイルには、HDFSハンドラおよび選択したフォーマッタの構成状態に関する情報が含まれています。この情報は、INFOログ・レベルで出力されます。サンプルの出力は、次のようになります。

2015-09-21 10:05:11 INFO  AvroRowFormatter:156 - **** Begin Avro Row Formatter -
Configuration Summary ****
Operation types are always included in the Avro formatter output.
The key for insert operations is [I].
The key for update operations is [U].
The key for delete operations is [D].
The key for truncate operations is [T].
Column type mapping has been configured to map source column types to an
appropriate corresponding Avro type.
Created Avro schemas will be output to the directory [./dirdef].
Created Avro schemas will be encoded using the [UTF-8] character set.
In the event of a primary key update, the Avro Formatter will ABEND.
Avro row messages will not be wrapped inside a generic Avro message.
No delimiter will be inserted after each generated Avro message.
**** End Avro Row Formatter - Configuration Summary ****

2015-09-21 10:05:11 INFO  HDFSHandler:207 - **** Begin HDFS Handler -
Configuration Summary ****
Mode of operation is set to tx.
Data streamed to HDFS will be partitioned by table.
Tokens will be included in the output.
The HDFS root directory for writing is set to [/ogg].
The maximum HDFS file size has been set to 1073741824 bytes.
Rolling of HDFS files based on time is configured as off.
Rolling of HDFS files based on write inactivity is configured as off.
Rolling of HDFS files in the case of a metadata change event is enabled.
HDFS partitioning information:
The HDFS partitioning object contains no partitioning information.
HDFS Handler Authentication type has been configured to use [none]
**** End HDFS Handler - Configuration Summary ****

7 Java Database Connectivityハンドラの使用

この章では、Java Database Connectivity (JDBC)ハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- 詳細な機能

- JDBCハンドラの設定および実行

- サンプル構成

7.1 概要

汎用のJava Database Connectivity (JDBC)ハンドラには、JDBCインタフェースを使用してターゲットまたはデータベースにソース・トランザクション・データを複製する機能があり、このハンドラは、JDBC接続をサポートするターゲットに適用可能です。

JDBC APIを使用すると、リレーショナル・データベースからスプレッドシートやフラット・ファイルまで、事実上あらゆるデータ・ソースにアクセスできます。JDBCテクノロジは、JDBCハンドラが構築された共通ベースとしても機能します。JDBCメタデータ・プロバイダを使用したJDBCハンドラには、列マッピングや列関数などのReplicat機能を使用する追加の機能があります。「メタデータ・プロバイダの使用」を参照してください

詳細は、次に示すOracle Java JDBC APIのドキュメントのWebサイトを参照してください。

http://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/index.html

7.2 詳細な機能

JDBCハンドラは、JDBCインタフェースを使用してターゲット(またはデータベース)にソース・トランザクション・データを複製します。

トピック:

- 単一操作モード

- Oracle Databaseデータ型

- MySQL Databaseデータ型

- Netezzaデータベース・データ型

- Redshiftデータベース・データ型

7.2.1 単一操作モード

JDBCハンドラは、証跡レコードがハンドラによって処理されると、すべての単一の証跡レコード(行操作)についてSQL操作を実行します。JDBCハンドラでは、バッチ操作を行うJDBC APIのBATCHSQL機能は使用しません。

7.2.2 Oracle Databaseデータ型

Oracle Databaseターゲットでは、次の列データ型がサポートされています。

- NUMBER

- DECIMAL

- INTEGER

- FLOAT

- REAL

- DATE

- TIMESTAMP

- INTERVAL YEAR TO MONTH

- INTERVAL DAY TO SECOND

- CHAR

- VARCHAR2

- NCHAR

- NVARCHAR2

- RAW

- CLOB

- NCLOB

- BLOB

- TIMESTAMP WITH TIMEZONE脚注1

- TIME WITH TIMEZONE脚注2

7.2.3 MySQL Databaseデータ型

MySQL Databaseターゲットでは、次の列データ型がサポートされています。

- INT

- REAL

- FLOAT

- DOUBLE

- NUMERIC

- DATE

- DATETIME

- TIMESTAMP

- TINYINT

- BOOLEAN

- SMALLINT

- BIGINT

- MEDIUMINT

- DECIMAL

- BIT

- YEAR

- ENUM

- CHAR

- VARCHAR

7.2.4 Netezzaデータベース・データ型

Netezzaデータベース・ターゲットでは、次の列データ型がサポートされています。

- byteint

- smallint

- integer

- bigint

- numeric(p,s)

- numeric(p)

- float(p)

- Real

- double

- char

- varchar

- nchar

- nvarchar

- date

- time

- Timestamp

7.2.5 Redshiftデータベース・データ型

Redshiftデータベース・ターゲットでは、次の列データ型がサポートされています。

- SMALLINT

- INTEGER

- BIGINT

- DECIMAL

- REAL

- DOUBLE

- CHAR

- VARCHAR

- DATE

- TIMESTAMP

7.3 JDBCハンドラの設定および実行

ここでは、JDBCハンドラのコンポーネントの構成とハンドラの実行について説明します。

注意:

データ型マッピング、列マッピング、列関数などの機能の使用を向上させるには、JDBCハンドラとともにJDBCメタデータ・プロバイダを使用する必要があります。

トピック:

- Javaクラスパス

- ハンドラ構成

- 文のキャッシュ

- エラー処理の設定

7.3.1 Javaクラスパス

gg.classpathプロパティを使用して、JDBC Java Driverの場所をハンドラのクラスパスに含める必要があります。

たとえば、MySQLデータベースの構成は次のようになります。

gg.classpath= /path/to/jdbc/driver/jar/mysql-connector-java-5.1.39-bin.jar

7.3.2 ハンドラ構成

プロパティ・ファイルを使用して、JDBCハンドラの操作を構成します。JDBCハンドラの選択を有効にするには、まずgg.handler.name.type=jdbcを指定してハンドラ・タイプを構成してから、次に示す他のJDBCプロパティを構成する必要があります。

表7-1 JDBCハンドラの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handler.name.type

必須

jdbc

なし

JDBCハンドラを選択し、変更データ取得をJDBCにストリーミングします。

gg.handler.name.connectionURL

必須

有効なJDBC接続URL。

なし

ターゲット固有のJDBC接続URL。

gg.handler.name.DriverClass

ターゲット・データベース依存。

ターゲット固有のJDBCドライバ・クラス名。

なし

ターゲット固有のJDBCドライバ・クラス名。

gg.handler.name.userName

ターゲット・データベース依存。

有効なユーザー名。

なし

ターゲット・データベースへのJDBC接続に使用するユーザー名。

gg.handler.name.password

ターゲット・データベース依存。

有効なパスワード。

なし

ターゲット・データベースへのJDBC接続に使用するパスワード。

gg.handler.name.maxActiveStatements

オプション

符号なし整数。

ターゲット・データベース依存

このプロパティを指定しないと、JDBCハンドラは、アクティブな準備済SQL文の最大数を示すターゲット依存のデータベース・メタデータを問い合せます。一部のターゲットではこのメタデータを指定しないため、アクティブなSQL文のデフォルト値(256)が使用されます。

このプロパティを指定すると、JDBCハンドラは、ターゲット・データベースでこのようなメタデータを問い合せることはせず、構成で指定されたプロパティ値を使用します。

どちらの場合でも、JDBCハンドラでアクティブなSQL文の合計数を超えそうになることが判明すると、最も古いSQL文がキャッシュから削除され、新しいSQL文が1つ追加されます。

7.3.3 文のキャッシュ

通常、JDBCドライバを実装すると、DML操作の実行を高速化するために複数の文をキャッシュできます。これにより、同じプロファイルまたはテンプレートを共有する操作の文を再準備しなくて済みます。

JDBCハンドラは、文キャッシュを使用してプロセスを高速化し、基礎となるJDBCドライバでサポートされているのと同じ数の文をキャッシュします。キャッシュはLRU cacheを使用して実装されます。keyは操作のプロファイル(StatementCacheKeyクラスのインスタンスとしてメモリーに内部的に格納される)で、valueはPreparedStatementオブジェクト自体です。

StatementCacheKeyオブジェクトには、JDBCハンドラでサポートされている様々なDMLプロファイルの次の情報が含まれています。

DML操作タイプ

StatementCacheKeyには次のタプルが含まれる。

INSERT

(表名、操作タイプ、操作後イメージの順序付き列索引)

UPDATE

(表名、操作タイプ、操作後イメージの順序付き列索引)

DELETE

(表名、操作タイプ)

TRUNCATE

(表名、操作タイプ)

7.3.4 エラー処理の設定

JDBCハンドラはREPERRORおよびHANDLECOLLISIONS Oracle GoldenGateパラメータの使用をサポートします。『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

次のように、ターゲット・データベースに別のエラー・コードのマッピングを定義する場合は、ハンドラ・プロパティ・ファイルに追加の構成が必要です。

gg.error.duplicateErrorCodes

重複したキー違反エラーを示すターゲット・データベースで定義されたエラー・コードのカンマ区切りリスト。ほとんどのJDBCドライバでは有効なエラー・コードが返されるため、構成されたエラー・コードに基づいてREPERRORアクションを構成できます。次に例を示します。

gg.error.duplicateErrorCodes=1062,1088,1092,1291,1330,1331,1332,1333

gg.error.notFoundErrorCodes

ターゲット・データベースでの欠落したDELETEまたはUPDATE操作を示すエラー・コードのカンマ区切りリスト。

場合によっては、UPDATEまたはDELETE操作時のJDBCドライバ・エラーではターゲット・データベースの行が何も変更されないため、JDBCハンドラによる追加の処理は不要です。

ほとんどのJDBCドライバはゼロ行に対するDELETEまたはUPDATEのエラーを返さないため、JDBCハンドラは、失敗したUPDATEまたはDELETE操作を自動的に検出し、Replicatプロセスに「見つかりません」を示すエラーをトリガーします。その後、Replicatプロセスは指定されたREPERRORアクションを実行できます。

ハンドラで使用されるデフォルトのエラー・コードは値ゼロです。 このプロパティをゼロ以外の値に構成すると、構成されたエラー・コードの値は、ハンドラがnot foundエラーをトリガーするときに使用されます。 次に例を示します。

gg.error.notFoundErrorCodes=1222

gg.error.deadlockErrorCodes

ターゲット・データベースでのデッドロック・エラーを示すエラー・コードのカンマ区切りリスト。次に例を示します。

gg.error.deadlockErrorCodes=1213

コードの設定

エラー・コードがゼロに設定されていると、ReplicatがREPERRORおよびHANDLECOLLISIONSの構成に応答しないため、gg.error.duplicateErrorCodes、gg.error.notFoundErrorCodesおよびgg.error.deadlockErrorCodesの各プロパティにゼロ以外のエラー・コードを設定することをお薦めします。

Oracle Databaseターゲットのエラー・コードの例

gg.error.duplicateErrorCodes=1
gg.error.notFoundErrorCodes=0
gg.error.deadlockErrorCodes=60

MySQL Databaseターゲットのエラー・コードの例

gg.error.duplicateErrorCodes=1022,1062
gg.error.notFoundErrorCodes=1329
gg.error.deadlockErrorCodes=1213,1614

7.4 サンプル構成

次の各項では、Javaアダプタ・プロパティ・ファイルからのJDBCハンドラでサポートされているデータベースの構成例を示します。

トピック:

- Oracle Databaseターゲットの例

- JDBCメタデータ・プロバイダを使用したOracle Databaseターゲットの例

- MySQL Databaseターゲットの例

- JDBCメタデータ・プロバイダを使用したMySQL Databaseターゲットの例

7.4.1 Oracle Databaseターゲットの例

gg.handlerlist=jdbcwriter
gg.handler.jdbcwriter.type=jdbc

#Handler properties for Oracle database target
gg.handler.jdbcwriter.DriverClass=oracle.jdbc.driver.OracleDriver
gg.handler.jdbcwriter.connectionURL=jdbc:oracle:thin:@<DBServer address>:1521:<database name>
gg.handler.jdbcwriter.userName=<dbuser>
gg.handler.jdbcwriter.password=<dbpassword>
gg.classpath=/path/to/oracle/jdbc/driver/ojdbc5.jar
goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm

7.4.2 JDBCメタデータ・プロバイダを使用したOracle Databaseターゲットの例

gg.handlerlist=jdbcwriter
gg.handler.jdbcwriter.type=jdbc

#Handler properties for Oracle database target with JDBC Metadata provider
gg.handler.jdbcwriter.DriverClass=oracle.jdbc.driver.OracleDriver
gg.handler.jdbcwriter.connectionURL=jdbc:oracle:thin:@<DBServer address>:1521:<database name>
gg.handler.jdbcwriter.userName=<dbuser>
gg.handler.jdbcwriter.password=<dbpassword>
gg.classpath=/path/to/oracle/jdbc/driver/ojdbc5.jar
#JDBC Metadata provider for Oracle target
gg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:oracle:thin:@<DBServer address>:1521:<database name>
gg.mdp.DriverClassName=oracle.jdbc.driver.OracleDriver
gg.mdp.UserName=<dbuser>
gg.mdp.Password=<dbpassword>
goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm

7.4.3 MySQL Databaseターゲットの例

gg.handlerlist=jdbcwriter
gg.handler.jdbcwriter.type=jdbc

#Handler properties for MySQL database target
gg.handler.jdbcwriter.DriverClass=com.mysql.jdbc.Driver
gg.handler.jdbcwriter.connectionURL=jdbc:<a target="_blank" href="mysql://">mysql://</a><DBServer address>:3306/<database name>
gg.handler.jdbcwriter.userName=<dbuser>
gg.handler.jdbcwriter.password=<dbpassword>
gg.classpath=/path/to/mysql/jdbc/driver//mysql-connector-java-5.1.39-bin.jar

goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm

7.4.4 JDBCメタデータ・プロバイダを使用したMySQL Databaseターゲットの例

gg.handlerlist=jdbcwriter
gg.handler.jdbcwriter.type=jdbc

#Handler properties for MySQL database target with JDBC Metadata provider
gg.handler.jdbcwriter.DriverClass=com.mysql.jdbc.Driver
gg.handler.jdbcwriter.connectionURL=jdbc:<a target="_blank" href="mysql://">mysql://</a><DBServer address>:3306/<database name>
gg.handler.jdbcwriter.userName=<dbuser>
gg.handler.jdbcwriter.password=<dbpassword>
gg.classpath=/path/to/mysql/jdbc/driver//mysql-connector-java-5.1.39-bin.jar
#JDBC Metadata provider for MySQL target
gg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:<a target="_blank" href="mysql://">mysql://</a><DBServer address>:3306/<database name>
gg.mdp.DriverClassName=com.mysql.jdbc.Driver
gg.mdp.UserName=<dbuser>
gg.mdp.Password=<dbpassword>

goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm

脚注の凡例

脚注1:
2桁の時間と2桁の最小オフセットのタイムゾーン。

脚注2:
2桁の時間と2桁の最小オフセットのタイムゾーン。

8 Kafkaハンドラの使用

この章では、Kafkaハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- 詳細な機能

- Kafkaハンドラの設定および実行

- スキーマの伝播

- パフォーマンスに関する考慮事項

- セキュリティ

- メタデータ変更イベント

- Snappyに関する考慮事項

- トラブルシューティング

8.1 概要

Oracle GoldenGate for Big Data Kafka Handlerは、Oracle GoldenGate証跡からKafkaトピックに変更取得データをストリーミングするために設計されています。またKafkaハンドラには、メッセージに対応するスキーマを別のスキーマ・トピックに公開するオプションの機能もあります。AvroおよびJSONのスキーマの公開がサポートされています。

Apache Kafkaは、オープン・ソースで、パーティション化および複製された分散型のメッセージング・サービスです。Kafkaとその関連ドキュメントは、http://kafka.apache.org/で入手できます。

Kafkaは、単一インスタンスとしても、複数サーバー上のクラスタとしても実行できます。Kafkaの各サーバー・インスタンスは、ブローカと呼ばれます。Kafkaにおけるトピックは、メッセージがプロデューサによって公開され、コンシューマによって取得されるときのカテゴリ、またはフィード名です。

Kafkaハンドラは、シリアライズされた変更データ取得を複数のソース表から、1つの構成されたトピック、またはKafkaの別のKafkaトピックへの分離したソース操作(トピック名が完全修飾のソース表名に対応する場合)に書き込むKafkaプロデューサを実装します。

8.2 詳細な機能

トランザクション・モードと操作モード

Kafkaハンドラは、Kafka ProducerRecordクラスのインスタンスをKafkaプロデューサAPIに送信し、次にそれがProducerRecordをKafkaトピックに公開します。Kafka ProducerRecordは、実質的に1つのKafkaメッセージの実装です。ProducerRecordには、キーと値の2つのコンポーネントがあります。キーと値のどちらも、Kafkaハンドラによってバイト配列として表されます。この項では、Kafkaハンドラがデータを公開する方法について説明します。

トランザクション・モード

トランザクション・モードは、Kafkaハンドラの次の構成によって示されます。

gg.handler.name.Mode=tx

トランザクション・モードでは、ソースOracle GoldenGate証跡ファイルからのトランザクションにおける各操作のシリアライズ・データが連結されます。連結された操作データの内容は、KafkaのProducerRecordオブジェクトの値です。Kafka ProducerRecordオブジェクトのキーはNULLです。結果として、Kafkaメッセージはには1からNまでの操作のデータが含まれます。Nは、トランザクションにおける操作の数です。グループ化されたトランザクションの場合、グループ化されたトランザクションの全操作の全データが1つのKafkaメッセージとして連結されます。そのため、Kafkaメッセージは大量の操作のデータを含んで非常に大きいメッセージになる可能性があります。

操作モード

操作モードは、Kafkaハンドラの次の構成によって示されます。

gg.handler.name.Mode=op

操作モードでは、各操作のシリアライズ・データは個々のProducerRecordオブジェクトに値として配置されます。ProducerRecordキーは、ソース操作の完全修飾表名です。ProducerRecordは、KafkaプロデューサAPIを使用してすぐに送信されます。つまり、着信する操作と、生成されるKafkaメッセージの数との間には1対1の関係があります。

ブロック・モードと非ブロック・モード

Kafkaハンドラは、ブロック・モード(同期)または非ブロック・モード(非同期)で、Kafkaにメッセージを送信できます。

Blocking Mode

ブロック・モードは、Kafkaハンドラの次の構成プロパティによって設定されます。

gg.handler.name.BlockingSend=true

メッセージは同期ベースでKafkaに配信されます。Kafkaハンドラは、現在のメッセージが目的のトピックに書き込まれて確認が受信されるまで、次のメッセージを送信しません。ブロック・モードでは、負荷が高いためパフォーマンスは下がりますが、メッセージ配信が最も確実に保証されます。

ブロック・モードでは、Kafkaプロデューサにlinger.ms変数は設定しないでください。そうすると、KafkaプロデューサはKafkaブローカにメッセージを送信する前にタイムアウト期間の間ずっと待機します。この場合、Kafkaブローカに送信されるメッセージをKafkaプロデューサがバッファすると同時に、メッセージが送信されたという確認を、Kafkaハンドラは待機しています。

Non-Blocking Mode

非ブロック・モードは、Kafkaハンドラの次の構成プロパティによって設定されます。

gg.handler.name.BlockingSend=false

メッセージは非同期ベースでKafkaに配信されます。Kafkaメッセージは、確認を待たずに順次送信されます。Kafkaプロデューサ・クライアントは、スループットを高めるために着信メッセージをバッファできます。

トランザクションがコミットされるたびに、すべての未処理メッセージがKafkaクラスタに確実に転送されるように、Kafkaプロデューサに対するフラッシュ・コールを呼び出します。そのため、Kafkaハンドラは安全なチェックポイントでデータの損失をゼロにします。Kafkaプロデューサに対するフラッシュ・コールの呼出しは、linger.msの持続期間による影響を受けません。そのため、Kafkaハンドラは安全なチェックポイントでデータの損失をゼロにします。

KafkaプロデューサがデータをKafkaブローカにフラッシュするタイミングは、Kafkaプロデューサ構成ファイルにある変更可能な多数の構成プロパティによって制御できます。Kafkaプロデューサによるメッセージの一括送信を有効にするには、Kafkaプロデューサ構成ファイルでbatch.sizeとlinger.msの両方のKafkaプロデューサ・プロパティを設定する必要があります。Kafkaへの送信前にバッファする最大バイト数はbatch.sizeによって制御され、データ送信前に待機する最大時間(ミリ秒)はlinger.ms変数によって制御されます。batch.sizeに達するか、linger.msの時間が経過するか、どちらか早いほうの条件が満たされると、データはKafkaに送信されます。batch.size変数のみを設定すると、メッセージはただちにKafkaに送信されます。

トピック名の選択

トピックは、この構成パラメータを使用して実行時に解決されます。

gg.handler.topicMappingTemplate

静的な文字列、キーワード、または静的な文字列とキーワードの組合せを構成し、実行時にそのときの操作コンテキストに基づいてトピック名を動的に解決できます(「テンプレートを使用したトピック名とメッセージ・キーの解決」を参照)。

Kafkaブローカ設定

トピックの自動作成を有効にするには、Kafkaブローカ構成でauto.create.topics.enableプロパティをtrueに設定します。このプロパティのデフォルト値はtrueです。

Kafkaブローカ構成でauto.create.topics.enableプロパティがfalseに設定されている場合、Replicatプロセスを開始する前に必要なすべてのトピックを手動で作成する必要があります。

スキーマの伝播

すべての表のスキーマ・データが、schemaTopicNameプロパティで構成されたスキーマ・トピックに提供されます。詳細は、「スキーマの伝播」を参照してください。

8.3 Kafkaハンドラの設定および実行

ここでは、Kafkaハンドラのコンポーネントの構成およびハンドラの実行について説明します。

Kafkaをインストールし、単一ノードまたはクラスタ化されたインスタンスとして正しく構成する必要があります。Apache Kafkaのインストールおよび構成方法に関する情報は、次の場所で入手できます。

http://kafka.apache.org/documentation.html

Apache Kafka以外のKafka配布を使用する場合、インストールおよび構成については、個々のKafka配布に関するドキュメントを参照してください。

KafkaおよびKafkaブローカ(単数または複数)の前提条件となるコンポーネントであるZookeeperが稼働している必要があります。

データ・トピックとスキーマ・トピック(該当する場合)は、実行中のKafkaブローカで事前に構成されていることを、ベスト・プラクティスとしてお薦めします。Kafkaトピックを動的に作成することはできますが、そのためにはKafkaブローカが動的トピックを許可するように構成されている必要があります。

Kafkaブローカが、Kafkaハンドラ・プロセスと同じ場所に配置されていない場合は、Kafkaハンドラを実行しているマシンから、リモートのホスト・ポートにアクセスできる必要があります。

トピック:

- クラスパス構成

- Kafkaハンドラ構成

- Javaアダプタ・プロパティ・ファイル

- Kafkaプロデューサ構成ファイル

- テンプレートを使用したトピック名とメッセージ・キーの解決

8.3.1 クラスパス構成

KafkaハンドラをKafkaに接続して実行できるように、gg.classpath 構成変数に2つのものを含める必要があります。必要なのは、Kafkaプロデューサ・プロパティ・ファイルと、KafkaクライアントJARです。KafkaクライアントJARは、Kafkaハンドラが接続するKafkaのバージョンと一致する必要があります。必要なクライアントJARファイルのバージョン別リストは、「Kafkaハンドラ・クライアント依存性」を参照してください。

Kafkaプロデューサ・プロパティ・ファイルの格納場所として推奨されるのは、Oracle GoldenGateのdirprmディレクトリです。

KafkaクライアントJARのデフォルトの場所は、Kafka_Home/libs/*です。

gg.classpathは、正確に構成する必要があります。Kafkaプロデューサ・プロパティ・ファイルのパス指定に含めるパスには、ワイルドカードを使用しないでください。Kafkaプロデューサ・プロパティ・ファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係JARのパス指定には、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。正しく構成されたクラスパスの例を次に示します。

gg.classpath={kafka install dir}/libs/*

8.3.2 Kafkaハンドラ構成

Kafkaハンドラの設定可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表8-1 Kafkaハンドラの構成プロパティ

プロパティ名

必須

プロパティ値

デフォルト

説明

gg.handlerlist

はい

name (任意の名前を選択)

使用するハンドラのリスト。

gg.handler.name.Type

はい

kafka

使用するハンドラのタイプ。Kafka、Flume、HDFSなど。

gg.handler.name.KafkaProducerConfigFile

いいえ。デフォルトはkafka-producer-default.properties

任意のカスタム・ファイル名

クラスパスにあるファイル名は、Apache Kafkaプロデューサを構成するApache Kafkaプロパティを保持します。

gg.handler.name.Format

いいえ。デフォルトはdelimitedtext。

フォーマッタ・クラスまたはショート・コード

ペイロードのフォーマットに使用するフォーマッタ。xml、delimitedtext、json、json_row、avro_row、avro_opのいずれかです

gg.handler.name.SchemaTopicName

はい。スキーマ配信が必要な場合。

スキーマ・トピックの名前

スキーマ・データが配信されるトピック名。このプロパティを設定する場合、スキーマは伝播されません。スキーマが伝播されるのは、Avroフォーマッタの場合のみです。

gg.handler.name.SchemaPrClassName

いいえ。デフォルトの実装クラスoracle.goldengate.handler.kafkaになります。デフォルトはProducerRecord

Oracle GoldenGate for Big Data Kafka HandlerのCreateProducerRecord Javaインタフェースを実装するカスタム・クラスの完全修飾クラス名

スキーマはProducerRecordとして伝播もされます。ここでのデフォルトのキーは、完全修飾の表名です。これをスキーマ・レコードから変更する必要がある場合は、CreateProducerRecordインタフェースのカスタム実装を作成する必要があり、このプロパティは新しいクラスの完全修飾名を示すように設定する必要があります。

gg.handler.name.BlockingSend

いいえ。デフォルトはfalse。

true | false

このプロパティをtrueに設定すると、Kafkaへの配信は完全に非同期のモデルで動作します。次のペイロードは、現在のペイロードが目的のトピックに出力され、確認が受信されてから送信されます。そのための、トランザクション・モードでは厳密に1回のセマンティックが提供されます。このプロパティをfalseに設定すると、Kafkaへの配信は非同期モデルで動作します。ペイロードは、確認を待たずに順次送信されます。Kafkaの内部キューでコンテンツをバッファすると、スループットを増やすことができます。チェックポイントは、Javaコールバックを使用してKafkaブローカから確認が受信されたときにのみ作成されます。

gg.handler.name.mode

いいえ。デフォルトはtx。

tx/op

Kafkaハンドラが操作モードの場合、変更取得データレコード(Insert、Update、Deleteなど)の各ペイロードはKafkaプロデューサ・レコードとして表され、一度に1つずつフラッシュされます。Kafkaハンドラがトランザクション・モードの場合、ソース・トランザクション内の操作はすべて、1つのKafkaプロデューサ・レコードとして表されます。組み合されたこのバイト・ペイロードが、トランザクション・コミット・イベント時にフラッシュされます。

gg.handler.name.topicMappingTemplate

必須

実行時にKafkaトピック名を解決するためのテンプレート文字列の値。

なし

詳細は、「テンプレートを使用したトピック名とメッセージ・キーの解決」を参照してください。

gg.handler.name.keyMappingTemplate

必須

実行時にKafkaメッセージ・キーを解決するためのテンプレート文字列の値。

なし

詳細は、「テンプレートを使用したトピック名とメッセージ・キーの解決」を参照してください。

8.3.3 Javaアダプタ・プロパティ・ファイル

アダプタ・プロパティ・ファイルからのKafkaハンドラの構成例を次に示します。

gg.handlerlist = kafkahandler
gg.handler.kafkahandler.Type = kafka
gg.handler.kafkahandler.KafkaProducerConfigFile = custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=oggtopic
gg.handler.kafkahandler.keyMappingTemplate=${currentTimestamp}
gg.handler.kafkahandler.Format = avro_op
gg.handler.kafkahandler.SchemaTopicName = oggSchemaTopic
gg.handler.kafkahandler.SchemaPrClassName = com.company.kafkaProdRec.SchemaRecord
gg.handler.kafkahandler.Mode = tx
gg.handler.kafkahandler.BlockingSend = true

Kafka統合のレプリケーション構成とJavaアダプタ・プロパティ・ファイルの例は、次のディレクトリにあります。

GoldenGate_install_directory/AdapterExamples/big-data/kafka

8.3.4 Kafkaプロデューサ構成ファイル

Kafkaハンドラは、メッセージをKafkaに公開するために、Kafkaプロデューサ構成ファイルにアクセスする必要があります。Kafkaプロデューサ構成ファイルのファイル名は、Kafkaハンドラ・プロパティの次の構成によって制御されます。

gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties

Kafkaハンドラは、Javaのクラスパスを使用してKafkaプロデューサ構成ファイルを検索およびロードしようとします。したがって、Javaのクラスパスに、Kafkaプロデューサ構成ファイルがあるディレクトリが含まれている必要があります。

Kafkaプロデューサ構成ファイルには、Kafka専有のプロパティがあります。0.8.2.0のKafkaプロデューサ・インタフェース・プロパティについては、Kafkaドキュメントに構成情報が記載されています。Kafkaハンドラは、これらのプロパティを使用してKafkaブローカのホストおよびポートを解決し、Kafkaプロデューサ・クライアントとKafkaブローカとの間のインタフェースの動作は、Kafkaプロデューサ構成ファイルにあるプロパティによって制御されます。

Kafkaプロデューサのサンプル構成ファイルは、次のようになります。

bootstrap.servers=localhost:9092
acks = 1
compression.type = gzip
reconnect.backoff.ms = 1000

value.serializer = org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer = org.apache.kafka.common.serialization.ByteArraySerializer
# 100KB per partition
batch.size = 102400
linger.ms = 0
max.request.size = 1048576
send.buffer.bytes = 131072

8.3.5 テンプレートを使用したトピック名とメッセージ・キーの解決

Kafkaハンドラでは、テンプレートの構成値を使用して実行時にトピック名およびメッセージ・キーを解決する機能が提供されます。テンプレートを使用すると、静的な値およびキーワードを構成できます。キーワードは、そのときの処理コンテキストに応じてキーワードを動的に置き換えるために使用されます。テンプレートは、次の構成プロパティを使用します。

gg.handler.name.topicMappingTemplate
gg.handler.name.keyMappingTemplate

テンプレートのモード

ソース・データベース・トランザクションは、それぞれが挿入、更新および削除である、1つ以上の個別の操作から構成されます。Kafkaハンドラは、操作ごとに1つのメッセージ(挿入、更新、削除)を送信するように構成することも、トランザクション・レベルで操作をメッセージにグループ化するように構成することもできます。テンプレート・キーワードの多くは、個々のソース・データベース操作のコンテキストに基づいてデータを解決します。したがって、トランザクション・レベルでメッセージを送信する場合には、キーワードの多くは機能しません。たとえば、トランザクション・レベルでメッセージを送信する場合は、${fullyQualifiedTableName}は機能せずに、操作のための修飾されたソース表名に解決されます。ただし、トランザクションには、多くのソース表に対する複数の操作を含めることができます。トランザクション・レベルでのメッセージの完全修飾表名の解決は、非決定的であるため、実行時に異常終了します。

テンプレートのキーワード

この表には、トランザクション・レベルのメッセージでそのキーワードがサポートされているかどうかを示す列が含まれています。

キーワード

説明

トランザクション・メッセージのサポート

${fullyQualifiedTableName}

カタログ、スキーマおよび表名の間にピリオド(.)のデリミタを含む、完全修飾表名に解決されます。

たとえば、test.dbo.table1です。

いいえ

${catalogName}

カタログ名に解決されます。

いいえ

${schemaName}

スキーマ名に解決されます。

いいえ

${tableName}

短い表名に解決されます。

いいえ

${opType}

操作の種類(INSERT、UPDATE、DELETEまたはTRUNCATE)に解決されます

いいえ

${primaryKeys}

アンダースコア(_)で区切られた連結主キー値に解決されます。

いいえ

${position}

ソース証跡ファイルのシーケンス番号の後にオフセット(RBA)が続きます。

はい

${opTimestamp}

ソース証跡ファイルからの操作タイムスタンプ。

はい

${emptyString}

""に解決されます。

はい

${groupName}

Replicatプロセスの名前に解決されます。調整された配信を使用している場合は、レプリケートのスレッド番号が付加されたReplicatプロセスの名前に解決されます。

はい

${staticMap[]}

キーが完全修飾表名である静的な値に解決されます。キーおよび値は、大カッコの内部に次の形式で指定します。

${staticMap[dbo.table1=value1,dbo.table2=value2]}

いいえ

${columnValue[]}

キーが完全修飾表名であり、値が解決される列名である列の値に解決されます。次に例を示します。

${staticMap[dbo.table1=col1,dbo.table2=col2]}

いいえ

${currentTimestamp}

または

${currentTimestamp[]}

現在のタイムスタンプに解決されます。SimpleDateFormatクラスで説明されているJavaベースの書式設定を使用して、現在のタイムスタンプの書式を制御できます(https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照)。

例:

${currentDate}
${currentDate[yyyy-mm-dd hh:MM:ss.SSS]}

はい

${null}

NULL文字列に解決されます。

はい

${custom[]}

カスタム値リゾルバを記述することが可能です。必要に応じて、Oracleサポートに連絡してください。

実装依存

テンプレートの例

テンプレートの構成値の例と解決される値を次に示します。

テンプレートの例

解決される値

${groupName}_{fullyQualfiedTableName}

KAFKA001_dbo.table1

prefix_${schemaName}_${tableName}_suffix

prefix_dbo_table1_suffix

${currentDate[yyyy-mm-dd hh:MM:ss.SSS]}

2017-05-17 11:45:34.254

8.4 スキーマの伝播

Kafkaハンドラには、スキーマをスキーマ・トピックに公開する機能があります。現在、スキーマ公開が有効なのは、Avro行フォーマッタとAvro操作フォーマッタのみです。KafkaハンドラのschemaTopicNameプロパティが設定されている場合、スキーマは次のイベントで公開されます。

- 特定の表のAvroスキーマは、その表に対する最初の操作が発生するときに公開されます。

- Kafkaハンドラがメタデータ変更イベントを受信すると、スキーマはフラッシュされます。特定の表について再生成されるAvroスキーマは、その表に対する次の操作が発生するときに公開されます。

- Avroのラッピング機能を有効にしている場合、汎用のラッパーAvroスキーマは、任意の操作が最初に発生するときに公開されます。汎用のラッパーAvroスキーマの機能は、Avroフォーマッタの構成で有効にできます。「Avro行フォーマッタ」および「Avro操作フォーマッタ」を参照してください。

KafkaのProducerRecord値はスキーマになり、キーは完全修飾の表名になります。

Kafka上でAvroを使用すると、Avroスキーマに対するAvroメッセージの直接依存性が原因で問題が発生する可能性があります。Avroメッセージはバイナリなので、人間が読める形式ではありません。Avroメッセージをデシリアライズするには、まず受信者に正しいAvroスキーマが必要です。ソース・データベースからの各表が個々のAvroスキーマになるため、問題になる可能性があります。ソースOracle GoldenGate証跡ファイルに複数の表からの操作が含まれる場合、Kafkaメッセージの受信者が、個々のメッセージをデシリアライズするためにどのAvroスキーマを使用するかを判断することはできません。この問題を解決するには、特殊なAvroメッセージを汎用のAvroメッセージ・ラッパーでラップできます。この汎用のAvroラッパーを使用すれば、完全修飾の表名、スキーマ文字列のハッシュコード、ラップされたAvroメッセージを確認することができます。受信者は、完全修飾の表名と、スキーマ文字列のハッシュコードを使用して、ラップされたメッセージに関連付けられたスキーマを解決し、そのスキーマを使用して、ラップされたメッセージをデシリアライズできます。

8.5 パフォーマンスに関する考慮事項

gg.handler.name.BlockingSend=trueの場合、Kafkaプロデューサconfigファイルでlinger.ms設定は使用しないことをお薦めします。これにより、Kafkaハンドラ構成とKafkaプロデューサ構成が競合するため、ブロックへの送信のたびに、少なくともlinger.msの時間が発生し、パフォーマンスに大きく影響します。このような構成の結果、Kafkaハンドラが送信確認を待つ一方で、Kafkaプロデューサは送信前に次のメッセージを待機することになり、一時的なデッドロックが発生します。このデッドロックは、linger.msの時間が過ぎると解決されます。この動作が、送信されるメッセージのたびに繰り返されます。

最高のパフォーマンスを得るためには、Javaアダプタ・プロパティ・ファイルで次のように構成して、Kafkaプロデューサへの非ブロック(非同期)コールを使用し、操作モードで動作するようにKafkaハンドラを設定することをお薦めします。

gg.handler.name.mode = op
gg.handler.name.BlockingSend = false

また、Kafkaプロデューサ・プロパティ・ファイルでbatch.sizeとlinger.msの値も設定することを推奨します。batch.sizeとlinger.msに設定する値は、ユースケース別の状況によって大きく異なります。通常、値が大きいほどスループットは向上しますが、レイテンシが大きくなります。これらのプロパティの値を小さくすると、レイテンシは小さくなりますが、全体的なスループットは低下します。ソース証跡ファイルから大量の入力データを伴う場合、batch.sizeとlinger.msのサイズはできるだけ大きく設定するようにしてください。

Replicat変数GROUPTRANSOPSを使用しても、パフォーマンスは向上します。その推奨設定は10000です。

ソース証跡ファイルからシリアライズした操作を個々のKafkaメッセージで配信する必要がある場合、そのときKafkaハンドラは操作モードに設定されている必要があります。

gg.handler.name.mode = op

そのため、Kafkaメッセージの数が増え、パフォーマンスに悪影響が生じます。

8.6 セキュリティ

Kafkaバージョン0.9.0.0で、SSL/TLSおよびSASL(Kerberos)を介したセキュリティが導入されました。SSL/TLSおよびSASL(Kerberos)セキュリティ製品の一方または両方を使用してKafkaハンドラを保護できます。Kafkaプロデューサ・クライアント・ライブラリは、それらのライブラリを利用する統合からのセキュリティ機能の抽象化を提供します。Kafkaハンドラは、セキュリティ機能から効率的に抽象化されます。セキュリティを有効にするには、Kafkaクラスタのセキュリティを設定し、マシンを接続して、Kafkaプロデューサ・プロパティ・ファイル(Kafkaハンドラで処理のために使用する)を必要なセキュリティ・プロパティを使用して構成する必要があります。Kafkaクラスタの保護に関する詳細は、次の場所にあるKafkaドキュメントを参照してください。

http://kafka.apache.org/documentation.html#security_configclients

8.7 メタデータ変更イベント

メタデータ変更イベントが、Kafkaハンドラによって処理されるようになりました。これが関係するのは、スキーマ・トピックを構成しており、使用するフォーマッタがスキーマ伝播をサポートしている場合のみです(現在は、Avro行フォーマッタとAvro操作フォーマッタ)。スキーマが変更されている表で次に操作が発生するとき、更新されたスキーマがスキーマ・トピックに公開されます。

メタデータ変更イベントをサポートするには、ソース・データベースで変更を取得するOracle GoldenGateプロセスが、証跡機能でのOracle GoldenGateメタデータ(Oracle GoldenGate 12c (12.2)で導入)をサポートする必要があります。

8.8 Snappyに関する考慮事項

Kafkaプロデューサ構成ファイルは、圧縮の使用をサポートしています。構成可能なオプションの1つにSnappyがあり、これは、オープン・ソースの圧縮および圧縮解除(codec)ライブラリで、他のcodecライブラリよりパフォーマンスが高い傾向があります。Snappy JARはすべてのプラットフォームで実行されるわけではありません。Snappyは、Linuxシステムでは動作するようですが、他のUNIXおよびWindowsの実装では動作する場合としない場合があります。Snappyの圧縮を使用する場合は、Snappyを使用する圧縮を実装する前に、必要なシステムすべてでSnappyをテストする必要があります。必要なシステムの一部にSnappyが対応しない場合は、別のcodecライブラリを使用することをお薦めします。

8.9 トラブルシューティング

トピック:

- Kafka設定の検証

- クラスパスの問題

- 無効なKafkaバージョン

- Kafkaプロデューサ・プロパティ・ファイルが見つからない

- Kafkaの接続の問題

8.9.1 Kafka設定の検証

コマンドラインのKafkaプロデューサを使用すると、ダミー・データをKafkaトピックに書き込むことができ、Kafkaコンシューマを使用してこのデータをKafkaトピックから読み取ることができます。これを利用して、ディスク上でのKafkaトピックの設定および読取り/書込み権限を検証します。詳細は、次のサイトでオンラインのKafkaドキュメントを参照してください

http://kafka.apache.org/documentation.html#quickstart

8.9.2 クラスパスの問題

非常に一般的なのが、Javaクラスパスに関する問題です。通常、これはlog4jログ・ファイルのClassNotFoundExceptionの問題ですが、gg.classpath変数に入力ミスがある場合は、クラスパスの解決エラーになることもあります。Kafkaクライアント・ライブラリは、Oracle GoldenGate for Big Data製品に付属しません。「クラスパス構成」で説明されているように、JavaとKafkaクライアント・ライブラリを適切に解決するために、適切なバージョンのKafkaクライアント・ライブラリを取得し、Javaアダプタ・プロパティ・ファイルでgg.classpathプロパティを適切に構成する作業は、ユーザーが行います。

8.9.3 無効なKafkaバージョン

Kafkaハンドラでは、Kafka 0.8.2.2以前のバージョンはサポートされていません。サポートされていないバージョンのKafkaで実行したときの通常の結果は、ランタイムJava例外java.lang.NoSuchMethodErrorで、これは org.apache.kafka.clients.producer.KafkaProducer.flush()メソッドが見つからないことを示します。このエラーが発生した場合、Kafka 0.9.0.0以降のバージョンに移行する必要があります。

8.9.4 Kafkaプロデューサ・プロパティ・ファイルが見つからない

一般的に、この問題は次の例外として発生します。

ERROR 2015-11-11 11:49:08,482 [main] Error loading the kafka producer properties

gg.handler.kafkahandler.KafkaProducerConfigFile構成変数で、Kafkaプロデューサ構成ファイルの名前が正しく設定されていることを検証する必要があります。gg.classpath変数をチェックし、クラスパスにKafkaプロデューサ・プロパティ・ファイルのパスが含まれていることと、プロパティ・ファイルのパスの末尾にワイルドカード(*)が含まれていないことを確認してください。

8.9.5 Kafkaの接続の問題

この問題は、KafkaハンドラがKafkaに接続できない場合に、次の警告とともに発生します。

WARN 2015-11-11 11:25:50,784 [kafka-producer-network-thread | producer-1] WARN  (Selector.java:276) - Error in I/O with localhost/127.0.0.1
java.net.ConnectException: Connection refused

接続の再試行時間が経過し、Kafkaハンドラ・プロセスは異常終了します。Kafkaブローカが稼働しており、Kafkaプロデューサ・プロパティ・ファイルで指定されているホストとポートが正しいことを確認してください。Kafkaブローカをホストしているマシンでネットワーク・シェル・コマンド(netstat -lなど)を使用すると、Kafkaが所定のポートでリスニングしていることを検証できます。

9 Kafka Connectハンドラの使用

この章では、Kafka Connectハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- 詳細な機能

- Kafka Connectハンドラの設定および実行

- Kafka Connectハンドラのパフォーマンスに関する考慮事項

- Kafka Connectハンドラのトラブルシューティング

9.1 概要

Oracle GoldenGate Kafka Connectは、標準的なKafkaのメッセージング機能を拡張したものです。Kafka Connectは、標準的なKafkaのプロデューサおよびコンシューマのインタフェースの上にある機能レイヤーです。新規のソースおよびターゲット・システムをトポロジに簡単に追加できる、メッセージングの標準化を提供します。

Confluent IOはKafka Connectを採用した主要な企業であり、そのKafka製品には、Avroのシリアライズとデシリアライズ、Avroスキーマ・レジストリなどの標準的なKafka Connectの機能拡張が含まれています。Kafka Connectの機能の多くは、Apache Kafkaで利用できます。https://www.confluent.io/product/connectors/で、いくつかのオープン・ソースのKafka Connect統合を参照できます。

Kafka Connectハンドラは、Kafka Connectのソース・コネクタです。Oracle GoldenGateでサポートされているデータベースから、データベースの変更を取得し、その変更データをKafka Connectレイヤー経由でKafkaにストリーミングできます。

Kafka Connectでは、プロプライエタリなオブジェクトを使用してスキーマ(org.apache.kafka.connect.data.Schema)およびメッセージ(org.apache.kafka.connect.data.Struct)が定義されます。Kafka Connectハンドラは、公開済データおよび公開済データの構造を管理するように構成できます。

Kafka Connectハンドラは、Kafkaハンドラでサポートされているどのプラガブル・フォーマッタもサポートしていません。

トピック:

9.2 詳細な機能

JSONコンバータ

Kafka Connectフレームワークにより、インメモリーのKafka Connectメッセージを、ネットワーク経由での伝送に適したシリアライズされた形式に変換するコンバータが提供されます。このコンバータは、Kafkaプロデューサのプロパティ・ファイルの構成を使用して選択されます。

Kafka ConnectおよびJSONコンバータは、Apache Kafkaダウンロードの一部として使用可能です。JSONコンバータによりKafkaのキーおよび値がJSONに変換され、それがKafkaトピックに送信されます。Kafkaプロデューサのプロパティ・ファイルで、次の構成を使用してJSONコンバータを識別します。

key.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=true
value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable=true

メッセージのフォーマットは、ペイロード情報が後に続くメッセージ・スキーマ情報です。JSONは自己記述型のフォーマットであるため、Kafkaに公開される各メッセージにはスキーマ情報を含めないでください。

メッセージからJSONのスキーマ情報を省略するには、次のように設定します。

key.converter.schemas.enable=false
value.converter.schemas.enable=false

Avroコンバータ

Confluent IOにより、Kafkaのインストール、Kafkaのサポート、Kafka上に構築された拡張機能が提供され、Kafkaの潜在的な可能性の実現が支援されます。Confluent IOは、オープン・ソース版のKafka(Confluent Open Source)と、購入可能なエンタープライズ版(Confluent Enterprise)の両方を提供しています。

一般的なKafkaのユースケースは、Kafka上でAvroメッセージを送信することです。これは、AvroメッセージをデシリアライズするためにAvroスキーマに依存するため、受信側で問題が発生する可能性があります。受信メッセージは、プロデューサ側でメッセージを生成するために使用されたAvroスキーマと完全に一致させる必要があるため、スキーマの進化によって問題が増加する可能性があります。間違ったAvroスキーマでAvroメッセージをデシリアライズすると、ランタイム・エラー、不完全なデータまたは不正なデータが発生することがあります。Confluent IOでは、スキーマ・レジストリおよびConfluent IOスキーマ・コンバータを使用してこの問題を解決しました。

Kafkaプロデューサのプロパティ・ファイルの構成を次に示します。

key.converter=io.confluent.connect.avro.AvroConverter
value.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter.schema.registry.url=http://localhost:8081

メッセージがKafkaに公開されると、Avroスキーマが登録され、スキーマ・レジストリに格納されます。Kafkaからメッセージが消費されるとき、メッセージの作成に使用された正確なAvroスキーマをスキーマ・レジストリから取得してAvroメッセージをデシリアライズできます。Avroメッセージとそれに対応する受信側のAvroスキーマの照合を作成することで、この問題を解決しています。

Avroコンバータを使用するための要件は次のとおりです。

- この機能は現在、Confluent IOのKafkaバージョン(オープン・ソースまたはエンタープライズ)で利用できます。

- Confluentスキーマ・レジストリ・サービスが実行されている必要があります。

- ソース・データベース表には、関連付けられたAvroスキーマが必要です。異なるAvroスキーマに関連付けられたメッセージは、異なるKafkaトピックに送信する必要があります。

- Confluent IOのAvroコンバータおよびスキーマ・レジストリ・クライアントがクラスパスで使用できる必要があります。

スキーマ・レジストリは、トピックごとにAvroスキーマを追跡します。メッセージは、同じスキーマまたは同じスキーマの進化バージョンを持つトピックに送信する必要があります。ソース・メッセージにはソース・データベース表スキーマに基づくAvroスキーマがあり、Avroスキーマはソース表ごとに一意です。複数のソース表で単一のトピックにメッセージを公開すると、ソース表から送信されたメッセージが以前のメッセージと異なるたびに、スキーマが進化していることがスキーマ・レジストリに示されます。

9.3 Kafka Connectハンドラの設定および実行

ここでは、Kafka Connectハンドラのコンポーネントの構成およびハンドラの実行について説明します。

クラスパス構成

Kafka ConnectハンドラをKafkaに接続して実行できるように、gg.classpath構成変数に2つのものを含める必要があります。必要なのは、Kafkaプロデューサ・プロパティ・ファイルと、KafkaクライアントJARです。KafkaクライアントのJARは、Kafka Connectハンドラが接続するKafkaのバージョンと一致する必要があります。必要なクライアントJARファイルのバージョン別リストは、Kafkaハンドラ・クライアント依存性(「Kafka Connectハンドラ・クライアント依存性」)を参照してください。Kafkaプロデューサのプロパティ・ファイルの格納場所として推奨されるのは、Oracle GoldenGateのdirprmディレクトリです。

Kafka ConnectクライアントJARのデフォルトの場所は、Kafka_Home/libs/*ディレクトリです。

gg.classpath変数は、正確に構成する必要があります。Kafkaプロデューサのプロパティ・ファイルのパス指定に含めるパスには、ワイルドカードを使用しないでください。Kafkaプロデューサのプロパティ・ファイルへのパスにアスタリスク(*)のワイルドカードを含めると、それが破棄されます。依存関係JARのパス指定には、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください

正しく構成されたApache Kafkaのクラスパスの例:

gg.classpath=dirprm:{kafka_install_dir}/libs/*

正しく構成されたConfluent IOのKafkaのクラスパスの例:

gg.classpath={confluent_install_dir}/share/java/kafka-serde-tools/*:{confluent_install_dir}/share/java/kafka/*:{confluent_install_dir}/share/java/confluent-common/*

トピック:

- Kafka Connectハンドラの構成

- テンプレートを使用したトピック名とメッセージ・キーの解決

- Kafka Connectハンドラでのセキュリティの構成

9.3.1 Kafka Connectハンドラの構成

Kafka Connectハンドラの構成可能な値は次のとおりです。

表9-1 Kafka Connectハンドラの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handler.name.type

必須

kafkaconnect

なし

Kafka Connectハンドラを選択するための構成。

gg.handler.name.kafkaProducerConfigFile

必須

string

なし

KafkaのプロパティおよびKafka Connect構成プロパティを含むプロパティ・ファイルへのパス。

gg.handler.name.topicMappingTemplate

必須

実行時にKafkaトピック名を解決するためのテンプレート文字列の値。

なし

詳細は、「テンプレートを使用したトピック名とメッセージ・キーの解決」を参照してください。

gg.handler.name.keyMappingTemplate

必須

実行時にKafkaメッセージ・キーを解決するためのテンプレート文字列の値。

なし

詳細は、「テンプレートを使用したトピック名とメッセージ・キーの解決」を参照してください。

gg.handler.name.includeTableName

オプション

true | false

true

trueに設定すると、出力メッセージに「table」というフィールドが作成され、その値は完全修飾表名になります。

出力でこのフィールドを省略する場合は、falseに設定します。

gg.handler.name.includeOpType

オプション

true | false

true

trueに設定すると、出力メッセージにop_typeというフィールドが作成され、その値はソース・データベースの操作タイプのインジケータ(たとえば、挿入の場合はI、更新の場合はU、削除の場合はD)になります。出力でこのフィールドを省略する場合は、falseに設定します。

gg.handler.name.includeOpTimestamp

オプション

true | false

true

trueに設定すると、出力メッセージにop_tsというフィールドが作成され、その値はソース証跡ファイルの操作タイムスタンプ(コミット・タイムスタンプ)になります。

出力でこのフィールドを省略する場合は、falseに設定します。

gg.handler.name.includeCurrentTimestamp

オプション

true | false

true

trueに設定すると、出力メッセージにcurrent_tsというフィールドが作成され、その値はハンドラが操作を処理するときのタイムスタンプになります。

出力でこのフィールドを省略する場合は、falseに設定します。

gg.handler.name.includePosition

オプション

true | false

true

trueに設定すると、出力メッセージにposというフィールドが作成され、その値はソース証跡ファイルからの操作の位置(順序番号 + オフセット)になります。

出力でこのフィールドを省略する場合は、falseに設定します。

gg.handler.name.includePrimaryKeys

オプション

true | false

false

trueに設定すると、そのメッセージにprimary_keysというフィールドが含まれ、その値は主キー列の列名の配列になります。

このフィールドを抑止する場合は、falseに設定します。

gg.handler.name.includeTokens

オプション

true | false

false

trueに設定すると、出力メッセージにマップ・フィールドが含まれます。キーはトークンで、その値は、キーと値がOracle GoldenGateソース証跡ファイルからのトークン・キーと値であるマップです。

このフィールドを抑止する場合は、falseに設定します。

gg.handler.name.messageFormatting

オプション

row | op

row

出力メッセージのモデル化方法を制御します。行を選択すると、出力メッセージは行としてモデル化されます。opに設定すると、出力メッセージは操作メッセージとしてモデル化されます。

gg.handler.name.insertOpKey

オプション

任意の文字列

I

挿入操作を示すフィールドop_typeの値。

gg.handler.name.updateOpKey

オプション

任意の文字列

U

挿入操作を示すフィールドop_typeの値。

gg.handler.name.deleteOpKey

オプション

任意の文字列

D

削除操作を示すフィールドop_typeの値。

gg.handler.name.truncateOpKey

オプション

任意の文字列

T

切捨て操作を示すフィールドop_typeの値。

gg.handler.name.treatAllColumnsAsStrings

オプション

true | false

false

trueに設定すると、すべての出力フィールドが文字列として扱われます。falseに設定すると、ハンドラによって、ソース証跡ファイルからの対応するフィールド・タイプがそれに最も適したKafka Connectのデータ型にマップされます。

gg.handler.name.mapLargeNumbersAsStrings

オプション

true | false

false

大きい数値は、数値フィールドにDoubleとしてマッピングされます。特定のシナリオでは、精度を失う可能性があります。

trueに設定すると、精度を保つため、これらのフィールドが文字列としてマップされます。

gg.handler.name.iso8601Format

オプション

True | False

false

trueに設定すると、現在の日付がISO8601形式で出力されます。

gg.handler.name.pkUpdateHandling

オプション

insert | abend | update | delete

abend

モデリング行メッセージがgg.handler.name.messageFormatting=rowの場合にのみ適用されます。更新の場合に、ビフォアおよびアフター・イメージとしてのモデリング操作メッセージがそのメッセージに伝播される場合は適用されません。

詳細は、「テンプレートを使用したストリーム名とパーティション名の解決」を参照してください。

9.3.2 テンプレートを使用したトピック名とメッセージ・キーの解決

Kafka Connectハンドラでは、テンプレートの構成値を使用して実行時にトピック名およびメッセージ・キーを解決する機能が提供されます。テンプレートを使用すると、静的な値およびキーワードを構成できます。キーワードは、そのときの処理コンテキストに応じてキーワードを動的に置き換えるために使用されます。テンプレートは、次の構成パラメータに適用されます。

gg.handler.name.topicMappingTemplate
gg.handler.name.keyMappingTemplate

テンプレートのモード

Kafka Connectハンドラでは、操作メッセージのみを送信できます。Kafka Connectハンドラでは、操作メッセージをより大きなトランザクション・メッセージにグループ化できません。

テンプレートのキーワード

キーワード

説明

${fullyQualifiedTableName}

カタログ、スキーマおよび表名の間にピリオド(.)のデリミタを含む、完全修飾表名に解決されます。

たとえば、test.dbo.table1です。

${catalogName}

カタログ名に解決されます。

${schemaName}

スキーマ名に解決されます。

${tableName}

短い表名に解決されます。

${opType}

操作の種類(INSERT、UPDATE、DELETEまたはTRUNCATE)に解決されます

${primaryKeys}

アンダースコア(_)で区切られた連結主キー値に解決されます。

${position}

ソース証跡ファイルのシーケンス番号の後にオフセット(RBA)が続きます。

${opTimestamp}

ソース証跡ファイルからの操作タイムスタンプ。

${emptyString}

""に解決されます。

${groupName}

Replicatプロセスの名前に解決されます。調整された配信を使用している場合は、レプリケートのスレッド番号が付加されたReplicatプロセスの名前に解決されます。

${staticMap[]}

キーが完全修飾表名である静的な値に解決されます。キーおよび値は、大カッコの内部に次の形式で指定します。

${staticMap[dbo.table1=value1,dbo.table2=value2]}

${columnValue[]}

キーが完全修飾表名であり、値が解決される列名である列の値に解決されます。次に例を示します。

${staticMap[dbo.table1=col1,dbo.table2=col2]}

${currentTimestamp}

または

${currentTimestamp[]}

現在のタイムスタンプに解決されます。SimpleDateFormatクラスで説明されているJavaベースの書式設定を使用して、現在のタイムスタンプの書式を制御できます(https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.htmlを参照)。

例:

${currentDate}
${currentDate[yyyy-mm-dd hh:MM:ss.SSS]}

${null}

NULL文字列に解決されます。

${custom[]}

カスタム値リゾルバを記述することが可能です。必要に応じて、Oracleサポートに連絡してください。

テンプレートの例

テンプレートの構成値の例と解決される値を次に示します。

テンプレートの例

解決される値

${groupName}_{fullyQualfiedTableName}

KAFKA001_dbo.table1

prefix_${schemaName}_${tableName}_suffix

prefix_dbo_table1_suffix

${currentDate[yyyy-mm-dd hh:MM:ss.SSS]}

2017-05-17 11:45:34.254

9.3.3 Kafka Connectハンドラでのセキュリティの構成

Kafkaバージョン0.9.0.0にSSL/TLSまたはKerberosを介したセキュリティが導入されました。Kafka Connectハンドラは、SSL/TLSまたはKerberos使用して保護できます。Kafkaプロデューサ・クライアント・ライブラリは、それらのライブラリを利用する統合からのセキュリティ機能の抽象化を提供します。Kafka Connectハンドラは、セキュリティ機能から効率的に抽象化されます。セキュリティを有効にするには、Kafkaクラスタのセキュリティを設定し、マシンを接続して、Kafkaプロデューサのプロパティ・ファイル(Kafkaハンドラで処理のために使用する)を必要なセキュリティ・プロパティを使用して構成する必要があります。

詳細は、http://kafka.apache.org/documentation.html#securityを参照してください。

9.4 Kafka Connectハンドラのパフォーマンスに関する考慮事項

Oracle GoldenGate for Big Dataの構成とKafkaプロデューサのパフォーマンスの両方に影響を与える複数の構成設定があります。

Oracle GoldenGateのパラメータでパフォーマンスに最も大きな影響を与えるのはReplicatのGROUPTRANSOPSパラメータです。GROUPTRANSOPSパラメータを使用すると、Replicatで複数のソース・トランザクションを単一のターゲット・トランザクションにグループ化できます。トランザクションのコミット時、Kafka Connectハンドラは、書込み永続性のためにKafkaプロデューサ上でフラッシュをコールしてメッセージをKafkaにプッシュし、その後チェックポイントを送信します。フラッシュ・コールはコストの大きなコールであり、ReplicatのGROUPTRANSOPS設定を大きく設定すると、Replicatのフラッシュ・コールの頻度が少なくてすみ、パフォーマンスが向上します。

GROUPTRANSOPSのデフォルト設定は1000で、値を2500、5000、さらには10000に増やすことでパフォーマンスの向上が得られます。

opモードのgg.handler.kafkaconnect.mode=opパラメータもまた、txモードのgg.handler.kafkaconnect.mode=txよりもパフォーマンスを向上させることができます。

Kafkaプロデューサのいくつかのプロパティがパフォーマンスに影響する可能性があります。重要な影響を与えるパラメータは次のとおりです。

- linger.ms

- batch.size

- acks

- buffer.memory

- compression.type

これらのパラメータのデフォルト値から開始し、パフォーマンスのベース・ラインを取得するためのパフォーマンス・テストを実行することをお薦めします。これらの各パラメータのKafkaドキュメントを参照して、その役割を理解し、パラメータを調整し、各パラメータのパフォーマンス効果を確認するための追加のパフォーマンス・テストを実行します。

9.5 Kafka Connectハンドラのトラブルシューティング

トピック:

- Kafka Connectハンドラ用のJavaクラスパス

- 無効なKafkaバージョン

- Kafkaプロデューサ・プロパティ・ファイルが見つからない

- Kafkaの接続の問題

9.5.1 Kafka Connectハンドラ用のJavaクラスパス

Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることを示すのは、Oracle GoldenGate Javaのlog4jログ・ファイルにあるClassNotFoundExceptionで、gg.classpath変数に入力ミスがある場合は、クラスパスを解決する際にエラーが発生します。

Kafkaクライアント・ライブラリは、Oracle GoldenGate for Big Data製品に付属しません。「Kafka Connectハンドラの設定および実行」で説明されているように、JavaとKafkaクライアント・ライブラリを適切に解決するために、適切なバージョンのKafkaクライアント・ライブラリを取得し、Javaアダプタのプロパティ・ファイルでgg.classpathプロパティを適切に構成する作業は、ユーザーが行う必要があります。

9.5.2 無効なKafkaバージョン

Kafka Connectは、Kafka 0.9.0.0バージョンで導入されました。Kafka Connectハンドラは、0.8.2.2以前のバージョンのKafkaでは動作しません。Kafka 0.8.2.2でKafka Connectを使用しようとすると、実行時にClassNotFoundExceptionエラーが発生します。

9.5.3 Kafkaプロデューサ・プロパティ・ファイルが見つからない

通常、次の例外メッセージが表示されます。

ERROR 2015-11-11 11:49:08,482 [main] Error loading the kafka producer properties

Kafkaプロデューサの構成ファイル名のgg.handler.kafkahandler.KafkaProducerConfigFile構成プロパティが正しく設定されていることを確認してください。

gg.classpath変数にKafkaプロデューサのプロパティ・ファイルのパスが含まれていること、プロパティ・ファイルのパスの末尾にワイルドカード(*)が含まれていないことを確認してください。

9.5.4 Kafkaの接続の問題

通常、次の例外メッセージが表示されます。

WARN 2015-11-11 11:25:50,784 [kafka-producer-network-thread | producer-1]

WARN  (Selector.java:276) - Error in I/O with localhost/127.0.0.1  java.net.ConnectException: Connection refused

これが発生すると、接続の再試行時間が経過し、Kafka接続ハンドラ・プロセスが異常終了します。Kafkaブローカが稼働しており、Kafkaプロデューサのプロパティ・ファイルで指定されているホストとポートが正しいことを確認してください。

Kafkaブローカをホストしているマシンでネットワーク・シェル・コマンド(netstat -lなど)を使用すると、Kafkaが所定のポートでリスニングしていることを確認できます。

10 Kinesis Streamsハンドラの使用

この章では、Kinesis Streamsハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- 詳細な機能

- Kinesis Streamsハンドラの設定および実行

- Kinesisハンドラのパフォーマンスに関する考慮事項

- トラブルシューティング

10.1 概要

Amazon Kinesisは、Amazon Cloudでホストされているメッセージング・システムです。Kinesis streamsを使用して、Amazon S3やAmazon Redshiftなどの他のAmazon Cloudアプリケーションにデータをストリーミングできます。Kinesis Streamsハンドラを使用すると、Amazon Cloudまたはユーザーのサイトでホストされているアプリケーションにデータをストリーミングすることもできます。Amazon Kinesisストリームでは、Apache Kafkaと類似した機能が提供されます。

論理コンセプトのマップは次のとおりです。

- Kafkaのトピック = Kinesisのストリーム

- Kafkaのパーティション = Kinesisのシャード

Kinesisのストリームには少なくとも1つのシャードが必要です。

10.2 詳細な機能

トピック:

- Amazon Kinesis Java SDK

- Kinesis Streamsの入力制限

10.2.1 Amazon Kinesis Java SDK

Oracle GoldenGate Kinesis Streamsハンドラは、AWS Kinesis Java SDKを使用してAmazon Kinesisにデータをプッシュします(詳細は、http://docs.aws.amazon.com/streams/latest/dev/developing-producers-with-sdk.htmlを参照)。

Kinesis Steamsハンドラは、最新のAWS Kinesis Java SDKバージョン1.11.107で設計およびテストされました。依存関係は次のとおりです。

- グループID: com.amazonaws

- アーティファクトID: aws-java-sdk-kinesis

- バージョン: 1.11.107

Oracle GoldenGate for Big Dataは、AWS Kinesis Java SDKに付属していません。動作保証マトリックスに記載されているAWS Kinesis Java SDKを使用することをお薦めします(「Oracle Fusion Middleware Supported System Configurations」ページで、ご使用のリリースの動作保証に関するドキュメントを参照してください)。

注意:
最新のAWS Kinesis Java SDKへの移行はインタフェースに変更がないことを前提としており、そうでない場合はKinesis Streamsハンドラとの互換性が失われる可能性があります。

Kinesisを含むAWS Java SDKは、次のサイトからダウンロードできます。

https://aws.amazon.com/sdk-for-java/

10.2.2 Kinesis Streamsの入力制限

1つのシャードを持つKinesisストリームの入力上限は、1秒当たり1000メッセージ、1秒当たりの合計データ・サイズが1MBまでです。ストリームまたはシャードを追加すると、次のように潜在的スループットが増加する可能性があります。

- 2つのシャードを持つ1つのストリーム = 2000メッセージ/秒、合計データ・サイズは2MB/秒

- それぞれが1つのシャードを持つ3つのストリーム = 3000メッセージ/秒、合計データ・サイズは3MB/秒

Kinesis Streamsハンドラで実現できるスケーリングは、ハンドラの構成方法によって異なります。Kinesisストリームの名前は、実行時にKinesis Streamsハンドラの構成に基づいて解決されます。

シャードは、パーティション・キーのハッシュによって選択されます。Kinesisメッセージのパーティション・キーは、nullまたは空の文字列("")にはできません。nullまたは空の文字列のパーティション・キーにより、Kinesisエラーが発生し、Replicatプロセスが異常終了します。

スループットを最大化するには、Kinesis Streamsハンドラの構成で、ストリームとシャードの間でメッセージを均等に配信する必要があります。

10.3 Kinesis Streamsハンドラの設定および実行

ここでは、Kinesis Streamsハンドラのコンポーネントの構成およびハンドラの実行について説明します。

Kinesis Streamsハンドラを設定するには、次の手順を実行します。

1. https://aws.amazon.com/で、Amazon AWSアカウントを作成します。

2. Amazon AWSにログインします。

3. メイン・ページから「Kinesis」を選択します(「Analytics」サブセクションの下)。

4. Amazon Kinesis Streamsの「Go to Streams」を選択して、Amazon Kinesisストリームおよびストリーム内のシャードを作成します。

5. KinesisにアクセスするためのクライアントIDとシークレットを作成します。
Kinesis Streamsハンドラでは、実行時にKinesisに正常に接続するためにこれらの資格証明を必要とします。

6. クライアントIDとシークレットの作成:

a. 「AWS」(右上)で自分の名前を選択し、そのリストで「My Security Credentials」を選択します。

b. アクセス・キーを作成および管理するには、「Access Keys」を選択します。
作成時にクライアントIDとシークレットをメモします。

このクライアントIDとシークレットは、作成時にのみアクセスできます。紛失した場合は、アクセス・キーを削除して再作成する必要があります。

トピック:

- Kinesis Streamsハンドラでのクラスパスの設定

- Kinesis Streamsハンドラの構成

- テンプレートを使用したストリーム名とパーティション名の解決

- KinesisハンドラでのクライアントIDとシークレットの構成

- Kinesis Streamsハンドラ用のプロキシ・サーバーの構成

- Kinesis Streamsハンドラでのセキュリティの構成

10.3.1 Kinesis Streamsハンドラでのクラスパスの設定

Javaアダプタのプロパティ・ファイルでgg.classpathプロパティを構成して、AWS Kinesis Java SDKのJARを次のように指定する必要があります。

gg.classpath={download_dir}/aws-java-sdk-1.11.107/lib/*:{download_dir}/aws-java-sdk-1.11.107/third-party/lib/*

10.3.2 Kinesis Streamsハンドラの構成

Kinesis Streamsハンドラの構成可能な値は次のとおりです。

表10-1 Kinesis Streamsハンドラの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handler.name.type

必須

kinesis_streams

なし

Kinesis Streamsハンドラを選択し、変更データ取得をKinesisにストリーミングします。

gg.handler.name.region

必須

KinesisインスタンスをホストしているAmazonのリージョン名。

なし

Amazon AWSリージョン名の設定は必須です。

gg.handler.name.proxyServer

オプション

プロキシ・サーバーのホスト名。

なし

プロキシ・サーバー経由でAWSへの接続が必要な場合は、プロキシ・サーバーのホスト名を設定します。

gg.handler.name.proxyPort

オプション

プロキシ・サーバーのポート番号。

なし

プロキシ・サーバー経由でAWSへの接続が必要な場合は、プロキシ・サーバーのポート名を設定します。

gg.handler.name.proxyUsername

オプション

プロキシ・サーバーのユーザー名(資格証明が必要な場合)。

なし

プロキシ・サーバー経由でAWSへの接続が必要で、プロキシ・サーバーに資格証明が必要な場合は、プロキシ・サーバーのユーザー名を設定します。

gg.handler.name.proxyPassword

オプション

プロキシ・サーバーのパスワード(資格証明が必要な場合)。

なし

プロキシ・サーバー経由でAWSへの接続が必要で、プロキシ・サーバーに資格証明が必要な場合は、プロキシ・サーバーのパスワードを設定します。

gg.handler.name.deferFlushAtTxCommit

オプション

true | false

false

falseに設定すると、Kinesis Streamsハンドラでは、書込み永続性のためにトランザクションのコミット時にKinesisにデータがフラッシュされます。ただし、パフォーマンスのためにトランザクションのコミットを超えてフラッシュを遅延することが望ましい場合があります(「Kinesisハンドラのパフォーマンスに関する考慮事項」を参照)。

gg.handler.name.deferFlushOpCount

オプション

整数

なし

gg.handler.name.deferFlushAtTxCommitがtrueに設定されている場合にのみ適用されます。このパラメータは、Kinesisへのフラッシュをトリガーする前に受信する必要のある操作の最小数を示します。この数の操作が受信されると、次のトランザクションのコミット時にフラッシュが発生し、すべての未処理操作がKinesis StreamsハンドラからAWS Kinesisに移動されます。

gg.handler.name.formatPerOp

オプション

true | false

true

trueに設定すると、1回の操作(挿入、削除、更新)ごとに1回、Kinesisにメッセージが送信されます。falseに設定すると、操作メッセージはすべての操作で連結され、1つのメッセージがトランザクション・レベルで送信されます。Kinesisでは、1MBという最大メッセージ・サイズの制限があります。1MBを超えると、トランザクション・レベルのメッセージが複数のメッセージに分割されます。

gg.handler.name.customMessageGrouper

オプション

oracle.goldengate.handler.kinesis.KinesisJsonTxMessageGrouper

なし

この構成パラメータでは、カスタムのロジックを使用してKinesisメッセージをグループ化する機能が提供されます。現時点では、配布には1つの実装のみが含まれています。oracle.goldengate.handler.kinesis.KinesisJsonTxMessageGrouperは、操作を表すJSON操作メッセージを、トランザクションを包含するラッパーJSONメッセージにグループ化するカスタム・メッセージです。この値を設定すると、gg.handler.formatPerOpの設定がオーバーライドされます。この機能の使用は、顧客がJSONフォーマッタ(つまり、gg.handler.name.format=json)を使用していることが前提です。

gg.handler.name.streamMappingTemplate

必須

実行時にKinesisメッセージのパーティション・キー(メッセージ・キー)を解決するためのテンプレート文字列の値。

なし

詳細は、「テンプレートを使用したストリーム名とパーティション名の解決」を参照してください。

gg.handler.name.partitionMappingTemplate

必須

実行時にKinesisメッセージのパーティション・キー(メッセージ・キー)を解決するためのテンプレート文字列の値。

なし

詳細は、「テンプレートを使用したストリーム名とパーティション名の解決」を参照してください。

gg.hander.name.format

必須

サポートされている任意のプラガブル・フォーマッタ。

delimitedtext | json | json_row | xml | avro_row | avro_opt

操作メッセージのフォーマッタを選択します。Kinesisには、おそらくJSONが最適です。

10.3.3 テンプレートを使用したストリーム名とパーティション名の解決

Kinesis Streamsハンドラでは、テンプレートの構成値を使用して実行時にストリーム名とパーティション・キーを解決する機能が提供されます。テンプレートを使用すると、静的な値およびキーワードを構成できます。キーワードは、そのときの処理コンテキストに応じてキーワードを動的に置き換えるために使用されます。テンプレートは、次の構成パラメータに適用されます。

gg.handler.name.streamMappingTemplate
gg.handler.name.partitionMappingTemplate

テンプレートのモード

ソース・データベース・トランザクションは、それぞれが挿入、更新および削除である、1つ以上の個別の操作から構成されます。Kinesisハンドラは、操作ごとに1つのメッセージ(挿入、更新、削除)を送信するように構成することも、トランザクション・レベルで操作をメッセージにグループ化するように構成することもできます。テンプレート・キーワードの多くは、個々のソース・データベース操作のコンテキストに基づいてデータを解決します。したがって、トランザクション・レベルでメッセージを送信する場合には、キーワードの多くは機能しません。たとえば、トランザクション・レベルでメッセージを送信する場合、${fullyQualifiedTableName}は機能しません。${fullyQualifiedTableName}プロパティは、操作のための修飾されたソース表名に解決されます。トランザクションには、多くのソース表に対する複数の操作を含めることができます。トランザクション・レベルでのメッセージの完全修飾表名の解決は、非決定的であるため、実行時に異常終了します。

テンプレートのキーワード

次の表は、現在サポートされているキーワード・テンプレートをリストしており、トランザクション・レベルのメッセージでそのキーワードがサポートされているかどうかを示す列が含まれています。

キーワード

説明

トランザクション・メッセージのサポート

${fullyQualifiedTableName}

カタログ、スキーマおよび表名の間にデリミタの"."を含む、完全修飾表名に解決されます。

たとえば、test.dbo.table1

いいえ

${catalogName}

カタログ名に解決されます。

いいえ

${schemaName}

スキーマ名に解決されます

いいえ

${tableName}

短い表名に解決されます。

いいえ

${opType}

操作の種類(INSERT、UPDATE、DELETEまたはTRUNCATE)に解決されます

いいえ

${primaryKeys}

"_"文字で区切られた連結主キー値に解決されます。

いいえ

${position}

ソース証跡ファイルのシーケンス番号の後にオフセット(RBA)が続きます。

はい

${opTimestamp}

ソース証跡ファイルからの操作タイムスタンプ。

はい

${emptyString}

""に解決されます。

はい

${groupName}

Replicatプロセスの名前に解決されます。調整された配信を使用している場合は、レプリケートのスレッド番号が付加されたReplicatプロセスの名前に解決されます。

はい

${staticMap[]}

キーが完全修飾表名である静的な値に解決されます。キーおよび値は、大カッコの内部に次の形式で指定します。

${staticMap[dbo.table1=value1,dbo.table2=value2]}

いいえ

${columnValue[]}

キーが完全修飾表名であり、値が解決される列名である列の値に解決されます。次に例を示します。

${staticMap[dbo.table1=col1,dbo.table2=col2]}

いいえ

${currentTimestamp}

または

${currentTimestamp[]}

現在のタイムスタンプに解決されます。SimpleDateFormatクラスで説明されているJavaベースの書式設定を使用して、現在のタイムスタンプの書式を制御できます。

https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

例:

${currentDate}

${currentDate[yyyy-mm-dd hh:MM:ss.SSS]}

はい

${null}

null文字列に解決されます。

はい

${custom[]}

カスタム値リゾルバを記述することが可能です。必要に応じて、Oracleサポートに連絡してください。

実装依存

テンプレートの例

テンプレートの構成値の例と解決される値を次に示します。

テンプレートの例

解決される値

${groupName}_{fullyQualifiedTableName}

KINESIS001_dbo.table1

prefix_${schemaName}_${tableName}_suffix

prefix_dbo_table1_suffix

${currentDate[yyyy-mm-dd hh:MM:ss.SSS]}

2017-05-17 11:45:34.254

10.3.4 KinesisハンドラでのクライアントIDとシークレットの構成

クライアントIDおよびシークレットは、Kinesis StreamsハンドラがAmazon Kinesisとやりとりするために必要な資格証明です。クライアントIDおよびシークレットは、Amazon AWSのWebサイトによって生成されます。これらの資格証明の取得とKinesisサーバーへの提示は、AWS Kinesis Java SDKによってクライアント側で実行されます。AWS Kinesis Java SDKにより、実行時にクライアントIDおよびシークレットを解決できる複数の方法が提供されます。

クライアントIDおよびシークレットを設定できます

- Javaアダプタのプロパティ・ファイルで次のようにJavaプロパティを構成します。

javawriter.bootoptions=-Xmx512m -Xms32m
-Djava.class.path=ggjava/ggjava.jar
-Daws.accessKeyId=your_access_key
-Daws.secretKey=your_secret_key

- 環境変数としてAWS_ACCESS_KEY_IDおよびAWS_SECRET_ACCESS_KEY変数を使用します。

- ローカル・マシン上のE2C環境で。

10.3.5 Kinesis Streamsハンドラ用のプロキシ・サーバーの構成

Oracle GoldenGateは、プロキシ・サーバーを使用可能にする次のパラメータを使用して、プロキシ・サーバーとともに使用できます。

- gg.handler.kinesis.proxyServer=

- gg.handler.kinesis.proxyPort=80

資格証明および次の構成パラメータを使用して、プロキシ・サーバーへのアクセスを保護できます。

- gg.handler.kinesis.proxyUsername=username

- gg.handler.kinesis.proxyPassword=password

構成例:

gg.handlerlist=kinesis
gg.handler.kinesis.type=kinesis_streams
gg.handler.kinesis.mode=op
gg.handler.kinesis.format=json
gg.handler.kinesis.region=us-west-2
gg.handler.kinesis.partitionMappingTemplate=TestPartitionName
gg.handler.kinesis.streamMappingTemplate=TestStream
gg.handler.kinesis.deferFlushAtTxCommit=true
gg.handler.kinesis.deferFlushOpCount=1000
gg.handler.kinesis.formatPerOp=true
#gg.handler.kinesis.customMessageGrouper=oracle.goldengate.handler.kinesis.KinesisJsonTxMessageGrouper
gg.handler.kinesis.proxyServer=www-proxy.myhost.com
gg.handler.kinesis.proxyPort=80

10.3.6 Kinesis Streamsハンドラでのセキュリティの構成

AWS Kinesis Java SDKでは、HTTPSを使用してKinesisと通信します。Kinesis Streamsハンドラは、信頼できる証明書を使用して実行時にクライアントIDおよびシークレットの資格証明を提示することによって認証されます。

Kinesis Streamsハンドラは、相互認証を提供するサーバーを認証するように構成することもできます。これを行うには、Amazon AWSのWebサイトから証明書を生成し、サーバー認証を構成します。Oracle GoldenGate for Big Dataをホストしているマシンでは、トラスト・ストアを生成する必要があります。トラスト・ストアおよびトラスト・ストアのパスワードは、Kinesis StreamsハンドラのJavaアダプタのプロパティ・ファイルで構成する必要があります。

構成例を次に示します。

javawriter.bootoptions=-Xmx512m -Xms32m
-Djava.class.path=ggjava/ggjava.jar
–Djavax.net.ssl.trustStore=path_to_trust_store_file
–Djavax.net.ssl.trustStorePassword=trust_store_password

10.4 Kinesisハンドラのパフォーマンスに関する考慮事項

トピック:

- Kinesis Streamsの入力制限

- トランザクションのバッチ処理

- トランザクション・コミット時のフラッシュの遅延

10.4.1 Kinesis Streamsの入力制限

1つのシャードを持つKinesisストリームへの最大書込み速度は、1秒当たり1000メッセージ、1秒当たり最大1MBのデータまでです。Kinesisストリームを追加したり、ストリームにシャードを追加することで、Kinesisへの入力をスケーリングできます。ストリームとシャードの両方を追加すると、Kinesisの入力容量が直線的に増加するため、Oracle GoldenGate Kinesis Streamsハンドラのパフォーマンスが向上します。

ストリームやシャードを追加すると、次のような潜在的なスループットが直線的に増加します。

- 2つのシャードを持つ1つのストリーム = 2000メッセージ/秒、合計データ・サイズは2MB/秒。

- それぞれが1つのシャードを持つ3つのストリーム = 3000メッセージ/秒、合計データ・サイズは3MB/秒。

ストリームおよびシャードを十分に活用するには、Oracle GoldenGate Kinesis Streamsハンドラを構成して、ストリームとシャード間でできるだけ均等にメッセージを配信する必要があります。

すべてのデータが静的パーティション・キーを使用して単一のKinesisストリームに送信される場合、Kinesisストリームまたはシャードを追加してもKinesis入力のスケーリングはできません。Kinesisストリームは、選択されたマッピング方法を使用して実行時に解決されます。たとえば、ソース表名をKinesisストリーム名としてマッピングすると、ソース証跡ファイルからの操作が表全体に均等に分散されている場合、Kinesisストリーム間でメッセージを良好に配信できます。シャードは、パーティション・キーのハッシュによって選択されます。パーティション・キーは、選択されたマッピング方法を使用して実行時に解決されます。したがって、シャード全体の良好なメッセージ配信を保証するため、めまぐるしく変更されるパーティション・キーに対するマッピング方法を選択するのが最善です。

10.4.2 トランザクションのバッチ処理

Oracle GoldenGate Kinesis Streamsハンドラは、メッセージを受信すると、同期HTTPSコールを介してKinesisに送信する前に、受信したメッセージをKinesisストリームによって1つにまとめてバッチ処理します。トランザクションのコミット時、すべての未処理メッセージがKinesisにフラッシュされます。Kinesisへのフラッシュ・コールはパフォーマンスに影響します。したがって、フラッシュ・コールを遅延するとパフォーマンスが大幅に向上します。

フラッシュ・コールを遅延するために推奨される方法は、Replicatの構成でGROUPTRANSOPS構成を使用することです。GROUPTRANSOPSは、複数の小規模なトランザクションを1つの大きなトランザクションにグループ化して、大きなトランザクションが完了するまでトランザクション・コミットのコールを遅延します。GROUPTRANSOPSパラメータはデータベース操作(挿入、更新および削除)をカウントすることによって機能し、その操作数がGROUPTRANSOPS構成の設定値以上になった場合にのみ、トランザクション・グループをコミットします。ReplicatのデフォルトのGROUPTRANSOPS設定は1000です。

GROUPTRANSOPS設定を大きな値に設定すると、Kinesisへの暫定的なフラッシュが必要になることがあります。Kinesisストリームのバッチ・メッセージを送信する個々のコールは、500個の個別メッセージまたは5MBを超えることはできません。保留中のメッセージの数がストリームごとに500メッセージまたは5MBを超える場合、Kinesisハンドラでは暫定的なフラッシュの実行が必要になります。

10.4.3 トランザクション・コミット時のフラッシュの遅延

メッセージは、デフォルトでトランザクションのコミット時にKinesisにフラッシュされ、書込み永続性が保証されます。ただし、トランザクションのコミットを超えてフラッシュを遅延することが可能です。これは、ユーザーがトランザクションを1つのメッセージング単位として取得しようとしていて、メッセージがグループ化されてトランザクション・レベルでKinesisに送信される場合(つまり、1つのトランザクション = 1つのKinesisメッセージまたは少数のKinesisメッセージに分割された場合)にのみ推奨されます。

これには、GROUPTRANSOPSレプリケーション・パラメータを1に設定して、ソース証跡ファイルからの複数の小さなトランザクションをより大きな出力トランザクションにグループ化しないようにする必要があります。これは、トランザクションごとに1つまたは少数のメッセージしか送信されず、トランザクションのコミット・コールが呼び出され、それによりKinesisへのフラッシュ・コールがトリガーされるため、パフォーマンスに影響を与える可能性があります。

良好なパフォーマンスを維持するため、Oracle GoldenGate Kinesis Streamsハンドラでは、ユーザーはKinesisのフラッシュ・コールをトランザクションのコミット・コールを超えて遅延できます。Oracle GoldenGateのReplicatプロセスでは、チェックポイントは{GoldenGate Home}/dirchkディレクトリの.cprファイルに保持されます。Javaアダプタも、このディレクトリに.cpjという名前のチェックポイント・ファイルを保持します。Replicatのチェックポイントは、Oracle GoldenGate Kinesisハンドラではメッセージ損失が発生しないことを保証できないチェックポイントを超えるものです。ただし、この操作モードでは、GoldenGate Kinesis Streamsハンドラにより.cpjファイルに正しいチェックポイントが保持されます。このモードで実行している場合、.cpjファイル内のチェックポイントが.cprファイル内のチェックポイントの前にあれば、再起動時にそのチェックポイントが解析されて、クラッシュしてもメッセージが失われることはありません。

10.5 トラブルシューティング

トピック:

- Javaクラスパス

- Kinesisハンドラの接続に関する問題

- ロギング

10.5.1 Javaクラスパス

最も一般的な初期エラーは、必要なすべてのAWS Kinesis Java SDKクライアント・ライブラリを含めるクラスパスが正しくないことで、ログ・ファイルにClassNotFound例外が作成されます。

Javaアダプタ・ロギングをDEBUGに設定してトラブルシューティングを行い、プロセスを再実行できます。デバッグ・レベルでは、ロギングにgg.classpath構成変数からクラスパスに追加されたJARに関する情報が含まれます。

gg.classpath変数では、構成されたディレクトリ内のすべてのJARを選択するワイルドカードのアスタリスク(*)文字がサポートされます。たとえば、/usr/kinesis/sdk/*です(「Kinesis Streamsハンドラの設定および実行」を参照)。

10.5.2 Kinesisハンドラの接続に関する問題

オンプレミスで実行していて、Kinesis StreamsハンドラがKinesisに接続できない場合は、プロキシ・サーバーによってパブリック・インターネットへの接続が保護されている可能性があります。プロキシ・サーバーは、企業のプライベート・ネットワークとパブリック・インターネットとの間のゲートウェイとして機能します。ネットワーク管理者に連絡して、プロキシ・サーバーのURLを取得し、「Kinesis Streamsハンドラ用のプロキシ・サーバーの構成」の指示に従ってください。

10.5.3 ロギング

Kinesis Streamsハンドラでは、その構成状態がJavaのログ・ファイルに記録されます。

これは、ハンドラの構成値を確認できるため、役に立ちます。構成状態のロギングのサンプルを次に示します。

**** Begin Kinesis Streams Handler - Configuration Summary ****
Mode of operation is set to op.
The AWS region name is set to [us-west-2].
A proxy server has been set to [www-proxy.us.oracle.com] using port [80].
The Kinesis Streams Handler will flush to Kinesis at transaction commit.
Messages from the GoldenGate source trail file will be sent at the operation level.
One operation = One Kinesis Message
The stream mapping template of [${fullyQualifiedTableName}] resolves to [fully qualified table name].
The partition mapping template of [${primaryKeys}] resolves to [primary keys].
**** End Kinesis Streams Handler - Configuration Summary ****

11 メタデータ・プロバイダの使用

この章では、メタデータ・プロバイダの機能と、メタデータ・プロバイダの各タイプについて説明し、その機能の理解に役立つ例も示します。

トピック:

- メタデータ・プロバイダについて

- Avroメタデータ・プロバイダ

- Java Database Connectivityメタデータ・プロバイダ

- Hiveメタデータ・プロバイダ

11.1 メタデータ・プロバイダについて

メタデータ・プロバイダは、ハンドラがReplicatプロセスで実行されるように構成されている場合にのみ有効です。

Replicatプロセスには、Replicat構成ファイルの構文を使用して、ソース表からターゲット表へ、およびソース列からターゲット列へのマッピングを実行する機能があります。ソース・メタデータ定義は、Oracle GoldenGateの証跡ファイルに含まれています(または、12.2以降のリリースのOracle GoldenGateではソース定義ファイルによって)。レプリケーション・ターゲットがデータベースの場合、Replicatプロセスはターゲット・メタデータ定義をターゲット・データベースから取得します。しかし、これはビッグ・データ・アプリケーションや一般的なJava Deliveryにデータをプッシュする場合には不利です。ビッグ・データ・アプリケーションは一般的に、ターゲット・メタデータを提供しないため、Replicatのマッピングは実行できません。この欠点に対処するのが、メタデータ・プロバイダです。メタデータ・プロバイダを使用すると、AvroまたはHiveを使用してターゲット・メタデータを定義でき、続いてソース表からターゲット表へ、およびソース列からターゲット列へのReplicatマッピングが可能になります。

メタデータ・プロバイダの使用はオプションであり、有効にするにはJavaアダプタ・プロパティ・ファイルでgg.mdp.typeプロパティを指定します。ソースのOracle GoldenGate証跡ファイルに含まれるメタデータを出力に利用できる場合、メタデータ・プロバイダは使用しないでください。メタデータ・プロバイダは、次の場合に使用する必要があります。

- ソース表名を、一致しないターゲット表名にマッピングする必要があります。

- ソース列名を、一致しないターゲット列名にマッピングする必要があります。

- ソース証跡ファイルからの特定の列を含め、それ以外の列を除外する必要があります。

Replicatマッピングには、Replicat構成ファイルで定義されているマッピングが静的であるという一般的な制限があります。Oracle GoldenGate 12.2以降には、ソースとしてOracleデータベースを使用するとき、DDL伝播の機能があります。メタデータ・プロバイダとReplicatマッピングを使用する際には、スキーマ展開の適切な処理が問題になることがあります。スキーマ展開のユースケースを考慮したうえで、必要な変更のためにメタデータ・プロバイダとReplicatマッピング構文をどのように更新するかを計画する必要があります。

COLMAPを使用してREPLICATでマップされる表ごとに、構成されたメタデータ・プロバイダからメタデータが取得され、そのメタデータがREPLICATによって列マッピング機能のために使用されます。

1つのメタデータ・プロバイダ実装の構成を選択できます。現在は、HiveおよびAvroのメタデータ・プロバイダがサポートされています。

シナリオ - いつメタデータ・プロバイダを使用するか

1. 次のシナリオでは、メタデータ・プロバイダの構成は必要ありません。
GGという名前のソース・スキーマが、GGADPという名前のターゲット・スキーマにマップされるスキーマ名のマッピング。*

GG.TCUSTMERというスキーマが、GGADP.TCUSTMER_NEWという表名にマップされるスキーマと表名のマッピング。

MAP GG.*, TARGET GGADP.*;
(OR)
MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW;

2. 次のシナリオでは、メタデータ・プロバイダの構成が必要です。
ソース列名がターゲット列名に一致しない列名のマッピング。たとえば、ソース列CUST_CODEは、ターゲット列CUST_CODE_NEWにマップします

MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW, COLMAP(USEDEFAULTS, CUST_CODE_NEW=CUST_CODE, CITY2=CITY);

11.2 Avroメタデータ・プロバイダ

Avroメタデータ・プロバイダは、Avroスキーマ・ファイルから表メタデータを取得する際に使用します。COLMAPを使用してReplicatでマップされる表ごとに、Avroスキーマからメタデータが取得され、そのメタデータがReplicatによって列マッピングのために使用されます。

トピック:

- 詳細な機能

- 実行時の前提条件

- クラスパス構成

- Avroメタデータ・プロバイダの構成

- サンプル構成

- メタデータ変更イベント

- 制限事項

- トラブルシューティング

11.2.1 詳細な機能

Avroメタデータ・プロバイダは、Avroスキーマ定義ファイルを使用してメタデータを使用します。AvroスキーマはJSONを使用して定義されます。process_name.prmファイルでマップされる表ごとに、対応するAvroスキーマ定義ファイルを作成する必要があります。Avroスキーマの定義の詳細は、次を参照してください。

http://avro.apache.org/docs/current/gettingstartedjava.html#Defining+a+schema

Avroメタデータ・プロバイダ・スキーマ定義の構文は、次のとおりです。

{"namespace": "[$catalogname.]$schemaname",
"type": "record",
"name": "$tablename",
"fields": [
{"name": "$col1", "type": "$datatype"},
{"name": "$col2 ",  "type": "$datatype ", "primary_key":true},
{"name": "$col3", "type": "$datatype ", "primary_key":true},
{"name": "$col4", "type": ["$datatype","null"]}
]
}

namespace            - name of catalog/schema being mapped
name                 - name of the table being mapped
fields.name          - array of column names
fields.type          - datatype of the column
fields.primary_key   - indicates the column is part of primary key.

Representing nullable and not nullable columns:

"type":"$datatype" - indicates the column is not nullable, where "$datatype" is the actual datatype.
"type": ["$datatype","null"] - indicates the column is nullable, where "$datatype" is the actual datatype

Avroメタデータ・プロバイダによってアクセスされるAvroスキーマ・ファイルは、命名規則によって次の形式になります。

[$catalogname.]$schemaname.$tablename.mdp.avsc

$catalogname    - name of the catalog if exists
$schemaname   - name of the schema
$tablename        - name of the table
.mdp.avsc           -  constant, which should be appended always

サポートされているAvroデータ型:

- boolean

- bytes

- double

- float

- int

- long

- string

Avroデータ型の詳細は、https://avro.apache.org/docs/1.7.5/spec.html#schema_primitiveを参照してください。

11.2.2 実行時の前提条件

Avroスキーマ定義は、Replicatプロセスを開始する前に、Replicatのパラメータ・ファイルでマップされるすべての表について作成する必要があります。

11.2.3 クラスパス構成

Avroメタデータ・プロバイダに、追加のクラスパス設定は必要ありません。

11.2.4 Avroメタデータ・プロバイダの構成

この項では、Oracle GoldenGate Avroメタデータ・プロバイダの構成プロパティについて詳細に説明します。

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.mdp.type

必須

avro

-

Avroメタデータ・プロバイダを選択します

gg.mdp.schemaFilesPath

必須

有効な値の例は、/home/user/ggadp/avroschema/

-

Avroスキーマ・ファイルのディレクトリのパス

gg.mdp.charset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

gg.mdp.nationalCharset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

例: Oracle Databaseの場合、NCHARやNVARCHARなどの列のキャラクタ・セットを指定します。

11.2.5 サンプル構成

この項では、Avroメタデータ・プロバイダを構成する例を示します。次の表でソースを検討してください。

TABLE GG.TCUSTMER {
CUST_CODE VARCHAR(4) PRIMARY KEY,
NAME VARCHAR(100),
CITY VARCHAR(200),
STATE VARCHAR(200)
}

ソースの列CUST_CODE (GG.TCUSTMER)のターゲットのCUST_CODE2 (GG_AVRO.TCUSTMER_AVRO)へのマッピング、およびソースの列CITY (GG.TCUSTMER)のターゲットのCITY2 (GG_AVRO.TCUSTMER_AVRO)へのマッピング。したがって、process_name.prmファイルでのマッピングは、次のとおりです。

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY);

この例のマッピング定義は、次のようになります。

- ソース・スキーマGGは、ターゲット・スキーマGG_AVROにマップされる。

- ソース列CUST_CODEは、ターゲット列CUST_CODE2にマップされる

- ソース列CITYは、ターゲット列CITY2にマップされる

- USEDEFAULTSには、列名の残りがソースとターゲットで同じことを指定します(NAME列とSTATE列)。

上の例のAvroスキーマ定義ファイルは、次のとおりです。

ファイル・パス: /home/ggadp/avromdpGG_AVRO.TCUSTMER_AVRO.mdp.avsc

{"namespace": "GG_AVRO",
"type": "record",
"name": "TCUSTMER_AVRO",
"fields": [
{"name": "NAME", "type": "string"},
{"name": "CUST_CODE2",  "type": "string", "primary_key":true},
{"name": "CITY2", "type": "string"},
{"name": "STATE", "type": ["string","null"]}
]
}

Javaアダプタ・プロパティ・ファイルの構成には、次の指定が含まれます。

gg.mdp.type = avro
gg.mdp.schemaFilesPath = /home/ggadp/avromdp

前述の例についてセミコロンを区切り文字として使用した場合の、区切りテキスト・フォーマッタを使用した出力の例を次に示します。

I;GG_AVRO.TCUSTMER_AVRO;2013-06-02 22:14:36.000000;NAME;BG SOFTWARE CO;CUST_CODE2;WILL;CITY2;SEATTLE;STATE;WA

Oracle GoldenGate for Big Dataのインストールには、サンプルのReplicat構成ファイル、サンプルのJavaアダプタ・プロパティ・ファイル、サンプルのAvroスキーマが、次の場所に用意されています。

GoldenGate_install_directory/AdapterExamples/big-data/metadata_provider/avro

11.2.6 メタデータ変更イベント

ソース・データベース表でDDL変更がある場合、Avroスキーマ定義と、Replicat構成ファイルでのマッピングは、変更が必要な場合があります。メタデータ変更イベントがあった場合には、Replicatプロセスを停止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(process_name.prm)に次の指定を追加すると停止できます。

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

あるいは、レプリケーション構成ファイルに次の指定を追加するとReplicatプロセスを一時停止できます。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

11.2.7 制限事項

Avroのbyteデータ型は、主キーとして使用できません。

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降では、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。

11.2.8 トラブルシューティング

トピック:

- 無効なスキーマ・ファイルの場所

- 無効なスキーマ・ファイル名

- スキーマ・ファイルでの無効なネームスペース

- スキーマ・ファイルでの無効な表名

11.2.8.1 無効なスキーマ・ファイルの場所

構成プロパティgg.mdp.schemaFilesPathで指定するAvroスキーマ・ファイル・ディレクトリの場所は、有効なディレクトリである必要があります。gg.mdp.schemaFilesPathプロパティで有効なディレクトリを構成しない場合、次の例外が発生します。

oracle.goldengate.util.ConfigException: Error initializing Avro metadata provider
Specified schema location does not exist. {/path/to/schema/files/dir}

11.2.8.2 無効なスキーマ・ファイル名

process_name.prmファイルでマップされる表ごとに、対応するAvroスキーマ・ファイルを、gg.mdp.schemaFilesPathで指定されたディレクトリに作成する必要があります。

たとえば、次のシナリオを考えてみます。

マッピング:

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2=cust_code, CITY2 = CITY);

プロパティ:

gg.mdp.schemaFilesPath=/home/usr/avro/

GG_AVRO.TCUSTMER_AVRO.mdp.avscという名前のファイルを、/home/usr/avro/ディレクトリに作成する必要があります。つまり、/home/usr/avro/GG_AVRO.TCUSTMER_AVRO.mdp.avscとなります

/home/usr/avro/GG_AVRO.TCUSTMER_AVRO.mdp.avscファイルを作成しない場合、次の例外が発生します。

java.io.FileNotFoundException: /home/usr/avro/GG_AVRO.TCUSTMER_AVRO.mdp.avsc

11.2.8.3 スキーマ・ファイルでの無効なネームスペース

REPLICATマッピングで指定するターゲット・スキーマ名は、Avroスキーマ定義ファイルのネームスペースと同じである必要があります。

たとえば、次のシナリオを考えてみます。

マッピング:

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2 = cust_code, CITY2 = CITY);

Avro Schema Definition:

{
"namespace": "GG_AVRO",
..
}

このシナリオでは、Replicatマッピングで指定したターゲット・スキーマ名がAvroスキーマのネームスペースに一致しない場合、REPLICATが次の例外で異常終了します。

Unable to retrieve table matadata. Table : GG_AVRO.TCUSTMER_AVRO
Mapped [catalogname.]schemaname (GG_AVRO) does not match with the schema namespace {schema namespace}

11.2.8.4 スキーマ・ファイルでの無効な表名

Replicatマッピングで指定するターゲット表名は、Avroスキーマ定義ファイルでの名前と同じである必要があります。

たとえば、次のシナリオを考えてみます。

マッピング:

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2 = cust_code, CITY2 = CITY);

Avroスキーマ定義:

{
"namespace": "GG_AVRO",
"name": "TCUSTMER_AVRO",
..
}

このシナリオでは、Replicatマッピングで指定したターゲット表名がAvroスキーマ名に一致しない場合、REPLICATが次の例外で異常終了します。

Unable to retrieve table matadata. Table : GG_AVRO.TCUSTMER_AVRO
Mapped table name (TCUSTMER_AVRO) does not match with the schema table name {table name}

11.3 Java Database Connectivityメタデータ・プロバイダ

Java Database Connectivity (JDBC)メタデータ・プロバイダは、JDBC接続をサポートするターゲット・データベースから表メタデータを取得する際に使用し、データベース・スキーマがあります。JDBCメタデータ・プロバイダは、RDBMSであるターゲット・データベースの優先メタデータ・プロバイダとなりますが、他にJDBCドライバを提供する様々な非RDBMSターゲットがあります

トピック:

- JDBCの詳細な機能

- Javaクラスパス

- JDBCメタデータ・プロバイダの構成

- サンプル構成

11.3.1 JDBCの詳細な機能

JDBCメタデータ・プロバイダは、ターゲット・データベースとともに提供されるJDBCドライバを使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、JDBCドライバを使用して取得されます。Replicatプロセスは、列マッピング機能のために取得されるターゲット・メタデータを使用します。

Replicatパラメータ・ファイルでREPERRORを構成すると、JDBCハンドラでこの機能を有効化できます。また、次のようにJDBCハンドラ・プロパティ・ファイルでRDBMS JDBCターゲットに固有のエラー・コードを定義する必要があります。

表11-1 JDBC REPERRORのコード

プロパティ

値

必須

gg.error.duplicateErrorCodes

重複エラーを意味するエラー・コードのカンマ区切りの整数値

いいえ

gg.error.notFoundErrorCodes

重複エラーを意味するエラー・コードのカンマ区切りの整数値

いいえ

gg.error.deadlockErrorCodes

重複エラーを意味するエラー・コードのカンマ区切りの整数値

いいえ

次に例を示します。

#ErrorCode
gg.error.duplicateErrorCodes=1062,1088,1092,1291,1330,1331,1332,1333
gg.error.notFoundErrorCodes=0
gg.error.deadlockErrorCodes=1213

様々なJDBCタイプをデータベース固有のSQLタイプにマップする方法を理解するには、次の場所で仕様を確認してください。

https://docs.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/mapping.html#table1

11.3.2 Javaクラスパス

gg.classpathプロパティを使用して、JDBC Java Driverの場所をハンドラのクラスパスに含める必要があります。

たとえば、MySQLデータベースの構成は次のようになります。

gg.classpath= /path/to/jdbc/driver/jar/mysql-connector-java-5.1.39-bin.jar

11.3.3 JDBCメタデータ・プロバイダの構成

JDBCメタデータ・プロバイダの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表11-2 JDBCメタデータ・プロバイダのプロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.mdp.type

必須

jdbc

なし

コマンド・プロンプトでjdbcと入力すると、JDBCメタデータ・プロバイダの使用がアクティブになります。

gg.mdp.ConnectionUrl

必須

jdbc:subprotocol:subname

なし

ターゲット・データベースのJDBC URL。

gg.mdp.DriverClassName

必須

JDBCドライバのJavaクラス名

なし

JDBCドライバの完全修飾のJavaクラス名。

gg.mdp.userName

オプション

有効なユーザー名の文字列。

なし

JDBC接続のユーザー名。または、ConnectionURLプロパティを使用してユーザー名を指定できます。

gg.mdp.password

オプション

有効なパスワードの文字列。

なし

JDBC接続のパスワード。または、ConnectionURLプロパティを使用してユーザー名を指定できます。

11.3.4 サンプル構成

この項では、JDBCメタデータ・プロバイダを構成する例を示します。

MySQLドライバの構成:

gg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:oracle:thin:@myhost:1521:orcl
gg.mdp.DriverClassName=oracle.jdbc.driver.OracleDriver
gg.mdp.UserName=username
gg.mdp.Password=password

Netezzaドライバの構成

gg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:netezza://hostname:port/databaseName
gg.mdp.DriverClassName=org.netezza.Driver
gg.mdp.UserName=username
gg.mdp.Password=password

Oracle OCIドライバの構成:

ggg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:oracle:oci:@myhost:1521:orcl
gg.mdp.DriverClassName=oracle.jdbc.driver.OracleDriver
gg.mdp.UserName=username
gg.mdp.Password=password

Oracle Teradataドライバの構成:

gg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:teradata://10.111.11.111/USER=username,PASSWORD=password
gg.mdp.DriverClassName=com.teradata.jdbc.TeraDriver
gg.mdp.UserName=username
gg.mdp.Password=password

Oracle Thinドライバの構成:

gg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:mysql://localhost/databaseName?user=username&password=password
gg.mdp.DriverClassName=com.mysql.jdbc.Driver
gg.mdp.UserName=username
gg.mdp.Password=password

Redshiftドライバの構成

gg.mdp.type=jdbc
gg.mdp.ConnectionUrl=jdbc:redshift://hostname:port/databaseName
gg.mdp.DriverClassName=com.amazon.redshift.jdbc42.Driver
gg.mdp.UserName=username
gg.mdp.Password=password

11.4 Hiveメタデータ・プロバイダ

Hiveメタデータ・プロバイダは、Hiveメタストアから表メタデータを取得する際に使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、COLMAPパラメータを使用して、Hiveから取得されます。取得されるターゲット・メタデータは、列マッピング機能のためにReplicatで使用されます。

トピック:

- 詳細な機能

- リモート・メタストア・データベースを使用するHiveの構成

- クラスパス構成

- Hiveメタデータ・プロバイダの構成

- サンプル構成

- セキュリティ

- メタデータ変更イベント

- 制限事項

- その他の考慮事項

- トラブルシューティング

11.4.1 詳細な機能

Hiveメタデータ・プロバイダは、Hive JDBCとHCatalogの両方のインタフェースを使用して、Hiveメタストアからメタデータを取得します。process_name.prmファイルでマップされる表ごとに、対応する表をHiveに作成する必要があります。

デフォルトのHive構成では、組込みおよびローカルのメタストアであるDerbyデータベースが起動します。Apache Derbyは、組込みデータベースとして設計され、単一の接続のみ可能です。Hiveメタストア実装としてDerbyデータベースの接続が1つに制限されているということは、Hiveメタデータ・プロバイダと連携すると機能できないということです。これをなくすために、リモート・メタストア・データベースを使用してHiveを構成する必要があります。リモート・メタストア・データベースを使用するようにHiveを構成する詳細は、次のサイトを参照してください。

https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-RemoteMetastoreDatabase

Hiveは、主キーのセマンティックをサポートしていないため、Hiveメタストアから取得されるメタデータには、主キー定義が含まれません。Hiveメタデータ・プロバイダを使用する場合は、ReplicatのKEYCOLSパラメータを使用して主キーを定義する必要があります。

KEYCOLS

ターゲット・スキーマで主キーを定義するには、ReplicatのマッピングKEYCOLSパラメータを使用する必要があります。Oracle GoldenGate HBaseハンドラには、主キーが必要です。したがって、HBaseをターゲットとしてReplicatマッピングを使用する場合は、ターゲット・スキーマで主キーを設定する必要があります。

また、Avroフォーマッタの出力には、主キー列名を保持する配列フィールドがあります。AvroフォーマッタでReplicatマッピングを使用する場合には、KEYCOLSを使用して主キー列を指定することを検討する必要があります。

KEYCOLSの構成例は、「サンプル構成」を参照してください。

サポートされているHiveデータ型:

- BIGINT

- BINARY

- BOOLEAN

- CHAR

- DATE

- DECIMAL

- DOUBLE

- FLOAT

- INT

- SMALLINT

- STRING

- TIMESTAMP

- TINYINT

- VARCHAR

Hiveデータ型の詳細は、https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Typesを参照してください。

11.4.2 リモート・メタストア・データベースを使用するHiveの構成

リモートHiveメタストアの構成に使用できるサポート対象のデータベースのリストは、https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-SupportedBackendDatabasesforMetastoreにあります。

次の例で、MySQLデータベースは、Hive構成ファイル${HIVE_HOME}/conf/hive-site.xmlの次のプロパティを使用してHiveメタストアとして構成されます。

注意:

ConnectionURLと、この例で使用しているドライバ・クラスは、MySQLに固有の値です。MySQL以外のデータベースを選択する場合は、それらの値を適宜変更してください。

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://MYSQL_DB_IP:MYSQL_DB_PORT/DB_NAME?createDatabaseIfNotExist=false</value>
</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>MYSQL_CONNECTION_USERNAME</value>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>MYSQL_CONNECTION_PASSWORD</value>
</property>

リモート・メタストア用にhive-site.xmlファイルで構成するパラメータのリストは、https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-RemoteMetastoreDatabaseにあります。

注意:

MySQL JDBCコネクタJARを、次のHiveのクラスパスに追加する必要があります。

1. HIVE_HOME/lib/ディレクトリ内。DB_NAMEは、MySQLで作成されるデータベースの有効な名前に置き換えてください。

2. Hiveサーバーを起動します:
HIVE_HOME/bin/hiveserver2/bin/hiveserver2

3. Hiveリモート・メタストア・サーバーを起動します。
HIVE_HOME/bin/hive --service metastore

11.4.3 クラスパス構成

Hiveメタデータ・プロバイダをHiveに接続して実行するには、gg.classpath構成変数に2つのものを構成する必要があります。最初のファイルはhive-site.xmlファイルで、通常は$HIVE_HOME/confディレクトリにあります。2番目は、HiveおよびHDFSクライアントのjarファイルです。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。

1. hive-site.xmlファイルは、次のプロパティで作成します。

<configuration>
<!-- Mandatory Property -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://HIVE_SERVER_HOST_IP:9083</value>
<property>

<!-- Optional Property. Default value is 5 -->
<property>
<name>hive.metastore.connect.retries</name>
<value>3</value>
</property>

<!-- Optional Property. Default value is 1 -->
<property>
<name>hive.metastore.client.connect.retry.delay</name>
<value>10</value>
</property>

<!-- Optional Property. Default value is 600 seconds -->
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>50</value>
</property>

</configuration>

注意:

たとえば、hive-site.xmlファイルが/home/user/oggadp/dirprmディレクトリに作成される場合、gg.classpathエントリはgg.classpath=/home/user/oggadp/dirprm/です

2. HiveおよびHDFSのクライアントjarのデフォルトの場所は、次のディレクトリです。

HIVE_HOME/hcatalog/share/hcatalog/*
HIVE_HOME/lib/*
HIVE_HOME/hcatalog/share/webhcat/java-client/*
HADOOP_HOME/share/hadoop/common/*
HADOOP_HOME/share/hadoop/common/lib/*
HADOOP_HOME/share/hadoop/mapreduce/*

gg.classpathを、上の手順で示したとおり正確に構成します。hive-site.xmlのパスを作成する際には、ワイルドカードを追加しないパスを使用してください。hive-site.xml ファイルのパスにワイルドカード(*)を含めると、選択されなくなります。逆に、依存関係JARのパスを作成する際には、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。

11.4.4 Hiveメタデータ・プロバイダの構成

この項では、Hiveメタデータ・プロバイダの構成プロパティについて詳細に説明します。

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.mdp.type

必須

hive

-

Hiveメタデータ・プロバイダを選択します

gg.mdp.connectionUrl

必須

Kerberos認証を使用せずにフォーマット:

jdbc:hive2://HIVE_SERVER_IP:HIVE_JDBC_PORT/HIVE_DB

Kerberos認証を使用してフォーマット:

jdbc:hive2://HIVE_SERVER_IP:HIVE_JDBC_PORT/HIVE_DB; principal=user/FQDN@MY.REALM

-

HiveサーバーのJDBC接続URL

gg.mdp.driverClassName

必須

org.apache.hive.jdbc.HiveDriver

-

完全修飾のHive JDBCドライバ・クラス名。

gg.mdp.userName

オプション

有効なユーザー名

""

Hiveデータベースに接続するためのユーザー名。Kerberos認証を使用する場合、userNameプロパティは必要ありません。接続URLでは、connectionUrlプロパティの有効な値で指定されているKerberosプリンシパルを指定する必要があります。

gg.mdp.password

オプション

有効なパスワード

""

Hiveデータベースに接続する際のパスワード

gg.mdp.charset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

gg.mdp.nationalCharset

オプション

有効なキャラクタ・セット

UTF-8

文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。

たとえば、Oracle Databaseで、NCHARやNVARCHARなどの列のキャラクタ・セットを指定します。

gg.mdp.authType

オプション

kerberos

なし

gg.mdp.kerberosKeytabFile

オプション(authType=kerberosの場合は必須)

Kerberosキータブ・ファイルの相対パスまたは絶対パス。

-

keytabファイルを使用すると、Hiveがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.mdp.kerberosPrincipal

オプション(authType=kerberosの場合は必須)

有効なKerberosプリンシパル名(user/FQDN@MY.REALM)

-

Kerberos認証で用いるKerberosプリンシパル名。

11.4.5 サンプル構成

Hiveメタデータ・プロバイダを構成する例を次に示します。次の表でソースを検討してください。

TABLE GG.TCUSTMER {
CUST_CODE VARCHAR(4)   PRIMARY KEY,
NAME VARCHAR(100),
CITY VARCHAR(200),
STATE VARCHAR(200)}

この例は、ソースの列CUST_CODE (GG.TCUSTMER)をターゲットのCUST_CODE2 (GG_HIVE.TCUSTMER_HIVE)に、ソースの列CITY (GG.TCUSTMER)をターゲットのCITY2 (GG_HIVE.TCUSTMER_HIVE)にマップします。

process_name.prmファイルでのマッピング構成は、次のとおりです。

MAP GG.TCUSTMER, TARGET GG_HIVE.TCUSTMER_HIVE, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY) KEYCOLS(CUST_CODE2);

この例のマッピング定義は、次のようになります。

- ソース・スキーマGGは、ターゲット・スキーマGG_HIVEにマップされる

- ソース列CUST_CODEは、ターゲット列CUST_CODE2にマップされる

- ソース列CITYは、ターゲット列CITY2にマップされる

- USEDEFAULTSには、列名の残りがソースとターゲットで同じことを指定します(NAME列とSTATE列)。

- KEYCOLSには、CUST_CODE2を主キーとして扱う必要があることを指定します。

HiveのDDLでは主キーを指定できないため、KEYCOLSパラメータを使用して主キーを指定します。

上の例のHiveにスキーマと表を作成します。

注意:

任意のスキーマ名を選択でき、gg_hive schema名には制限されません。Hiveスキーマは、既存のものでも新規作成してもかまいません。これには、Javaアダプタ・プロパティ・ファイルで接続URL (gg.mdp.connectionUrl)を、Replicat.prmファイルでマッピング構成を、それぞれ変更します。スキーマ名を変更したら、接続URL (gg.mdp.connectionUrl)と、Replicat.prmファイルのマッピングを更新する必要があります。

Hive CLIタイプを起動するには、次のコマンドを実行します。

HIVE_HOME/bin/hive

スキーマGG_HIVEをHiveに作成するには、次のコマンドを使用します。

hive> create schema gg_hive;
OK
Time taken: 0.02 seconds

表TCUSTMER_HIVEをGG_HIVEデータベースに作成するには、次のコマンドを入力します。

hive> CREATE EXTERNAL TABLE `TCUSTMER_HIVE`(
>   "CUST_CODE2" VARCHAR(4),
>   "NAME" VARCHAR(30),
>   "CITY2" VARCHAR(20),
>   "STATE" STRING);
OK
Time taken: 0.056 seconds

.propertiesファイルでの構成は、次のようになります。

gg.mdp.type=hive
gg.mdp.connectionUrl=jdbc:hive2://HIVE_SERVER_IP:10000/gg_hive
gg.mdp.driverClassName=org.apache.hive.jdbc.HiveDriver

前述の例についてカンマを区切り文字として使用した場合の、区切りテキスト・フォーマッタを使用した出力の例を次に示します。

I;GG_HIVE.TCUSTMER_HIVE;2015-10-07T04:50:47.519000;cust_code2;WILL;name;BG SOFTWARE CO;city2;SEATTLE;state;WA

Replicat構成ファイル、Javaアダプタ・プロパティ・ファイル、およびHive表作成SQLスクリプトのサンプルは、インストール時に、次の場所に追加されます。

GoldenGate_install_directory/AdapterExamples/big-data/metadata_provider/hive

11.4.6 セキュリティ

Hiveサーバーは、Kerberos認証を使用して保護できます。Hiveサーバーの保護方法については、ご使用のHiveリリースのHiveドキュメントを参照してください。Hiveメタデータ・プロバイダは、Kerberosで保護されたHiveサーバーに接続できます。

HDFS core-site.xmlとhive-site.xmlは、ハンドラのクラスパスに存在する必要があります。

core-site.xmlの次のプロパティを有効にします。

<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>

<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>

hive-site.xmlの次のプロパティを有効にします

<property>
<name>hive.metastore.sasl.enabled</name>
<value>true</value>
</property>

<property>
<name>hive.metastore.kerberos.keytab.file</name>
<value>/path/to/keytab</value> <!-- Change this value -->
</property>

<property>
<name>hive.metastore.kerberos.principal</name>
<value>Kerberos Principal</value> <!-- Change this value -->
</property>

<property>
<name>hive.server2.authentication</name>
<value>KERBEROS</value>
</property>

<property>
<name>hive.server2.authentication.kerberos.principal</name>
<value>Kerberos Principal</value> <!-- Change this value -->
</property>

<property>
<name>hive.server2.authentication.kerberos.keytab</name>
<value>/path/to/keytab</value> <!-- Change this value -->
</property>

11.4.7 メタデータ変更イベント

ソース・データベース表で変更がある場合、Hiveメタストアの表は、手動で更新/変更/作成する必要があります。メタデータ変更イベントがあった場合には、Replicatプロセスを中止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(process_name.prm)に次の指定を追加すると中止できます。

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

あるいは、レプリケーション構成ファイル(process_name.prm)に次の指定を追加するとReplicatプロセスを一時停止できます。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

11.4.8 制限事項

バイナリ・データ型の列は、主キーとして使用できません。

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降では、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。

11.4.9 その他の考慮事項

特に一般的なのが、Javaクラスパスに関する問題です。Hiveメタデータ・プロバイダでは、前提条件として、特定のHiveおよびHDFSクライアント・ライブラリをクラスパスで解決する必要があります。

必要なクライアントJARディレクトリは、「クラスパス構成」にリストしてあります。HiveおよびHDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。

Hiveサーバーへの接続を確立するには、クラスパスにhive-site.xmlファイルが存在する必要があります。

11.4.10 トラブルシューティング

マップされたターゲット表がHiveに存在しない場合、Replicatプロセスは"Table metadata resolution exception"で異常終了します。

たとえば、次のマッピングを考えてみます。

MAP GG.TCUSTMER, TARGET GG_HIVE.TCUSTMER_HIVE, COLMAP(USEDEFAULTS, CUST_CODE2=CUST_CODE, CITY2=CITY) KEYCOLS(CUST_CODE2);

前述のマッピングでは、TCUSTMER_HIVEという表を、HiveメタストアのスキーマGG_HIVEに作成する必要があります。HiveでGG_HIVE.TCUSTMER_HIVE表の作成に失敗すると、次の例外が発生します。

ERROR [main) - Table Metadata Resolution Exception
Unable to retrieve table matadata. Table : GG_HIVE.TCUSTMER_HIVE
NoSuchObjectException(message:GG_HIVE.TCUSTMER_HIVE table not found)

12 MongoDBハンドラの使用

この章では、MongoDBハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

- 概要

- 詳細な機能

- MongoDBハンドラの設定および実行

- サンプル構成

12.1 概要

MongoDBは、高パフォーマンス、高可用性および自動スケーリングを提供するオープン・ソースのドキュメント・データベースです。

詳細は、次に示すMongoDBのWebサイトを参照してください。

https://www.mongodb.com/

MongoDBハンドラを使用して、Oracle GoldenGate証跡からターゲットMongoDBデータベースにトランザクション・データを複製できます。

12.2 詳細な機能

MongoDBハンドラは、ソース証跡ファイルから操作を取得し、対応するドキュメントをターゲットMongoDBデータベースに作成します。

MongoDBでは、レコードはバイナリJSON (BSON)ドキュメントで、フィールドと値のペアで構成されるデータ構造です。BSONデータ構造は、JSONドキュメントのバイナリ形式です。MongoDBドキュメントはJSONオブジェクトに似ています。フィールドの値には、他のドキュメント、配列、およびドキュメントの配列を含めることができます。

コレクションは、MongoDBドキュメントをグループ化したもので、RDBMSの表に相当します。MongoDBでは、データベースはドキュメントのコレクションを保持します。コレクションはスキーマを強制しません。コレクション内のMongoDBドキュメントは、異なるフィールドを持つことができます。

トピック:

- ドキュメント・キー列

- 主キーの更新操作

- MongoDB証跡のデータ型

12.2.1 ドキュメント・キー列

MongoDBデータベースでは、すべてのドキュメント(行)に_idという名前の列が必要で、この列の値はコレクション(表)内で一意である必要があります。これは、RDBMS表の主キーに似ています。挿入時に、ドキュメントに最上位の_id列が含まれていない場合、MongoDBドライバによってこの列が追加されます。

MongoDBハンドラは、証跡レコードの主キー列値に基づいて、すべてのドキュメントのカスタム_idフィールド値を構築します。このカスタム_id は、: (コロン)セパレータで連結されたすべてのキー列値を使用して構築されます。次に例を示します。

KeyColValue1:KeyColValue2:KeyColValue3
MongoDBハンドラは、このカスタム_id値に基づいて、一意性を強制します。つまり、証跡のすべてのレコードが、主キー列値に基づいて一意である必要があります。同じ表に一意でないレコードが存在すると、MongoDBハンドラ障害が発生し、Replicatは重複キー・エラーで異常終了します。

_idフィールドの動作は次のとおりです。

- デフォルトでは、MongoDBは、コレクションの作成時に列の一意の索引を作成します。

- これは常にドキュメントの最初の列になります。

- 配列を除く任意のBSONデータ型の値を使用できます。

12.2.2 主キーの更新操作

MongoDBデータベースでは、 _id列の変更は許可されていません。つまり、証跡内の主キーの更新操作レコードには、特別な処理が必要です。MongoDBハンドラは、主キーの更新操作をDELETE (古いキー)とINSERT (新しいキー)の組合せに変換します。INSERTを実行するには、証跡内の更新操作の完全な操作前イメージが推奨されます。Oracle GoldenGateのGETUPDATEBEFORESおよびNOCOMPRESSUPDATESパラメータを有効にして、更新操作の完全な操作前イメージを移入する証跡を生成できます。『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。

12.2.3 MongoDB証跡のデータ型

MongoDBハンドラは、次に示すBSONデータ型への配信をサポートします。

- 32ビット整数

- 64ビット整数

- Double

- 日付

- 文字列

- バイナリ・データ

12.3 MongoDBハンドラの設定および実行

ここでは、MongoDBハンドラのコンポーネントの構成とハンドラの実行について説明します。

トピック:

- クラスパス構成

- MongoDBハンドラ構成

- 接続および認証

- 一括書込みの使用

- 書込み確認の使用

- 3部構成の表名の使用

- 元に戻す処理の使用

12.3.1 クラスパス構成

MongoDB Java Driverは、Oracle GoldenGate for Big DataがデータからMongoDBに接続およびストリーミングするために必要です。MongoDB Java Driverの推奨バージョンは3.2.2です。MongoDB Java DriverはOracle GoldenGate for Big Dataのパッケージングに含まれていないため、次の場所からドライバをダウンロードする必要があります。

https://docs.mongodb.com/ecosystem/drivers/java/#download-upgrade

推奨されるドライバJARファイルをダウンロードするには、“mongo-java-driver"と、"3.2.2"バージョンを選択します。

実行時にMongoDB Java Driver JARをロードするには、gg.classpath変数を構成する必要があります。例: gg.classpath=/home/mongodb/mongo-java-driver-3.2.2.jar

12.3.2 MongoDBハンドラ構成

MongoDBハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

表12-1 MongoDBハンドラの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handler.name.type

必須

mongodb

なし

Replicatで使用するMongoDBハンドラを選択します。

gg.handler.name.bulkWrite

オプション

true | false

true

trueに設定すると、コミット・トランザクション・イベントを受信するまで、ハンドラは操作をキャッシュします。トランザクション・イベントのコミット時に、キャッシュされたすべての操作がターゲットMongoDBデータベースに書き出され、スループットが向上します。

falseに設定すると、ハンドラ内でキャッシュは行われず、操作はただちにMongoDBデータベースに書き込まれます。

gg.handler.name.WriteConcern

オプション

{"w": "value" , "wtimeout": "number" }

なし

MongoDBハンドラで実行されるすべての操作に必要な書込み確認を設定します。

プロパティ値はJSON形式で、“w”および“wtimeout”のキーのみを受け入れます。

書込み確認の詳細は、https://docs.mongodb.com/manual/reference/write-concern/を参照してください。

gg.handler.name.username

オプション

有効なユーザー名の文字列。

なし

使用する認証ユーザー名を設定します。AuthenticationMechanismプロパティとともに使用します。

gg.handler.name.password

オプション

有効なパスワードの文字列。

なし

使用する認証パスワードを設定します。AuthenticationMechanismプロパティとともに使用します。

gg.handler.name.ServerAddressList

オプション

IP:PORT (複数のポート値はカンマで区切る)

なし

Replicatセット・メンバーのリストまたはMongoDBデータベースのリストへの接続を有効にします。

このプロパティは、[hostnames:port]のカンマ区切りリストを受け入れます。たとえば、localhost1:27017,localhost2:27018,localhost3:27019です。

詳細は、http://api.mongodb.com/java/3.0/com/mongodb/MongoClient.html#MongoClient-java.util.List-java.util.List-com.mongodb.MongoClientOptions-を参照してください。

gg.handler.name.AuthenticationMechanism

オプション

認証メカニズムのカンマ区切りリスト

なし

クライアントのアイデンティティを検証するプロセスである認証メカニズムを設定します。入力内容は、様々な認証オプションのカンマ区切りリストになります。たとえば、GSSAPI,MONGODB_CR,MONGODB_X509,PLAIN,SCRAM_SHA_1です。

認証オプションの詳細は、http://api.mongodb.com/java/3.0/com/mongodb/MongoCredential.htmlを参照してください。

gg.handler.name.source

オプション

有効な認証ソース

なし

ユーザー名のソース(通常はユーザーが定義されているデータベースの名前)を設定します。AuthenticationMechanismプロパティとともに使用します。

gg.handler.name.clientURI

オプション

有効なMongoDBクライアントURI

なし

MongoDBクライアントURIを設定します。クライアントURIは、認証やWriteConcernなど、他のMongoDB接続プロパティの設定にも使用できます。例: mongodb://localhost:27017/

クライアントURIの形式の詳細は、http://api.mongodb.com/java/3.0/com/mongodb/MongoClientURI.htmlを参照してください

gg.handler.name.Host

オプション

有効なMongoDBのサーバー名またはIPアドレス

なし

(単一の) MongoDBノードに基づいて、接続先のMongoDBデータベース・ホスト名を設定します。http://api.mongodb.com/java/3.0/com/mongodb/MongoClient.html#MongoClient-java.lang.String-を参照してください。

gg.handler.name.Port

オプション

有効なMongoDBポート

なし

MongoDBデータベース・インスタンス・ポート番号を設定します。Hostプロパティとともに使用します。

gg.handler.name.CheckMaxRowSizeLimit

オプション

true | false

false

trueに設定すると、ハンドラは、MongoDBデータベースで定義された制限に収まるように、挿入または変更されるBSONドキュメントのサイズを常にチェックします。サイズの計算は、RawBsonDocumentを生成するデフォルト・コーデックの使用を伴い、これによりMongoDBハンドラのスループットが少し低下します。

ドキュメントのサイズがMongoDBの制限を超えると、例外が発生し、Replicatが異常終了します。

12.3.3 接続および認証

ハンドラ・プロパティ・ファイルで構成される様々な接続プロパティまたは認証プロパティを使用できます。複数の接続プロパティが指定された場合、MongoDBハンドラは、次の優先順位に基づいてプロパティを選択します。

優先度1:

AuthentictionMechanism
UserName
Password
Source
Write Concern

優先度2:

ServerAddressList
AuthentictionMechanism
UserName
Password
Source

優先度3:

clientURI

優先度4:

Host
Port

優先度5:

Host

接続プロパティと認証プロパティを何も指定しないと、ハンドラは、ポート27017のlocalhostへの接続を試行します。

12.3.4 一括書込みの使用

MongoDBハンドラでは、GROUPTRANSOPSパラメータを使用して、バッチ・サイズを取得します。証跡レコードのバッチは、MongoDBドキュメントのバッチに変換され、データベースへの1つのリクエストに書き込まれます。

BulkWriteハンドラ・プロパティを使用して、適用スループットを向上させるために一括書込みを有効化できます。デフォルトでは、これは有効で、ハンドラの最適パフォーマンスのための推奨設定になっています。

gg.handler.handler.BulkWrite=true | falseプロパティを使用して、一括書込みを有効または無効にします。Oracle GoldenGate for Big Dataのデフォルト・プロパティgg.handler.handler.mode=op | txは、MongoDBハンドラで使用されません。

一括書込みを使用することをお薦めします。

12.3.5 書込み確認の使用

書込み確認は、スタンドアロンMongoDB、レプリカ・セットおよびシャード・クラスタへの書込み操作に関してMongoDBからリクエストされた確認のレベルを説明します。シャード・クラスタを使用して、mongosインスタンスは書込み確認をシャードに渡します。

次の構成を使用します。

w: value
wtimeout: number

https://docs.mongodb.com/manual/reference/write-concern/

12.3.6 3部構成の表名の使用

Oracle GoldenGate証跡では、Catalog.Schema.Tableなど、3部構成の表名をサポートするソースのデータが存在する場合があります。MongoDBは、DBName.Collectionなど、2部構成の名前のみをサポートします。ソースの3部構成の名前からMongoDBの2部構成の名前へのマッピングをサポートするには、ソースのCatalogとSchemaをアンダースコア区切り文字で連結して、MongoのDBNameを構成します。

たとえば、Catalog.Schema.Tableはcatalog1_schema1.table1になります。

12.3.7 元に戻す処理の使用

MongoDB Handlerハンドラは、軽量のundoエンジンを使用して、一括書込みエラーから回復できます。このエンジンは、通常のRDBMSのundoエンジンで提供される機能を提供するのではなく、どちらかといえばエラー・リカバリに役立つよう最善を尽くします。エラー・リカバリが正常に動作するのは、MongoDBデータベースがBulkWriteExceptionによって障害の場所に関する情報を提供できる主な違反や他の一括書込みエラーがある場合です。

表12-2では、この機能を最大限に利用するための要件を示します。

表12-2 Undo処理の要件

元に戻す処理

証跡に完全な操作前イメージが必要か。

INSERT

いいえ

DELETE

はい

UPDATE

いいえ(SET句のフィールドの操作前イメージ。)

undo操作中にエラーが発生した場合、MongoDBコレクションを一貫性のある状態にすることができない可能性があるため、手動でのデータの調整が必要になることがあります。

12.4 サンプル構成

Javaアダプタ・プロパティ・ファイルからのMongoDBハンドラの構成例を次に示します。

gg.handlerlist=mongodb
gg.handler.mongodb.type=mongodb

#The following handler properties are optional.
#Please refer to the Oracle GoldenGate for BigData documentation
#for details about the configuration.
#gg.handler.mongodb.clientURI=mongodb://localhost:27017/
#gg.handler.mongodb.Host=<MongoDBServer address>
#gg.handler.mongodb.Port=<MongoDBServer port>
#gg.handler.mongodb.WriteConcern={ w: <value>, wtimeout: <number> }
#gg.handler.mongodb.AuthenticationMechanism=GSSAPI,MONGODB_CR,MONGODB_X509,PLAIN,SCRAM_SHA_1
#gg.handler.mongodb.UserName=<Authentication username>
#gg.handler.mongodb.Password=<Authentication password>
#gg.handler.mongodb.Source=<Authentication source>
#gg.handler.mongodb.ServerAddressList=localhost1:27017,localhost2:27018,localhost3:27019,...
#gg.handler.mongodb.BulkWrite=<false|true>
#gg.handler.mongodb.CheckMaxRowSizeLimit=<true|false>

goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec

#Path to MongoDB Java driver.
# maven co-ordinates
# <dependency>
# <groupId>org.mongodb</groupId>
# <artifactId>mongo-java-driver</artifactId>
# <version>3.2.2</version>
# </dependency>
gg.classpath=/path/to/mongodb/java/driver/mongo-java-driver-3.2.2.jar
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm

13 プラガブル・フォーマッタの使用

フォーマッタは、Oracle GoldenGate証跡ファイルの操作をフォーマット済のメッセージに変換する機能を提供します。変換されたメッセージは、Oracle GoldenGate for Big Dataのいずれかのハンドラによってビッグ・データ・ターゲットに送信できます。

トピック:

- 操作ベースと行ベースのフォーマット

- 区切りテキスト・フォーマッタ

- JSONフォーマッタ

- Avroフォーマッタ

- XMLフォーマッタ

13.1 操作ベースと行ベースのフォーマット

Oracle GoldenGate for Big Dataのフォーマッタには、操作ベースと行ベースのフォーマッタがあります。

操作ベースとは、ソース・データベースの表データに対して発生する個々の挿入、更新および削除イベントです。新しい行はソース・データベースに追加されているところなので、挿入操作で処理されるのは操作後のデータ(またはイメージ)のみです。更新操作は操作前と操作後のデータが対象で、既存の行データの変更方法を表します。削除操作は操作前のデータのみが対象で、削除されている行の識別を示します。操作ベースのフォーマッタは、ソース証跡ファイルに存在する操作をモデル化します。操作ベースのフォーマッタには、操作前後のイメージのフィールドが含まれます。

行ベースのフォーマッタは、操作データを適用した後に存在する行データをモデル化します。行ベースのフォーマッタに含まれるデータのイメージは1つだけです。次の各項では、操作ベースと行ベースのフォーマッタで表示されるデータの種類について説明します。

トピック:

- 操作フォーマッタ

- 行フォーマッタ

- 表の行または列の値の状態

13.1.1 操作フォーマッタ

操作ベースのフォーマットをサポートするフォーマッタは、JSON、Avro操作、およびXMLです。操作ベース・フォーマッタの出力は、次のとおりです。

- 挿入操作 - 操作前のイメージ・データはNULL。操作後のイメージ・データが出力されます。

- 更新操作 - 操作前と操作後の両方のイメージ・データが出力されます。

- 削除操作 - 操作前のイメージ・データが出力されます。操作後のイメージ・データはNULLです。

- 切捨て操作 - 操作前と操作後の両方のイメージ・データがNULLです。

13.1.2 行フォーマッタ

行ベースのフォーマットをサポートするフォーマッタは、区切りテキストとAvro行です。行ベースのフォーマッタは、次の操作について次の情報を出力します。

- 挿入操作 - 操作後のイメージ・データのみ。

- 更新操作 - 操作後のイメージ・データのみ。主キーの更新は特別なケースであり、各フォーマッタの項で説明します。

- 削除操作 - 操作前のイメージ・データのみ。

- 切捨て操作 - 表名は示されますが、操作前と操作後のイメージ・データはどちらもNULLです。表の切捨てはDDL操作で、異なるデータベース実装はサポートしない場合があります。データベース実装については、Oracle GoldenGateのドキュメントを参照してください。

13.1.3 表の行または列の値の状態

- RDBMSでは、特定の行と列の表データは2つの状態のうちいずれかをとります。表の行/列に値があるか、値がNULLかのいずれかです。ところが、Oracle GoldenGateの取得プロセスによってデータがOracle GoldenGate証跡ファイルに転送される場合、可能な状態は3つに増えます。表の行/列に値があるか、行/列の値がNULL、または行/列の値がないかです。

- 挿入操作の場合、操作後のイメージには、その列に値があるかNULLかにかかわらず、すべての列の値のデータが含まれます。一方、更新操作と削除操作に含まれるデータは、すべての列に完全なデータが含まれるとはかぎりません。更新操作のためにRDBMSにデータを複製する場合、ターゲット・データベースで変更する必要があるデータは、主キー値と、変更される列の値のみです。また、削除操作の場合、主キー値でターゲット・データベースから行を削除させる必要があるだけです。したがって、表の行/列がソース・データベースで値を持っている場合でも、その値はソース証跡ファイルには存在しないことになります。ソース証跡ファイルの行/列データには3つの状態があるので、プラガブル・フォーマッタも3つの状態でデータを表せる必要があるということです。

- Oracle GoldenGate証跡ファイルでどんな行/列データを使用できるかが、ビッグ・データ統合に影響します。どんなデータが必要かを理解することが重要です。一般的には、Oracle GoldenGate証跡ファイルで操作に含まれるデータを制御できます。Oracleデータベースの場合、これは補足的なロギング・レベルによって制御されます。Oracle GoldenGate証跡ファイルに含まれる行と列の値を制御する方法については、個々のソース・データベース実装に関するOracle GoldenGateのドキュメントを参照してください。

13.2 区切りテキスト・フォーマッタ

区切りテキスト・フォーマッタは、行ベースのフォーマッタの一種です。ソース証跡ファイルから、データベース操作の内容を、区切りテキスト出力としてフォーマットします。ソース証跡ファイルからの挿入、更新、削除または切捨ての各操作は、区切られた個々のメッセージとしてフォーマットされます。区切りテキスト出力は、各表に対して固定数のフィールドがあり、フィールド区切り文字によって区切られ、最後が行区切り文字になります。フィールドは、位置が関係します。Hiveを含め、ビッグ・データ分析ツールの多くは、区切りテキストを含むHDFSファイルと適切に機能します。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。デフォルトでは、区切りテキストはこれらの列値状態を区切りテキスト出力に次のようにマップします。

- 列値がある - 列値が出力されます。

- 列値がNULL - デフォルトの出力値はNULLです。列値がNULLの場合の出力は、設定を変更できます。

- 列値がない - デフォルトの出力値は""です。列値がない場合の出力は、設定を変更できます。

トピック:

- メッセージのフォーマットの詳細

- フォーマットしたメッセージの例

- その他の考慮事項

- 出力形式サマリーのログ

- 区切りテキスト形式の構成

- サンプル構成

- メタデータ変更イベント

13.2.1 メッセージのフォーマットの詳細

データの出力のデフォルト形式は、次のとおりです。セミコロンで区切られます。

最初は行のメタデータです。

operation_type;fully_qualified_table_name;operation_timestamp;current_timestamp;trail_position;tokens;

次が行データです。

column_1_value;column_n_value_then_line_delimeter

オプションで、列名を各列値の前に含めることができ、行データの出力形式が変更されます。

column_1_name;column_1_value;column_n_name;column_n_value_then_line_delimeter

操作タイプ - 操作タイプは、証跡ファイルからのデータベース操作のタイプを示します。デフォルト値は挿入を表すI、更新を表すU、削除を表すD、切捨てを表すTです。このフィールドの出力は、抑止できます。

完全修飾の表名 - 完全修飾の表名はソース・データベース表で、カタログ名とスキーマ名も含みます。完全修飾の表名の形式は、catalog_name.schema_name.table_nameです。このフィールドの出力は、抑止できます。

操作のタイムスタンプ - 操作のタイムスタンプは、ソース・システムからのコミット・レコードのタイムスタンプです。トランザクション(バッチ処理以外のトランザクション)のすべての操作は、同じ操作タイムスタンプを持つ必要があります。このタイムスタンプは固定で、証跡ファイルを再生する場合、操作のタイムスタンプは同じです。このフィールドの出力は、抑止できます。

現在のタイムスタンプ - 現在のタイムスタンプは、区切りテキスト・フォーマッタが現在の操作レコードを処理した現在時刻のタイムスタンプです。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。このフィールドの出力は、抑止できます。

証跡のポジション - これは連結された連番で、ソース証跡ファイルからのRBA番号です。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。このフィールドの出力は、抑止できます。

トークン - トークンは、ソース証跡ファイルからのトークン・キー値ペアです。対応するハンドラのincludeTokens構成プロパティが明示的にtrueに設定されていない場合、区切りテキスト出力のこのフィールドの出力は表示されません。

13.2.2 フォーマットしたメッセージの例

次の各項では、区切りテキスト・フォーマッタのサンプル・メッセージを示します。メッセージを明確に表示するために、デフォルトのフィールド区切り文字がパイプ文字(|)に変更されています。

- 挿入メッセージの例

- 更新メッセージの例

- 削除メッセージの例

- 切捨てメッセージの例

13.2.2.1 挿入メッセージの例

I|GG.TCUSTORD|2013-06-02
22:14:36.000000|2015-09-18T13:23:01.612001|00000000000000001444|R=AADPkvAAEAAEqL2A
AA|WILL|1994-09-30:15:33:00|CAR|144|17520.00|3|100

13.2.2.2 更新メッセージの例

U|GG.TCUSTORD|2013-06-02
22:14:41.000000|2015-09-18T13:23:01.987000|00000000000000002891|R=AADPkvAAEAAEqLzA
AA|BILL|1995-12-31:15:00:00|CAR|765|14000.00|3|100

13.2.2.3 削除メッセージの例

D|GG.TCUSTORD|2013-06-02
22:14:41.000000|2015-09-18T13:23:02.000000|00000000000000004338|L=206080450,6=9.0.
80330,R=AADPkvAAEAAEqLzAAC|DAVE|1993-11-03:07:51:35|PLANE|600|||

13.2.2.4 切捨てメッセージの例

T|GG.TCUSTORD|2013-06-02
22:14:41.000000|2015-09-18T13:23:02.001000|00000000000000004515|R=AADPkvAAEAAEqL2A
AB|||||||

13.2.3 その他の考慮事項

フィールドと行区切り文字を選択するときは、十分に注意してください。データの内容に出現しない区切り文字を選択することが重要です。

空白と見なされる構成値の先行文字と後続文字は、Javaアダプタ構成機能によって削除されます。含めるまたは完全に空白と見なされる、フィールド区切り文字、行区切り文字、null値形式、および欠落値形式が必要な場合があります。この場合、空白を維持するJavaアダプタ構成ファイルに特殊な構文を使用する必要があります。空白と見なされる先行文字と後続文字が構成値に含まれる場合にその空白を維持するには、CDATA[]ラッパーで構成値をラップしてください。たとえば、\nという構成値はCDATA[\n]として構成します。

正規表現を使用して列値を検索してから、一致項目を指定した値に置き換えることができます。この検索および置換機能を区切りテキスト・フォーマッタとあわせて利用し、列値の内容とフィールドおよび行区切り文字間に不一致がないことを確認できます。詳細は、「正規表現を使用した検索と置換」を参照してください。

ビッグ・データ・アプリケーションは、格納方法がRDBMSと異なります。RDBMSで更新操作と削除操作を行うと、既存のデータが変更されます。一方、ビッグ・データ・アプリケーションでは、データは変更されず、どちらかといえば既存のデータに追加されます。したがって、特定の行の現在の状態は、HDFSシステムにおけるその行に対する既存の操作がすべて統合された結果になります。これにより、次の各項で説明するような特別なシナリオが発生します。

- 主キーの更新

- データの統合

13.2.3.1 主キーの更新

主キーを更新する操作では、ビッグ・データ統合について特別な考慮と計画が必要です。主キーの更新は、ソース・データベースの特定の行に対する1つ以上の主キーを変更する更新操作です。データはビッグ・データ・アプリケーションで追加されるだけなので、主キーの更新操作は、何も処理しない更新というより新しい挿入にも似ています。区切りテキスト・フォーマッタは、主キーの特別な処理に対応しており、ユーザーが設定を変更できます。設定変更が可能な動作は次のとおりです。

表13-1 構成可能な動作

値

説明

abend

デフォルトの動作では、主キーが更新される場合、区切りテキスト・フォーマッタは追加を実行します。

update

この構成では、主キー更新が他の更新操作と同じように処理されます。この構成は、ビッグ・データ・システムから行データを選択するとき、変更される主キーが選択基準として使用されないと間違いなくわかっている場合にのみ選択してください。

delete-insert

この構成を使用すると、主キーの更新は、操作前のイメージ・データを使用する削除と、操作後のイメージ・データを使用する挿入という特殊なケースとして処理されます。この構成は、ビッグ・データ・アプリケーションで主キー更新の影響をより正確にモデル化する場合があります。ただし、この構成を選択する場合は、ソース・データベースでのレプリケーションで完全なサプリメンタル・ロギングを有効にすることが重要です。完全なサプリメンタル・ロギングを有効にしない場合、削除操作は正常に処理されますが、挿入操作では、ビッグ・データ・アプリケーションで行データの完全な形式の列のデータがすべては含まれません。

13.2.3.2 データの統合

前述したように、ビッグ・データ・ファイリングでは、基礎になる格納情報にデータが追加されるだけです。分析ツールは通常、データ・ファイルを横断して、特定の行の操作をすべて1つの出力に統合するMapReduceプログラムを生成します。したがって、操作の順を指定することが重要です。区切りテキスト・フォーマッタには、このニーズに対応する多くのメタデータ・フィールドがあります。この要件を満たすには、操作のタイムスタンプでも十分です。が、共通のトランザクションを共有する場合などには特に、2つの更新操作が同じタイムスタンプになる場合もあります。操作タイムスタンプが等しい場合には、証跡のポジションが判別基準のフィールドになります。最後に、現在のタイムスタンプもビッグ・データにおける操作の順序指標として最適です。

13.2.4 出力形式サマリーのログ

INFOレベルのロギングが有効になっている場合、Java log4jのロギングでは、区切りテキスト出力形式のサマリーが記録されます。区切りフィールドのサマリーは、確認されたソース表ごとに記録され、その表に対する最初の操作が区切りテキスト・フォーマッタによって受け取られたときに発生します。区切りテキスト出力のフィールドに関するこうした詳細な説明は、初期設定を実行するときに便利かもしれません。メタデータ変更イベントの場合、区切りフィールドのサマリーは、メタデータ変更イベント後のその表に対する最初の操作時に再生成され、再度ログに記録されます。

13.2.5 区切りテキスト形式の構成

表13-2 構成オプション

プロパティ

オプション / 必須

有効な値

デフォルト

説明

gg.handler.name.format.includeColumnNames

オプション

true | false

false

列値に先行する区切りフィールドとして列名を書き込む出力を制御します。trueの場合、出力は次のようになります。

COL1_Name|COL1_Value|COL2_Name|COL2_Value

falseの場合、出力は次のようになります。

COL1_Value|I

gg.handler.name.format.includeOpTimestamp

オプション

true | false

true

値がfalseの場合、出力におけるソース証跡ファイルからの操作のタイムスタンプの出力を抑止します。

gg.handler.name.format.includeCurrentTimestamp

オプション

true | false

true

値がfalseの場合、出力における現在のタイムスタンプの出力を抑止します。

gg.handler.name.format.includeOpType

オプション

true | false

true

値がfalseの場合、出力における操作タイプの出力を抑止します。

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意のエンコーディング名または別名。

Oracle GoldenGateプロセスをホストしているマシンのネイティブのシステム・エンコーディング。

出力される区切りテキストのエンコーディングを決定します。

gg.handler.name.format.fieldDelimiter

オプション

任意の文字列

ASCII 001 (デフォルトのHive区切り文字)

区切りフィールド間に使用される区切り文字。この値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.lineDelimiter

オプション

任意の文字列

改行 (デフォルトのHive区切り文字)

レコード間で使用される区切り文字。この値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.includeTableName

オプション

true | false

true

falseを使用して出力される区切りデータで表名の出力を抑止します。

gg.handler.name.format.keyValueDelimiter

オプション

任意の文字列

=

マップにおけるキーと値の間の区切り文字を指定します。Key1=value1。トークンはマップされた値です。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.keyValuePairDelimiter

オプション

任意の文字列

,

マップにおけるキー/値ペアの間の区切り文字を指定します。Key1=Value1,Key2=Value2。トークンはマップされた値です。構成値は、CDATA[]ラッピングをサポートします。

gg.handler.name.format.pkUpdateHandling

オプション

abend | update | delete-insert

abend

フォーマッタが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとテキスト・フォーマッタで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します

- update - プロセスでこれが通常の更新として扱われることを示します

- delete-insert - プロセスでこれが削除および挿入として扱われることを示します。これが動作するためには、完全なサプリメンタル・ロギングが必要です。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.format.nullValueRepresentation

オプション

任意の文字列

NULL

NULL値の場合に区切り出力に含まれる内容を構成できます。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.missingValueRepresentation

オプション

任意の文字列

"" (値なし)

値がない場合に区切りテキスト出力に含まれる内容を構成できます。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.includePosition

オプション

true | false

true

ソース証跡ファイルからの操作ポジションの出力を抑止できます。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間のTが削除され、かわりにスペースが出力されます。

13.2.6 サンプル構成

Javaアダプタ構成ファイルからの区切りテキスト・フォーマッタの構成例を次に示します。

gg.handler.hdfs.format.includeColumnNames=false
gg.handler.hdfs.format.includeOpTimestamp=true
gg.handler.hdfs.format.includeCurrentTimestamp=true
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=UTF-8
gg.handler.hdfs.format.fieldDelimiter=CDATA[\u0001]
gg.handler.hdfs.format.lineDelimiter=CDATA[\n]
gg.handler.hdfs.format.includeTableName=true
gg.handler.hdfs.format.keyValueDelimiter=CDATA[=]
gg.handler.hdfs.format.kevValuePairDelimiter=CDATA[,]
gg.handler.hdfs.format.pkUpdateHandling=abend
gg.handler.hdfs.format.nullValueRepresentation=NULL
gg.handler.hdfs.format.missingValueRepresentation=CDATA[]
gg.handler.hdfs.format.includePosition=true
gg.handler.hdfs.format=delimitedtext

13.2.7 メタデータ変更イベント

Oracle GoldenGate for Big Dataでは、実行時にメタデータ変更イベントが処理されるようになりました。このとき、複製されるデータベースとアップストリームのレプリケーション・プロセスでメタデータ変更イベントが伝播されると想定されています。区切りテキスト・フォーマッタは、変更を反映して実行を続けるように出力形式を変更します。

メタデータの変更はダウンストリームのアプリケーションに影響する可能性があることに注意してください。区切りテキスト形式は、位置の関係を持つ固定数のフィールドで構成されます。ソース表での列の削除は、Oracle GoldenGateの実行時にシームレスに処理されますが、フィールドの合計数が変わることになるため、一部のフィールドの位置関係が変わる可能性があります。新しい列は最後に追加されると想定されるため、列(単数または複数)の追加は、メタデータ変更イベントの中でも影響が最も小さいと考えられます。メタデータ変更イベントを実行する前に、そのイベントの影響を考慮する必要があります。メタデータ変更イベントが頻繁になる場合は、もっと柔軟性が高く明快な形式、たとえばJSONやXMLなどを検討することをお薦めします。

13.3 JSONフォーマッタ

JavaScript Object Notation (JSON)フォーマッタは、行ベースのフォーマットまたは操作ベースのフォーマットで、ソース証跡ファイルから操作を出力できます。ソース証跡ファイルから、操作データをJSONオブジェクトとしてフォーマットします。挿入、更新、削除および切捨ての各操作は、個々のJSONメッセージとしてフォーマットされます。

トピック:

- 操作メタデータのフォーマットの詳細

- 操作データのフォーマットの詳細

- 行データのフォーマットの詳細

- JSONメッセージの例

- JSONスキーマ

- JSONフォーマッタの構成

- サンプル構成

- メタデータ変更イベント

- JSON主キーの更新

- Oracle Stream Analyticsの統合

13.3.1 操作メタデータのフォーマットの詳細

JSONフォーマッタによって生成されるJSONオブジェクトには、各メッセージの先頭に次のメタデータ・フィールドがあります。

表13-3 JSONのメタデータ

値

説明

table

完全修飾の表名を含みます。完全修飾の表名の形式は、CATALOG NAME.SCHEMA NAME.TABLE NAMEです。

op_type

証跡ファイルからのデータベース操作のタイプを示す操作タイプが含まれます。デフォルト値は、挿入を表すI、更新を表すU、削除を表すD、および切捨てを表すTです。

op_ts

操作タイムスタンプは、ソース証跡ファイルからの操作のタイムスタンプです。このタイムスタンプはソース証跡から取得されるため、固定です。証跡ファイルを再生すると、同じ操作に対して同じタイムスタンプになります。

current_ts

現在のタイムスタンプは、区切りテキスト・フォーマッタが現在の操作レコードを処理した現在時刻のタイムスタンプです。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

これは証跡ファイルのポジションで、連結された連番と、ソース証跡ファイルからのRBA番号を伴います。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。

primary_keys

ソース表の主キーの列名を保持する配列変数。primary_keysフィールドは、includePrimaryKeys構成プロパティがtrueに設定されている場合にのみJSONに含まれます。

tokens

includeTokensハンドラ構成プロパティがtrueに設定されている場合、tokensフィールドのみが出力に含まれます。

13.3.2 操作データのフォーマットの詳細

JSONメッセージには、最初に操作メタデータ・フィールドが含まれます。操作メタデータ・フィールドの後に操作データ・フィールドが続きます。このデータは、オブジェクトであるbeforeおよびafterメンバーによって表されます。これらのオブジェクトに含まれるメンバーは、キーが列名、値が列値です。

操作データは次のようにモデル化されます。

- 挿入 - 操作後のイメージ・データが含まれます。

- 更新 - 操作前と操作後の両方のイメージ・データが含まれます。

- 削除 - 操作前のイメージ・データが含まれます。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。JSONフォーマッタは、これらの列値状態を、作成されたJSONオブジェクトに次のようにマップします。

- 列値がある - 列値が出力されます。次の例では、メンバーSTATEに値があります。

"after":{        "CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",        "STATE":"CO"    }

- 列値がNULL - デフォルトの出力値はJSON NULLです。次の例では、メンバーSTATE の値がNULLです。

"after":{        "CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",        "STATE":null    }

- 列値がない - JSONには、列値がない場合の要素がありません。次の例では、メンバーSTATEの値がありません。

"after":{        "CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",    }

JSONフォーマッタのデフォルト設定では、ソース証跡ファイルのデータ型を、対応するJSONデータ型にマップします。JSONでサポートされるデータ型は少ないため、この機能はソース証跡ファイルの数値フィールドを、数値として型付けされるメンバーにマップする場合に、大きく影響します。このデータ型マッピングの設定を変更して、すべてのデータを文字列として扱うことができます。

13.3.3 行データのフォーマットの詳細

JSONメッセージには、最初に操作メタデータ・フィールドが含まれます。操作メタデータ・フィールドの後に操作データ・フィールドが続きます。行データのフォーマットの場合、これはJSONキー値ペアとしてのソース列名とソース列値です。このデータは、オブジェクトであるbeforeおよびafterメンバーによって表されます。これらのオブジェクトに含まれるメンバーは、キーが列名、値が列値です。

行データは次のようにモデル化されます。

- 挿入 - 操作後のイメージ・データが含まれます。

- 更新 - 操作後のイメージ・データが含まれます。

- 削除 - 操作前のイメージ・データが含まれます。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。JSONフォーマッタは、これらの列値状態を、作成されたJSONオブジェクトに次のようにマップします。

- 列値がある - 列値が出力されます。次の例では、メンバーSTATEに値があります。

"CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",        "STATE":"CO"    }

- 列値がNULL - デフォルトの出力値はJSON NULLです。次の例では、メンバーSTATE の値がNULLです。

"CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",        "STATE":null    }

- 列値がない - JSONには、列値がない場合の要素がありません。次の例では、メンバーSTATEの値がありません。

"CUST_CODE":"BILL",        "NAME":"BILL'S USED CARS",        "CITY":"DENVER",    }

JSONフォーマッタのデフォルト設定では、ソース証跡ファイルのデータ型を、対応するJSONデータ型にマップします。JSONでサポートされるデータ型は少ないため、この機能はソース証跡ファイルの数値フィールドを、数値として型付けされるメンバーにマップする場合に、大きく影響します。このデータ型マッピングの設定を変更して、すべてのデータを文字列として扱うことができます。

13.3.4 JSONメッセージの例

次のトピックでは、挿入、更新、削除および切捨て操作に対してJSONフォーマッタによって作成されるJSONメッセージの例を示します。

- 操作モデル化JSONメッセージの例

- フラット化操作モデル化JSONメッセージの例

- 行モデル化JSONメッセージの例

- 主キー出力JSONメッセージの例

13.3.4.1 操作モデル化JSONメッセージの例

挿入:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"I",
"op_ts":"2015-11-05 18:45:36.000000",
"current_ts":"2016-10-05T10:15:51.267000",
"pos":"00000000000000002928",
"after":{
"CUST_CODE":"WILL",
"ORDER_DATE":"1994-09-30:15:33:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":144,
"PRODUCT_PRICE":17520.00,
"PRODUCT_AMOUNT":3,
"TRANSACTION_ID":100
}
}

更新:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"U",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T10:15:51.310002",
"pos":"00000000000000004300",
"before":{
"CUST_CODE":"BILL",
"ORDER_DATE":"1995-12-31:15:00:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":765,
"PRODUCT_PRICE":15000.00,
"PRODUCT_AMOUNT":3,
"TRANSACTION_ID":100
},
"after":{
"CUST_CODE":"BILL",
"ORDER_DATE":"1995-12-31:15:00:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":765,
"PRODUCT_PRICE":14000.00
}
}

削除:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"D",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T10:15:51.312000",
"pos":"00000000000000005272",
"before":{
"CUST_CODE":"DAVE",
"ORDER_DATE":"1993-11-03:07:51:35",
"PRODUCT_CODE":"PLANE",
"ORDER_ID":600,
"PRODUCT_PRICE":135000.00,
"PRODUCT_AMOUNT":2,
"TRANSACTION_ID":200
}
}

切捨て:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"T",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T10:15:51.312001",
"pos":"00000000000000005480",
}

13.3.4.2 フラット化操作モデル化JSONメッセージの例

挿入:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"I",
"op_ts":"2015-11-05 18:45:36.000000",
"current_ts":"2016-10-05T10:34:47.956000",
"pos":"00000000000000002928",
"after.CUST_CODE":"WILL",
"after.ORDER_DATE":"1994-09-30:15:33:00",
"after.PRODUCT_CODE":"CAR",
"after.ORDER_ID":144,
"after.PRODUCT_PRICE":17520.00,
"after.PRODUCT_AMOUNT":3,
"after.TRANSACTION_ID":100
}

更新:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"U",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T10:34:48.192000",
"pos":"00000000000000004300",
"before.CUST_CODE":"BILL",
"before.ORDER_DATE":"1995-12-31:15:00:00",
"before.PRODUCT_CODE":"CAR",
"before.ORDER_ID":765,
"before.PRODUCT_PRICE":15000.00,
"before.PRODUCT_AMOUNT":3,
"before.TRANSACTION_ID":100,
"after.CUST_CODE":"BILL",
"after.ORDER_DATE":"1995-12-31:15:00:00",
"after.PRODUCT_CODE":"CAR",
"after.ORDER_ID":765,
"after.PRODUCT_PRICE":14000.00
}

削除:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"D",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T10:34:48.193000",
"pos":"00000000000000005272",
"before.CUST_CODE":"DAVE",
"before.ORDER_DATE":"1993-11-03:07:51:35",
"before.PRODUCT_CODE":"PLANE",
"before.ORDER_ID":600,
"before.PRODUCT_PRICE":135000.00,
"before.PRODUCT_AMOUNT":2,
"before.TRANSACTION_ID":200
}

切捨て:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"D",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T10:34:48.193001",
"pos":"00000000000000005480",
"before.CUST_CODE":"JANE",
"before.ORDER_DATE":"1995-11-11:13:52:00",
"before.PRODUCT_CODE":"PLANE",
"before.ORDER_ID":256,
"before.PRODUCT_PRICE":133300.00,
"before.PRODUCT_AMOUNT":1,
"before.TRANSACTION_ID":100
}

13.3.4.3 行モデル化JSONメッセージの例

挿入:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"I",
"op_ts":"2015-11-05 18:45:36.000000",
"current_ts":"2016-10-05T11:10:42.294000",
"pos":"00000000000000002928",
"CUST_CODE":"WILL",
"ORDER_DATE":"1994-09-30:15:33:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":144,
"PRODUCT_PRICE":17520.00,
"PRODUCT_AMOUNT":3,
"TRANSACTION_ID":100
}

更新:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"U",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T11:10:42.350005",
"pos":"00000000000000004300",
"CUST_CODE":"BILL",
"ORDER_DATE":"1995-12-31:15:00:00",
"PRODUCT_CODE":"CAR",
"ORDER_ID":765,
"PRODUCT_PRICE":14000.00
}

削除:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"D",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T11:10:42.351002",
"pos":"00000000000000005272",
"CUST_CODE":"DAVE",
"ORDER_DATE":"1993-11-03:07:51:35",
"PRODUCT_CODE":"PLANE",
"ORDER_ID":600,
"PRODUCT_PRICE":135000.00,
"PRODUCT_AMOUNT":2,
"TRANSACTION_ID":200
}

切捨て:

{
"table":"QASOURCE.TCUSTORD",
"op_type":"T",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-10-05T11:10:42.351003",
"pos":"00000000000000005480",
}

13.3.4.4 主キー出力JSONメッセージの例

{
"table":"DDL_OGGSRC.TCUSTMER",
"op_type":"I",
"op_ts":"2015-10-26 03:00:06.000000",
"current_ts":"2016-04-05T08:59:23.001000",
"pos":"00000000000000006605",
"primary_keys":[
"CUST_CODE"
],
"after":{
"CUST_CODE":"WILL",
"NAME":"BG SOFTWARE CO.",
"CITY":"SEATTLE",
"STATE":"WA"
}
}

13.3.5 JSONスキーマ

デフォルトでは、JSONスキーマは発生するソース表ごとに生成されます。JSONスキーマは、その表に対する操作が発生した時点でジャスト・イン・タイム方式で生成されます。JSONスキーマは、JSONオブジェクトの解析に必須ではありません。ただし、多くのJSONパーサーがJSONスキーマを使用して、JSONオブジェクトの検証解析を実行します。また、JSONスキーマを確認すると、出力されるJSONオブジェクトのレイアウトを把握できます。JSONスキーマは、デフォルトではGoldenGate_Home/dirdefディレクトリに作成され、次の命名規則に従って名前が付けられます。

FULLY_QUALIFIED_TABLE_NAME.schema.json

JSONスキーマの生成は抑止できます。

「操作モデル化JSONメッセージの例」でリストしたJSONオブジェクトのJSONスキーマの例を次に示します。

{
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"QASOURCE.TCUSTORD",
"description":"JSON schema for table QASOURCE.TCUSTORD",
"definitions":{
"row":{
"type":"object",
"properties":{
"CUST_CODE":{
"type":[
"string",
"null"
]
},
"ORDER_DATE":{
"type":[
"string",
"null"
]
},
"PRODUCT_CODE":{
"type":[
"string",
"null"
]
},
"ORDER_ID":{
"type":[
"number",
"null"
]
},
"PRODUCT_PRICE":{
"type":[
"number",
"null"
]
},
"PRODUCT_AMOUNT":{
"type":[
"integer",
"null"
]
},
"TRANSACTION_ID":{
"type":[
"number",
"null"
]
}
},
"additionalProperties":false
},
"tokens":{
"type":"object",
"description":"Token keys and values are free form key value pairs.",
"properties":{
},
"additionalProperties":true
}
},
"type":"object",
"properties":{
"table":{
"description":"The fully qualified table name",
"type":"string"
},
"op_type":{
"description":"The operation type",
"type":"string"
},
"op_ts":{
"description":"The operation timestamp",
"type":"string"
},
"current_ts":{
"description":"The current processing timestamp",
"type":"string"
},
"pos":{
"description":"The position of the operation in the data source",
"type":"string"
},
"primary_keys":{
"description":"Array of the primary key column names.",
"type":"array",
"items":{
"type":"string"
},
"minItems":0,
"uniqueItems":true
},
"tokens":{
"$ref":"#/definitions/tokens"
},
"before":{
"$ref":"#/definitions/row"
},
"after":{
"$ref":"#/definitions/row"
}
},
"required":[
"table",
"op_type",
"op_ts",
"current_ts",
"pos"
],
"additionalProperties":false
}

「フラット化操作モデル化JSONメッセージの例」でリストしたJSONオブジェクトのJSONスキーマの例を次に示します。

{
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"QASOURCE.TCUSTORD",
"description":"JSON schema for table QASOURCE.TCUSTORD",
"definitions":{
"tokens":{
"type":"object",
"description":"Token keys and values are free form key value pairs.",
"properties":{
},
"additionalProperties":true
}
},
"type":"object",
"properties":{
"table":{
"description":"The fully qualified table name",
"type":"string"
},
"op_type":{
"description":"The operation type",
"type":"string"
},
"op_ts":{
"description":"The operation timestamp",
"type":"string"
},
"current_ts":{
"description":"The current processing timestamp",
"type":"string"
},
"pos":{
"description":"The position of the operation in the data source",
"type":"string"
},
"primary_keys":{
"description":"Array of the primary key column names.",
"type":"array",
"items":{
"type":"string"
},
"minItems":0,
"uniqueItems":true
},
"tokens":{
"$ref":"#/definitions/tokens"
},
"before.CUST_CODE":{
"type":[
"string",
"null"
]
},
"before.ORDER_DATE":{
"type":[
"string",
"null"
]
},
"before.PRODUCT_CODE":{
"type":[
"string",
"null"
]
},
"before.ORDER_ID":{
"type":[
"number",
"null"
]
},
"before.PRODUCT_PRICE":{
"type":[
"number",
"null"
]
},
"before.PRODUCT_AMOUNT":{
"type":[
"integer",
"null"
]
},
"before.TRANSACTION_ID":{
"type":[
"number",
"null"
]
},
"after.CUST_CODE":{
"type":[
"string",
"null"
]
},
"after.ORDER_DATE":{
"type":[
"string",
"null"
]
},
"after.PRODUCT_CODE":{
"type":[
"string",
"null"
]
},
"after.ORDER_ID":{
"type":[
"number",
"null"
]
},
"after.PRODUCT_PRICE":{
"type":[
"number",
"null"
]
},
"after.PRODUCT_AMOUNT":{
"type":[
"integer",
"null"
]
},
"after.TRANSACTION_ID":{
"type":[
"number",
"null"
]
}
},
"required":[
"table",
"op_type",
"op_ts",
"current_ts",
"pos"
],
"additionalProperties":false
}

「行モデル化JSONメッセージの例」でリストしたJSONオブジェクトのJSONスキーマの例を次に示します。

{
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"QASOURCE.TCUSTORD",
"description":"JSON schema for table QASOURCE.TCUSTORD",
"definitions":{
"tokens":{
"type":"object",
"description":"Token keys and values are free form key value pairs.",
"properties":{
},
"additionalProperties":true
}
},
"type":"object",
"properties":{
"table":{
"description":"The fully qualified table name",
"type":"string"
},
"op_type":{
"description":"The operation type",
"type":"string"
},
"op_ts":{
"description":"The operation timestamp",
"type":"string"
},
"current_ts":{
"description":"The current processing timestamp",
"type":"string"
},
"pos":{
"description":"The position of the operation in the data source",
"type":"string"
},
"primary_keys":{
"description":"Array of the primary key column names.",
"type":"array",
"items":{
"type":"string"
},
"minItems":0,
"uniqueItems":true
},
"tokens":{
"$ref":"#/definitions/tokens"
},
"CUST_CODE":{
"type":[
"string",
"null"
]
},
"ORDER_DATE":{
"type":[
"string",
"null"
]
},
"PRODUCT_CODE":{
"type":[
"string",
"null"
]
},
"ORDER_ID":{
"type":[
"number",
"null"
]
},
"PRODUCT_PRICE":{
"type":[
"number",
"null"
]
},
"PRODUCT_AMOUNT":{
"type":[
"integer",
"null"
]
},
"TRANSACTION_ID":{
"type":[
"number",
"null"
]
}
},
"required":[
"table",
"op_type",
"op_ts",
"current_ts",
"pos"
],
"additionalProperties":false
}

13.3.6 JSONフォーマッタの構成

表13-4 JSONフォーマッタの構成プロパティ

プロパティ

必須/オプション

有効な値

デフォルト

説明

gg.handler.name.format

オプション

json | json_row

なし

生成されるJSON出力メッセージが操作モデル化か行モデル化かを制御します。操作モデル化の場合はjson、行モデル化の場合はjson_rowに設定します。

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.prettyPrint

オプション

true | false

false

JSONデータの出力形式を制御します。trueの場合は整形出力で、空白を人間が読みやすい形式です。falseの場合は整形出力にならず、簡潔ですが人間には読みにくくなります。

gg.handler.name.format.jsonDelimiter

オプション

任意の文字列

"" (値なし)

生成されるJSONの間にオプションの区切り文字を挿入できるため、データの連続ストリームから解析しやすくなります。構成値はCDATA[]ラッピングをサポートします。

gg.handler.name.format.generateSchema

オプション

true | false

true

生成されるJSONドキュメントに対して、JSONスキーマの生成を制御します。JSONスキーマは、表ベースで表に生成されます。JSONスキーマは、JSONドキュメントの解析に必須ではありません。ただし、JSONスキーマを使用すると、JSONドキュメントがどのように見えるかが示されるため、JSON解析の検証に利用することができます。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス

./dirdef

生成されるJSONスキーマの出力場所を制御します。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるJSONドキュメントの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するJSONの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるJSONとJSONスキーマで文字列として扱われます。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8 (JSONのデフォルト)

生成されるJSONスキーマおよびドキュメントの出力のエンコーディングを制御します。

gg.handler.name.format.versionSchemas

オプション

true | false

false

作成されたスキーマのバージョンを制御します。スキーマ・バージョン管理によって、新しいスキーマが作成されるたびにローカル・ファイル・システム上のスキーマ・ディレクトリにタイムスタンプ付きのスキーマが作成されます。trueに設定すると、スキーマ・バージョン管理が有効化されます。falseに設定すると、スキーマ・バージョン管理が無効化されます。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間の"T"が削除され、かわりに" "が出力されます。

gg.handler.name.format.includePrimaryKeys

オプション

true | false

false

この構成プロパティをtrueに設定すると、JSON出力にソース表から主キーの列名の配列が含まれます。

gg.handler.name.format.flatten

オプション

true | false

false

このプロパティは、操作フォーマット済JSON (gg.handler.name.format=json)にのみ適用できます。

ターゲット・エンティティへのフラット化JSONのフォーマット済データの送信を制御します。次のプロパティが機能するためには、これをtrueに設定する必要があります。

gg.handler.name.format.flattenDelimiter

オプション

JSONフィールド名の任意の有効な文字または文字列。

.

連結されたJSON要素名の区切り文字を制御します。空白を維持するCDATA[]ラッピングをサポートします。これが関係するのは、gg.handler.name.format.flattenがtrueに設定されている場合のみです。

gg.handler.name.format.beforeObjectName

オプション

JSONフィールド名の任意の有効な文字または文字列。

任意の有効なJSON属性名。

このプロパティは、操作フォーマット済JSON (gg.handler.name.format=json)にのみ適用できます。

変更前の列値を含むJSON要素の名前を変更できるかどうかを設定できます。

gg.handler.name.format.afterObjectName

オプション

JSONフィールド名の任意の有効な文字または文字列。

任意の有効なJSON属性名。

このプロパティは、操作フォーマット済JSON (gg.handler.name.format=json)にのみ適用できます。

変更後の列値を含むJSON要素の名前を変更できるかどうかを設定できます。

gg.handler.name.format.pkUpdateHandling

オプション

abend | update | delete-insert

abend

フォーマッタが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとJSONフォーマッタで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。このプロパティは、行モデル化JSON出力メッセージとあわせてのみ使用できます。

このプロパティは、行フォーマット済JSON (gg.handler.name.format=json_row)にのみ適用できます。

- abend - プロセスが異常終了することを示します。

- update - プロセスでこれが通常の更新として扱われることを示します。

- deleteまたはinsert - プロセスでこれが削除および挿入として扱われることを示します。これが動作するためには、完全なサプリメンタル・ロギングが必要です。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.format.omitNullValues

オプション

true | false

true

falseに設定すると、生成されるJSON出力に含まれるフィールドからnull値を持つフィールドが省略されます。

13.3.7 サンプル構成

Javaアダプタ構成ファイルからのJSONフォーマッタの構成例を次に示します。

gg.handler.hdfs.format=json
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.prettyPrint=false
gg.handler.hdfs.format.jsonDelimiter=CDATA[]
gg.handler.hdfs.format.generateSchema=true
gg.handler.hdfs.format.schemaDirectory=dirdef
gg.handler.hdfs.format.treatAllColumnsAsStrings=false

13.3.8 メタデータ変更イベント

メタデータ変更イベントは、実行時に処理されます。特定の表に対するメタデータ変更イベントが発生すると、その表に対して次の操作が発生した時点でJSONスキーマが再生成されます。生成されるJSONメッセージの内容は、メタデータの変更に応じて変わります。たとえば、メタデータの変更が列の追加の場合、メタデータ変更イベントの後で、作成されたJSONメッセージに新しい列が含まれます。

13.3.9 JSON主キーの更新

JSONフォーマッタが操作データをモデル化するために構成される場合、主キーの更新に特別な処理は不要で、他の更新と同じように扱われます。操作前と操作後の値には、主キーの変更が反映されます。

JSONフォーマッタが行データをモデル化するために構成される場合、主キーの更新は懸念事項です。デフォルトの動作は異常終了です。gg.handler.name.format.pkUpdateHandling構成プロパティを使用して行データをモデル化するためにJSONフォーマッタを構成すると、主キーの更新は、定期更新として、または削除および挿入操作として扱われます。削除および挿入操作として機能するように構成した場合、更新の操作前と操作後の完全なイメージ・データが含まれるようにレプリケーション・ストリームを構成することをお薦めします。そうしないと、主キーの更新で生成される挿入操作によって、変更されなかったフィールドのデータが欠落します。

13.3.10 Oracle Stream Analyticsの統合

操作モデル化JSONメッセージをKafkaハンドラに送信すると、Oracle GoldenGate for Big DataをOracle Stream Analytics (OSA)と統合できます。これが機能するのは、JSONフォーマッタが操作モデル化JSONメッセージを出力するように構成されている場合のみです。

OSAにはフラット化JSONオブジェクトが必要であるため、フラット化JSONを生成するための新機能がJSONフォーマッタに追加されました。JSONフォーマッタのプロパティgg.handler.name.format.flatten=falseをtrueに設定すると、この機能を使用できます。デフォルトはfalseです。フラット化JSONファイルの例を次に示します。

{
"table":"QASOURCE.TCUSTMER",
"op_type":"U",
"op_ts":"2015-11-05 18:45:39.000000",
"current_ts":"2016-06-22T13:38:45.335001",
"pos":"00000000000000005100",
"before.CUST_CODE":"ANN",
"before.NAME":"ANN'S BOATS",
"before.CITY":"SEATTLE",
"before.STATE":"WA",
"after.CUST_CODE":"ANN",
"after.CITY":"NEW YORK",
"after.STATE":"NY"
}

13.4 Avroフォーマッタ

Apache Avroは、オープン・ソースのデータ・シリアライズ/デシリアライズ・フレームワークの1つです。シリアライズされたデータの柔軟性と簡潔さ、シリアライズ/デシリアライズのパフォーマンスの高さで知られています。Apache Avroは、ビッグ・データ・アプリケーションでよく使われています。

トピック:

- Avro行フォーマッタ

- Avro操作フォーマッタ

- Avroオブジェクト・コンテナ・ファイル・フォーマッタ

13.4.1 Avro行フォーマッタ

Avro行フォーマッタは、ソース証跡ファイルの操作データを、Avroバイナリ配列形式のメッセージにフォーマットします。挿入、更新、削除および切捨ての各操作は、個々のAvroメッセージとしてフォーマットされます。ソース証跡ファイルには、操作データの操作前と操作後のイメージが含まれます。Avro行フォーマッタは、その操作前と操作後のイメージ・データを取得して、データをAvroバイナリ形式の操作データにフォーマットします。

Avro行フォーマッタは、ソース証跡ファイルの操作データから行データを表す形式に操作をフォーマットします。この形式は、Avroメッセージがデータ変更操作をモデル化するため、Avro操作フォーマッタの出力より簡潔です。

Avro行フォーマッタは、AvroデータをHDFSにストリーミングするときに適した選択肢です。Hiveは、HDFSのデータ・ファイルをAvro形式でサポートします。

この項の内容は次のとおりです。

- 操作メタデータのフォーマットの詳細

- 操作データのフォーマットの詳細

- Avro行メッセージの例

- Avroスキーマ

- Avro行の構成

- サンプル構成

- メタデータ変更イベント

- 特別な考慮事項

13.4.1.1 操作メタデータのフォーマットの詳細

Avro行フォーマッタによって生成されるAvroメッセージには、メッセージの先頭に次の7つのメタデータ・フィールドがあります。

表13-5 Avroフォーマッタのメタデータ

値

説明

table

完全修飾の表名。完全修飾の表名の形式は、CATALOG_NAME.SCHEMA_NAME.TABLE_NAMEです。

op_type

証跡ファイルからのデータベース操作のタイプを示す操作タイプ。デフォルト値は、挿入を表すI、更新を表すU、削除を表すD、および切捨てを表すTです。

op_ts

操作タイムスタンプは、ソース証跡ファイルからの操作のタイムスタンプです。このタイムスタンプはソース証跡から取得されるため、固定です。証跡ファイルを再生すると、同じ操作に対して同じタイムスタンプになります。

current_ts

現在のタイムスタンプは、フォーマッタが現在の操作レコードを処理した現在時刻です。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

証跡ファイルのポジションは、連結された連番と、ソース証跡ファイルからのRBA番号を伴います。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。

primary_keys

ソース表の主キーの列名を保持する配列変数。

tokens

ソース証跡ファイルからのトークン・キー値ペアを保持するマップ変数。

13.4.1.2 操作データのフォーマットの詳細

操作メタデータに続くデータは、操作データです。このデータは、列名で識別される個々のフィールドとして表されます。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。Avro属性はこのうちの2つ、列に値があるか、列値がNULLかのみをサポートします。列値がない状態は、NULL値と同じとして扱われます。Avro行フォーマッタを使用する際には、ソース証跡ファイルのすべての列に対する完全なイメージ・データを提供するために、Oracle GoldenGateの取得プロセスを構成することをお薦めします。

Avro行フォーマッタのデフォルト設定では、ソース証跡ファイルのデータ型を、対応するAvroデータ型にマップします。Avroでサポートされるデータ型は限られているため、ソース列はAvroのLONG、DOUBLE、FLOAT、BINARYまたはSTRINGデータ型にマップします。このデータ型マッピングの設定を変更して、すべてのデータを文字列として扱うことができます。

13.4.1.3 Avro行メッセージの例

Avroメッセージはバイナリなので、人間が読める形式ではありません。次のトピックでは、メッセージの例を示します。これらの例には、JSON形式のメッセージが示されます。

- 挿入メッセージの例

- 更新メッセージの例

- 削除メッセージの例

- 切捨てメッセージの例

13.4.1.3.1 挿入メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "I",
"op_ts": "2013-06-02 22:14:36.000000",
"current_ts": "2015-09-18T10:13:11.172000",
"pos": "00000000000000001444",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"],
"tokens": {"R": "AADPkvAAEAAEqL2AAA"},
"CUST_CODE": "WILL",
"ORDER_DATE": "1994-09-30:15:33:00",
"PRODUCT_CODE": "CAR",
"ORDER_ID": "144",
"PRODUCT_PRICE": 17520.0,
"PRODUCT_AMOUNT": 3.0,
"TRANSACTION_ID": "100"}

13.4.1.3.2 更新メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "U",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:13:11.492000",
"pos": "00000000000000002891",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqLzAAA"},
"CUST_CODE": "BILL",
"ORDER_DATE": "1995-12-31:15:00:00",
"PRODUCT_CODE": "CAR",
"ORDER_ID": "765",
"PRODUCT_PRICE": 14000.0,
"PRODUCT_AMOUNT": 3.0,
"TRANSACTION_ID": "100"}

13.4.1.3.3 削除メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "D",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:13:11.512000",
"pos": "00000000000000004338",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"L": "206080450", "6": "9.0.80330", "R": "AADPkvAAEAAEqLzAAC"}, "CUST_CODE":
"DAVE",
"ORDER_DATE": "1993-11-03:07:51:35",
"PRODUCT_CODE": "PLANE",
"ORDER_ID": "600",
"PRODUCT_PRICE": null,
"PRODUCT_AMOUNT": null,
"TRANSACTION_ID": null}

13.4.1.3.4 切捨てメッセージの例

{"table": "GG.TCUSTORD",
"op_type": "T",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:13:11.514000",
"pos": "00000000000000004515",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqL2AAB"},
"CUST_CODE": null,
"ORDER_DATE": null,
"PRODUCT_CODE": null,
"ORDER_ID": null,
"PRODUCT_PRICE": null,
"PRODUCT_AMOUNT": null,
"TRANSACTION_ID": null}

13.4.1.4 Avroスキーマ

Avroは、スキーマの表現にJSONを使用します。Avroスキーマは、生成されるAvroメッセージの形式を定義し、Avroメッセージのシリアライズとデシリアライズに必要です。スキーマは、最初に表に対する操作が発生した時点でジャスト・イン・タイム方式で生成されます。生成されるAvroスキーマは表定義に固有であり、処理される操作で発生する表ごとに個別のAvroスキーマが生成されます。デフォルトでは、AvroスキーマはGoldenGate_Home/dirdefディレクトリに書き込まれますが、書き込む場所は設定を変更できます。Avroスキーマのファイル名は、Fully_Qualified_Table_Name.avscという命名規則に従います。

前述の参照例に示したAvro行フォーマッタのAvroスキーマは、次のとおりです。

{
"type" : "record",
"name" : "TCUSTORD",
"namespace" : "GG",
"fields" : [ {
"name" : "table",
"type" : "string"
}, {
"name" : "op_type",
"type" : "string"
}, {
"name" : "op_ts",
"type" : "string"
}, {
"name" : "current_ts",
"type" : "string"
}, {
"name" : "pos",
"type" : "string"
}, {
"name" : "primary_keys",
"type" : {
"type" : "array",
"items" : "string"
}
}, {
"name" : "tokens",
"type" : {
"type" : "map",
"values" : "string"
},
"default" : { }
}, {
"name" : "CUST_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_DATE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "PRODUCT_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_ID",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "PRODUCT_PRICE",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "PRODUCT_AMOUNT",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "TRANSACTION_ID",
"type" : [ "null", "string" ],
"default" : null
} ]
}

13.4.1.5 Avro行の構成

表13-6 Avro行の構成オプション

プロパティ

オプション / 必須

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8 (JSONのデフォルト)

JSONとして生成されるAvroスキーマの出力のエンコーディングを制御します。JSONのデフォルトはUTF-8です。Avroメッセージはバイナリで、独自の内部形式でエンコーディングをサポートしています。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるAvroメッセージの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するAVROの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるAvroメッセージとスキーマで文字列として扱われます。

gg.handler.name.format.pkUpdateHandlingformat.pkUpdateHandling

オプション

abend | update | delete-insert

abend

フォーマッタが、主キーを変更する更新操作をどのように処理するかに関する構成を指定します。主キーを操作するとAvro行フォーマッタで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します。

- update - プロセスでこれが通常の更新として扱われることを示します。

- deleteまたはinsert - プロセスでこれが削除および挿入として扱われることを示します。これが動作するためには、完全なサプリメンタル・ロギングが必要です。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.format.lineDelimiter

オプション

任意の文字列

値なし

オプションで、ユーザーが各Avroメッセージの後に区切り文字を挿入できます。これはベスト・プラクティスとは言えませんが、ユースケースによっては、ユーザーが他のストリームを解析し、個々のAvroメッセージをストリームから抽出したい場合があるかもしれません。このプロパティを使用すると、そうしたオプションをユーザーが実行できます。Avroメッセージには出現しそうにない一意の区切り文字を選択してください。このプロパティはCDATA[]ラッピングをサポートします。

gg.handler.name.format.versionSchemas

オプション

true|false

false

作成されるAvroスキーマは常に、fully_qualified_table_name.avscという規則に従います。このプロパティをtrueに設定すると、fully_qualified_table_name_current_timestamp.avscという名前のスキーマ・ディレクトリに追加のAvroスキーマが作成されます。追加のAvroスキーマは、破棄も削除もされないため、スキーマ展開の履歴になります。

gg.handler.name.format.wrapMessageInGenericAvroMessage

オプション

true|false

false

汎用のAvroラッパー・メッセージで、ソース証跡ファイルからの操作に対してAvroメッセージをラップする機能を提供します。詳細は、「汎用のラッパー機能」を参照してください。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス。

./dirdef

生成されるAvroスキーマの出力場所を制御します。

gg.handler.name.schemaFilePath=

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

./dirdef

スキーマを出力するHDFS内のファイル・ディレクトリに対する構成プロパティを制御します。メタデータ変更イベントにより、関連付けられた表の次の操作が実行されるとスキーマは上書きされます。スキーマは、ローカル・ファイル・システムcatalog.schema.table.avscに書き込まれるスキーマと同じ命名規則に従います。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間のTが削除され、かわりにスペースが出力されます。

13.4.1.6 サンプル構成

Javaアダプタ・プロパティ・ファイルからのAvro行フォーマッタの構成例を次に示します。

gg.handler.hdfs.format=avro_row
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=UTF-8
gg.handler.hdfs.format.pkUpdateHandling=abend
gg.handler.hafs.format.wrapMessageInGenericAvroMessage=false

13.4.1.7 メタデータ変更イベント

Avro行フォーマッタは、メタデータ変更イベントが発生したときにアクションを実行できます。このとき、複製されるデータベースとアップストリームのOracle GoldenGateレプリケーション・プロセスでメタデータ変更イベントが伝播されると想定されています。Avroメッセージは対応するスキーマに緊密に依存しているため、Avroを使用してフォーマットするときには特にメタデータ変更イベントが重要です。

メタデータ変更イベントは、Avro行フォーマッタによってシームレスに処理され、更新されたAvroスキーマは、メタデータ変更イベント後にその表の操作が最初に発生したときに生成されます。メタデータ変更イベントの影響を理解して、ダウンストリーム・ターゲットを新しいAvroスキーマに変更する必要があります。AvroメッセージがAvroスキーマに密に依存している場合、互換性の問題が生じることがあります。スキーマ変更の前に生成されるAvroメッセージを、新たに生成されたAvroスキーマでデシリアライズすることはできません。

逆に、スキーマ変更の後で生成されるAvroメッセージを、前に生成されたAvroスキーマでデシリアライズすることもできません。ベスト・プラクティスとして、メッセージの生成に使用されたのと同じバージョンのAvroスキーマを使用するようにしてください。詳細は、Apache Avroのドキュメントを参照してください。

13.4.1.8 特別な考慮事項

この項では、次の特別な考慮事項について説明します。

- トラブルシューティング

- 主キーの更新

- 汎用のラッパー機能

13.4.1.8.1 トラブルシューティング

Avroはバイナリ形式なので、人間が読める形式ではありません。Avroメッセージはバイナリ形式なので、問題が発生した場合にデバッグが容易ではないため、Avro行フォーマッタではこの問題を軽減するための特別な機能が用意されています。log4j Javaロギング・レベルをTRACEに設定すると、作成されるAvroメッセージがデシリアライズされ、ログ・ファイルにJSONオブジェクトとして示されます。これで、作成されたAvroメッセージの構造と内容を見られるようになります。TRACEは、パフォーマンスに大きくマイナスの影響を及ぼすため、本番環境では有効にしないでください。または、内容をトラブルシューティングするために、人間が読める内容で生成するフォーマッタに切り替えることも検討できます。XMLまたはJSONフォーマッタはどちらも、トラブルシューティングしやすいように人間が読める形式で内容を生成します。

13.4.1.8.2 主キーの更新

主キーを更新する操作では、ビッグ・データ統合について特別な考慮と計画が必要です。主キーの更新は、ソース・データベースの特定の行に対する1つ以上の主キーを変更する更新操作です。データはビッグ・データ・アプリケーションで追加されるだけなので、主キーの更新操作は、何も処理しない更新というより新しい挿入にも似ています。Avro行フォーマッタは、主キーの特別な処理に対応しており、次のようにユーザーが設定を変更できます。

表13-7 構成可能な動作

値

説明

abend

デフォルトの動作では、区切りテキスト・フォーマッタが主キーが更新されて異常終了します。

update

この構成では、主キー更新が他の更新操作と同じように処理されます。この構成は、ビッグ・データ・システムから行データを選択するとき、変更される主キーが選択基準として使用されないと間違いなくわかっている場合にのみ選択してください。

delete-insert

この構成を使用すると、主キーの更新は、操作前のイメージ・データを使用する削除と、操作後のイメージ・データを使用する挿入という特殊なケースとして処理されます。この構成は、ビッグ・データ・アプリケーションで主キー更新の影響をより正確にモデル化する場合があります。ただし、この構成を選択する場合は、ソース・データベースでのレプリケーションで完全なサプリメンタル・ロギングを有効にすることが重要です。完全なサプリメンタル・ロギングを有効にしない場合、削除操作は正常に処理されますが、挿入操作では、ビッグ・データ・アプリケーションで行データの完全な形式の列のデータがすべては含まれません。

13.4.1.8.3 汎用のラッパー機能

Avroメッセージは自己記述型ではありません。つまりメッセージの受信者は、メッセージに対応するスキーマのことを知っていないと、メッセージをデシリアライズできません。Avroメッセージはバイナリであり、メッセージの内容を調べてメッセージ・タイプを確定する一貫した、または信頼できる方法はありません。したがって、Kafkaのような1つのデータ・ストリームにメッセージをインタレースするときに、Avroは特に厄介です。

Avroフォーマッタには、汎用のAvroメッセージでAvroメッセージをラップする特別な機能があります。この機能を有効にするには、次の構成プロパティを設定します。

gg.handler.name.format.wrapMessageInGenericAvroMessage=true

汎用のメッセージとは、出力されるAvroメッセージすべてに共通するAvroペイロード・メッセージをラップするAvroメッセージです。汎用メッセージのスキーマは、generic_wrapper.avscという名前で、出力スキーマ・ディレクトリに書き込まれます。このメッセージには、次の3つのフィールドがあります。

- table_name - 完全修飾のソース表名。

- schema_fingerprint - ラップされたメッセージのAvroスキーマのフィンガープリント。フィンガープリントは、Avro SchemaNormalization.parsingFingerprint64(schema)コールを使用して生成されます。

- payload - ラップされるAvroメッセージ。

Avroフォーマッタの汎用ラッパー・スキーマは、次のとおりです。

{
"type" : "record",
"name" : "generic_wrapper",
"namespace" : "oracle.goldengate",
"fields" : [ {
"name" : "table_name",
"type" : "string"
}, {
"name" : "schema_fingerprint",
"type" : "long"
}, {
"name" : "payload",
"type" : "bytes"
} ]
}

13.4.2 Avro操作フォーマッタ

Avro操作フォーマッタは、ソース証跡ファイルの操作データを、Avroバイナリ配列形式のメッセージにフォーマットします。挿入、更新、削除および切捨ての各操作は、個々のAvroメッセージとしてフォーマットされます。ソース証跡ファイルには、操作データの操作前と操作後のイメージが含まれます。Avro操作フォーマッタは、その操作前と操作後のイメージ・データを取得して、データをAvroバイナリ形式の操作データにフォーマットします。

Avro操作フォーマッタは、ソース証跡ファイルの操作データから操作データを表す形式に操作をフォーマットします。この形式は、Avroメッセージが行データをモデル化するため、Avro行フォーマッタの出力より詳細です。

この項の内容は次のとおりです。

- 操作メタデータのフォーマットの詳細

- 操作データのフォーマットの詳細

- Avro操作メッセージの例

- Avroスキーマ

- Avro操作フォーマッタの構成

- サンプル構成

- メタデータ変更イベント

- 特別な考慮事項

13.4.2.1 操作メタデータのフォーマットの詳細

Avro操作フォーマッタによって生成されるAvroメッセージには、メッセージの先頭に次のメタデータ・フィールドがあります。

表13-8 Avroメッセージとそのメタデータ

フィールド

説明

table

CATALOG_NAME.SCHEMA NAME.TABLE NAME完全修飾の表名。完全修飾の表名の形式は、次のとおりです。

op_type

証跡ファイルからのデータベース操作のタイプを示す操作タイプ。デフォルト値は、挿入を表すI、更新を表すU、削除を表すD、および切捨てを表すTです。

op_ts

操作タイムスタンプは、ソース証跡ファイルからの操作のタイムスタンプです。このタイムスタンプはソース証跡から取得されるため、固定です。証跡ファイルを再生すると、同じ操作に対して同じタイムスタンプになります。

current_ts

現在のタイムスタンプは、フォーマッタが現在の操作レコードを処理した現在時刻です。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

証跡ファイルのポジションは、連結された連番と、ソース証跡ファイルからのRBA番号を伴います。証跡のポジションは、操作からソース証跡ファイルをたどるトレーサビリティ情報になります。この連番は、ソース証跡ファイルの番号です。RBA番号は、証跡ファイルのオフセットです。

primary_keys

ソース表の主キーの列名を保持する配列変数。

tokens

ソース証跡ファイルからのトークン・キー値ペアを保持するマップ変数。

13.4.2.2 操作データのフォーマットの詳細

この操作データは、列名で識別される個々のフィールドとして表されます。

ソース証跡ファイルからの操作の列値は、列に値がある、列値がNULLも、列値がないの3つの状態のいずれかです。Avro属性はこのうちの2つ、列に値があるか、列値がNULLかのみをサポートします。Avro操作フォーマッタには、列値がない場合を示すために、列ごとに追加のブール型フィールドがあります。このブール型フィールドは、COLUMN_NAME_isMissingという名前です。COLUMN_NAMEフィールドの組合せを使用すると、3つすべての状態を定義できます。

- 状態1: 列に値がある
COLUMN_NAMEフィールドに値がある

COLUMN_NAME_isMissingフィールドがfalse

- 状態2: 列値がNULL
COLUMN_NAMEフィールドの値がNULL

COLUMN_NAME_isMissingフィールドがfalse

- 状態3: 列値がない
COLUMN_NAMEフィールドの値がNULL

COLUMN_NAME_isMissingフィールドがtrue

Avro行フォーマッタのデフォルト設定では、ソース証跡ファイルのデータ型を、対応するAvroデータ型にマップします。Avroでサポートされるデータ型は少ないため、この機能はソース証跡ファイルの数値フィールドを、数値として型付けされるメンバーにマップする場合に、大きく影響します。このデータ型マッピングの設定を変更して、すべてのデータを文字列として扱うことができます。

13.4.2.3 Avro操作メッセージの例

Avroメッセージはバイナリなので、人間が読める形式ではありません。次のトピックでは、メッセージの例を示します。JSON形式のメッセージが示されます。

- 挿入メッセージの例

- 更新メッセージの例

- 削除メッセージの例

- 切捨てメッセージの例

13.4.2.3.1 挿入メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "I",
"op_ts": "2013-06-02 22:14:36.000000",
"current_ts": "2015-09-18T10:17:49.570000",
"pos": "00000000000000001444",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqL2AAA"},
"before": null,
"after": {
"CUST_CODE": "WILL",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1994-09-30:15:33:00",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "CAR",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "144", "ORDER_ID_isMissing": false,
"PRODUCT_PRICE": 17520.0,
"PRODUCT_PRICE_isMissing": false,
"PRODUCT_AMOUNT": 3.0, "PRODUCT_AMOUNT_isMissing": false,
"TRANSACTION_ID": "100",
"TRANSACTION_ID_isMissing": false}}

13.4.2.3.2 更新メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "U",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:17:49.880000",
"pos": "00000000000000002891",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqLzAAA"},
"before": {
"CUST_CODE": "BILL",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1995-12-31:15:00:00",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "CAR",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "765",
"ORDER_ID_isMissing": false,
"PRODUCT_PRICE": 15000.0,
"PRODUCT_PRICE_isMissing": false,
"PRODUCT_AMOUNT": 3.0,
"PRODUCT_AMOUNT_isMissing": false,
"TRANSACTION_ID": "100",
"TRANSACTION_ID_isMissing": false},
"after": {
"CUST_CODE": "BILL",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1995-12-31:15:00:00",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "CAR",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "765",
"ORDER_ID_isMissing": false,
"PRODUCT_PRICE": 14000.0,
"PRODUCT_PRICE_isMissing": false,
"PRODUCT_AMOUNT": 3.0,
"PRODUCT_AMOUNT_isMissing": false,
"TRANSACTION_ID": "100",
"TRANSACTION_ID_isMissing": false}}

13.4.2.3.3 削除メッセージの例

{"table": "GG.TCUSTORD",
"op_type": "D",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:17:49.899000",
"pos": "00000000000000004338",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"L": "206080450", "6": "9.0.80330", "R": "AADPkvAAEAAEqLzAAC"}, "before": {
"CUST_CODE": "DAVE",
"CUST_CODE_isMissing": false,
"ORDER_DATE": "1993-11-03:07:51:35",
"ORDER_DATE_isMissing": false,
"PRODUCT_CODE": "PLANE",
"PRODUCT_CODE_isMissing": false,
"ORDER_ID": "600",
"ORDER_ID_isMissing": false,
"PRODUCT_PRICE": null,
"PRODUCT_PRICE_isMissing": true,
"PRODUCT_AMOUNT": null,
"PRODUCT_AMOUNT_isMissing": true,
"TRANSACTION_ID": null,
"TRANSACTION_ID_isMissing": true},
"after": null}

13.4.2.3.4 切捨てメッセージの例

{"table": "GG.TCUSTORD",
"op_type": "T",
"op_ts": "2013-06-02 22:14:41.000000",
"current_ts": "2015-09-18T10:17:49.900000",
"pos": "00000000000000004515",
"primary_keys": ["CUST_CODE", "ORDER_DATE", "PRODUCT_CODE", "ORDER_ID"], "tokens":
{"R": "AADPkvAAEAAEqL2AAB"},
"before": null,
"after": null}

13.4.2.4 Avroスキーマ

AvroスキーマはJSONとして表されます。Avroスキーマは、生成されるAvroメッセージの形式を定義し、Avroメッセージのシリアライズとデシリアライズに必要です。Avroスキーマは、最初に表に対する操作が発生した時点でジャスト・イン・タイム方式で生成されます。Avroスキーマは表定義に固有であり、処理される操作で発生する表ごとに個別のAvroスキーマが生成されます。デフォルトでは、AvroスキーマはGoldenGate_Home/dirdef ディレクトリに書き込まれますが、書き込む場所は設定を変更できます。Avroスキーマのファイル名は、Fully_Qualified_Table_Name.avscという命名規則に従いますが、書き込む場所は設定変更が可能です。Avroスキーマのファイル名は、次の命名規則に従います。

前の項のサンプルに示したAvro操作フォーマッタのAvroスキーマのサンプルは、次のとおりです。

{
"type" : "record",
"name" : "TCUSTORD",
"namespace" : "GG",
"fields" : [ {
"name" : "table",
"type" : "string"
}, {
"name" : "op_type",
"type" : "string"
}, {
"name" : "op_ts",
"type" : "string"
}, {
"name" : "current_ts",
"type" : "string"
}, {
"name" : "pos",
"type" : "string"
}, {
"name" : "primary_keys",
"type" : {
"type" : "array",
"items" : "string"
}
}, {
"name" : "tokens",
"type" : {
"type" : "map",
"values" : "string"
},
"default" : { }
}, {
"name" : "before",
"type" : [ "null", {
"type" : "record",
"name" : "columns",
"fields" : [ {
"name" : "CUST_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "CUST_CODE_isMissing",
"type" : "boolean"
}, {
"name" : "ORDER_DATE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_DATE_isMissing",
"type" : "boolean"
}, {
"name" : "PRODUCT_CODE",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "PRODUCT_CODE_isMissing",
"type" : "boolean"
}, {
"name" : "ORDER_ID",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "ORDER_ID_isMissing",
"type" : "boolean"
}, {
"name" : "PRODUCT_PRICE",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "PRODUCT_PRICE_isMissing",
"type" : "boolean"
}, {
"name" : "PRODUCT_AMOUNT",
"type" : [ "null", "double" ],
"default" : null
}, {
"name" : "PRODUCT_AMOUNT_isMissing",
"type" : "boolean"
}, {
"name" : "TRANSACTION_ID",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "TRANSACTION_ID_isMissing",
"type" : "boolean"
} ]
} ],
"default" : null
}, {
"name" : "after",
"type" : [ "null", "columns" ],
"default" : null
} ]
}

13.4.2.5 Avro操作フォーマッタの構成

表13-9 構成オプション

プロパティ

オプションY/N

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名

UTF-8 (JSONのデフォルト)

JSONとして生成されるAvroスキーマの出力のエンコーディングを制御します。JSONのデフォルトはUTF-8です。Avroメッセージはバイナリで、独自の内部形式でエンコーディングをサポートしています。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるAvroメッセージの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するAVROの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるAvroメッセージとスキーマで文字列として扱われます。

gg.handler.name.format.lineDelimiter

オプション

任意の文字列

値なし

オプションで、ユーザーが各Avroメッセージの後に区切り文字を挿入できます。これはベスト・プラクティスとは言えませんが、ユースケースによっては、ユーザーが他のストリームを解析し、個々のAvroメッセージをストリームから抽出したい場合があるかもしれません。このプロパティを使用すると、そうしたオプションをユーザーが実行できます。Avroメッセージには出現しそうにない一意の区切り文字を選択してください。このプロパティはCDATA[]ラッピングをサポートします。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス。

./dirdef

生成されるAvroスキーマの出力場所を制御します。

gg.handler.name.format.wrapMessageInGenericAvroMessage

オプション

true|false

false

汎用のAvroラッパー・メッセージで、ソース証跡ファイルからの操作に対してAvroメッセージをラップする機能を提供します。詳細は、「汎用のラッパー機能」を参照してください。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプの形式を制御します。デフォルトはISO 8601形式です。falseに設定すると、現在のタイムスタンプの日付と時刻の間のTが削除され、かわりにスペースが出力されます。

13.4.2.6 サンプル構成

Javaアダプタproperg.handlertiesファイルからのAvro操作フォーマッタの構成例を次に示します。

gg.hdfs.format=avro_op
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=UTF-8
gg.handler.hdfs.format.wrapMessageInGenericAvroMessage=false

13.4.2.7 メタデータ変更イベント

Avro操作フォーマッタは、メタデータ変更イベントとともにアクションを実行できます。このとき、複製されるデータベースとアップストリームのOracle GoldenGateレプリケーション・プロセスでメタデータ変更イベントが伝播されると想定されています。Avroメッセージは対応するスキーマに緊密に依存しているため、Avroを使用してフォーマットするときには特にメタデータ変更イベントが重要です。メタデータ変更イベントは、Avro操作フォーマッタによってシームレスに処理され、更新されたAvroスキーマは、メタデータ変更イベント後にその表の操作が最初に発生したときに生成されます。メタデータ変更イベントの影響を理解して、ダウンストリーム・ターゲットを新しいAvroスキーマに変更する必要があります。AvroメッセージがAvroスキーマに密に依存している場合、互換性の問題が生じることがあります。スキーマ変更の前に生成されるAvroメッセージを、新たに生成されたAvroスキーマでデシリアライズすることはできません。逆に、スキーマ変更の後で生成されるAvroメッセージを、前に生成されたAvroスキーマでデシリアライズすることもできません。ベスト・プラクティスとして、メッセージの生成に使用されたのと同じバージョンのAvroスキーマを使用するようにしてください。詳細は、Apache Avroのドキュメントを参照してください。

13.4.2.8 特別な考慮事項

この項では、次の特別な考慮事項について説明します。

- トラブルシューティング

- 主キーの更新

- 汎用のラッパー・メッセージ

13.4.2.8.1 トラブルシューティング

Avroはバイナリ形式なので、人間が読める形式ではありません。Avroメッセージはバイナリ形式なので、問題が発生した場合にデバッグが容易ではありません。log4j Javaロギング・レベルをTRACEに設定すると、作成されるAvroメッセージがデシリアライズされ、ログ・ファイルにJSONオブジェクトとして示されます。これで、作成されたAvroメッセージの構造と内容を見られるようになります。TRACEは、パフォーマンスに大きい影響を及ぼすため、本番環境では有効にしないでください。

13.4.2.8.2 主キーの更新

Avro操作フォーマッタは、更新操作の操作前と操作後の完全なイメージを使用してメッセージを作成します。したがって、Avro操作フォーマッタでは、主キーの更新について特別な処理は必要ありません。

13.4.2.8.3 汎用のラッパー・メッセージ

Avroメッセージは自己記述型ではありません。つまりメッセージの受信者は、メッセージに対応するスキーマのことを知っていないと、メッセージをデシリアライズできません。Avroメッセージはバイナリであり、メッセージの内容を調べてメッセージ・タイプを確定する一貫した、または信頼できる方法はありません。したがって、Kafkaのような1つのデータ・ストリームにメッセージをインタレースするときに、Avroは特に厄介です。

Avroフォーマッタには、汎用のAvroメッセージでAvroメッセージをラップする特別な機能があります。この機能を有効にするには、次の構成プロパティを設定します。

gg.handler.name.format.wrapMessageInGenericAvroMessage=true

汎用のメッセージとは、出力されるAvroメッセージすべてに共通するAvroペイロード・メッセージをラップするAvroメッセージです。汎用メッセージのスキーマは、generic_wrapper.avscという名前で、出力スキーマ・ディレクトリに書き込まれます。このメッセージには、次の3つのフィールドがあります。

- table_name - 完全修飾のソース表名。

- schema_fingerprint -  メッセージを生成するAvroスキーマのフィンガープリント。フィンガープリントは、org.apache.avro.SchemaNormalizationクラスのparsingFingerprint64(Schema s)メソッドを使用して生成されます。

- payload - ラップされるAvroメッセージ。

Avroフォーマッタの汎用ラッパー・スキーマは、次のとおりです。

{
"type" : "record",
"name" : "generic_wrapper",
"namespace" : "oracle.goldengate",
"fields" : [ {
"name" : "table_name",
"type" : "string"
}, {
"name" : "schema_fingerprint",
"type" : "long"
}, {
"name" : "payload",
"type" : "bytes"
} ]
}

13.4.3 Avroオブジェクト・コンテナ・ファイル・フォーマッタ

Oracle GoldenGate for Big Dataは、Avroオブジェクト・コンテナ・ファイル(OCF)形式でHDFSに書き込むことができます。HDFSにフォーマットするデータにはAvro OCFを使用するのが最適です。Avro OCFはスキーマ展開を他の形式よりも効率的に処理します。Avro OCFフォーマッタでも圧縮および圧縮解除がサポートされ、ディスク領域がより効率的に使用できます。

HDFSハンドラの特殊なユースケースとして、HDFSハンドラをAvroフォーマッタに統合して、Avro OCF形式でHDFSにファイルを書き込むことができます。Avro OCF形式は、HiveでAvroデータをHDFSを読込み可能にするために必要です。Avro OCF形式の詳細は、Avro仕様に記載されています。

http://avro.apache.org/docs/current/spec.html#Object+Container+Files

もう1つの重要な機能は、次を使用して、データをAvro OCF形式でストリーミングし、Hiveで表定義を生成して、メタデータの変更イベントが生じた場合はHiveで表定義を更新するようHDFSハンドラを構成できることです。

- Avro OCFフォーマッタの構成

13.4.3.1 Avro OCFフォーマッタの構成

プロパティ

オプション / 必須

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに切り捨てられ、切捨て操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8

JSONとして生成されるAvroスキーマの出力のエンコーディングを制御します。JSONのデフォルトはUTF-8です。Avroメッセージはバイナリで、独自の内部形式でエンコーディングをサポートしています。

gg.handler.name.format.treatAllColumnsAsStrings

オプション

true | false

false

生成されるAvroメッセージの出力の型付けを制御します。falseに設定すると、フォーマッタはOracle GoldenGateの型を、対応するAVROの型にマップしようと試みます。trueに設定すると、すべてのデータは生成されるAvroメッセージとスキーマで文字列として扱われます。

gg.handler.name.format.pkUpdateHandling

オプション

abend | update | delete-insert

abend

フォーマッタが、主キーを変更する更新操作をどのように処理するかを制御します。主キーを操作するとAvro行フォーマッタで問題が起きることがあるので、ユーザーは特に慎重を期する必要があります。

- abend - プロセスが異常終了することを示します

- update - プロセスでこれが通常の更新として扱われることを示します

- deleteおよびinsert - プロセスでこれが削除および挿入として扱われることを示します。この機能が正常に動作するためには、完全な操作前イメージが必要です。そのためには、Oracleで完全なサプリメンタル・ロギングを使用します。操作前と操作後の完全な行イメージがない場合、挿入データは不完全になります。

gg.handler.name.format.generateSchema

オプション

true | false

true

Avroのシリアライズのためにスキーマを生成する必要があるため、このプロパティをfalseに設定して、ローカル・ファイル・システムへの生成されたスキーマの書き込みを抑止できます。

gg.handler.name.format.schemaDirectory

オプション

有効で存在する人気のファイル・システム・パス

./dirdef

ローカル・ファイル・システムに対する生成されたAvroスキーマの出力先を制御します。このプロパティは、Avroスキーマが書き込まれるHDFSの場所を制御しません。この場所はHDFSハンドラ・プロパティで制御されます。

gg.handler.name.format.iso8601Format

オプション

true | false

true

現在のタイムスタンプのデフォルト形式はISO8601です。falseに設定すると、現在のタイムスタンプの日付と時刻の間のTが削除され、かわりにスペースが出力されます。

gg.handler.name.format.versionSchemas

オプション

true | false

false

trueに設定すると、Avroスキーマがスキーマ・ディレクトリに作成されて、タイムスタンプでバージョン管理されます。スキーマの形式は、次のとおりです。

fully_qualifiedtable_name_time stamp.avsc

13.5 XMLフォーマッタ

XMLフォーマッタは、ソース証跡ファイルから、操作データをJSONオブジェクトとしてフォーマットします。XMLフォーマッタは、その操作前と操作後のイメージ・データを取得して、データをXMLドキュメント形式の操作データにフォーマットします。XMLドキュメントの形式は、これまでのリリースのOracle GoldenGate Java Adapter製品におけるXML形式と、実質的に同じです。

トピック:

- メッセージのフォーマットの詳細

- XMLメッセージの例

- XMLスキーマ

- XML構成

- サンプル構成

- メタデータ変更イベント

- 主キーの更新

13.5.1 メッセージのフォーマットの詳細

XMLでフォーマットされたメッセージには、次の情報が含まれます。

表13-10 XMLフォーマットの詳細

値

説明

table

完全修飾の表名。

type

操作タイプ。

current_ts

現在のタイムスタンプは、フォーマッタが現在の操作レコードを処理した時刻です。このタイムスタンプはISO-8601形式に従い、精度はミリ秒までです。証跡ファイルを再生しても、同じ操作に対して同じタイムスタンプにはなりません。

pos

ソース証跡ファイルからのポジション。

numCols

ソース表の列の合計数。

col

col要素は、操作データの操作前と操作後のイメージを含む反復要素です。

tokens

tokens要素には、ソース証跡ファイルからのトークン値が含まれます。

13.5.2 XMLメッセージの例

この項では、次のXMLメッセージの例を示します。

- 挿入メッセージの例

- 更新メッセージの例

- 削除メッセージの例

- 切捨てメッセージの例

13.5.2.1 挿入メッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='I' ts='2013-06-02 22:14:36.000000' current_ts='2015-10-06T12:21:50.100001' pos='00000000000000001444' numCols='7'>
<col name='CUST_CODE' index='0'>
<before missing='true'/>
<after><![CDATA[WILL]]></after>
</col>
<col name='ORDER_DATE' index='1'>
<before missing='true'/>
<after><![CDATA[1994-09-30:15:33:00]]></after>
</col>
<col name='PRODUCT_CODE' index='2'>
<before missing='true'/>
<after><![CDATA[CAR]]></after>
</col>
<col name='ORDER_ID' index='3'>
<before missing='true'/>
<after><![CDATA[144]]></after>
</col>
<col name='PRODUCT_PRICE' index='4'>
<before missing='true'/>
<after><![CDATA[17520.00]]></after>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<before missing='true'/>
<after><![CDATA[3]]></after>
</col>
<col name='TRANSACTION_ID' index='6'>
<before missing='true'/>
<after><![CDATA[100]]></after>
</col>
<tokens>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqL2AAA]]></Value>
</token>
</tokens>
</operation>

13.5.2.2 更新メッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='U' ts='2013-06-02 22:14:41.000000' current_ts='2015-10-06T12:21:50.413000' pos='00000000000000002891' numCols='7'>
<col name='CUST_CODE' index='0'>
<before><![CDATA[BILL]]></before>
<after><![CDATA[BILL]]></after>
</col>
<col name='ORDER_DATE' index='1'>
<before><![CDATA[1995-12-31:15:00:00]]></before>
<after><![CDATA[1995-12-31:15:00:00]]></after>
</col>
<col name='PRODUCT_CODE' index='2'>
<before><![CDATA[CAR]]></before>
<after><![CDATA[CAR]]></after>
</col>
<col name='ORDER_ID' index='3'>
<before><![CDATA[765]]></before>
<after><![CDATA[765]]></after>
</col>
<col name='PRODUCT_PRICE' index='4'>
<before><![CDATA[15000.00]]></before>
<after><![CDATA[14000.00]]></after>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<before><![CDATA[3]]></before>
<after><![CDATA[3]]></after>
</col>
<col name='TRANSACTION_ID' index='6'>
<before><![CDATA[100]]></before>
<after><![CDATA[100]]></after>
</col>
<tokens>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqLzAAA]]></Value>
</token>
</tokens>
</operation>

13.5.2.3 削除メッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='D' ts='2013-06-02 22:14:41.000000' current_ts='2015-10-06T12:21:50.415000' pos='00000000000000004338' numCols='7'>
<col name='CUST_CODE' index='0'>
<before><![CDATA[DAVE]]></before>
<after missing='true'/>
</col>
<col name='ORDER_DATE' index='1'>
<before><![CDATA[1993-11-03:07:51:35]]></before>
<after missing='true'/>
</col>
<col name='PRODUCT_CODE' index='2'>
<before><![CDATA[PLANE]]></before>
<after missing='true'/>
</col>
<col name='ORDER_ID' index='3'>
<before><![CDATA[600]]></before>
<after missing='true'/>
</col>
<col name='PRODUCT_PRICE' index='4'>
<missing/>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<missing/>
</col>
<col name='TRANSACTION_ID' index='6'>
<missing/>
</col>
<tokens>
<token>
<Name><![CDATA[L]]></Name>
<Value><![CDATA[206080450]]></Value>
</token>
<token>
<Name><![CDATA[6]]></Name>
<Value><![CDATA[9.0.80330]]></Value>
</token>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqLzAAC]]></Value>
</token>
</tokens>
</operation>

13.5.2.4 切捨てメッセージの例

<?xml version='1.0' encoding='UTF-8'?>
<operation table='GG.TCUSTORD' type='T' ts='2013-06-02 22:14:41.000000' current_ts='2015-10-06T12:21:50.415001' pos='00000000000000004515' numCols='7'>
<col name='CUST_CODE' index='0'>
<missing/>
</col>
<col name='ORDER_DATE' index='1'>
<missing/>
</col>
<col name='PRODUCT_CODE' index='2'>
<missing/>
</col>
<col name='ORDER_ID' index='3'>
<missing/>
</col>
<col name='PRODUCT_PRICE' index='4'>
<missing/>
</col>
<col name='PRODUCT_AMOUNT' index='5'>
<missing/>
</col>
<col name='TRANSACTION_ID' index='6'>
<missing/>
</col>
<tokens>
<token>
<Name><![CDATA[R]]></Name>
<Value><![CDATA[AADPkvAAEAAEqL2AAB]]></Value>
</token>
</tokens>
</operation>

13.5.3 XMLスキーマ

XMLスキーマ(XSD)は、XMLフォーマッタの機能の一部として生成されません。XSDは、XMLフォーマッタによって生成されるすべてのメッセージに汎用です。生成されるXMLドキュメントの構造を定義するXSDが、次のように定義されています。

<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="operation">
<xs:complexType>
<xs:sequence>
<xs:element name="col" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="before" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="missing"
use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="after" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="missing"
use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" name="missing" minOccurs="0"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name"/>
<xs:attribute type="xs:short" name="index"/>
</xs:complexType>
</xs:element>
<xs:element name="tokens" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="token" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Name"/>
<xs:element type="xs:string" name="Value"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="table"/>
<xs:attribute type="xs:string" name="type"/>
<xs:attribute type="xs:string" name="ts"/>
<xs:attribute type="xs:dateTime" name="current_ts"/>
<xs:attribute type="xs:long" name="pos"/>
<xs:attribute type="xs:short" name="numCols"/>
</xs:complexType>
</xs:element>
</xs:schema>

13.5.4 XML構成

表13-11 構成オプション

プロパティ

オプションY/N

有効な値

デフォルト

説明

gg.handler.name.format.insertOpKey

オプション

任意の文字列

I

出力レコードに挿入され、挿入操作を示す指標です。

gg.handler.name.format.updateOpKey

オプション

任意の文字列

U

出力レコードに挿入され、更新操作を示す指標です。

gg.handler.name.format.deleteOpKey

オプション

任意の文字列

D

出力レコードに挿入され、削除操作を示す指標です。

gg.handler.name.format.truncateOpKey

オプション

任意の文字列

T

出力レコードに挿入され、切捨て操作を示す指標です。

gg.handler.name.format.encoding

オプション

Javaでサポートされる任意の有効なエンコーディング名または別名。

UTF-8 (XMLのデフォルト)

生成されるXMLドキュメントの出力のエンコーディングを制御します。

gg.handler.name.format.includeProlog

オプション

true | false

false

生成されるXMLドキュメントのXML prologの出力を制御します。XML prologは、整形式のXMLではオプションです。サンプルのXML prologは、<?xml version='1.0' encoding='UTF-8'?>などのようになります

gg.handler.name.format.iso8601Format

オプション

true | false

true

XMLメッセージの現在のタイムスタンプの形式を制御します。falseに設定すると、日付と時刻の間にTは表示されず、かわりに空白が出力されます。

13.5.5 サンプル構成

Javaアダプタ・プロパティ・ファイルからのXMLフォーマッタの構成例を次に示します。

gg.handler.hdfs.format=xml
gg.handler.hdfs.format.insertOpKey=I
gg.handler.hdfs.format.updateOpKey=U
gg.handler.hdfs.format.deleteOpKey=D
gg.handler.hdfs.format.truncateOpKey=T
gg.handler.hdfs.format.encoding=ISO-8859-1
gg.handler.hdfs.format.includeProlog=false

13.5.6 メタデータ変更イベント

XMLフォーマッタは、メタデータ変更イベントをシームレスに処理します。XMLドキュメントは、メタデータ変更イベントがあってもXMLスキーマが変更されないような形式です。XMLスキーマは汎用として設計されているので、同じスキーマが任意の表の操作を表します。

XMLフォーマッタは、メタデータ変更イベントとともにアクションを実行できます。このとき、複製されるデータベースとアップストリームのOracle GoldenGateレプリケーション・プロセスでメタデータ変更イベントが伝播されると想定されています。XMLドキュメントは、メタデータ変更イベントがあってもXMLスキーマが変更されないような形式です。XMLスキーマは汎用なので、同じスキーマが任意の表の操作を表します。メタデータで生じる変更は、メタデータ変更イベント後にメッセージに反映されます。たとえば列を追加する場合、新しい列と列データは、メタデータ変更イベントの後に、その表のXMLメッセージに表示され始めます。

13.5.7 主キーの更新

主キーを更新する際、XMLフォーマッタによる特別な処理は必要ありません。XMLフォーマッタは、データベース操作をモデル化するメッセージを作成します。更新操作の場合、これには列値の操作前と操作後のイメージが含まれます。主キーの変更は、他の列値を変更する場合とまったく同じように、列値に対する変更としてこの形式で表されるだけです

A Cassandraハンドラ・クライアント依存性

この付録では、Apache CassandraのCassandraクライアント依存性をリストします。

Maven groupId: org.apache.cassandra

Maven atifactId: cassandra-clients

Maven version: 各セクションでリストされるCassandraのバージョン番号

トピック:

- Cassandra Datastax Java Driver 3.1.0

A.1 Cassandra Datastax Java Driver 3.1.0

cassandra-driver-core-3.1.0.jar
cassandra-driver-extras-3.1.0.jar
cassandra-driver-mapping-3.1.0.jar
asm-5.0.3.jar
asm-analysis-5.0.3.jar
asm-commons-5.0.3.jar
asm-tree-5.0.3.jar
asm-util-5.0.3.jar
guava-16.0.1.jar
HdrHistogram-2.1.9.jar
jackson-annotations-2.6.0.jar
jackson-core-2.6.3.jar
jackson-databind-2.6.3.jar
javax.json-api-1.0.jar
jffi-1.2.10.jar
jffi-1.2.10-native.jar
jnr-constants-0.9.0.jar
jnr-ffi-2.0.7.jar
jnr-posix-3.0.27.jar
jnr-x86asm-1.0.2.jar
joda-time-2.9.1.jar
lz4-1.3.0.jar
metrics-core-3.1.2.jar
netty-buffer-4.0.37.Final.jar
netty-codec-4.0.37.Final.jar
netty-common-4.0.37.Final.jar
netty-handler-4.0.37.Final.jar
netty-transport-4.0.37.Final.jar
slf4j-api-1.7.7.jar
snappy-java-1.1.2.6.jar

B Elasticsearchハンドラ・クライアント依存性

この付録では、Elasticsearchトランスポート・クライアント依存性をリストしています。

Maven groupId: org.elasticsearch

Maven atifactId: elasticsearch

Maven version: 2.2.0

トピック:

- Elasticsearchハンドラ・クライアント依存性

- Elasticsearch 2.4.4およびShield Plugin 2.2.2

- Elasticsearch 5.1.2とX-Pack 5.1.2

B.1 Elasticsearchハンドラ・クライアント依存性

この項では、Elasticsearch各バージョンのElasticsearchクライアント依存性をリストします。

B.2 Elasticsearch 2.4.4およびShield Plugin 2.2.2

automaton-1.11-8.jar
commons-cli-1.3.1.jar
compress-lzf-1.0.2.jar
elasticsearch-2.4.4.jar
guava-18.0.jar
HdrHistogram-2.1.6.jar
hppc-0.7.1.jar
jackson-core-2.8.1.jar
jackson-dataformat-cbor-2.8.1.jar
jackson-dataformat-smile-2.8.1.jar
jackson-dataformat-yaml-2.8.1.jar
joda-time-2.9.5.jar
jsr166e-1.1.0.jar
lucene-analyzers-common-5.5.2.jar
lucene-backward-codecs-5.5.2.jar
lucene-core-5.5.2.jar
lucene-grouping-5.5.2.jar
lucene-highlighter-5.5.2.jar
lucene-join-5.5.2.jar
lucene-memory-5.5.2.jar
lucene-misc-5.5.2.jar
lucene-queries-5.5.2.jar
lucene-queryparser-5.5.2.jar
lucene-sandbox-5.5.2.jar
lucene-spatial3d-5.5.2.jar
lucene-spatial-5.5.2.jar
lucene-suggest-5.5.2.jar
netty-3.10.6.Final.jar
securesm-1.0.jar
shield-2.2.2.jar
snakeyaml-1.15.jar
spatial4j-0.5.jar
t-digest-3.0.jar
unboundid-ldapsdk-2.3.8.jar

B.3 Elasticsearch 5.1.2とX-Pack 5.1.2

commons-codec-1.10.jar
commons-logging-1.1.3.jar
compiler-0.9.3.jar
elasticsearch-5.1.2.jar
HdrHistogram-2.1.6.jar
hppc-0.7.1.jar
httpasyncclient-4.1.2.jar
httpclient-4.5.2.jar
httpcore-4.4.5.jar
httpcore-nio-4.4.5.jar
jackson-core-2.8.1.jar
jackson-dataformat-cbor-2.8.1.jar
jackson-dataformat-smile-2.8.1.jar
jackson-dataformat-yaml-2.8.1.jar
jna-4.2.2.jar
joda-time-2.9.5.jar
jopt-simple-5.0.2.jar
lang-mustache-client-5.1.2.jar
lucene-analyzers-common-6.3.0.jar
lucene-backward-codecs-6.3.0.jar
lucene-core-6.3.0.jar
lucene-grouping-6.3.0.jar
lucene-highlighter-6.3.0.jar
lucene-join-6.3.0.jar
lucene-memory-6.3.0.jar
lucene-misc-6.3.0.jar
lucene-queries-6.3.0.jar
lucene-queryparser-6.3.0.jar
lucene-sandbox-6.3.0.jar
lucene-spatial3d-6.3.0.jar
lucene-spatial-6.3.0.jar
lucene-spatial-extras-6.3.0.jar
lucene-suggest-6.3.0.jar
netty-3.10.6.Final.jar
netty-buffer-4.1.6.Final.jar
netty-codec-4.1.6.Final.jar
netty-codec-http-4.1.6.Final.jar
netty-common-4.1.6.Final.jar
netty-handler-4.1.6.Final.jar
netty-resolver-4.1.6.Final.jar
netty-transport-4.1.6.Final.jar
percolator-client-5.1.2.jar
reindex-client-5.1.2.jar
rest-5.1.2.jar
securesm-1.1.jar
snakeyaml-1.15.jar
t-digest-3.0.jar
transport-5.1.2.jar
transport-netty3-client-5.1.2.jar
transport-netty4-client-5.1.2.jar
x-pack-transport-5.1.2.jar

C Flumeハンドラ・クライアント依存性

この付録では、Apache FlumeのFlumeクライアント依存性をリストします。

Maven groupId: org.apache.flume

Maven atifactId: hadoop-ng-skd

Maven version: 各セクションでリストされるFlumeのバージョン番号

トピック:

- Flumeクライアント依存性

C.1 Flumeクライアント依存性

この項では、Flume各バージョンのFlumeクライアント依存性をリストします。

- Flume 1.7.0

- Flume 1.6.0

- Flume 1.5.2

- Flume 1.4.0

C.1.1 Flume 1.7.0

avro-1.7.4.jar
avro-ipc-1.7.4.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-sdk-1.7.0.jar
httpclient-4.1.3.jar
httpcore-4.1.3.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
libthrift-0.9.0.jar
netty-3.9.4.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar
xz-1.0.jar

C.1.2 Flume 1.6.0

avro-1.7.4.jar
avro-ipc-1.7.4.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-sdk-1.6.0.jar
httpclient-4.1.3.jar
httpcore-4.1.3.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
libthrift-0.9.0.jar
netty-3.5.12.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar
xz-1.0.jar

C.1.3 Flume 1.5.2

avro-1.7.3.jar
avro-ipc-1.7.3.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-sdk-1.5.2.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
libthrift-0.7.0.jar
netty-3.5.12.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar

C.1.4 Flume 1.4.0

avro-1.7.3.jar
avro-ipc-1.7.3.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-sdk-1.4.0.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
libthrift-0.7.0.jar
netty-3.4.0.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar

D HBaseハンドラ・クライアント依存性

この付録では、Apache HBaseのHBaseクライアント依存性をリストします。hbase-client-x.x.x.jarは、Apache HBaseと一緒に配布されず、クラスパスで必須でもありません。hbase-client-x.x.x.jarは、HBaseクライアント依存性をすべて集計するための空のmavenプロジェクトです。

- Maven groupId: org.apache.hbase

- Maven atifactId: hbase-client

- Maven version: 各セクションでリストされるHBaseのバージョン番号

トピック:

- HBaseクライアント依存性

D.1 HBaseクライアント依存性

この項では、Hadoop各バージョンのHBaseクライアント依存性をリストします。

- HBase 1.1.1

- HBase 1.0.1.1

- HBase 1.2.5

- HBase 1.1.1

- HBase 1.0.1.1

D.1.1 HBase 1.2.5

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.9.jar
commons-collections-3.2.2.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
findbugs-annotations-1.3.9-1.jar
guava-12.0.1.jar
hadoop-annotations-2.5.1.jar
hadoop-auth-2.5.1.jar
hadoop-common-2.5.1.jar
hadoop-mapreduce-client-core-2.5.1.jar
hadoop-yarn-api-2.5.1.jar
hadoop-yarn-common-2.5.1.jar
hamcrest-core-1.3.jar
hbase-annotations-1.2.5.jar
hbase-client-1.2.5.jar
hbase-common-1.2.5.jar
hbase-protocol-1.2.5.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jaxb-api-2.2.2.jar
jcodings-1.0.8.jar
jdk.tools-1.6.jar
jetty-util-6.1.26.jar
joni-2.1.2.jar
jsch-0.1.42.jar
jsr305-1.3.9.jar
junit-4.12.jar
log4j-1.2.17.jar
metrics-core-2.2.0.jar
netty-3.6.2.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

D.1.2 HBase 1.1.1

HBase 1.1.1 (HBase 1.1.0.1も実質的に同じです。バージョンが1.1.1となっているライブラリでは、単に1.1.0.1に置き換えてください)

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.9.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
findbugs-annotations-1.3.9-1.jar
guava-12.0.1.jar
hadoop-annotations-2.5.1.jar
hadoop-auth-2.5.1.jar
hadoop-common-2.5.1.jar
hadoop-mapreduce-client-core-2.5.1.jar
hadoop-yarn-api-2.5.1.jar
hadoop-yarn-common-2.5.1.jar
hamcrest-core-1.3.jar
hbase-annotations-1.1.1.jar
hbase-client-1.1.1.jar
hbase-common-1.1.1.jar
hbase-protocol-1.1.1.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jaxb-api-2.2.2.jar
jcodings-1.0.8.jar
jdk.tools-1.7.jar
jetty-util-6.1.26.jar
joni-2.1.2.jar
jsch-0.1.42.jar
jsr305-1.3.9.jar
junit-4.11.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

D.1.3 HBase 1.0.1.1

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.9.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
findbugs-annotations-1.3.9-1.jar
guava-12.0.1.jar
hadoop-annotations-2.5.1.jar
hadoop-auth-2.5.1.jar
hadoop-common-2.5.1.jar
hadoop-mapreduce-client-core-2.5.1.jar
hadoop-yarn-api-2.5.1.jar
hadoop-yarn-common-2.5.1.jar
hamcrest-core-1.3.jar
hbase-annotations-1.0.1.1.jar
hbase-client-1.0.1.1.jar
hbase-common-1.0.1.1.jar
hbase-protocol-1.0.1.1.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jaxb-api-2.2.2.jar
jcodings-1.0.8.jar
jdk.tools-1.7.jar
jetty-util-6.1.26.jar
joni-2.1.2.jar
jsch-0.1.42.jar
jsr305-1.3.9.jar
junit-4.11.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

E HDFSハンドラ・クライアント依存性

この付録では、Apache HadoopのHDFSクライアント依存性をリストします。hadoop-client-x.x.x.jarは、Apache Hadoopと一緒に配布されず、クラスパスで必須でもありません。hadoop-client-x.x.x.jarは、Hadoopクライアント依存性をすべて集計するための空のmavenプロジェクトです。

Maven groupId: org.apache.hadoop

Maven atifactId: hadoop-client

Maven version: 各セクションでリストされるHDFSのバージョン番号

トピック:

- Hadoopクライアント依存性

E.1 Hadoopクライアント依存性

この項では、HDFS各バージョンのHadoopクライアント依存性をリストします。

- HDFS 2.8.0

- HDFS 2.7.1

- HDFS 2.6.0

- HDFS 2.5.2

- HDFS 2.4.1

- HDFS 2.3.0

- HDFS 2.2.0

E.1.1 HDFS 2.8.0

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.9.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
findbugs-annotations-1.3.9-1.jar
guava-12.0.1.jar
hadoop-annotations-2.5.1.jar
hadoop-auth-2.5.1.jar
hadoop-common-2.5.1.jar
hadoop-mapreduce-client-core-2.5.1.jar
hadoop-yarn-api-2.5.1.jar
hadoop-yarn-common-2.5.1.jar
hamcrest-core-1.3.jar
hbase-annotations-1.0.1.1.jar
hbase-client-1.0.1.1.jar
hbase-common-1.0.1.1.jar
hbase-protocol-1.0.1.1.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jaxb-api-2.2.2.jar
jcodings-1.0.8.jar
jdk.tools-1.7.jar
jetty-util-6.1.26.jar
joni-2.1.2.jar
jsch-0.1.42.jar
jsr305-1.3.9.jar
junit-4.11.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

E.1.2 HDFS 2.7.1

HDFS 2.7.1 (HDFS 2.7.0も実質的に同じです。バージョンが2.7.1となっているライブラリでは、単に2.7.0に置き換えてください)

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
curator-client-2.7.1.jar
curator-framework-2.7.1.jar
curator-recipes-2.7.1.jar
gson-2.2.4.jar
guava-11.0.2.jar
hadoop-annotations-2.7.1.jar
hadoop-auth-2.7.1.jar
hadoop-client-2.7.1.jar
hadoop-common-2.7.1.jar
hadoop-hdfs-2.7.1.jar
hadoop-mapreduce-client-app-2.7.1.jar
hadoop-mapreduce-client-common-2.7.1.jar
hadoop-mapreduce-client-core-2.7.1.jar
hadoop-mapreduce-client-jobclient-2.7.1.jar
hadoop-mapreduce-client-shuffle-2.7.1.jar
hadoop-yarn-api-2.7.1.jar
hadoop-yarn-client-2.7.1.jar
hadoop-yarn-common-2.7.1.jar
hadoop-yarn-server-common-2.7.1.jar
htrace-core-3.1.0-incubating.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-jaxrs-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jackson-xc-1.9.13.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsp-api-2.1.jar
jsr305-3.0.0.jar
leveldbjni-all-1.8.jar
log4j-1.2.17.jar
netty-3.7.0.Final.jar
netty-all-4.0.23.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.10.jar
slf4j-log4j12-1.7.10.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xercesImpl-2.9.1.jar
xml-apis-1.3.04.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

E.1.3 HDFS 2.6.0

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
curator-client-2.6.0.jar
curator-framework-2.6.0.jar
curator-recipes-2.6.0.jar
gson-2.2.4.jar
guava-11.0.2.jar
hadoop-annotations-2.6.0.jar
hadoop-auth-2.6.0.jar
hadoop-client-2.6.0.jar
hadoop-common-2.6.0.jar
hadoop-hdfs-2.6.0.jar
hadoop-mapreduce-client-app-2.6.0.jar
hadoop-mapreduce-client-common-2.6.0.jar
hadoop-mapreduce-client-core-2.6.0.jar
hadoop-mapreduce-client-jobclient-2.6.0.jar
hadoop-mapreduce-client-shuffle-2.6.0.jar
hadoop-yarn-api-2.6.0.jar
hadoop-yarn-client-2.6.0.jar
hadoop-yarn-common-2.6.0.jar
hadoop-yarn-server-common-2.6.0.jar
htrace-core-3.0.4.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-jaxrs-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jackson-xc-1.9.13.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
leveldbjni-all-1.8.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xercesImpl-2.9.1.jar
xml-apis-1.3.04.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

E.1.4 HDFS 2.5.2

HDFS 2.5.2 (HDFS 2.5.1と2.5.0も実質的に同じです。バージョンが2.5.2となっているライブラリでは、単に2.5.1または2.5.0に置き換えてください)

activation-1.1.jar
apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api-1.0.0-M20.jar
api-util-1.0.0-M20.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
guava-11.0.2.jar
hadoop-annotations-2.5.2.jar
adoop-auth-2.5.2.jar
hadoop-client-2.5.2.jar
hadoop-common-2.5.2.jar
hadoop-hdfs-2.5.2.jar
hadoop-mapreduce-client-app-2.5.2.jar
hadoop-mapreduce-client-common-2.5.2.jar
hadoop-mapreduce-client-core-2.5.2.jar
hadoop-mapreduce-client-jobclient-2.5.2.jar
hadoop-mapreduce-client-shuffle-2.5.2.jar
hadoop-yarn-api-2.5.2.jar
hadoop-yarn-client-2.5.2.jar
hadoop-yarn-common-2.5.2.jar
hadoop-yarn-server-common-2.5.2.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.9.13.jar
jackson-jaxrs-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jackson-xc-1.9.13.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
leveldbjni-all-1.8.jar
log4j-1.2.17.jar
netty-3.6.2.Final.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.6.jar

E.1.5 HDFS 2.4.1

HDFS 2.4.1 (HDFS 2.4.0も実質的に同じです。バージョンが2.4.1となっているライブラリでは、単に2.4.0に置き換えてください)

activation-1.1.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
guava-11.0.2.jar
hadoop-annotations-2.4.1.jar
hadoop-auth-2.4.1.jar
hadoop-client-2.4.1.jar
hadoop-hdfs-2.4.1.jar
hadoop-mapreduce-client-app-2.4.1.jar
hadoop-mapreduce-client-common-2.4.1.jar
hadoop-mapreduce-client-core-2.4.1.jar
hadoop-mapreduce-client-jobclient-2.4.1.jar
hadoop-mapreduce-client-shuffle-2.4.1.jar
hadoop-yarn-api-2.4.1.jar
hadoop-yarn-client-2.4.1.jar
hadoop-yarn-common-2.4.1.jar
hadoop-yarn-server-common-2.4.1.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jaxb-api-2.2.2.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
log4j-1.2.17.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.5.jar
hadoop-common-2.4.1.jar

E.1.6 HDFS 2.3.0

activation-1.1.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
commons-math3-3.1.1.jar
commons-net-3.1.jar
guava-11.0.2.jar
hadoop-annotations-2.3.0.jar
hadoop-auth-2.3.0.jar
hadoop-client-2.3.0.jar
hadoop-common-2.3.0.jar
hadoop-hdfs-2.3.0.jar
hadoop-mapreduce-client-app-2.3.0.jar
hadoop-mapreduce-client-common-2.3.0.jar
hadoop-mapreduce-client-core-2.3.0.jar
hadoop-mapreduce-client-jobclient-2.3.0.jar
hadoop-mapreduce-client-shuffle-2.3.0.jar
hadoop-yarn-api-2.3.0.jar
hadoop-yarn-client-2.3.0.jar
hadoop-yarn-common-2.3.0.jar
hadoop-yarn-server-common-2.3.0.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jaxb-api-2.2.2.jar
jersey-core-1.9.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
log4j-1.2.17.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
servlet-api-2.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0-2.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.5.jar

E.1.7 HDFS 2.2.0

activation-1.1.jar
aopalliance-1.0.jar
asm-3.1.jar
avro-1.7.4.jar
commons-beanutils-1.7.0.jar
commons-beanutils-core-1.8.0.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-configuration-1.6.jar
commons-digester-1.8.jar
commons-httpclient-3.1.jar
commons-io-2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
commons-math-2.1.jar
commons-net-3.1.jar
gmbal-api-only-3.0.0-b023.jar
grizzly-framework-2.1.2.jar
grizzly-http-2.1.2.jar
grizzly-http-server-2.1.2.jar
grizzly-http-servlet-2.1.2.jar
grizzly-rcm-2.1.2.jar
guava-11.0.2.jar
guice-3.0.jar
hadoop-annotations-2.2.0.jar
hadoop-auth-2.2.0.jar
hadoop-client-2.2.0.jar
hadoop-common-2.2.0.jar
hadoop-hdfs-2.2.0.jar
hadoop-mapreduce-client-app-2.2.0.jar
hadoop-mapreduce-client-common-2.2.0.jar
hadoop-mapreduce-client-core-2.2.0.jar
hadoop-mapreduce-client-jobclient-2.2.0.jar
hadoop-mapreduce-client-shuffle-2.2.0.jar
hadoop-yarn-api-2.2.0.jar
hadoop-yarn-client-2.2.0.jar
hadoop-yarn-common-2.2.0.jar
hadoop-yarn-server-common-2.2.0.jar
jackson-core-asl-1.8.8.jar
jackson-jaxrs-1.8.3.jar
jackson-mapper-asl-1.8.8.jar
jackson-xc-1.8.3.jar
javax.inject-1.jar
javax.servlet-3.1.jar
javax.servlet-api-3.0.1.jar
jaxb-api-2.2.2.jar
jaxb-impl-2.2.3-1.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jersey-grizzly2-1.9.jar
jersey-guice-1.9.jar
jersey-json-1.9.jar
jersey-server-1.9.jar
jersey-test-framework-core-1.9.jar
jersey-test-framework-grizzly2-1.9.jar
jettison-1.1.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
log4j-1.2.17.jar
management-api-3.0.0-b012.jar
paranamer-2.3.jar
protobuf-java-2.5.0.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
snappy-java-1.0.4.1.jar
stax-api-1.0.1.jar
xmlenc-0.52.jar
xz-1.0.jar
zookeeper-3.4.5.jar

F Kafkaハンドラ・クライアント依存性

この付録では、Apache KafkaのKafkaクライアント依存性をリストします。

Maven groupId: org.apache.kafka

Maven atifactId: kafka-clients

Maven version: 各セクションでリストされるKafkaのバージョン番号

トピック:

- Kafkaクライアント依存性

F.1 Kafkaクライアント依存性

この項では、Kafka各バージョンのKafkaクライアント依存性をリストします。

- Kafka 0.11.0.0

- Kafka 0.10.2.0

- Kafka 0.10.1.1

- Kafka 0.10.0.1

- Kafka 0.9.0.1

F.1.1 Kafka 0.11.0.0

kafka-clients-0.11.0.0.jar
lz4-1.3.0.jar
slf4j-api-1.7.25.jar
snappy-java-1.1.2.6.jar

F.1.2 Kafka 0.10.2.0

kafka-clients-0.10.2.0.jar
lz4-1.3.0.jar
slf4j-api-1.7.21.jar
snappy-java-1.1.2.6.jar

F.1.3 Kafka 0.10.1.1

kafka-clients-0.10.1.1.jar
lz4-1.3.0.jar
slf4j-api-1.7.21.jar
snappy-java-1.1.2.6.jar

F.1.4 Kafka 0.10.0.1

kafka-clients-0.10.0.1.jar
lz4-1.3.0.jar
slf4j-api-1.7.21.jar
snappy-java-1.1.2.6.jar

F.1.5 Kafka 0.9.0.1

kafka-clients-0.9.0.1.jar
lz4-1.2.0.jar
slf4j-api-1.7.6.jar
snappy-java-1.1.1.7.jar

G Kafka Connectハンドラ・クライアント依存性

この付録では、Apache KafkaのKafka Connectクライアント依存性をリストします。

Maven groupId: org.apache.kafka

Maven artifactId: kafka_2.11 & connect-json

Maven version: 各セクションでリストされるKafka Connectのバージョン番号

トピック:

- Kafka Connectクライアント依存性

- Confluent IOのAvroコンバータおよびスキーマ・レジストリ

G.1 Kafka Connectクライアント依存性

この項では、Kafka各バージョンのKafka Connectクライアント依存性をリストします。

- Kafka 0.11.0.0

- Kafka 0.10.2.0

- Kafka 0.10.2.0

- Kafka 0.10.0.0

- Kafka 0.9.0.1

G.1.1 Kafka 0.11.0.0

connect-api-0.11.0.0.jar
connect-json-0.11.0.0.jar
jackson-annotations-2.8.0.jar
jackson-core-2.8.5.jar
jackson-databind-2.8.5.jar
jopt-simple-5.0.3.jar
kafka_2.11-0.11.0.0.jar
kafka-clients-0.11.0.0.jar
log4j-1.2.17.jar
lz4-1.3.0.jar
metrics-core-2.2.0.jar
scala-library-2.11.11.jar
scala-parser-combinators_2.11-1.0.4.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar
snappy-java-1.1.2.6.jar
zkclient-0.10.jar
zookeeper-3.4.10.jar

G.1.2 Kafka 0.10.2.0

connect-api-0.10.2.0.jar
connect-json-0.10.2.0.jar
jackson-annotations-2.8.0.jar
jackson-core-2.8.5.jar
jackson-databind-2.8.5.jar
jopt-simple-5.0.3.jar
kafka_2.11-0.10.2.0.jar
kafka-clients-0.10.2.0.jar
log4j-1.2.17.jar
lz4-1.3.0.jar
metrics-core-2.2.0.jar
scala-library-2.11.8.jar
scala-parser-combinators_2.11-1.0.4.jar
slf4j-api-1.7.21.jar
slf4j-log4j12-1.7.21.jar
snappy-java-1.1.2.6.jar
zkclient-0.10.jar
zookeeper-3.4.9.jar

G.1.3 Kafka 0.10.2.0

connect-api-0.10.1.1.jar
connect-json-0.10.1.1.jar
jackson-annotations-2.6.0.jar
jackson-core-2.6.3.jar
jackson-databind-2.6.3.jar
jline-0.9.94.jar
jopt-simple-4.9.jar
kafka_2.11-0.10.1.1.jar
kafka-clients-0.10.1.1.jar
log4j-1.2.17.jar
lz4-1.3.0.jar
metrics-core-2.2.0.jar
netty-3.7.0.Final.jar
scala-library-2.11.8.jar
scala-parser-combinators_2.11-1.0.4.jar
slf4j-api-1.7.21.jar
slf4j-log4j12-1.7.21.jar
snappy-java-1.1.2.6.jar
zkclient-0.9.jar
zookeeper-3.4.8.jar

G.1.4 Kafka 0.10.0.0

activation-1.1.jar
connect-api-0.10.0.0.jar
connect-json-0.10.0.0.jar
jackson-annotations-2.6.0.jar
jackson-core-2.6.3.jar
jackson-databind-2.6.3.jar
jline-0.9.94.jar
jopt-simple-4.9.jar
junit-3.8.1.jar
kafka_2.11-0.10.0.0.jar
kafka-clients-0.10.0.0.jar
log4j-1.2.15.jar
lz4-1.3.0.jar
mail-1.4.jar
metrics-core-2.2.0.jar
netty-3.7.0.Final.jar
scala-library-2.11.8.jar
scala-parser-combinators_2.11-1.0.4.jar
slf4j-api-1.7.21.jar
slf4j-log4j12-1.7.21.jar
snappy-java-1.1.2.4.jar
zkclient-0.8.jar
zookeeper-3.4.6.jar

G.1.5 Kafka 0.9.0.1

activation-1.1.jar
connect-api-0.9.0.1.jar
connect-json-0.9.0.1.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-databind-2.5.4.jar
jline-0.9.94.jar
jopt-simple-3.2.jar
junit-3.8.1.jar
kafka_2.11-0.9.0.1.jar
kafka-clients-0.9.0.1.jar
log4j-1.2.15.jar
lz4-1.2.0.jar
mail-1.4.jar
metrics-core-2.2.0.jar
netty-3.7.0.Final.jar
scala-library-2.11.7.jar
scala-parser-combinators_2.11-1.0.4.jar
scala-xml_2.11-1.0.4.jar
slf4j-api-1.7.6.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.1.1.7.jar
zkclient-0.7.jar
zookeeper-3.4.6.jar

G.2 Confluent IOのAvroコンバータおよびスキーマ・レジストリ

Confluent IOのAvroコンバータおよびスキーマ・レジストリの追加の依存性は次のとおりです。

トピック:

- Confluent IO 3.2.1

- Confluent IO 3.2.0

- Confluent IO 3.2.1

- Confluent IO 3.1.1

- Confluent IO 3.0.1

- Confluent IO 2.0.1

- Confluent IO 2.0.1

G.2.1 Confluent IO 3.2.1

avro-1.7.7.jar
common-config-3.2.1.jar
commons-compress-1.4.1.jar
common-utils-3.2.1.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.5.4.jar
jackson-mapper-asl-1.9.13.jar
jline-0.9.94.jar
kafka-avro-serializer-3.2.1.jar
kafka-schema-registry-client-3.2.1.jar
log4j-1.2.17.jar
netty-3.7.0.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.0.5.jar
xz-1.0.jar
zkclient-0.10.jar
zookeeper-3.4.8.jar

G.2.2 Confluent IO 3.2.0

avro-1.7.7.jar
common-config-3.2.0.jar
commons-compress-1.4.1.jar
common-utils-3.2.0.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.5.4.jar
jackson-mapper-asl-1.9.13.jar
jline-0.9.94.jar
kafka-avro-serializer-3.2.0.jar
kafka-schema-registry-client-3.2.0.jar
log4j-1.2.17.jar
netty-3.7.0.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.0.5.jar
xz-1.0.jar
zkclient-0.10.jar
zookeeper-3.4.8.jar

G.2.3 Confluent IO 3.2.1

avro-1.7.7.jar
common-config-3.1.2.jar
commons-compress-1.4.1.jar
common-utils-3.1.2.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.5.4.jar
jackson-mapper-asl-1.9.13.jar
jline-0.9.94.jar
kafka-avro-serializer-3.1.2.jar
kafka-schema-registry-client-3.1.2.jar
log4j-1.2.17.jar
netty-3.7.0.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.0.5.jar
xz-1.0.jar
zkclient-0.9.jar
zookeeper-3.4.8.jar

G.2.4 Confluent IO 3.1.1

avro-1.7.7.jar
common-config-3.1.1.jar
commons-compress-1.4.1.jar
common-utils-3.1.1.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.5.4.jar
jackson-mapper-asl-1.9.13.jar
jline-0.9.94.jar
kafka-avro-serializer-3.1.1.jar
kafka-schema-registry-client-3.1.1.jar
log4j-1.2.17.jar
netty-3.7.0.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.0.5.jar
xz-1.0.jar
zkclient-0.9.jar
zookeeper-3.4.8.jar

G.2.5 Confluent IO 3.0.1

avro-1.7.7.jar
common-config-3.0.1.jar
commons-compress-1.4.1.jar
common-utils-3.0.1.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.5.4.jar
jackson-mapper-asl-1.9.13.jar
jline-0.9.94.jar
junit-3.8.1.jar
kafka-avro-serializer-3.0.1.jar
kafka-schema-registry-client-3.0.1.jar
log4j-1.2.17.jar
netty-3.2.2.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.0.5.jar
xz-1.0.jar
zkclient-0.5.jar
zookeeper-3.4.3.jar

G.2.6 Confluent IO 2.0.1

avro-1.7.7.jar
common-config-2.0.1.jar
commons-compress-1.4.1.jar
common-utils-2.0.1.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.5.4.jar
jackson-mapper-asl-1.9.13.jar
jline-0.9.94.jar
junit-3.8.1.jar
kafka-avro-serializer-2.0.1.jar
kafka-schema-registry-client-2.0.1.jar
log4j-1.2.17.jar
netty-3.2.2.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.0.5.jar
xz-1.0.jar
zkclient-0.5.jar
zookeeper-3.4.3.jar

G.2.7 Confluent IO 2.0.1

avro-1.7.7.jar
common-config-2.0.0.jar
commons-compress-1.4.1.jar
common-utils-2.0.0.jar
jackson-annotations-2.5.0.jar
jackson-core-2.5.4.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.5.4.jar
jackson-mapper-asl-1.9.13.jar
jline-0.9.94.jar
junit-3.8.1.jar
kafka-avro-serializer-2.0.0.jar
kafka-schema-registry-client-2.0.0.jar
log4j-1.2.17.jar
netty-3.2.2.Final.jar
paranamer-2.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.7.6.jar
snappy-java-1.0.5.jar
xz-1.0.jar
zkclient-0.5.jar
zookeeper-3.4.3.jar

H MongoDBハンドラ・クライアント依存性

Oracle GoldenGateでは、mongo-java-driver-3.2.2.jarを使用した3.2.2 MongoDB Java DriverのMongoDBとの統合を使用することをお薦めします。このドライバは次からダウンロードできます。

http://mongodb.github.io/mongo-java-driver/

トピック:

- MongoDB Java Driver 3.2.2

H.1 MongoDB Java Driver 3.2.2

MongoDBハンドラでは、ネイティブJavaドライバのリリース3.2.2 API (mongo-java-driver-3.2.2.jar)を使用します。このハンドラは、3.X.Xドライバと互換性がある必要があります。gg.classpathプロパティにMongoDB Java Driverへのパスを含める必要があります。例のようにpom.xmlファイルに次を追加して、Maven中央リポジトリからJavaドライバを自動的にダウンロードできます。

<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。