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

前
 
次
 

2 Oracle SQL Connector for Hadoop Distributed File System

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

この章は次の項で構成されています:

2.1 Oracle SQL Connector for HDFSについて

Oracle SQL Connector for HDFSを使用する場合、Apache Hadoopに存在する次の形式のデータへのアクセスやデータの分析にOracle Databaseを使用できます。

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

  • HDFS形式のデリミタ付きテキスト・ファイル

  • Apache Hive表のデリミタ付きテキスト・ファイル

その他のファイル形式(JSONファイルなど)の場合、Oracle SQL Connector for HDFSを使用する前に、入力をHive表にステージングできます。パーティション化されたHive表はサポートされていません。

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

この目的で外部表を作成するには、Oracle SQL Connector for HDFSで提供されるExternalTableコマンドライン・ツールを使用します。ExternalTableに、Hadoopのデータソースに関する情報とOracle Databaseのスキーマに関する情報を指定します。この情報は、ExternalTableコマンドに対するオプションとして、またはXMLファイルで指定します。

外部表の準備が完了すると、他のデータベース表の場合と同じ方法でデータに問合せを実行できます。HDFSやHive表のデータに問い合せたり、そのデータを他のデータベースに存在するデータと結合したりすることもできます。

SQLを使用して、Oracleデータベースの表にデータをバルク・ロードすることもできます。頻繁に問い合せるデータのすべてまたは一部をOracleデータベースに格納することもできます。

2.2 Oracle SQL Connector for HDFSを使用する前に

次に、Oracle SQL Connector for HDFSを使用する場合の基本的な手順を示します。

  1. Oracle SQL Connector for HDFSをインストールするシステムにログインします。これには、Oracle Databaseシステム、Hadoopクラスタのノード、Hadoopクラスタのリモート・クライアントとして設定されているシステムがあります。

    「Oracle DatabaseシステムへのHadoopクライアントのインストールと構成」を参照してください。

  2. 初めてOracle SQL Connector for HDFSを使用する場合は、ソフトウェアが構成されていることを確認します。

    「システムへのOracle SQL Connector for HDFSの構成」を参照してください。使用している環境が唯一のものである場合は、hdfs_streamの編集が必要になることもあります。「Oracle SQL Connector for HDFSのインストール」を参照してください。

  3. セキュアなクラスタに接続する場合は、自分自身を認証するためにkinitを実行します。

    「セキュアなHadoopクラスタでのOracle SQL Connector for HDFSの使用」を参照してください。

  4. 接続とデータソースを指定するXMLドキュメントを作成します(ExternalTableコマンドにこれらのプロパティを指定していない場合)。

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

  5. ExternalTableコマンドを含むシェル・スクリプトを作成します。

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

  6. シェル・スクリプトを実行します。

  7. ジョブが失敗した場合、出力の診断メッセージを使用してエラーを特定し、修正します。失敗した時点のジョブの進捗状況によっては、スクリプトを再実行する前にOracleデータベースから表の定義を削除する必要があります。

  8. ジョブが成功した後、外部表の所有者としてOracle Databaseに接続します。この表に問い合せて、データにアクセスできることを確認します。

  9. データの問合せが頻繁に行われる場合は、データベース表にロードして問合せのパフォーマンスを向上させることができます。外部表には索引やパーティションはありません。

    データを表にロードするときに圧縮する場合は、COMPRESSオプションを使用して表を作成します。

ここまでの手順を例2-1に例示します。

例2-1 Oracle DatabaseからのHDFSデータ・ファイルへのアクセス

$ cat moviefact_hdfs.sh
# Add environment variables
export OSCH_HOME="/u01/connectors/orahdfs-2.3.0"
 
hadoop jar $OSCH_HOME/jlib/orahdfs.jar \
       oracle.hadoop.exttab.ExternalTable \
       -conf /home/oracle/movies/moviefact_hdfs.xml \
       -createTable

$ cat moviefact_hdfs.xml
<?xml version="1.0"?>
 <configuration>
    <property>
      <name>oracle.hadoop.exttab.tableName</name>
      <value>MOVIE_FACTS_EXT</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.locationFileCount</name>
      <value>4</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.dataPaths</name>
      <value>/user/oracle/moviework/data/part*</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.fieldTerminator</name>
      <value>\u0009</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.defaultDirectory</name>
      <value>MOVIEDEMO_DIR</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.columnNames</name>
      <value>CUST_ID,MOVIE_ID,GENRE_ID,TIME_ID,RECOMMENDED,ACTIVITY_ID,RATING,SALES</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.colMap.TIME_ID.columnType</name>
      <value>TIMESTAMP</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.colMap.timestampMask</name>
      <value>YYYY-MM-DD:HH:MI:SS</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.colMap.RECOMMENDED.columnType</name>
      <value>NUMBER</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.colMap.ACTIVITY_ID.columnType</name>
      <value>NUMBER</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.colMap.RATING.columnType</name>
      <value>NUMBER</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.colMap.SALES.columnType</name>
      <value>NUMBER</value>
    </property>
    <property>
      <name>oracle.hadoop.exttab.sourceType</name>
      <value>text</value>
    </property>
    <property>
      <name>oracle.hadoop.connection.url</name>
      <value>jdbc:oracle:thin:@localhost:1521:orcl</value>
    </property>
    <property>
      <name>oracle.hadoop.connection.user</name>
      <value>MOVIEDEMO</value>
    </property>  
