主コンテンツへ
Oracle® Big Data Applianceソフトウェア・ユーザーズ・ガイド
リリース4 (4.2)
E64887-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 HadoopへのOracle表のコピー

この章では、Oracleデータベースの表をHadoopにコピーするためにCopy to BDAを使用する方法について説明します。内容は次のとおりです。

8.1 Copy to BDAとは

Copy to BDAを使用すると、OracleデータベースからHadoopに表をコピーできます。表からデータ・ポンプ形式ファイルを生成してファイルをHDFSにコピーした後、Apache Hiveを使用してデータを問い合せることができます。Hiveは、Oracle Databaseにアクセスせずにローカルにデータを処理できます。Oracle表が変更されると、Hadoopのコピーをリフレッシュできます。Copy to BDAは、比較的静的であり、頻繁にリフレッシュする必要がないOracle表に主に役立ちます。

Copy to BDAは、Oracle Big Data SQLでライセンス供与されます。Copy to BDAを使用するには、Oracle Big Data SQLライセンスが必要です。

8.2 Copy to BDAの使用の概要

Copy to BDAを使用するには、次の手順を実行します。

  1. システムが前提条件を満たしていることを確認し、必要なソフトウェアがOracle Big Data ApplianceおよびOracle Exadata Database Machineにインストールされていることを確認します。

    「Copy to BDAのインストール」を参照してください。

  2. Oracle Exadata Database Machineで、Oracle Databaseに接続し、表データおよびメタデータを含むデータ・ポンプ形式ファイルを生成します。

    「データ・ポンプ・ファイルの生成」を参照してください。

  3. ファイルをOracle Big Data ApplianceのHDFSにコピーします。

    「HDFSへのファイルのコピー」を参照してください。

  4. Apache Hiveに接続して、ファイルから外部表を作成します。

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

  5. 他のHive表と同じように、このHive表に問い合せます。

8.3 Copy to BDAのインストール

Copy to BDAは、Oracle Big Data Applianceに接続されたOracle Exadata Database Machineでのみ使用できます。

8.3.1 Copy to BDAの前提条件

Oracle Exadata Database Machineは次の要件に準拠している必要があります。

  • Oracle Big Data Applianceと同じインフィニバンドまたはクライアント・ネットワークで構成されています。Oracle Exadata Database MachineおよびOracle Big Data Appliance間のインフィニバンド接続をお薦めしますが、必須ではありません。

  • Oracle Database 11.2以上を実行していること。

    Copy to BDAは、Oracle Big Data SQLより前のリリースをサポートします。

8.3.2 Oracle Big Data ApplianceのCopy to BDAのインストール

Copy to BDAは、Oracle Big Data Applianceのインストール・オプションであるOracle Big Data SQLのコンポーネントです。ソフトウェアの初期インストール時またはその後で、Oracle Big Data SQLによってサービスを有効化および無効化するための標準的な方法を使用して有効化できます。「インストールの実行」を参照してください。

8.3.3 Oracle Exadata Database MachineのCopy to BDAのインストール

Copy to BDAは、Oracle Exadata Database MachineのHadoopクライアントのみ必要です。Oracle Big Data SQLで必要な追加のソフトウェアは使用しません。

Oracle Big Data SQLも使用する場合、bds-exa-install.shインストール・スクリプトを実行するとHadoopクライアントが自動的に作成されます。追加の手順を実行する必要はありません。「Oracle Big Data SQLのインストール後スクリプトの実行」を参照してください。

この時点でOracle Big Data SQLを使用しない場合、スクリプトを実行するかわりにHadoopクライアントを手動でインストールできます。たとえば、Oracle Big Data SQLは、使用しているOracle Databaseのバージョンでサポートされていない場合があります。また、現在必要としていないデータベース・パッチおよび他のソフトウェアのインストールを回避する場合があります。「CDHへのリモート・クライアント・アクセスの提供」を参照してください。

8.4 データ・ポンプ・ファイルの生成

SQL CREATE TABLE文には、ORACLE_DATAPUMPアクセス・ドライバを指定する外部表を作成するための特別な句があります。この句に指定される情報により、アクセス・ドライバがOracleデータベース表のデータおよびメタデータを含むデータ・ポンプ形式ファイルを生成できます。

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

8.4.1 データ・ポンプ形式ファイルについて

データ・ポンプ・ファイルは通常、あるデータベースから別のデータベースにデータおよびメタデータを移動するために使用されます。Copy to BDAは、このファイル形式を使用して、OracleデータベースからHDFSにデータをコピーします。

