ヘッダーをスキップ
Oracle® Big Data Connectorsユーザーズ・ガイド
リリース2 (2.0)
B71710-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 Oracle SQL Connector for Hadoop Distributed File System

この章では、Oracle SQL Connector for Hadoop Distributed File System (HDFS)を使用して、HDFSとOracle Database間のデータ・アクセスを容易にする方法について説明します。

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

2.1 Oracle SQL Connector for HDFSについて

Oracle SQL Connector for HDFSを使用する場合、HDFSファイルやHive表に存在するデータへのアクセスやデータの分析にOracle Databaseを使用できます。また、HDFSやHive表のデータに問い合せたり、そのデータを他のデータベースに存在するデータと結合したりすることもできます。必要に応じて、SQLを使用してデータをデータベースにロードすることもできます。

Oracle SQL Connector for HDFSは、Oracle Databaseが稼働するシステムにインストールして構成します。また、Oracle Databaseが稼働するシステムでの実行も可能です。Hive表がデータソースとして使用される場合、HiveがインストールされているシステムにOracle SQL Connector for HDFSもインストールして実行する必要があります。「Oracle SQL Connector for Hadoop Distributed File Systemの設定」を参照してください。


関連項目:

Oracle SQL Connector for HDFSに関する既知の問題の詳細は、$OSCH_HOME/doc/README.txtを参照してください。

2.2 外部表について

Oracle SQL Connector for HDFSでは、外部表を使用して、Hive表、HDFSのデリミタ付きテキスト・ファイルおよびデータ・ポンプ・ファイルへの読取りアクセス権をOracle Databaseに提供します。外部表は、データベース外のデータの場所を識別するOracle Databaseオブジェクトです。Oracle Databaseは、外部表の作成時に指定されたメタデータを使用してデータにアクセスします。外部表への問合せによって、データがデータベースの表に格納されている場合と同様に、HDFSやHive表に格納されているデータにアクセスできます。

Oracle SQL Connector for HDFSでは、ORACLE_LOADERアクセス・ドライバが使用されます。

データへのアクセスに外部表が使用されるため、外部表のすべての機能と制限が適用されます。問合せは、自動ロード・バランシングと並列で実行されます。ただし、外部表では、更新、挿入および削除操作は許可されず、索引を作成できません。外部表にアクセスすると、表の完全スキャンが常に実行されます。

Oracle SQL Connector for HDFSは、次のデータソースの外部表を作成できます。

「外部表の作成」を参照してください。


注意:

Oracle Loader for Hadoopで作成されるデータ・ポンプ・ファイルにコネクタがアクセスできるようにするには、Oracle SQL Connector for HDFSでOracle Databaseへのパッチが必要です。このパッチをダウンロードするには、http://support.oracle.comにアクセスしてOracle Bug#14557588を検索します。


関連項目:

  • 外部表の詳細は、『Oracle Database管理者ガイド』

  • 外部表、パフォーマンス・ヒント、およびORACLE_LOADERアクセス・ドライバを使用する際の制限事項の詳細は、『Oracle Databaseユーティリティ』


2.2.1 場所ファイルとは

場所ファイルは、外部表のLOCATION句で指定されるファイルです。Oracle SQL Connector for HDFSは、データ・ファイルのUniversal Resource Identifier (URI)のみを含む場所ファイルを作成します。データ・ファイルには、HDFSに格納されるデータが含まれます。

2.2.2 並列処理の有効化

外部表で並列処理を有効にするには、外部表のLOCATION句で複数のファイルを指定する必要があります。ファイルの数(並列度とも呼ばれる)は、表の読取り時に外部表で開始される子プロセスの数を決定します。子プロセスのアイドル状態を回避するには、並列度をデータ・ファイルの数と同程度に少なくすることが理想的です。

2.2.3 場所ファイルの管理

Oracle SQL Connector for HDFSのコマンドライン・ツールExternalTableは、外部表の場所ファイルを管理します。場所ファイルの管理には、次のような操作があります。

  • 名前の競合の確認後、データベース・ディレクトリに新しい場所ファイルを生成

  • データベース・ディレクトリの既存の場所ファイルを必要に応じて削除

  • データのURIを新しい場所ファイルに公開

  • 新しい場所ファイルに一致するように外部表のLOCATION句を変更

サポート対象データソースの場所ファイルの管理については、次のトピックで説明します。

データ・ポンプ・ファイル形式

データ・ポンプ・ファイルにアクセスするには、ORACLE_LOADERアクセス・ドライバが必要です。このドライバでは、各場所ファイルがHDFSの単一のデータ・ポンプ・ファイルに対応する必要があります。空の場所ファイルは許可されないため、外部表の場所ファイルの数は、HDFSのデータ・ファイルの数と厳密に一致する必要があります。

