この章では、メタデータ・プロバイダの機能と、メタデータ・プロバイダの各タイプについて説明し、その機能の理解に役立つ例も示します。
トピック:
メタデータ・プロバイダは、ハンドラが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のメタデータ・プロバイダがサポートされています。
シナリオ - いつメタデータ・プロバイダを使用するか
次のシナリオでは、メタデータ・プロバイダの構成は必要ありません。
GG
という名前のソース・スキーマが、GGADP
という名前のターゲット・スキーマにマップされるスキーマ名のマッピング。*
GG.TCUSTMER
というスキーマが、GGADP.TCUSTMER_NEW
という表名にマップされるスキーマと表名のマッピング。
MAP GG.*, TARGET GGADP.*; (OR) MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW;
次のシナリオでは、メタデータ・プロバイダの構成が必要です。
ソース列名がターゲット列名に一致しない列名のマッピング。たとえば、ソース列CUST_CODE
は、ターゲット列CUST_CODE_NEW
にマップします
MAP GG.TCUSTMER, TARGET GG_ADP.TCUSTMER_NEW, COLMAP(USEDEFAULTS, CUST_CODE_NEW=CUST_CODE, CITY2=CITY);
Avroメタデータ・プロバイダは、Avroスキーマ・ファイルから表メタデータを取得する際に使用します。COLMAP
を使用してReplicatでマップされる表ごとに、Avroスキーマからメタデータが取得され、そのメタデータがReplicatによって列マッピングのために使用されます。
トピック:
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
を参照してください。
この項では、Oracle GoldenGate Avroメタデータ・プロバイダの構成プロパティについて詳細に説明します。
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
|
Avroメタデータ・プロバイダを選択します |
|
必須 |
有効な値の例は、 |
|
Avroスキーマ・ファイルのディレクトリのパス |
|
オプション |
有効なキャラクタ・セット |
|
文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。 |
|
オプション |
有効なキャラクタ・セット |
|
文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。 例: Oracle Databaseの場合、 |
この項では、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
ソース・データベース表でDDL変更がある場合、Avroスキーマ定義と、Replicat構成ファイルでのマッピングは、変更が必要な場合があります。メタデータ変更イベントがあった場合には、Replicatプロセスを停止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(process_name.prm
)に次の指定を追加すると停止できます。
DDL INCLUDE ALL, EVENTACTIONS (ABORT)
あるいは、レプリケーション構成ファイルに次の指定を追加するとReplicatプロセスを一時停止できます。
DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)
Avroのbyteデータ型は、主キーとして使用できません。
Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降では、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。
トピック:
構成プロパティ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}
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
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}
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}
Java Database Connectivity (JDBC)メタデータ・プロバイダは、JDBC接続をサポートするターゲット・データベースから表メタデータを取得する際に使用し、データベース・スキーマがあります。JDBCメタデータ・プロバイダは、RDBMSであるターゲット・データベースの優先メタデータ・プロバイダとなりますが、他にJDBCドライバを提供する様々な非RDBMSターゲットがあります
トピック:
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
gg.classpath
プロパティを使用して、JDBC Java Driverの場所をハンドラのクラスパスに含める必要があります。
たとえば、MySQLデータベースの構成は次のようになります。
gg.classpath= /path/to/jdbc/driver/jar/mysql-connector-java-5.1.39-bin.jar
JDBCメタデータ・プロバイダの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。
表11-2 JDBCメタデータ・プロバイダのプロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
なし |
コマンド・プロンプトで |
|
必須 |
|
なし |
ターゲット・データベースのJDBC URL。 |
|
必須 |
JDBCドライバのJavaクラス名 |
なし |
JDBCドライバの完全修飾のJavaクラス名。 |
|
オプション |
有効なユーザー名の文字列。 |
なし |
JDBC接続のユーザー名。または、 |
|
オプション |
有効なパスワードの文字列。 |
なし |
JDBC接続のパスワード。または、 |
この項では、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
Hiveメタデータ・プロバイダは、Hiveメタストアから表メタデータを取得する際に使用します。メタデータは、Replicatプロパティ・ファイルでマップされているターゲット表ごとに、COLMAP
パラメータを使用して、Hiveから取得されます。取得されるターゲット・メタデータは、列マッピング機能のためにReplicatで使用されます。
トピック:
Hiveメタデータ・プロバイダは、Hive JDBCとHCatalogの両方のインタフェースを使用して、Hiveメタストアからメタデータを取得します。process_name.prm
ファイルでマップされる表ごとに、対応する表をHiveに作成する必要があります。
デフォルトのHive構成では、組込みおよびローカルのメタストアであるDerbyデータベースが起動します。Apache Derbyは、組込みデータベースとして設計され、単一の接続のみ可能です。Hiveメタストア実装としてDerbyデータベースの接続が1つに制限されているということは、Hiveメタデータ・プロバイダと連携すると機能できないということです。これをなくすために、リモート・メタストア・データベースを使用してHiveを構成する必要があります。リモート・メタストア・データベースを使用するようにHiveを構成する詳細は、次のサイトを参照してください。
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
を参照してください。
リモート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のクラスパスに追加する必要があります。
HIVE_HOME
/lib/
ディレクトリ内。DB_NAME
は、MySQLで作成されるデータベースの有効な名前に置き換えてください。
Hiveサーバーを起動します:
HIVE_HOME
/bin/hiveserver2/bin/hiveserver2
Hiveリモート・メタストア・サーバーを起動します。
HIVE_HOME
/bin/hive --service metastore
Hiveメタデータ・プロバイダをHiveに接続して実行するには、gg.classpath
構成変数に2つのものを構成する必要があります。最初のファイルはhive-site.xml
ファイルで、通常は$HIVE_HOME/conf
ディレクトリにあります。2番目は、HiveおよびHDFSクライアントのjarファイルです。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。
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/
です
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
は使用しないでください。
この項では、Hiveメタデータ・プロバイダの構成プロパティについて詳細に説明します。
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
|
Hiveメタデータ・プロバイダを選択します |
|
必須 |
Kerberos認証を使用せずにフォーマット: j Kerberos認証を使用してフォーマット:
|
|
HiveサーバーのJDBC接続URL |
|
必須 |
|
|
完全修飾のHive JDBCドライバ・クラス名。 |
|
オプション |
有効なユーザー名 |
|
Hiveデータベースに接続するためのユーザー名。Kerberos認証を使用する場合、 |
|
オプション |
有効なパスワード |
|
Hiveデータベースに接続する際のパスワード |
|
オプション |
有効なキャラクタ・セット |
|
文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。 |
|
オプション |
有効なキャラクタ・セット |
|
文字データ型で列のキャラクタ・セットを指定します。これは、ソース・データを証跡ファイルから正しいターゲットのキャラクタ・セットに変換します。 たとえば、Oracle Databaseで、 |
|
オプション |
kerberos |
なし |
|
|
オプション( |
Kerberosキータブ・ファイルの相対パスまたは絶対パス。 |
|
|
|
オプション( |
有効なKerberosプリンシパル名( |
|
Kerberos認証で用いるKerberosプリンシパル名。 |
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
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>
ソース・データベース表で変更がある場合、Hiveメタストアの表は、手動で更新/変更/作成する必要があります。メタデータ変更イベントがあった場合には、Replicatプロセスを中止または一時停止したいこともあります。Replicatプロセスは、Replicat構成ファイル(process_name.prm
)に次の指定を追加すると中止できます。
DDL INCLUDE ALL, EVENTACTIONS (ABORT)
あるいは、レプリケーション構成ファイル(process_name.prm
)に次の指定を追加するとReplicatプロセスを一時停止できます。
DDL INCLUDE ALL, EVENTACTIONS (SUSPEND)
バイナリ・データ型の列は、主キーとして使用できません。
Replicat構成ファイルに定義されているソースからターゲットへのマッピングは静的です。Oracle GoldenGate 12.2以降では、Oracleデータベースがレプリケーション・ソースの場合に、DDL伝播とソース・スキーマ展開をサポートします。ただし、Replicat構成ファイルで構成されるマッピングは静的なため、ソース・スキーマの展開が問題になる場合もあります。
特に一般的なのが、Javaクラスパスに関する問題です。Hiveメタデータ・プロバイダでは、前提条件として、特定のHiveおよびHDFSクライアント・ライブラリをクラスパスで解決する必要があります。
必要なクライアントJARディレクトリは、「クラスパス構成」にリストしてあります。HiveおよびHDFSクライアントjarは、Oracle GoldenGate for Big Data製品に付属しません。クライアントJARは、Hiveメタデータ・プロバイダが接続するHiveのバージョンと一致する必要があります。
Hiveサーバーへの接続を確立するには、クラスパスにhive-site.xml
ファイルが存在する必要があります。
マップされたターゲット表が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)