</configuration>

$ sh moviefact_hdfs.sh
Oracle SQL Connector for HDFS Release 2.3.0 - Production
 
Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
 
[Enter Database Password: password]
The create table command succeeded.
 
CREATE TABLE "MOVIEDEMO"."MOVIE_FACTS_EXT"
(
 "CUST_ID"                        VARCHAR2(4000),
 "MOVIE_ID"                       VARCHAR2(4000),
 "GENRE_ID"                       VARCHAR2(4000),
 "TIME_ID"                        TIMESTAMP(9),
 "RECOMMENDED"                    NUMBER,
 "ACTIVITY_ID"                    NUMBER,
 "RATING"                         NUMBER,
 "SALES"                          NUMBER
)
ORGANIZATION EXTERNAL
( 
   TYPE ORACLE_LOADER
   DEFAULT DIRECTORY "MOVIEDEMO_DIR"
   ACCESS PARAMETERS
   (
     RECORDS DELIMITED BY 0X'0A'
     CHARACTERSET AL32UTF8
     PREPROCESSOR "OSCH_BIN_PATH":'hdfs_stream'
     FIELDS TERMINATED BY 0X'09'
     MISSING FIELD VALUES ARE NULL
     (
       "CUST_ID" CHAR(4000),
       "MOVIE_ID" CHAR(4000),
       "GENRE_ID" CHAR(4000),
       "TIME_ID" CHAR,
       "RECOMMENDED" CHAR,
       "ACTIVITY_ID" CHAR,
       "RATING" CHAR,
       "SALES" CHAR
     )
   )
   LOCATION
   (
     'osch-20131114064206-5250-1',
     'osch-20131114064206-5250-2',
     'osch-20131114064206-5250-3',
     'osch-20131114064206-5250-4'
   )
) PARALLEL REJECT LIMIT UNLIMITED;
 
The following location files were created.
 
osch-20131114064206-5250-1 contains 1 URI, 12754882 bytes
 
    12754882 hdfs://localhost.localdomain:8020/user/oracle/moviework/data/part-00001
 
osch-20131114064206-5250-2 contains 1 URI, 438 bytes
 
         438 hdfs://localhost.localdomain:8020/user/oracle/moviework/data/part-00002
 
osch-20131114064206-5250-3 contains 1 URI, 432 bytes
 
         432 hdfs://localhost.localdomain:8020/user/oracle/moviework/data/part-00003
 
osch-20131114064206-5250-4 contains 1 URI, 202 bytes
 
         202 hdfs://localhost.localdomain:8020/user/oracle/moviework/data/part-00004

$ sqlplus moviedemo
 
SQL*Plus: Release 12.1.0.1.0 Production on Fri Nov 15 09:24:18 2013
 
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 
Enter password: password
Last Successful login time: Thu Nov 14 2013 18:42:01 -05:00
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
 
SQL> DESCRIBE movie_facts_ext;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CUST_ID                                            VARCHAR2(4000)
 MOVIE_ID                                           VARCHAR2(4000)
 GENRE_ID                                           VARCHAR2(4000)
 TIME_ID                                            TIMESTAMP(9)
 RECOMMENDED                                        NUMBER
 ACTIVITY_ID                                        NUMBER
 RATING                                             NUMBER
 SALES                                              NUMBER

SQL> CREATE TABLE movie_facts AS SELECT * FROM movie_facts_ext;
 
Table created.

SQL> SELECT movie_id, time_id, recommended, rating FROM movie_facts WHERE rownum < 5;
 
MOVIE_ID TIME_ID                          RECOMMENDED     RATING
-------- -------------------------------- ----------- ----------
205      03-DEC-10 03.14.54.000000000 AM            1          1
77       14-AUG-11 10.46.55.000000000 AM            1          3
116      24-NOV-11 05.43.00.000000000 AM            1          5
141      01-JAN-11 05.17.57.000000000 AM            1          4

2.3 システムへのOracle SQL Connector for HDFSの構成

Oracle SQL Connector for HDFSは、Oracle DatabaseシステムまたはHadoopクラスタで実行できます。

  • Hiveソースの場合は、HadoopクラスタのノードまたはクラスタのHadoopクライアントとして設定されているシステムにログインします。

  • テキストおよびデータ・ポンプ形式ファイルの場合は、Oracle DatabaseシステムまたはHadoopクラスタのノードにログインします。

Oracle SQL Connector for HDFSでは、ログインするシステムのHADOOP_CLASSPATH環境変数に情報を追加する必要があります。この追加設定は、システム管理者がアカウントの作成時に行う場合と、自分で行う必要がある場合があります。「Oracle Databaseシステムへのユーザー・アカウントの設定」を参照してください。

