プライマリ・コンテンツへ移動
Oracle® Fusion Middleware Oracle GoldenGate for Big Dataの統合
リリース12.3.0.1
E88297-01
目次へ移動
目次

前
次

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

この章では、メタデータ・プロバイダの機能と、メタデータ・プロバイダの各タイプについて説明し、その機能の理解に役立つ例も示します。

内容は次のとおりです。

10.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);
    

10.2 Avroメタデータ・プロバイダ

Avroメタデータ・プロバイダは、Avroスキーマ・ファイルから表メタデータを取得する際に使用します。COLMAPを使用してREPLICATでマップされる表ごとに、Avroスキーマからメタデータが取得され、そのメタデータがREPLICATによって列マッピングのために使用されます。

この項の内容は次のとおりです。

10.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を参照してください。

10.2.2 実行時の前提条件

Avroスキーマ定義は、Replicatプロセスを開始する前に、Replicatのパラメータ・ファイルでマップされるすべての表について作成する必要があります。

10.2.3 クラスパス構成

Avroメタデータ・プロバイダに、追加のクラスパス設定は必要ありません。

10.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の場合、NCHARNVARCHARなどの列のキャラクタ・セットを指定します。


10.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

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

ソース・データベース表でDDL変更がある場合、Avroスキーマ定義と、Replicat構成ファイルでのマッピングは、変更が必要な場合があります。メタデータ変更イベントがあった場合には、Replicatプロセスを停止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(process_name.prm)に次の指定を追加すると停止できます。

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

あるいは、レプリケーション構成ファイルに次の指定を追加するとReplicatプロセスを一時停止できます。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

10.2.7 制限事項

Avroのbyteデータ型は、主キーとして使用できません。

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降では、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。

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

この項の内容は次のとおりです。

10.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}

10.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

10.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}

10.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}

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

Java Database Connectivity (JDBC)メタデータ・プロバイダは、JDBC接続をサポートするターゲット・データベースから表メタデータを取得する際に使用し、データベース・スキーマがあります。JDBCメタデータ・プロバイダは、RDBMSであるターゲット・データベースの優先メタデータ・プロバイダとなりますが、他にJDBCドライバを提供する様々な非RDBMSターゲットがあります

この項の内容は次のとおりです。

10.3.1 JDBCの詳細な機能

JDBCメタデータ・プロバイダは、ターゲット・データベースとともに提供されるJDBCドライバを使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、JDBCドライバを使用して取得されます。Replicatプロセスは、列マッピング機能のために取得されるターゲット・メタデータを使用します。

Replicatパラメータ・ファイルでREPERRORを構成すると、JDBCハンドラでこの機能を有効化できます。また、次のようにJDBCハンドラ・プロパティ・ファイルでRDBMS JDBCターゲットに固有のエラー・コードを定義する必要があります。

表10-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

10.3.2 Javaクラスパス

gg.classpathプロパティを使用して、JDBC Java Driverの場所をハンドラのクラスパスに含める必要があります。

たとえば、MySQLデータベースの構成は次のようになります。

gg.classpath= /path/to/jdbc/driver/jar/mysql-connector-java-5.1.39-bin.jar

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

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

表10-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プロパティを使用してユーザー名を指定できます。

10.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

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

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.TeraDrivergg.mdp.UserName=username
gg.mdp.UserName=username
gg.mdp.Password=password

10.4 Hiveメタデータ・プロバイダ

Hiveメタデータ・プロバイダは、Hiveメタストアから表メタデータを取得する際に使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、COLMAPパラメータを使用して、Hiveから取得されます。取得されるターゲット・メタデータは、列マッピング機能のためにReplicatで使用されます。

この項の内容は次のとおりです。

10.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を参照してください。

10.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

10.4.3 クラスパス構成

Hiveメタデータ・プロバイダをHiveに接続して実行するには、gg.classpath構成変数に2つのものを構成する必要があります。1つ目はhive-site.xmlファイル、2つ目は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は使用しないでください

10.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で、NCHARNVARCHARなどの列のキャラクタ・セットを指定します。

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プリンシパル名。


10.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_HIVEGG_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

10.4.6 セキュリティ

Hiveサーバーは、Kerberos認証を使用して保護できます。Hiveサーバーの保護方法については、ご使用のHiveリリースのHiveドキュメントを参照してください。Hiveメタデータ・プロバイダは、Kerberosで保護されたHiveサーバーに接続できます。

HDFS core-site.xmlhive-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>

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

ソース・データベース表で変更がある場合、Hiveメタストアの表は、手動で更新/変更/作成する必要があります。メタデータ変更イベントがあった場合には、Replicatプロセスを中止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(process_name.prm)に次の指定を追加すると中止できます。

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

あるいは、レプリケーション構成ファイル(process_name.prm)に次の指定を追加するとReplicatプロセスを一時停止できます。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

10.4.8 制限事項

バイナリ・データ型の列は、主キーとして使用できません。

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降では、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。

10.4.9 その他の考慮事項

特に一般的なのが、Javaクラスパスに関する問題です。Hiveメタデータ・プロバイダでは、前提条件として、特定のHiveおよびHDFSクライアント・ライブラリをクラスパスで解決する必要があります。

必要なクライアントJARディレクトリは、「クラスパス構成」にリストしてあります。HiveおよびHDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。

Hiveサーバーへの接続を確立するには、クラスパスにhive-site.xmlファイルが存在する必要があります。

10.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)