Oracle SQL Connector for HDFSは、場所ファイルの管理を自動的に引き継ぎ、外部表の場所ファイルの数とHDFSのデータ・ポンプ・ファイルの数が同じになるようにします。

HDFSのデリミタ付きファイルとHive表

ORACLE_LOADERアクセス・ドライバには、場所ファイルの数に関する制限はありません。各場所ファイルは、HDFSの1つ以上のデータ・ファイルに対応できます。外部表の場所ファイルの数は、oracle.hadoop.exttab.locationFileCount構成プロパティで示されます。

「構成プロパティ」を参照してください。

2.2.4 場所ファイルの名前

場所ファイル名の形式は次のようになります。

osch-timestamp-number-n

この構文の詳細は次のとおりです。

timestampの形式はyyyyMMddhhmmssです。たとえば、2012年10月17日の10:39:41の場合、20121017103941となります。

numberは、異なる表の間で場所ファイル名の競合が起こらないように使用されるランダムな数字です。

nは、同じ表の場所ファイルで名前の競合が起こらないように使用される索引です。

たとえば、osch-20121017103941-6807-1のようになります。

2.3 ExternalTableコマンドライン・ツールの使用方法

Oracle SQL Connector for HDFSには、ExternalTableというコマンドライン・ツールがあります。この項では、このツールの基本的な使用方法について説明します。データソースに固有のコマンド構文については、「ExternalTableコマンドライン・ツールの使用方法」を参照してください。

2.3.1 外部表について

ExternalTableツールでは、いくつかのプロパティの値を使用して次のタスクを行います。

  • 外部表の作成

  • 場所ファイルの移入

  • 既存の外部表への場所ファイルの公開

  • 場所ファイルのリスト

  • 外部表の説明

これらのプロパティ値はXMLドキュメントに指定することも、コマンドラインで個々に指定することもできます。「Oracle SQL Connector for HDFSの構成」を参照してください。

2.3.2 HADOOP_CLASSPATHの変更