環境変数の設定: 

  • HADOOP_CLASSPATHにOracle SQL Connector for HDFSのJARファイルへのパスが含まれていることを確認します。

    path/orahdfs-2.3.0/jlib/*
    
  • Hiveデータソースを使用しているHadoopクラスタにログインする場合は、HADOOP_CLASSPATHにHiveのJARファイルとconfディレクトリが含まれていることも確認します。次に例を示します。

    /usr/lib/hive/lib/*
    /etc/hive/conf
    
  • 便宜上、OSCH_HOME環境変数を作成することもできます。Oracle Big Data Applianceにこの環境変数を設定するBashコマンドを次に示します。

    $ export OSCH_HOME="/opt/oracle/orahdfs-2.3.0"
    

関連項目:

  • 両方のシステムにソフトウェアをインストールし、ユーザー・アカウントを設定する手順については、「Oracle SQL Connector for Hadoop Distributed File Systemの設定」を参照してください。

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


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

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

2.4.1 外部表の概要

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

  • 外部表の作成

  • 場所ファイルの移入

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

  • 場所ファイルのリスト

  • 外部表の説明

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

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

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

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

OSCH_HOME環境変数を作成することも、コマンド構文のOSCH_HOMEをOracle SQL Connector for HDFSのインストール・ディレクトリのフル・パスに置き換えることもできます。Oracle Big Data Applianceの場合、このディレクトリは次のようになります。

/opt/oracle/orahdfs-version

たとえば、ExternalTableコマンドライン・ツールで次のようなコマンドを実行できます。

hadoop jar /opt/oracle/orahdfs-2.3.0/jlib/orahdfs.jar \
oracle.hadoop.exttab.ExternalTable \
     .
     .
     .

オプション 

-conf config_file

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

-D property=value

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

-createTable [--noexecute [--output filename]]

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

Oracle SQL Connector for HDFSでは、データベースもチェックして、必要なデータベース・ディレクトリが存在し、ユーザーに必要な権限が付与されていることを確認します。

--noexecuteオプションを使用して、コマンドの実行計画を表示します。操作は実行されませんが、レポートには、実行計画の詳細とエラーが表示されます。--outputオプションを使用すると、-createTableコマンドからDDL表がファイルに書き込まれます。

最初に、-createTableコマンドを--noexecuteを指定して実行することをお薦めします。

-publish [--noexecute]

既存の外部表の場所ファイルにデータのURIを公開します。新しいデータ・ファイルを追加した後にこのオプションを使用すると、既存の外部表からアクセスできるようになります。

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

最初に、-publishコマンドを--noexecuteを指定して実行することをお薦めします。

「HDFSデータ・パスの公開」を参照してください。

-listLocations [--details]

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

-getDDL

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


関連項目:

「構文の規則」

2.5 外部表の作成

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

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

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

ExternalTable -createTableコマンドの実行を完了すると、外部表を使用する準備ができます。ExternalTableは、外部表の場所ファイルも管理します。「場所ファイルの管理」を参照してください。

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

-createTableのExternalTable構文

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

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

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

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

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


注意:

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

リリース11.2.0.3以降では、このパッチは不要です。


2.5.2.1 必須プロパティ

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

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

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

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

2.5.2.3 データ・ポンプ形式ファイルのXMLファイルのプロパティの定義

例2-2に、データ・ポンプ・ファイルを記述するプロパティを含むXMLテンプレートを示します。このテンプレートを使用するには、テキスト・ファイルにカット・アンド・ペーストし、適切な値を入力してデータ・ポンプ・ファイルを記述し、不要なオプション・プロパティを削除します。XMLテンプレートの詳細は、「構成ファイルの作成」を参照してください。

例2-2 データ・ポンプ形式ファイルのプロパティを使用したXMLファイル

<?xml version="1.0"?>

<!-- Required Properties -->

<configuration>
  <property>
    <name>oracle.hadoop.exttab.tableName</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.defaultDirectory</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.dataPaths</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.sourceType</name>
    <value>datapump</value>
  </property>
  <property>
    <name>oracle.hadoop.connection.url</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.connection.user</name>
    <value>value</value>
  </property>

<!-- Optional Properties -->

  <property>
    <name>oracle.hadoop.exttab.logDirectory</name>
    <value>value</value>
  </property>
</configuration>

2.5.2.4

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

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

Oracle Databaseを実行しているオペレーティング・システム・ユーザー(通常はoracleユーザー)としてログインし、ファイル・システム・ディレクトリを作成します。Oracle RACの場合は、分散ファイル・システムにクラスタ全体のディレクトリを作成する必要があります。

$ mkdir /data/sales_dp_dir

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

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

外部表を作成します。

$ export OSCH_HOME="/opt/oracle/orahdfs-2.3.0"
$ export HADOOP_CLASSPATH="$HADOOP_CLASSPATH:$OSCH_HOME/jlib/*"
$ 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/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.5.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.5.3.1 Hive表の要件

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

Hive表は、バケット化される場合とされない場合があります。Hive 0.10.0のすべてのプリミティブ・タイプがサポートされています。

2.5.3.2 データ型のマッピング

表2-1に、HiveとOracle間のデフォルトのデータ型マッピングを示します。Oracle外部表に作成したターゲット列のデータ型を変更するには、「オプションのプロパティ」にリストされているoracle.hadoop.exttab.hive.columnType.*プロパティを設定します。

表2-1 Hiveデータ型のマッピング

ソースのHive列のデータ型 ターゲットのOracle列のデータ型

INTBIGINTSMALLINTTINYINT

INTEGER

DECIMALDOUBLEFLOAT

NUMBER

BOOLEAN

VARCHAR2(5)

STRING

VARCHAR2(4000)

TIMESTAMP

YYYY-MM-DD HH24:MI:SS.FF書式マスクのTIMESTAMP


2.5.3.3 必須プロパティ

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

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

2.5.3.5 Hive表のXMLファイルのプロパティの定義

例2-4に、Hive表を記述するプロパティを含むXMLテンプレートを示します。このテンプレートを使用するには、テキスト・ファイルにカット・アンド・ペーストし、適切な値を入力してHive表を記述し、不要なオプション・プロパティを削除します。XMLテンプレートの詳細は、「構成ファイルの作成」を参照してください。

例2-4 Hive表のプロパティを使用したXMLテンプレート

<?xml version="1.0"?>

<!-- Required Properties -->

<configuration>
  <property>
    <name>oracle.hadoop.exttab.tableName</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.defaultDirectory</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.sourceType</name>
    <value>hive</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.hive.tableName</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.hive.databaseName</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.connection.url</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.connection.user</name>
    <value>value</value>
  </property>

<!-- Optional Properties -->

  <property>
    <name>oracle.hadoop.exttab.locationFileCount</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.hive.columnType.TYPE</name>
    <value>value</value>
  </property>
</configuration>

2.5.3.6

例2-5では、SALES_HIVE_XTABという外部表を作成して、Hive表からデータを読み取ります。この例では、XMLファイルではなく、コマンドラインのすべてのプロパティを定義しています。

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

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

$ mkdir /data/sales_hive_dir

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

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

外部表を作成します。

$ export OSCH_HOME="/opt/oracle/orahdfs-2.3.0"
$ export HADOOP_CLASSPATH="$HADOOP_CLASSPATH:$OSCH_HOME/jlib/*:/usr/lib/hive/lib/*:/etc/hive/conf"

$ 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.5.4 デリミタ付きテキスト・ファイルからの外部表の作成

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

2.5.4.1 データ型のマッピング

すべてのテキスト・データソースは、VARCHAR2(4000)に自動的にマップされます。Oracle外部表に作成したターゲット列のデータ型を変更するには、「オプションのプロパティ」にリストされているoracle.hadoop.exttab.colMap.*プロパティを設定します。

2.5.4.2 必須プロパティ

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

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

2.5.4.4 デリミタ付きテキスト・ファイルのXMLファイルのプロパティの定義

例2-6に、デリミタ付きテキスト・ファイルを記述するすべてのプロパティを含むXMLテンプレートを示します。このテンプレートを使用するには、テキスト・ファイルにカット・アンド・ペーストし、適切な値を入力してデータ・ファイルを記述し、不要なオプション・プロパティを削除します。XMLテンプレートの詳細は、「構成ファイルの作成」を参照してください。

例2-6 デリミタ付きテキスト・ファイルのプロパティを使用したXMLテンプレート

<?xml version="1.0"?>

<!-- Required Properties -->

<configuration>
  <property>
    <name>oracle.hadoop.exttab.tableName</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.defaultDirectory</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.dataPaths</name>
    <value>value</value>
  </property>

<!-- Use either columnCount or columnNames -->

  <property>
    <name>oracle.hadoop.exttab.columnCount</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.columnNames</name>
    <value>value</value>
  </property>

  <property>
    <name>oracle.hadoop.connection.url</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.connection.user</name>
    <value>value</value>
  </property>

<!-- Optional Properties -->

  <property>
    <name>oracle.hadoop.exttab.colMap.TYPE</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.recordDelimiter</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.fieldTerminator</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.initialFieldEncloser</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.trailingFieldEncloser</name>
    <value>value</value>
  </property>
  <property>
    <name>oracle.hadoop.exttab.locationFileCount</name>
    <value>value</value>
  </property>
</configuration>

2.5.4.5

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

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

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

$ mkdir /data/sales_dt_dir

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

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

外部表を作成します。

$ export OSCH_HOME="/opt/oracle/orahdfs-2.3.0"
$ export HADOOP_CLASSPATH="$HADOOP_CLASSPATH:$OSCH_HOME/jlib/*"

$ 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.5.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.6 HDFSデータ・パスの公開

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

  • 既存の外部表に新しいデータを公開する場合。

  • ExternalTableツールを使用せずに、外部表を手動で作成した場合。

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

公開用のExternalTable構文

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

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

例2-8では、HADOOP_CLASSPATHを設定し、例2-3で作成された外部表にHDFSのデータ・パスを公開します。この環境変数の設定の詳細は、「システムへのOracle SQL Connector for HDFSの構成」を参照してください。

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

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

$ export HADOOP_CLASSPATH="OSCH_HOME/jlib/*"
$ 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

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

  • OSCH_HOMEは、Oracle SQL Connector for HDFSのインストール・ディレクトリのフル・パスです。

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

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

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

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

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

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

-listLocationsのExternalTable構文

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

2.8 外部表の説明

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

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

-getDDLのExternalTable構文

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

2.9 ExternalTableツールで生成された外部表の詳細

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

Oracle SQL Connector for HDFSでは、ORACLE_LOADERアクセス・ドライバが使用されます。hdfs_streamプリプロセッサ・スクリプト(Oracle SQL Connector for HDFSに付属)は、入力データをORACLE_LOADERが処理できる形式に変更します。


関連項目:

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

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


2.9.1 構成可能な列マッピングの概要

Oracle SQL Connector for HDFSでは、デフォルトのデータ型マッピングを使用して、Hiveおよびテキスト・ソースに対して適切なデータ型の列をOracle外部表に作成します。これらのデフォルトをオーバーライドするには、すべての列または特定の列に対して様々な構成プロパティを設定します。

たとえば、テキスト・ファイルの1つのフィールドにタイムスタンプを含める場合です。デフォルトでは、このフィールドはVARCHAR2列にマップされます。ただし、TIMESTAMP列を指定して日時マスクを入力すると、値を正確にTIMESTAMPデータ型にキャストできます。TIMESTAMPデータ型では、データがテキストとして表されているときは使用できない時間ベースの問合せおよび分析がサポートされます。

2.9.1.1 デフォルトの列マッピング

テキスト・ソースはVARCHAR2列にマップされ、Hive列は、同等に最も近いOracleデータ型の列にマップされます。表2-1に、デフォルトのマッピングを示します。

2.9.1.2 すべての列のオーバーライド

次のプロパティは、外部表のすべての列に適用されます。Hiveソースの場合は、これらのプロパティ設定によって、oracle.hadoop.exttab.hive.*プロパティ設定がオーバーライドされます。

2.9.1.3 1つの列のオーバーライド

次のプロパティが適用されるのは、プロパティ名のcolumn_name部分を名前に持つ1つの列のみです。これらのプロパティ設定は、その他すべての設定をオーバーライドします。

2.9.1.4 マッピングのオーバーライドの例

次のプロパティでは、すべての列がデフォルトのVARCHAR2データ型である外部表が作成されます。

oracle.hadoop.exttab.tableName=MOVIE_FACT_EXT_TAB_TXT
oracle.hadoop.exttab.columnNames=CUST_ID,MOVIE_ID,GENRE_ID,TIME_ID,RECOMMENDED,ACTIVITY_ID,RATING,SALES

この例では、次のプロパティを設定して、複数の列のデータ型をオーバーライドします。

oracle.hadoop.exttab.colMap.TIME_ID.columnType=TIMESTAMP
oracle.hadoop.exttab.colMap.RECOMMENDED.columnType=NUMBER
oracle.hadoop.exttab.colMap.ACTIVITY_ID.columnType=NUMBER
oracle.hadoop.exttab.colMap.RATING.columnType=NUMBER
oracle.hadoop.exttab.colMap.SALES.columnType=NUMBER

Oracle SQL Connector for HDFSによって、指定したデータ型を備えた外部表が作成されます。

SQL> DESCRIBE movie_facts_ext
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
CUST_ID                                            VARCHAR2(4000)
MOVIE_ID                                           VARCHAR2(4000)
GENRE_ID                                           VARCHAR2(4000)
TIME_ID                                            TIMESTAMP(9)
RECOMMENDED                                        NUMBER
ACTIVITY_ID                                        NUMBER
RATINGS                                            NUMBER
SALES                                              NUMBER

次の例では、次のプロパティ設定を追加して、VARCHAR2列の長さを変更します。

oracle.hadoop.exttab.colMap.CUST_ID.columnLength=12
oracle.hadoop.exttab.colMap.MOVIE_ID.columnLength=12
oracle.hadoop.exttab.colMap.GENRE_ID.columnLength=12

これで、すべての列がカスタム・データ型に設定されました。

SQL> DESCRIBE movie_facts_ext
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
CUST_ID                                            VARCHAR2(12)
MOVIE_ID                                           VARCHAR2(12)
GENRE_ID                                           VARCHAR2(12)
TIME_ID                                            TIMESTAMP(9)
RECOMMENDED                                        NUMBER
ACTIVITY_ID                                        NUMBER
RATINGS                                            NUMBER
SALES                                              NUMBER

2.9.2 場所ファイルとは

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

2.9.3 並列処理の有効化

外部表で並列処理を有効にするには、外部表のLOCATION句で複数のファイルを指定する必要があります。ファイルの数は、表の読取り時に外部表で開始される子プロセスの数を決定します。これは、並列度DOPと呼ばれます。

2.9.3.1 並列度の設定

次の手順で説明されているように、特定の並列度で実行することに決定し、場所ファイルを多数(並列度の倍数)作成できるのが理想的です。

パフォーマンスを最大にするために並列処理を設定するには、次の手順を実行します。

  1. Oracle SQL Connector for HDFSの実行時にOracle DBAで使用できる最大DOPを特定します。

    大量のデータをOracleデータベースにロードする場合は、DBAと協力してリソースを最大限に使用できる時期を特定する必要もあります。

  2. DOPの小さい倍数となる数の場所ファイルを作成します。たとえば、DOPが8の場合は、8、16、24または32個の場所ファイルを作成します。

  3. ほぼ同じサイズで、場所ファイル数の倍数となる数のHDFSファイルを作成します。たとえば、場所ファイルが32個ある場合は、データ量やHDFSファイルの最小サイズに応じて、128個や1280個以上のHDFSファイルを作成します。

  4. ALTER SESSIONコマンドを使用するか、SQL SELECT文でヒントを使用して、データ・ロードのDOPを設定します。

    この例では、ALTER SESSIONを使用してDOPを8に設定します。

    ALTER SESSION FORCE PARALLEL DML PARALLEL 8;
    ALTER SESSION FORCE PARALLEL QUERY PARALLEL 8;
    

    次の例では、PARALLELヒントを使用してDOPを8に設定します。

    INSERT /*+ parallel(my_db_table,8) */ INTO my_db_table \
       SELECT /*+ parallel(my_hdfs_external_table,8) */ * \
       FROM my_hdfs_external_table;
    

    SQL INSERT文のAPPENDヒントもパフォーマンスの向上に役立つことがあります。