データ・ポンプ形式ファイルを生成するには、既存のOracle表から外部表を作成します。Oracle Databaseの外部表は、データベース外のデータの場所を識別および記述するOracle Databaseオブジェクトです。外部表は、アクセス・ドライバを使用して、データを解析および形式設定します。Copy to BDAでは、ORACLE_DATAPUMPアクセス・ドライバを使用します。内部Oracle表からデータおよびメタデータをコピーして、外部表のデータ・ポンプ形式ファイルを移入します。

8.4.2 ターゲット・ディレクトリの識別

Oracle Databaseのデータベース・ディレクトリへの読取りおよび書込みアクセスが必要です。CREATE ANY DIRECTORYシステム権限を持つOracle Databaseユーザーのみディレクトリを作成できます。

この例は、Oracle Exadata Database Machineの/exportdirディレクトリを指すEXPORTDIRという名前のデータベース・ディレクトリを作成します。

SQL> CREATE DIRECTORY exportdir AS '/exportdir';

8.4.3 CREATE TABLE構文について

データ・ポンプ形式ファイルのCREATE TABLE文の基本的な構文は次のとおりです。

CREATE TABLE table_name
   ORGANIZATION EXTERNAL (
     TYPE oracle_datapump
     DEFAULT DIRECTORY database_directory
     LOCATION ('filename1.dmp','filename2.dmp'...)
     ) PARALLEL n
   AS SELECT * FROM tablename;
DEFAULT DIRECTORY

この目的のために作成したデータベース・ディレクトリを識別します。「ターゲット・ディレクトリの識別」を参照してください。

LOCATION

作成するデータ・ポンプ・ファイルの名前をリストします。名前の数は、PARALLEL句で指定される並列度(DOP)と一致する必要があります。それ以外の場合、DOPはファイルの数に削減されます。

ファイルの数および並列度は、データ・ポンプ形式ファイルを生成する場合にOracle Databaseのパフォーマンスに影響します。Hiveの問合せパフォーマンスには影響しません。

PARALLEL

並列度(DOP)を設定します。Oracle DBAが使用を許可する最大数を使用します。デフォルトのDOPはシリアル処理の1です。大きい数値を使用すると並列処理が可能です。

AS SELECT

この句の完全なSQL SELECT構文を使用します。制限されていません。tablenameは、HDFSにコピーするOracle表を識別します。


関連項目:

これらのパラメータの説明:
  • 『Oracle Database SQL言語リファレンス』

  • 『Oracle Databaseユーティリティ』


8.4.4 HDFSへのファイルのコピー

Oracle Big Data SQLインストールは、Hadoopクライアント・ファイルをOracle Exadata Database Machineにインストールします。Hadoopクライアント・インストールでは、Hadoopコマンドを使用してデータ・ポンプ・ファイルをHDFSにコピーできます。HDFSディレクトリの書込み権限が必要です。

dmpファイルをHDFSにコピーするには、hadoop fs -putコマンドを使用します。この例では、oracleユーザーが所有するHDFS customersディレクトリにファイルをコピーします。

$ hadoop fs -put customers*.dmp /user/oracle/customers

8.5 Hive表の作成

データ・ポンプ・ファイルのデータにアクセス可能にするには、データ・ポンプ・ファイルに対するHive外部表を作成します。Copy to BDAは、Hiveによるファイルの読取りが可能なSerDesを提供します。これらのSerDesは読取り専用であるため、これらを使用してファイルに書き込めません。

8.5.1 Hive外部表について

外部表に対して、Hiveは表のメタデータをメタストアにロードします。データはLOCATION句で識別される元の場所に残ります。HiveQL DROP TABLE文を使用して外部表を削除すると、外部データは変更されずにメタデータのみ破棄されます。このため、Hiveは、Oracle Databaseと基本的に同じ方法で外部表を処理します。

外部表は、複数のプログラムで共有されるデータ・ソースをサポートします。この場合、Oracle Databaseを使用してデータを更新し、新しいファイルを生成します。Hiveメタデータを変更せずに古いHDFSファイルを更新されたファイルで上書きできます。

データ・ポンプ形式ファイルで使用するHive外部表を作成するためのHive CREATE TABLE文の基本的な構文は、次のとおりです。

CREATE EXTERNAL TABLE tablename 
ROW FORMAT
   SERDE 'oracle.hadoop.hive.datapump.DPSerDe'
STORED AS
   INPUTFORMAT  'oracle.hadoop.hive.datapump.DPInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'hdfs_directory'

8.5.2 列マッピングの概要

