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

メタデータ・プロバイダは、Replicatパラメータ・ファイルを使用してソースからターゲットに複製できます。

この章では、メタデータ・プロバイダの使用方法について説明します。

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

メタデータ・プロバイダは、ハンドラがReplicatプロセスで実行されるように構成されている場合にのみ機能します。

Replicatプロセスは、Replicat構成ファイルの構文を使用して、ソース表からターゲット表に、およびソース列からターゲット列にマッピングします。ソース・メタデータ定義は、Oracle GoldenGate証跡ファイルに含まれています(または、12.2以降のリリースのOracle GoldenGateではソース定義ファイルによって)。レプリケーション・ターゲットがデータベースの場合、Replicatプロセスはターゲット・メタデータ定義をターゲット・データベースから取得します。ただし、これは一般的にビッグ・データ・アプリケーションにデータをプッシュする場合やJava配信中には不利です。一般的に、ビッグ・データ・アプリケーションはターゲット・メタデータを提供しないため、Replicatのマッピングは実行できません。この短所に対処するのが、メタデータ・プロバイダです。メタデータ・プロバイダを使用すると、AvroまたはHiveを使用してターゲット・メタデータを定義でき、ソース表からターゲット表へ、およびソース列からターゲット列へのReplicatマッピングが可能になります。

メタデータ・プロバイダの使用はオプションであり、有効にするにはJavaアダプタ・プロパティ・ファイルでgg.mdp.typeプロパティを指定します。ソースのOracle GoldenGate証跡ファイルに含まれるメタデータを出力に利用できる場合、メタデータ・プロバイダは使用しないでください。メタデータ・プロバイダは、次の場合に使用する必要があります。

  • ソース表名を、一致しないターゲット表名にマップする必要があります。

  • ソース列名を、一致しないターゲット列名にマップする必要があります。

  • ソース証跡ファイルの特定の列を含め、それ以外の列を除外する必要があります。

Replicatマッピングの制限は、Replicat構成ファイルに定義されているマッピングが静的であるということです。Oracle GoldenGateには、ソースとしてOracleデータベースを使用するとき、DDL伝播の機能があります。メタデータ・プロバイダとReplicatマッピングを使用する際には、スキーマ展開の適切な処理が問題になることがあります。スキーマ展開のユースケースを考慮したうえで、必要な変更のためにメタデータ・プロバイダとReplicatマッピング構文をどのように更新するかを計画します。

COLMAPを使用してReplicatでマップされる表ごとに、構成されたメタデータ・プロバイダからメタデータが取得され、そのメタデータがReplicatによって列マッピングに使用されます。

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

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

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

24.2.1 詳細な機能

Avroメタデータ・プロバイダは、Avroスキーマ定義ファイルを使用してメタデータを使用します。AvroスキーマはJSONを使用して定義されます。process_name. prmファイルでマップされる表ごとに、対応するAvroスキーマ定義ファイルを作成する必要があります。

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メタデータ・プロバイダによってアクセスされるスキーマ・ファイルの名前は、次の形式にする必要があります。

[$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

https://avro.apache.org/docs/1.7.5/spec.html#schema_primitiveを参照してください。

24.2.2 実行時の前提条件

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

24.2.3 クラスパス構成

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

24.2.4 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データベースでNCHARNVARCHARなどの列の文字セットを指定する場合に使用します。

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

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

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

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

また、Replicatプロセスを一時停止するには、レプリケーション構成ファイルに次の行を追加します。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

24.2.7 制限事項

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

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

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

このトピックでは、次の問題をトラブルシューティングする方法について説明します。

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

gg.mdp.schemaFilesPath構成プロパティで指定するAvroスキーマ・ファイル・ディレクトリは、有効なディレクトリである必要があります。パスが有効でない場合、次の例外が発生します。

oracle.goldengate.util.ConfigException: Error initializing Avro metadata provider
Specified schema location does not exist. {/path/to/schema/files/dir}
24.2.8.2 無効なスキーマ・ファイル名

process_name.prmファイルでマップされる表ごとに、gg.mdp.schemaFilesPathで指定されたディレクトリに対応するAvroスキーマ・ファイルを作成する必要があります。

たとえば、次のシナリオを考えてみます。

マッピング:

MAP GG.TCUSTMER, TARGET GG_AVRO.TCUSTMER_AVRO, COLMAP(USEDEFAULTS, cust_code2=cust_code, CITY2 = CITY);
 

プロパティ:

gg.mdp.schemaFilesPath=/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
24.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が次の例外で異常終了します。

Unable to retrieve table matadata. Table : GG_AVRO.TCUSTMER_AVRO
Mapped [catalogname.]schemaname (GG_AVRO) does not match with the schema namespace {schema namespace}
24.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}

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

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