2.9.4 場所ファイルの管理

Oracle SQL Connector for HDFSのコマンドライン・ツールExternalTableは、外部表を作成してそのHDFS URI情報を場所ファイルに公開します。外部表の場所ファイルは、oracle.hadoop.exttab.defaultDirectoryプロパティで指定されたディレクトリに格納されます。Oracle RACデータベースの場合、このディレクトリは、各データベース・サーバーからアクセス可能な分散ファイル・システムに格納する必要があります。

ExternalTableは、外部表の場所ファイルを管理しますが、これには次の操作が含まれます。

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

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

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

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

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

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

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

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

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

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

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

2.9.5 場所ファイルの名前

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

osch-timestamp-number-n

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

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

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

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

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

2.10 Oracle SQL Connector for HDFSの構成

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

たとえば、次のコマンドではexample.xmlという名前の構成ファイルを使用します。

hadoop jar OSCH_HOME/jlib/orahdfs.jar \
       oracle.hadoop.exttab.ExternalTable \
       -conf /home/oracle/example.xml \
       -createTable

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

2.10.1 構成ファイルの作成

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

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

例2-9に構成ファイルを示します。これらのプロパティの説明については、「Oracle SQL Connector for HDFS構成プロパティ・リファレンス」を参照してください。

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

<?xml version="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.10.2 Oracle SQL Connector for HDFS構成プロパティ・リファレンス

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