Hive表の列は、データ・ポンプ・ファイルに格納されたメタデータで提供されるOracle列と同じ名前が自動的に設定されます。このリリースでは、ユーザーが指定した列の定義が無視されます。

8.5.3 データ型変換について

Copy to BDAは、Oracle表のデータを適切なHiveデータ型に自動的に変換します。表8-1に、Oracleデータ型とHiveデータ型の間のデフォルトのマッピングを示します。

表8-1 Oracleデータ型からHiveデータ型への変換

Oracleデータ型 Hiveデータ型

NUMBER

スケールが0、精度が10未満の場合はINT

スケールが0、精度が19未満の場合はBIGINT

スケールが0より大きく、精度が19より大きい場合はDECIMAL

BINARY_DOUBLE

DOUBLE

BINARY_FLOAT

FLOAT

CHAR

NCHAR

CHAR

VARCHAR2

NVARCHAR2

VARCHAR

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP

TIMESTAMPTZ脚注1 

TIMESTAMPLTZ

サポートなし

RAW

BINARY


脚注1 TIMESTAMPTZおよびTIMESTAMPLTZデータをHiveにコピーするには、データ・ポンプ・ファイルにエクスポートする場合に列をTIMESTAMPにキャストします。Hiveは、タイム・ゾーンまたはタイム・オフセットをサポートするデータ型を持ちません。

8.6 サンプル・スキーマの使用例

この例は、Copy to BDAを使用してOracle表からHive表を作成するプロセスのすべての手順を示します。

8.6.1 サンプル・データについて

Oracle表は、Sales History (SH)サンプル・スキーマから使用します。CUSTOMERS表は、名前、住所、電話番号、生年月日および借入限度額を含む個々の顧客に関する詳細情報を提供します。COUNTRIES表は、国のリストを提供し、地域および小地域を識別します。

この問合せは、CUSTOMERS表の一部のデータを示します。

SELECT cust_first_name first_name,
   cust_last_name last_name,
   cust_gender gender, 
   cust_year_of_birth birth
FROM customers 
ORDER BY cust_city, last_name 
FETCH FIRST 10 ROWS ONLY;

問合せは次の行を返します:

FIRST_NAME      LAST_NAME            GENDER      BIRTH
--------------- -------------------- ------ ----------
Lise            Abbey                F            1963
Lotus           Alden                M            1958
Emmanuel        Aubrey               M            1933
Phil            Ball                 M            1956
Valentina       Bardwell             F            1965
Lolita          Barkley              F            1966
Heloise         Barnes               M            1980
Royden          Barrett              M            1937
Gilbert         Braun                M            1984
Portia          Capp                 F            1948

この例を複製するには、Oracle Databaseのサンプル・スキーマをインストールして、SHユーザーとして接続します。


関連項目:

スキーマの表およびインストールの手順の説明は、Oracle Databaseサンプル・スキーマを参照してください。

8.6.2 EXPDIR Databaseディレクトリの作成

これらのSQL文は、EXPDIRという名前のローカル・データベース・ディレクトリを作成し、SHユーザーにアクセス権を付与します。

SQL> CREATE DIRECTORY expdir AS '/expdir';
Directory created.
SQL> GRANT READ, WRITE ON DIRECTORY expdir TO SH;
Grant succeeded.

8.6.3 顧客データのデータ・ポンプ形式ファイルの作成

次の例は、データ・ポンプ・ファイルの作成方法およびその内容の確認方法を示します。

8.6.3.1 簡単なSELECT文を使用したCREATE TABLEの例

この例は、CUSTOMERS表からデータ・ポンプ形式ファイルを作成する非常に簡単なSQLコマンドを示します。表全体を選択して、ローカル/expdirディレクトリのcustomers.dmpという名前の単一の出力ファイルを生成します。

CREATE TABLE export_customers 
   ORGANIZATION EXTERNAL
   (
   TYPE oracle_datapump
   DEFAULT DIRECTORY expdir
   LOCATION('customers.dmp')
   )
AS SELECT * FROM customers;

8.6.3.2 さらに複雑なSQL SELECT文を使用したCREATE TABLEの例

次の例は、より複雑な構文を示しています。COUNTRY_ID列に関してCUSTOMERSおよびCOUNTRIES表を結合して、国名を示します。また、行をアメリカの顧客に制限します。コマンドは、ローカル/expdirディレクトリにamericas1.dmpおよびamericas2.dmpという名前の2つの出力ファイルをパラレルに生成します。