ExternalTableを使用する前に、次の内容をHADOOP_CLASSPATH環境変数に追加します。

  • $OSCH_HOME/jlib/*

Hive表をデータソースとして使用する場合、次の内容もHADOOP_CLASSPATHに追加します。

  • $HIVE_HOME/lib/*

  • $HIVE_CONF_DIR (設定される場合)、または$HIVE_HOME/conf

「ExternalTableコマンドライン・ツールの例」を参照してください。

2.3.3 ExternalTableコマンドライン・ツールの構文

ExternalTableコマンドライン・ツールの完全な構文は次のようになります。

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdfs.jar \
oracle.hadoop.exttab.ExternalTable \
[-conf config_file]... \ 
[-D property=value]... \
-createTable [--noexecute] 
  | -publish [--noexecute] 
  | -listlocations [--details]
  | -getDDL

コマンドの説明 

-conf config_file

実行するコマンドで必要なプロパティを含むXML構成ファイルの名前を特定します。「Oracle SQL Connector for HDFSの構成」を参照してください。

-D property=value

特定のプロパティに値を割り当てます。

-createTable [--noexecute]

外部表定義を作成し、データのURIを外部表の場所ファイルに公開します。出力レポートに、外部表の作成に使用されるDDLと、場所ファイルの内容が示されます。

--noexecuteオプションを使用して、コマンドの実行計画を表示します。操作は実行されませんが、レポートには、実行計画の詳細とエラーが表示されます。最初に、-createTableコマンドを--noexecuteを指定して実行することをお薦めします。

-publish [--noexecute]

既存の外部表の場所ファイルにデータのURIを公開します。

--noexecuteオプションを使用して、コマンドの実行計画を表示します。操作は実行されませんが、レポートには、計画されているSQL ALTER TABLEコマンドと場所ファイルが表示されます。また、エラーも示されます。最初に、-publishコマンドを--noexecuteを指定して実行することをお薦めします。

-listLocations [--details]

場所ファイルの内容をテキストで表示します。このコマンドで--detailsオプションを指定すると、詳細なリストが示されます。「場所ファイルとは」を参照してください。

-getDDL

既存の外部表の表定義を出力します。「外部表の説明」を参照してください。


関連項目:

「構文の規則」

2.4 外部表の作成

Oracle SQL Connector for HDFSで提供されるExternalTableツールを使用して、外部表を自動的に作成できます。

2.4.1 ExternalTableツールによる外部表の作成

ExternalTableツールを使用して外部表を作成するには、使用するデータソースにあわせて次の手順を実行します。

ExternalTableの-createTableコマンドの実行を完了すると、外部表を使用する準備ができます。

外部表を手動で作成するには、「SQLでの外部表の作成」の手順に従います。

-createTableのExternalTable構文

次の構文を使用して外部表を作成し、その場所ファイルを移入します。

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdfs.jar oracle.hadoop.exttab.ExternalTable \
[-conf config_file]... \
[-D property=value]... \
-createTable [--noexecute]

2.4.2 データ・ポンプ形式ファイルからの外部表の作成

Oracle SQL Connector for HDFSは、Oracle Loader for Hadoopで作成されるデータ・ポンプ・ファイルのみをサポートし、Oracleユーティリティで作成される汎用データ・ポンプ・ファイルはサポートしません。

Oracle SQL Connector for HDFSは、データ・ポンプ・ファイルのヘッダーのメタデータを使用してデータ・ポンプ・ファイルの外部表定義を作成します。また、disable_directory_link_checkおよびpreprocessorアクセス・パラメータでORACLE_LOADERアクセス・ドライバを使用します。さらに、EXTERNAL VARIABLE DATAという特殊なアクセス・パラメータも使用します。このパラメータを使用すると、ORACLE_LOADERは、Oracle Loader for Hadoopで生成されたデータ・ポンプ形式ファイルを読み取ることができます。

2.4.2.1 必須プロパティ

次のプロパティは必須です。

  • oracle.hadoop.exttab.tableName

  • oracle.hadoop.exttab.sourceType=datapump

  • oracle.hadoop.exttab.dataPaths

  • oracle.hadoop.exttab.defaultDirectory

  • oracle.hadoop.connection.url

  • oracle.hadoop.connection.user

このデータソースに使用されるプロパティの説明については、「Oracle SQL Connector for HDFSの構成」を参照してください。

2.4.2.2 オプションのプロパティ

次のプロパティはオプションです。

  • oracle.hadoop.exttab.logDirectory

2.4.2.3

例2-1では、データ・ポンプ・ファイルを読み取るSALES_DP_XTABという外部表を作成します。

例2-1 データ・ポンプ形式ファイルの外部表の定義

Oracle Databaseを実行しているオペレーティング・システム・ユーザー(通常はoracleユーザー)としてログインし、ファイルシステム・ディレクトリを作成します。

$ mkdir /scratch/sales_dp_dir

データベース・ディレクトリを作成し、そのディレクトリに対する読取りアクセス権と書込みアクセス権を付与します。

$ sqlplus / as sysdba
SQL> CREATE OR REPLACE DIRECTORY sales_dp_dir AS '/scratch/sales_dp_dir'
SQL> GRANT READ, WRITE ON DIRECTORY sales_dp_dir TO scott;

外部表を作成します。

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdsf.jar \
oracle.hadoop.exttab.ExternalTable \
-D oracle.hadoop.exttab.tableName=SALES_DP_XTAB \
-D oracle.hadoop.exttab.sourceType=datapump \
-D oracle.hadoop.exttab.dataPaths=hdfs://user/scott/olh_sales_dpoutput/ \
-D oracle.hadoop.exttab.defaultDirectory=SALES_DP_DIR \
-D oracle.hadoop.connection.url=jdbc:oracle:thin:@//myhost:1521/myservicename \
-D oracle.hadoop.connection.user=SCOTT \
-createTable

2.4.3 Hive表からの外部表の作成

Oracle SQL Connector for HDFSは、Hiveメタストア・クライアントにアクセスして表の列や表データの場所に関する情報を取得することで、Hive表から外部表定義を作成します。さらに、Hive表のデータ・パスがOracle外部表の場所ファイルに公開されます。

Hive表のメタデータを読み取る場合、Oracle SQL Connector for HDFSでは、HiveのJARファイルがHADOOP_CLASSPATH変数に含まれる必要があります。つまり、Hiveクライアントが機能しているコンピュータにOracle SQL Connector for HDFSをインストールしてこれが稼働している必要があります。

Hive構成ディレクトリをHADOOP_CLASSPATH環境変数に追加したことを確認します。Hiveクライアントが正しく機能している必要があります。

Hive管理表の場合、データ・パスはウェアハウス・ディレクトリから始まります。

Hive外部表の場合、HDFSの外部の場所からのデータ・パスは、Oracle外部表の場所ファイルに公開されます。表の作成時に外部の場所が定義されるかどうかをHiveは確認しないため、Hive外部表にはデータがありません。Hive表が空の場合、1つの場所ファイルが公開されますが、ヘッダーのみが含まれデータのURIはありません。

Oracle外部表は、「動作中」のHive表ではありません。Hive表が変更される場合、ExternalTableツールを使用して、データを公開するか、新しい外部表を作成する必要があります。

2.4.3.1 Hive表の要件

Oracle SQL Connector for HDFSは、ROW FORMAT DELIMITED句とFILE FORMAT TEXTFILE句を使用して定義される、パーティション化されていないHive表をサポートします。Hive管理表とHive外部表はどちらもサポートされます。

Hive表は、バケット化される場合とされない場合があります。Hive 0.7.1 (CDH3)のすべてのプリミティブ型とTIMESTAMP型の表の列がサポートされます。

2.4.3.2 必須プロパティ

Hive表のソースには、次のプロパティが必要です。

  • oracle.hadoop.exttab.tableName

  • oracle.hadoop.exttab.defaultDirectory

  • oracle.hadoop.exttab.sourceType=hive

  • oracle.hadoop.exttab.hive.tableName

  • oracle.hadoop.exttab.hive.databaseName

  • oracle.hadoop.connection.url

  • oracle.hadoop.connection.user

このデータソースに使用されるプロパティの説明については、「Oracle SQL Connector for HDFSの構成」を参照してください。

2.4.3.3 オプションのプロパティ

Hive表のソースの場合、次のプロパティはオプションです。

  • oracle.hadoop.locationFileCount

2.4.3.4

例2-2では、SALES_HIVE_XTABという外部表を作成して、Hive表からデータを読み取ります。

例2-2 Hive表の外部表の定義

Oracle Databaseを実行しているオペレーティング・システム・ユーザー(通常はoracleユーザー)としてログインし、ファイルシステム・ディレクトリを作成します。

$ mkdir /scratch/sales_hive_dir

データベース・ディレクトリを作成し、そのディレクトリに対する読取りアクセス権と書込みアクセス権を付与します。

$ sqlplus / as sysdba
SQL> CREATE OR REPLACE DIRECTORY sales_hive_dir AS '/scratch/sales_hive_dir'
SQL> GRANT READ, WRITE ON DIRECTORY sales_hive_dir TO scott;

外部表を作成します。

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdfs.jar \
oracle.hadoop.exttab.ExternalTable \
-D oracle.hadoop.exttab.tableName=SALES_HIVE_XTAB \
-D oracle.hadoop.exttab.sourceType=hive \
-D oracle.hadoop.exttab.locationFileCount=2 \
-D oracle.hadoop.exttab.hive.tableName=sales_country_us \
-D oracle.hadoop.exttab.hive.databaseName=salesdb \
-D oracle.hadoop.exttab.defaultDirectory=SALES_HIVE_DIR \
-D oracle.hadoop.connection.url=jdbc:oracle:thin:@//myhost:1521/myservicename \
-D oracle.hadoop.connection.user=SCOTT \
-createTable

2.4.4 デリミタ付きテキスト・ファイルからの外部表の作成

Oracle SQL Connector for HDFSは、列の数、テキスト・デリミタおよび外部表の列名(オプション)を指定する構成プロパティを使用して、デリミタ付きテキスト・ファイルの外部表定義を作成します。外部表の列はすべてVARCHAR2になります。列名を指定しない場合、デフォルトでC1からCnに設定されます。nは、oracle.hadoop.exttab.columnCountプロパティで指定される列の数です。

2.4.4.1 必須プロパティ

デリミタ付きテキストのソースの場合、次のプロパティが必要です。

  • oracle.hadoop.exttab.tableName

  • oracle.hadoop.exttab.dataPaths

  • oracle.hadoop.exttab.columnCountまたはoracle.hadoop.exttab.columnNames

  • oracle.hadoop.exttab.defaultDirectory

  • oracle.hadoop.connection.url

  • oracle.hadoop.connection.user

このデータソースに使用されるプロパティの説明については、「Oracle SQL Connector for HDFSの構成」を参照してください。

2.4.4.2 オプションのプロパティ

デリミタ付きテキストのソースの場合、次のプロパティはオプションです。

  • oracle.hadoop.exttab.recordDelimiter

  • oracle.hadoop.exttab.fieldTerminator

  • oracle.hadoop.exttab.initialFieldEncloser

  • oracle.hadoop.exttab.trailingFieldEncloser

  • oracle.hadoop.exttab.locationFileCount

2.4.4.3

例2-3では、SALES_DT_XTABという外部表をデリミタ付きテキスト・ファイルから作成します。

例2-3 デリミタ付きテキスト・ファイルの外部表の定義

Oracle Databaseを実行しているオペレーティング・システム・ユーザー(通常はoracleユーザー)としてログインし、ファイルシステム・ディレクトリを作成します。

$ mkdir /scratch/sales_dt_dir

データベース・ディレクトリを作成し、そのディレクトリに対する読取りアクセス権と書込みアクセス権を付与します。

$ sqlplus / as sysdba
SQL> CREATE OR REPLACE DIRECTORY sales_dt_dir AS '/scratch/sales_dt_dir'
SQL> GRANT READ, WRITE ON DIRECTORY sales_dt_dir TO scott;

外部表を作成します。

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdfs.jar \
oracle.hadoop.exttab.ExternalTable \
-D oracle.hadoop.exttab.tableName=SALES_DT_XTAB \
-D oracle.hadoop.exttab.locationFileCount=2 \
-D oracle.hadoop.exttab.dataPaths="hdfs://user/scott/olh_sales/*.dat" \
-D oracle.hadoop.exttab.columnCount=10 \
-D oracle.hadoop.exttab.defaultDirectory=SALES_DT_DIR \
-D oracle.hadoop.connection.url=jdbc:oracle:thin:@//myhost:1521/myservicename \
-D oracle.hadoop.connection.user=SCOTT \
-createTable

2.4.5 SQLでの外部表の作成

Oracle SQL Connector for HDFSに対する外部表を手動で作成できます。たとえば、次の手順では、ExternalTable -createTableコマンドで公開されない外部表の構文を使用できます。

追加の構文は、データ・ポンプ形式ファイルではサポートされません。

外部表を手動で作成するには、次の手順を実行します。 

  1. -createTable --noexecuteコマンドを使用して、外部表DDLを生成します。

  2. DDLに必要な変更をすべて行います。

  3. ステップ2のDDLを実行して、Oracle Databaseに表定義を作成します。

  4. ExternalTable -publishコマンドを使用して、外部表の場所ファイルにデータのURIを公開します。

2.5 HDFSデータ・パスの公開

-createTableコマンドは、Oracle Databaseにメタデータを作成し、HDFSのデータ・ファイルのUniversal Resource Identifier (URI)を場所ファイルに移入します。ただし、次のような場合、外部表の作成とは別のステップとしてURIを公開します。

どちらの場合も、-publishを指定したExternalTableコマンドを使用して、HDFSのデータ・ファイルのURIを外部表の場所ファイルに移入できます。「場所ファイルの管理」を参照してください。

公開用のExternalTable構文

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdfs.jar \
oracle.hadoop.exttab.ExternalTable \
[-conf config_file]... \
[-D property=value]... \
-publish [--noexecute]

ExternalTableコマンドライン・ツールの例

例2-4では、HADOOP_CLASSPATHを設定し、例2-1で作成された外部表にHDFSのデータ・パスを公開します。この環境変数の設定の詳細は、「HADOOP_CLASSPATHの変更」を参照してください。

例2-4 データ・ポンプ形式ファイルの外部表へのHDFSデータ・パスの公開

この例ではBashシェルが使用されます。

$ export HADOOP_CLASSPATH="$OSCH_HOME/jlib/*"
$ $HADOOP_HOME/bin/hadoop jar \
$OSCH_HOME/jlib/orahdfs.jar oracle.hadoop.exttab.ExternalTable \
-D oracle.hadoop.exttab.tableName=SALES_DP_XTAB \
-D oracle.hadoop.exttab.sourceType=datapump \
-D oracle.hadoop.exttab.dataPaths=hdfs:/user/scott/data/ \
-D oracle.hadoop.connection.url=jdbc:oracle:thin:@//myhost:1521/myservicename \
-D oracle.hadoop.exttab.connection.user=scott -publish

この例の詳細は次のとおりです。

  • HADOOP_HOMEは、Hadoopホーム・ディレクトリを指し示す環境変数です。

  • OSCH_HOMEは、Oracle SQL Connector for HDFSのインストール・ディレクトリを指し示す環境変数です。

  • SALES_DP_XTABは、例2-1で作成された外部表です。

  • hdfs:/user/scott/data/は、HDFSデータの場所です。

  • @myhost:1521/orclは、データベース接続文字列です。

2.6 場所ファイルのメタデータと内容のリスト

-listLocationsコマンドは、場所ファイルのメタデータと内容を表示できるデバッグおよび診断ユーティリティです。このコマンドを使用すると、Oracle外部表の場所ファイルの完全性を確認できます。

このコマンドを使用するには次のプロパティが必要です。

-listLocationsのExternalTable構文

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdfs.jar \
oracle.hadoop.exttab.ExternalTable \
[-conf config_file]... \ 
[-D property=value]... \
-listLocations [--details]

2.7 外部表の説明

-getDDLコマンドは、既存の外部表の定義を出力するデバッグおよび診断ユーティリティです。このコマンドは、PL/SQL DBMS_METADATAパッケージのセキュリティ・モデルに従います。このパッケージを使用すると、権限のないユーザーが各自のオブジェクトのメタデータを参照できます。

このコマンドを使用するには次のプロパティが必要です。

-getDDLのExternalTable構文

$HADOOP_HOME/bin/hadoop jar $OSCH_HOME/jlib/orahdfs.jar \
oracle.hadoop.exttab.ExternalTable \
[-conf config_file]... \
[-D property=value]... \
-getDDL

2.8 HDFS内のデータの問合せ

大量のデータを処理する場合、並列処理はきわめて重要です。外部表を使用する場合、必ず次のSQLコマンドを使用して並列問合せを有効にします。

ALTER SESSION ENABLE PARALLEL QUERY;

Oracle SQL Connector for HDFSによって作成された外部ファイルからOracle Databaseにデータをロードする前に、並列DDLを有効にします。

ALTER SESSION ENABLE PARALLEL DDL;

既存のデータベース表にデータを挿入する前に、次のSQLコマンドを使用して並列DMLを有効にします。

ALTER SESSION ENABLE PARALLEL DML;

APPENDPQ_DISTRIBUTEなどのヒントにより、データ挿入時のパフォーマンスも向上します。

2.9 Oracle SQL Connector for HDFSの構成

-Dオプションを指定したコマンドラインでExternalTableツールに構成プロパティを渡すか、構成ファイルを作成してから-confオプションを指定したコマンドラインでそのファイルを渡すことができます。これらのオプションは、実行するコマンド(-createTable-publish-listLocationsまたは-getDDL)の前に置く必要があります。

「ExternalTableコマンドライン・ツールの構文」を参照してください。

2.9.1 構成ファイルの作成

構成ファイルは、次のような非常に単純な構造のXMLドキュメントです。

<?xmlversion="1.0"?>
<configuration>
  <property>
    <name>property</name>
    <value>value</value>
  </property>
     .
     .
     .
</configuration>

例2-5に構成ファイルを示します。これらのプロパティの説明については、「構成プロパティ」を参照してください。

例2-5 Oracle SQL Connector for HDFSの構成ファイル

<?xmlversion="1.0"?>
<configuration>
  <property>
    <name>oracle.hadoop.exttab.tableName</name>
    <value>SH.SALES_EXT_DIR</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.dataPaths</name>
    <value>/data/s1/*.csv,/data/s2/*.csv</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.dataCompressionCodec</name>
    <value>org.apache.hadoop.io.compress.DefaultCodec</value>
  </property>
  <property>
    <name>oracle.hadoop.connection.url</name>
    <value>jdbc:oracle:thin:@//myhost:1521/myservicename</value>
  </property>
  <property>
    <name>oracle.hadoop.connection.user</name>
    <value>SH</value>
  </property>
</configuration>

2.9.2 構成プロパティ

次に、ExternalTableコマンドライン・ツールで使用される構成プロパティの一覧を示します。プロパティは次のカテゴリに編成されます。

一般的なプロパティ 

oracle.hadoop.exttab.columnCount

デリミタ付きテキスト・ファイルから作成される外部表の列の数。列名はC1、C2、... Cnのように設定されます。nはこのプロパティの値です。

このプロパティは、oracle.hadoop.exttab.columnNamesが設定される場合は無視されます。

oracle.hadoop.exttab.sourceType=textの場合、-createTableコマンドでこのプロパティを使用します。

デリミタ付きテキスト・ファイルから外部表を作成する場合、次のいずれかのプロパティを設定する必要があります。

  • oracle.hadoop.exttab.columnNames

  • oracle.hadoop.exttab.columnCount

oracle.hadoop.exttab.columnNames

デリミタ付きテキスト・ファイルから作成される外部表の列名のカンマ区切りリスト。このプロパティを設定しない場合、列名はC1、C2、... Cnのようになります。noracle.hadoop.exttab.columnCountプロパティの値です。

このプロパティの値は大文字と小文字を区別しません。列名はすべて大文字になります。列名にカンマを入れることはできません。

oracle.hadoop.exttab.sourceType=textの場合、-createTableコマンドでこのプロパティを使用します。

デリミタ付きテキスト・ファイルから外部表を作成する場合、次のいずれかのプロパティを設定する必要があります。

  • oracle.hadoop.exttab.columnNames

  • oracle.hadoop.exttab.columnCount

oracle.hadoop.exttab.dataCompressionCodec

データ・ファイルに使用される圧縮コーデック・クラスの名前。オプション。

デフォルト値: なし

oracle.hadoop.exttab.dataPathFilter

パス・フィルタ・クラス。Hiveデータソースの場合、このプロパティは無視されます。

Oracle SQL Connector for HDFは、デフォルトのフィルタを使用して、先頭がドットまたはアンダースコアの隠しファイルを除外します。このプロパティを使用して別のパス・フィルタ・クラスを指定する場合、デフォルトのフィルタの他にも使用するフィルタが機能します。そのため、使用するフィルタで受け入れられる表示ファイルのみが考慮されます。

oracle.hadoop.exttab.defaultDirectory

Oracle外部表のデフォルトのディレクトリを指定します。このディレクトリは、ディレクトリ・オブジェクトを明示的に指定しない入力ファイルおよび出力ファイルのすべてに使用されます。

有効な値: 既存のデータベース・ディレクトリの名前

引用符で囲まれていない名前は大文字に変更されます。二重引用符で囲まれている名前は変更されないため、大文字と小文字を区別する場合は、二重引用符で囲まれた名前を使用します。一重引用符で囲まれている名前は、デフォルトのディレクトリ名に使用できません。

-createTableコマンドではこのプロパティが必要です。

oracle.hadoop.exttab.fieldTerminator

oracle.hadoop.exttab.sourceType=textの場合、外部表のフィールドの終端文字を指定します。オプション。

デフォルト値: , (カンマ)

有効な値: 次のいずれかの形式の文字列

  • 1つ以上の規則正しい出力可能文字(\uによる開始は不可)

  • \uHHHH形式の1つ以上のエンコード文字。HHHHは、UTF-16の文字をビッグエディアンの16進で表したものです。16進数の桁は大文字と小文字を区別しません。

2つの形式を組み合せないでください。

oracle.hadoop.exttab.hive.databaseName

入力データ表を含むHiveデータベースの名前。

oracle.hadoop.exttab.sourceType=hiveの場合、-createTableコマンドでこのプロパティが必要です。

oracle.hadoop.exttab.hive.tableName

既存のHive表の名前。

oracle.hadoop.exttab.sourceType=hiveの場合、-createTableコマンドでこのプロパティが必要です。

oracle.hadoop.exttab.initialFieldEncloser

デリミタ付きテキスト・ファイルから作成される外部表の開始フィールド囲み文字を指定します。オプション。

デフォルト値: null。外部表定義に囲み文字は指定されません。

oracle.hadoop.exttab.sourceType=textの場合、-createTableコマンドでこのプロパティを使用します。

有効な値: 次のいずれかの形式の文字列

  • 1つ以上の規則正しい出力可能文字(\uによる開始は不可)

  • \uHHHH形式の1つ以上のエンコード文字。HHHHは、UTF-16の文字をビッグエディアンの16進で表したものです。16進数の桁は大文字と小文字を区別しません。

2つの形式を組み合せないでください。

oracle.hadoop.exttab.locationFileCount

外部表の場所ファイルの目的の数を指定します。データ・ポンプ・ファイル以外のファイルにのみ適用可能です。

デフォルト値: 4

データ・ファイルがデータ・ポンプ形式の場合、このプロパティは無視されます。それ以外は、場所ファイルの数は次のいずれか少ない方になります。

  • データ・ファイルの数

  • このプロパティの値

少なくとも1つの場所ファイルが作成されます。

場所ファイルの数の詳細は、「並列処理の有効化」を参照してください。

oracle.hadoop.exttab.logDirectory

ログ・ファイル、不正なファイルおよび廃棄ファイルが格納されるデータベース・ディレクトリを指定します。ファイル名は、外部表で使用されるデフォルトの値になります。たとえば、ログ・ファイルの名前は、表名の後に_%p.logが続きます。

これは、-createTableコマンドのオプションのプロパティです。

ファイル名のデフォルトの拡張子を次に示します。

  • ログ・ファイル: log

  • 不正なファイル: bad

  • 廃棄ファイル: dsc

有効な値: 既存のOracleディレクトリ・オブジェクト名。

引用符で囲まれていない名前は大文字になります。引用符で囲まれている名前は変更されません。例2-1に、値が変換される場合の例を示します。

例2-1 引用符で囲まれている値と引用符で囲まれていない値の例

指定される値 解釈される値

my_log_dir:'sales_tab_%p.log '

MY_LOG_DIR/sales_tab_%p.log

'my_log_dir':'sales_tab_%p.log'

my_log_dir/sales_tab_%p.log

"my_log_dir":"sales_tab_%p.log"

my_log_dir/sales_tab_%p.log


oracle.hadoop.exttab.preprocessorDirectory

プリプロセッサのデータベース・ディレクトリを指定します。ファイルシステム・ディレクトリには、hdfs_streamスクリプトが含まれる必要があります。

デフォルト値: OSCH_BIN_PATH

プリプロセッサのディレクトリは、外部表のPREPROCESSOR句で使用されます。

oracle.hadoop.exttab.recordDelimiter

デリミタ付きテキスト・ファイルから作成される外部表のレコード・デリミタを指定します。オプション。

デフォルト値: \n

oracle.hadoop.exttab.sourceType=textの場合、-createTableコマンドでこのプロパティを使用します。

有効な値: 次のいずれかの形式の文字列

  • 1つ以上の規則正しい出力可能文字(\uによる開始は不可)

  • \uHHHH形式の1つ以上のエンコード文字。HHHHは、UTF-16の文字をビッグエディアンの16進で表したものです。16進数の桁は大文字と小文字を区別しません。

2つの形式を組み合せないでください。

oracle.hadoop.exttab.sourceType

ソース・ファイルのタイプを指定します。

有効な値は、datapumphiveおよびtextです。

デフォルト値: text

-createTable操作と-publish操作の場合、このパラメータの値が必要です。

oracle.hadoop.exttab.trailingFieldEncloser

デリミタ付きテキスト・ファイルから作成される外部表の終了フィールド囲み文字を指定します。オプション。

デフォルト値: null。デフォルトでoracle.hadoop.exttab.initialFieldEncloserの値に設定されます。

oracle.hadoop.exttab.sourceType=textの場合、-createTableコマンドでこのプロパティを使用します。

有効な値: 次のいずれかの形式の文字列

  • 1つ以上の規則正しい出力可能文字(\uによる開始は不可)

  • \uHHHH形式の1つ以上のエンコード文字。HHHHは、UTF-16の文字をビッグエディアンの16進で表したものです。16進数の桁は大文字と小文字を区別しません。

2つの形式を組み合せないでください。

接続プロパティ 

oracle.hadoop.connection.url

データベース接続文字列のURLを指定します。このプロパティは、他のすべての接続プロパティより優先されます。

Oracle Walletが外部パスワード・ストアとして構成されている場合、プロパティ値は、ドライバ接頭辞jdbc:oracle:thin:@で始まる必要があり、db_connect_stringは、ウォレットに定義されている資格証明と完全に一致する必要があります。

デフォルト値: 定義されていません。

有効な値: 1つの文字列

oracle.hadoop.connection.user

Oracle Databaseのログイン名。

デフォルト値: 定義されていません。

有効な値: 1つの文字列

oracle.hadoop.connection.tnsEntryName

tnsnames.oraファイルに定義されたTNSエントリ名を指定します。

このプロパティは、oracle.hadoop.connection.tns_adminプロパティと一緒に使用されます。

デフォルト値: 定義されていません。

有効な値: 1つの文字列

oracle.hadoop.connection.tns_admin

SQL*Net構成ファイル(sqlnet.oraやtnsnames.oraなど)を含むディレクトリのファイル・パス。データベース接続文字列でTransparent Network Substrate (TNS)のエントリ名を使用するようにこのプロパティを定義します。

Oracle Walletを外部パスワード・ストアとして使用する場合、このプロパティを設定する必要があります。「oracle.hadoop.connection.wallet_location」を参照してください。

デフォルト値: 定義されていません。TNS_ADMIN環境変数の値が使用されます。

有効な値: 1つの文字列

oracle.hadoop.connection.wallet_location

接続の資格証明が格納されるOracle Walletディレクトリへのファイル・パス。

デフォルト値: 定義されていません。

有効な値: 1つの文字列

Oracle Walletを外部パスワード・ストアとして使用する場合、次のパラメータを設定します。

  • oracle.hadoop.connection.wallet_location

  • oracle.hadoop.connection.url またはoracle.hadoop.connection.tnsEntryName

  • oracle.hadoop.connection.tns_admin

Hiveプロパティ 

hive.metastore.local

Hiveメタストアがローカルとリモートのどちらかを示します。

デフォルト値: true

メタストアがローカルの場合はtrue、リモートの場合はfalseに設定します。リモート・メタストアの場合、hive.metastore.urisを指定する必要があります。

hive.metastore.uris

リモートHiveメタストアのURI。HiveはこのURIに接続して、メタデータのリクエストを行います。

hive.metastore.warehouse.dir

Hive表の場合のHDFSのデフォルトの場所。

例: /user/beeswax/warehouse

javax.jdo.option.ConnectionDriverName

Hiveメタデータを含むデータストアのJDBCドライバのクラス名。

例: この例では、MySQL DatabaseのJDBCドライバ・クラスを指定します。

com.mysql.jdbc.Driver
javax.jdo.option.ConnectionPassword

MySQL Databaseなどのデータストアに接続するためのパスワード。

javax.jdo.option.ConnectionURL

Hiveメタデータを含むデータストアのJDBC接続文字列。

例: これは、HiveメタデータがMySQL Databaseに格納される場合の接続URLの構文です。

jdbc:mysql://host-name/database-name?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionUserName

MySQL Databaseなどのデータストアに接続するためのユーザー名。