一般的なプロパティ 

oracle.hadoop.exttab.colMap.columnLength

外部表のCHARVARCHAR2NCHARNVARCHAR2およびRAW型の列すべての長さを指定します。オプション。

デフォルト値: 列タイプで許容される最大長

Oracle Database 12cの場合、Oracle SQL Connector for HDFSでは、データベースのMAX_STRING_SIZEオプションの設定がSTANDARDEXTENDEDかに基づいて、VARCHAR2NVARCHAR2およびRAW列の長さを設定します。

有効な値: 整数

oracle.hadoop.exttab.colMap.columnType

Hiveおよびテキスト・ソースのすべての列のデータ型マッピングを指定します。オプション。

特定の列に対してこの設定をオーバーライドするには、oracle.hadoop.exttab.colMap.column_name.columnTypeを設定します。

デフォルト値: テキストの場合はVARCHAR2です。Hiveについては、表2-1を参照してください。

有効な値: 次のOracleデータ型がサポートされています。


VARCHAR2
NVARCHAR2
CHAR
NCHAR
CLOB
NCLOB
NUMBER
INTEGER
FLOAT
BINARY_DOUBLE
BINARY_FLOAT
RAW*
DATE
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
INTERVAL DAY TO SECOND
INTERVAL YEAR TO MONTH
* デリミタ付きテキスト・ファイルのRAWバイナリ・データは16進でエンコードされる必要があります。
oracle.hadoop.exttab.colMap.dateMask