24.3.1 JDBCの詳細な機能

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

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

表24-1 JDBC REPERRORのコード

プロパティ 必須
gg.error.duplicateErrorCodes

重複エラーを示すエラー・コードのカンマ区切りの整数値

いいえ

gg.error.notFoundErrorCodes

Not Foundエラーを示すエラー・コードのカンマ区切りの整数値

いいえ

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

24.3.2 Javaクラスパス

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

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

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

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

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

表24-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プロパティを使用してパスワードを指定できます。

24.3.4 サンプル構成の確認

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

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

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

24.4.1 詳細な機能

Hiveメタデータ・プロバイダは、Hive JDBCとHCatalogの両方のインタフェースを使用して、Hiveメタストアからメタデータを取得します。process_name.prmファイルでマップされる表ごとに、対応する表がHiveに作成されます。

デフォルトのHive構成では、埋込みのローカルのメタストアであるDerbyデータベースが起動します。Apache Derbyは、埋込みデータベースとして設計されているため、単一の接続のみ可能です。このDerbyデータベースの制限は、Hiveメタデータ・プロバイダを使用する場合は機能できないことを意味します。この制限を回避するには、リモート・メタストア・データベースを使用してHiveを構成する必要があります。リモート・メタストア・データベースを使用してHiveを構成する方法の詳細は、https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administrationを参照してください。

Hiveは、主キーのセマンティクスをサポートしていないため、Hiveメタストアから取得されるメタデータには、主キー定義が含まれません。Hiveメタデータ・プロバイダを使用する場合は、ReplicatのKEYCOLSパラメータを使用して主キーを定義します。

KEYCOLS

ターゲット・スキーマで主キーを定義するには、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

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Typesを参照してください。

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

ノート:

HiveのクラスパスにMySQL JDBCコネクタJARを追加するには、次のステップを実行します。

  1. HIVE_HOME/lib/ディレクトリ内。DB_NAMEは、MySQLで作成されるデータベースの有効な名前に置き換えてください。

  2. Hiveサーバーを起動します:

    HIVE_HOME/bin/hiveserver2/bin/hiveserver2

  3. Hiveリモート・メタストア・サーバーを起動します。

    HIVE_HOME/bin/hive --service metastore

24.4.3 クラスパス構成

Hiveメタデータ・プロバイダをHiveに接続するには、gg.classpath変数でhive-site.xmlファイルと、HiveおよびHDFSクライアントjarを構成する必要があります。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。

たとえば、hive-site.xmlファイルが/home/user/oggadp/dirprmディレクトリに作成される場合、gg.classpathエントリはgg.classpath=/home/user/oggadp/dirprm/です

  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>
  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を、ステップ1で示したとおり正確に構成します。hive-site.xmlファイルのパスは、ワイルドカードが付加されていないパスにしてください。hive-site.xmlファイルのパスにワイルドカード(*)を含めると、配置されません。依存関係JARのパスには、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください

24.4.4 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データベースでNCHARNVARCHARなどの列の文字セットを指定できます。

gg.mdp.authType

オプション

Kerberos

なし

HiveへのKerberos認証を指定できます。

gg.mdp.kerberosKeytabFile

オプション(authType=kerberosの場合は必須)

Kerberosキータブ・ファイルの相対パスまたは絶対パス。

-

keytabファイルを使用すると、Hiveがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.mdp.kerberosPrincipal

オプション(authType=kerberosの場合は必須)

有効なKerberosプリンシパル名(user/FQDN@MY.REALM)

-

Kerberos認証で用いるKerberosプリンシパル名。

24.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パラメータを使用して主キーを指定します。

ノート:

任意のスキーマ名を選択でき、gg_hive schema名には制限されません。Hiveスキーマは、既存のものでも新規作成してもかまいません。これには、Javaアダプタ・プロパティ・ファイルで接続URL (gg.mdp.connectionUrl)を、Replicat.prmファイルでマッピング構成を、それぞれ変更します。スキーマ名が変更されたら、接続URL (gg.mdp.connectionUrl)と、Replicat.prmファイルのマッピングを更新します。

Hiveにこの例のスキーマおよび表を作成するには、次のコマンドを使用します。Hiveにこの例のスキーマおよび表を作成するには、次のコマンドを使用します。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

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

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

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

DDL INCLUDE ALL, EVENTACTIONS (ABORT)

Replicatプロセスを一時停止するには、レプリケーション構成ファイルに次の行を追加します。

DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)

24.4.8 制限事項

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

Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降のバージョンでは、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。DDL伝播とソース・スキーマ展開を使用する場合、ソース・メタデータの変更をシームレスに処理できなくなります。

24.4.9 その他の考慮事項

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

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

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

24.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に存在しない場合、次の例外が発生します。

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)