CREATE TABLE export_americas 
   ORGANIZATION EXTERNAL
   (
   TYPE oracle_datapump
   DEFAULT DIRECTORY expdir
   LOCATION('americas1.dmp', 'americas2.dmp')
   )
   PARALLEL 2
AS SELECT a.cust_first_name first_name,
   a.cust_last_name last_name,
   a.cust_gender gender,
   a.cust_year_of_birth birth, 
   a.cust_email email, 
   a.cust_postal_code postal_code, 
   b.country_name country
FROM customers a,
     countries b
WHERE a.country_id=b.country_id AND
      b.country_region='Americas'
ORDER BY a.country_id, a.cust_postal_code;

8.6.4 データ・ファイルの内容の確認

Hadoopにコピーする前に出力データ・ファイルの内容を確認できます。前のCREATE TABLE文で、他の表と同じように説明および問い合せできるEXPORT_AMERICASという名前の外部表を作成しました。

DESCRIBE文は、列の選択および変更された名前を示します。

SQL> DESCRIBE export_americas;
 Name                      Null?    Type
 ------------------------- -------- -----------------
 FIRST_NAME                NOT NULL VARCHAR2(20)
 LAST_NAME                 NOT NULL VARCHAR2(40)
 GENDER                    NOT NULL CHAR(1)
 BIRTH                     NOT NULL NUMBER(4)
 EMAIL                              VARCHAR2(50)
 POSTAL_CODE               NOT NULL VARCHAR2(10)
 COUNTRY                   NOT NULL VARCHAR2(40)

次のようなSELECT文は、データのサンプルを示します。

SELECT first_name, last_name, gender, birth, country 
   FROM export_americas 
   WHERE birth > 1985 
   ORDER BY last_name 
   FETCH FIRST 5 ROWS ONLY;
FIRST_NAME      LAST_NAME            GENDER      BIRTH COUNTRY
--------------- -------------------- ------ ---------- ------------------------
Opal            Aaron                M            1990 United States of America
KaKit           Abeles               M            1986 United States of America
Mitchel         Alambarati           M            1987 Canada
Jade            Anderson             M            1986 United States of America
Roderica        Austin               M            1986 United States of America

8.6.5 Hadoopへのファイルのコピー

次のコマンドはローカルexpdirディレクトリのファイルをリストし、customersという名前のHadoopサブディレクトリを作成し、そこにファイルをコピーします。ユーザーは、oracleファイル・システム・ユーザーとしてOracle Big Data Applianceに接続されます。

$ cd /expdir
$ ls americas*.dmp
americas1.dmp  americas2.dmp
$ hadoop fs -mkdir customers
$ hadoop fs -put *.dmp customers
$ hadoop fs -ls customers
Found 2 items
-rw-r--r--   1 oracle oracle     798720 2014-10-13 17:04 customers/americas1.dmp
-rw-r--r--   1 oracle oracle     954368 2014-10-13 17:04 customers/americas2.dmp

8.6.6 Hive外部表の作成

このHiveQL文は、Copy to BDAのSerDesを使用して外部表を作成します。LOCATION句は、データ・ポンプ・ファイルを含むHadoopディレクトリへのフル・パスを識別します。

CREATE EXTERNAL TABLE customers
   ROW FORMAT SERDE 'oracle.hadoop.hive.datapump.DPSerDe'
   STORED AS
      INPUTFORMAT  'oracle.hadoop.hive.datapump.DPInputFormat'
      OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION '/user/oracle/customers';

DESCRIBEコマンドは、CUSTOMERS外部表の列を示します。

hive> DESCRIBE customers;
OK
first_name               varchar(20)              from deserializer   
last_name                varchar(40)              from deserializer   
gender                   char(1)                  from deserializer   
birth                    int                      from deserializer   
email                    varchar(50)              from deserializer   
postal_code              varchar(10)              from deserializer   
country                  varchar(40)              from deserializer   

8.6.7 Hiveのデータの問合せ

次のHiveQL SELECT文は、「データ・ファイルの内容の確認」に示されているOracle DatabaseのSQL SELECT文と同じデータを示します。2つの問合せは、同じデータ・ポンプ・ファイルのコピーにアクセスします。

SELECT first_name, last_name, gender, birth, country 
  FROM customers 
  WHERE birth > 1985 
  ORDER BY last_name LIMIT 5;

Total MapReduce jobs = 1
Launching Job 1 out of 1
     .
     .
     .
OK
Opal      Aaron       M     1990     United States of America
KaKit     Abeles      M     1986     United States of America
Mitchel   Alambarati  M     1987     Canada
Jade      Anderson    M     1986     United States of America
Roderica  Austin      M     1986     United States of America