すべてのDATE列に対して、外部表のdate_format_spec句で使用される書式マスクを指定します。この句は、文字データ・フィールドに特定書式の日付が含まれていることを示します。

デフォルト値: NLS_DATE_FORMATデータベース・パラメータで設定されているデフォルトのグローバリゼーション書式マスク

有効な値: 『Oracle Database SQL言語リファレンス』で説明されている日時書式モデル。ただし、引用符を含めることはできません。

oracle.hadoop.exttab.colMap.fieldLength

すべてのCLOB列に対して、ORACLE_LOADERアクセス・ドライバで使用されている文字バッファの長さを設定します。この値は、データ・ファイルのフィールドとそのデータ型を識別するために、外部表定義のfield_list句で使用されます。

デフォルト値: 4000バイト

有効な値: 整数

oracle.hadoop.exttab.colMap.timestampMask

すべてのTIMESTAMP列およびTIMESTAMP WITH LOCAL TIME ZONE列に対して、外部表のdate_format_spec句で使用される書式マスクを指定します。この句は、文字データ・フィールドに特定書式のタイムスタンンプが含まれていることを示します。

デフォルト値: NLS_TIMESTAMP_FORMATデータベース・パラメータで設定されているデフォルトのグローバリゼーション書式マスク

有効な値: 『Oracle Database SQL言語リファレンス』で説明されている日時書式モデル。ただし、引用符を含めることはできません。

oracle.hadoop.exttab.colMap.timestampTZMask

すべてのTIMESTAMP WITH TIME ZONE列に対して、外部表のdate_format_spec句で使用される書式マスクを指定します。この句は、文字データ・フィールドに特定書式のタイムスタンンプが含まれていることを示します。

デフォルト値: NLS_TIMESTAMP_TZ_FORMATデータベース・パラメータで設定されているデフォルトのグローバリゼーション書式マスク

有効な値: 『Oracle Database SQL言語リファレンス』で説明されている日時書式モデル。ただし、引用符を含めることはできません。

oracle.hadoop.exttab.colMap.column_name.columnLength

外部表のCHARVARCHAR2NCHARNVARCHAR2およびRAW型の列すべての長さを指定します。オプション。

デフォルト値: oracle.hadoop.exttab.colMap.columnLengthの値。このプロパティが設定されていない場合は、データ型で許容される最大長

有効な値: 整数

oracle.hadoop.exttab.colMap.column_name.columnType

column_nameに対するデータ型マッピングをオーバーライドします。オプション。

column_nameは、大文字と小文字を区別します。Hive表の列またはoracle.hadoop.exttab.columnNamesにリストされている列の名前と正確に一致する必要があります。

デフォルト値: oracle.hadoop.exttab.colMap.columnTypeの値。このプロパティが設定されていない場合は、表2-1で識別されているデフォルトのデータ型

有効な値: 「oracle.hadoop.exttab.colMap.columnType」を参照してください。

oracle.hadoop.exttab.colMap.column_name.dateMask

column_nameに対する書式マスクをオーバーライドします。オプション。

column_nameは、大文字と小文字を区別します。Hive表の列またはoracle.hadoop.exttab.columnNamesにリストされている列の名前と正確に一致する必要があります。

デフォルト値: oracle.hadoop.exttab.colMap.dateMaskの値。

有効な値: 『Oracle Database SQL言語リファレンス』で説明されている日時書式モデル。ただし、引用符を含めることはできません。

oracle.hadoop.exttab.colMap.column_name.fieldLength

column_nameに対して、ORACLE_LOADERアクセス・ドライバで使用されている文字バッファの長さをオーバーライドします。このプロパティは、特にCLOB列および拡張データ型列で有用です。オプション。

column_nameは、大文字と小文字を区別します。Hive表の列またはoracle.hadoop.exttab.columnNamesにリストされている列の名前と正確に一致する必要があります。

デフォルト値: Oracle SQL Connector for HDFSでは、表2-2に示すように、デフォルトのフィールドの長さを設定します。

表2-2 フィールドの長さの計算

ターゲット列のデータ型 フィールドの長さ

VARCHAR2NVARCHAR2CHARNCHAR

oracle.hadoop.exttab.colMap.column_name.columnLengthの値

RAW

2 * columnLengthプロパティ

CLOBNCLOB

oracle.hadoop.exttab.colMap.fieldLengthの値

その他のすべての型

255 (外部表のデフォルトのサイズ)


有効な値: 整数

oracle.hadoop.exttab.colMap.column_name.timestampMask

column_nameに対する書式マスクをオーバーライドします。オプション。

column_nameは、大文字と小文字を区別します。Hive表の列またはoracle.hadoop.exttab.columnNamesにリストされている列の名前と正確に一致する必要があります。

デフォルト値: oracle.hadoop.exttab.colMap.timestampMaskの値。

有効な値: 『Oracle Database SQL言語リファレンス』で説明されている日時書式モデル。ただし、引用符を含めることはできません。

oracle.hadoop.exttab.colMap.column_name.timestampTZMask

column_nameに対する書式マスクをオーバーライドします。オプション。

column_nameは、大文字と小文字を区別します。Hive表の列またはoracle.hadoop.exttab.columnNamesにリストされている列の名前と正確に一致する必要があります。

デフォルト値: oracle.hadoop.exttab.colMap.timestampTZMaskの値。

有効な値: 『Oracle Database SQL言語リファレンス』で説明されている日時書式モデル。ただし、引用符を含めることはできません。

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

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

列名はSQL識別子として読み取られます。引用符で囲まれていない値は大文字に変換され、二重引用符で囲まれている値は入力したとおりに使用されます。

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

デリミタ付きテキスト・ファイルから外部表を作成する場合は、このプロパティまたはoracle.hadoop.exttab.columnCountを設定する必要があります。

oracle.hadoop.exttab.dataCompressionCodec

データ・ファイルの圧縮に使用される圧縮コーデック・クラスの名前。このプロパティは、データ・ファイルを圧縮する場合に指定します。オプション。

このプロパティは、org.apache.hadoop.io.compress.CompressionCodecインタフェースを実装する圧縮コーデックのクラス名を指定します。このコーデックはすべてのデータ・ファイルに適用されます。

Hadoopでは、次を含む複数の標準コーデックを使用できます。

  • bzip2: org.apache.hadoop.io.compress.BZip2Codec

  • gzip: org.apache.hadoop.io.compress.GzipCodec

Hadoopクラスタ(Snappyなど)で使用できないコーデックを使用するには、まず、システムで別々にダウンロード、インストールおよび構成します。

デフォルト値: なし

oracle.hadoop.exttab.dataPaths

完全修飾されたHDFSパスのカンマ区切りリスト。このプロパティを使用すると、パスの指定に特別なパターン一致文字を使用して、入力を制限できます。表2-3を参照してください。-createTableおよび-publishコマンドでデータ・ポンプ・ファイルまたはデリミタ付きテキスト・ファイルを使用する場合、このプロパティは必須です。Hiveデータソースの場合、このプロパティは無視されます。

たとえば、/data/s2/内のすべてのファイルと、/data/s7//data/s8/および/data/s9/内のCSVファイルのみを選択するには、次の式を入力します。

/data/s2/,/data/s[7-9]/*.csv

外部表は、リストされたすべてのファイルおよびリストされたディレクトリ内のすべてのファイルに含まれるデータにアクセスします。これらのファイルで1つのデータセットを構成します。

データセットには、圧縮ファイルを含めることも、非圧縮ファイルを含めることもできますが、両方を含めることはできません。

表2-3 パターン一致文字

文字 説明

?

任意の1文字に一致します。

*


0文字以上の文字に一致します。

[abc]

文字セット{a, b, c}内の1文字に一致します。

[a-b]

文字の範囲{a...b}内の1文字に一致します。文字aは、b以下である必要があります。

[^a]

文字セットまたは範囲{a}外の1文字に一致します。カレット(^)は、左カッコの直後に付ける必要があります。

\c

文字cの特別な意味を無効にします。バックスラッシュ(\)は、エスケープ文字です。

{ab\,cd}

文字列セット{ab, cd}内の文字列に一致します。カンマの前にエスケープ文字(\)を付けて、パス区切りとしてのカンマの意味を無効にします。

{ab\,c{de\,fh}}

文字列セット{ab, cde, cfh}内の文字列に一致します。カンマの前にエスケープ文字(\)を付けて、パス区切りとしてのカンマの意味を無効にします。


oracle.hadoop.exttab.dataPathFilter

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

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

oracle.hadoop.exttab.defaultDirectory

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

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

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

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

oracle.hadoop.exttab.fieldTerminator

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

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

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

  • 1つ以上の標準印刷可能文字(\uによる開始は不可)。たとえば、\tはタブを表します。

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

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

oracle.hadoop.exttab.hive.columnType.*

Hiveデータ型をOracleデータ型にマップします。このプロパティ名はHiveデータ型を識別し、その値はOracleデータ型です。外部表のターゲット列は、このプロパティで示されたOracleデータ型で作成されます。

HiveのTIMESTAMP列がOracleのTIMESTAMP列にマップされると、その書式マスクはYYYY-MM-DD H24:MI:SS.FFになります。HiveのSTRING列がOracleのTIMESTAMP列にマップされると、デフォルトでそのデータベースのNLSパラメータ設定が使用されます。これらのデフォルトをオーバーライドするには、oracle.hadoop.exttab.colMap.timestampMaskまたはoracle.hadoop.exttab.colMap.timestampTZMaskプロパティを使用します。

デフォルト値: 表2-4に、Hive列タイプのプロパティとそのデフォルト値を示します。

有効な値: oracle.hadoop.exttab.colMap.columnTypeに対する有効な値を参照してください。

表2-4 Hive列タイプのマッピングのプロパティ

プロパティ デフォルト値

oracle.hadoop.exttab.hive.columnType.BIGINT

INTEGER

oracle.hadoop.exttab.hive.columnType.BOOLEAN

VARCHAR2

oracle.hadoop.exttab.hive.columnType.DECIMAL

NUMBER

oracle.hadoop.exttab.hive.columnType.DOUBLE

NUMBER

oracle.hadoop.exttab.hive.columnType.FLOAT

NUMBER

oracle.hadoop.exttab.hive.columnType.INT

INTEGER

oracle.hadoop.exttab.hive.columnType.SMALLINT

INTEGER

oracle.hadoop.exttab.hive.columnType.STRING

VARCHAR2

oracle.hadoop.exttab.hive.columnType.TIMESTAMP

TIMESTAMP

oracle.hadoop.exttab.hive.columnType.TINYINT

INTEGER


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-5に、値が変換される場合の例を示します。

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

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

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

ソース・ファイルのタイプを指定します。-createTable操作と-publish操作の場合、このプロパティの値が必要です。

デフォルト値: text

有効な値: datapumphiveまたはtext

oracle.hadoop.exttab.stringSizes

文字列に指定される長さがバイトか文字かを示します。この値は、外部表のSTRING SIZES ARE IN句で使用されます。マルチバイト文字セットのロード時は、文字を使用します。『Oracle Databaseユーティリティ』を参照してください。

デフォルト値: BYTES

有効な値: BYTESまたはCHARACTERS

oracle.hadoop.exttab.tableName

外部表のスキーマで修飾された名前。次の形式で表されます。

schemaName.tableName

schemaNameを省略すると、スキーマ名はデフォルトで接続ユーザー名に設定されます。

デフォルト値: なし

すべての操作で必須のプロパティ。

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

次のようなThinスタイル・サービス名形式のデータベース接続文字列を指定します。

jdbc:oracle:thin:@//host_name:port/service_name

サービス名が不明な場合は、特権ユーザーとして次のSQLコマンドを入力します。

SQL> show parameter service

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

このプロパティは、他のすべての接続プロパティより優先されます。

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

有効な値: 1つの文字列

oracle.hadoop.connection.user

Oracle Databaseのログイン名。externalTableツールによって、パスワードの入力が求められます。Oracle Walletを外部パスワード・ストアとして使用する場合を除き、このプロパティは必須です。

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

有効な値: 1つの文字列

oracle.hadoop.connection.tnsEntryName

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

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

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

有効な値: 1つの文字列

oracle.hadoop.connection.tns_admin

tnsnames.oraファイルを格納するディレクトリを指定します。データベース接続文字列でTransparent Network Substrate (TNS)のエントリ名を使用するようにこのプロパティを定義します。TNSNamesをJDBC Thinドライバとともに使用する場合は、このプロパティまたはJavaのoracle.net.tns_adminプロパティを設定する必要があります。両方のプロパティを設定した場合、このプロパティがoracle.net.tns_adminより優先されます。

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

デフォルト値: Java oracle.net.tns_adminシステム・プロパティの値

有効な値: 1つの文字列

oracle.hadoop.connection.wallet_location

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

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

有効な値: 1つの文字列

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

2.11 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などのヒントにより、データ挿入時のパフォーマンスも向上します。