Oracle Big Data SQLには、Oracle Copy to Hadoopユーティリティが含まれています。このユーティリティを使用すると、Oracleデータの識別とHadoop Distributed File Systemへのコピーが簡単になります。これには、コマンドライン・インタフェースまたはOracle SQL Developerを介してアクセスできます。Copy to HadoopによってHadoopクラスタにエクスポートされたデータは、Oracle Data Pump形式で格納されます。この形式は、次のようにBig Data SQLを介した問合せを最適化します。
データはOracleデータ型として格納される – データ型変換がなくなる
データが直接問い合される – Java SerDesに関連するオーバーヘッドを必要としない
表からデータ・ポンプ形式ファイルを生成してファイルをHDFSにコピーした後、Apache Hiveを使用してデータを問い合せることができます。Hiveは、Oracle Databaseにアクセスせずにローカルにデータを処理できます。Oracle表が変更されると、Hadoopのコピーをリフレッシュできます。Copy to Hadoopは、比較的静的であり、頻繁にリフレッシュする必要がないOracle表に主に役立ちます。
Copy to Hadoopは、Oracle Big Data SQLでライセンス供与されます。ユーティリティを使用するには、Oracle Big Data SQLのライセンスが必要です。
Oracle Big Data SQLがインストールされている場合は、Hadoopクラスタに接続しているOracle Databaseサーバー上でCopy to Hadoopを使用できます。
ネットワーク接続、サポートされるOracle Databaseレベルおよび他の要件については、「Oracle Big Data SQLのインストール」で、ご使用のプラットフォームにOracle Big Data SQLをインストールするための一般的な要件を確認してください。
Oracle Big Data SQLがインストールされている場合は、Oracle Big Data Applianceに接続しているOracle Exadata Database Machine上でCopy to Hadoopを使用できます。
Copy to Hadoopは、Oracle Big Data Appliance上のインストール・オプションであるOracle Big Data SQLのコンポーネントです。ソフトウェアの初期インストール時またはその後で、Oracle Big Data SQLによってサービスを有効化および無効化するための標準的な方法を使用して有効化できます。「インストールの実行」を参照してください。
Copy to Hadoopは、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がインストールされている場合は、Hadoopクラスタに接続しているOracle Databaseサーバー上でCopy to Hadoopを使用できます。
Copy to Hadoopは、Oracle Big Data SQLのコンポーネントです。Oracle Big Data SQLをインストールした後で追加の手順が必要です。手順はMOSノート、『Big Data SQL 3.0: Installing and Configuring Copy to Hadoop』 (Doc ID 2115762.1)を参照してください。質問がある場合、Oracleサポートに問い合せてください。
SQL CREATE TABLE
文には、ORACLE_DATAPUMP
アクセス・ドライバを指定する外部表を作成するための特別な句があります。この句に指定される情報により、アクセス・ドライバがOracleデータベース表のデータおよびメタデータを含むデータ・ポンプ形式ファイルを生成できます。
この項の内容は次のとおりです。
データ・ポンプ・ファイルは通常、あるデータベースから別のデータベースにデータおよびメタデータを移動するために使用されます。Copy to Hadoopは、このファイル形式を使用して、OracleデータベースからHDFSにデータをコピーします。
データ・ポンプ形式ファイルを生成するには、既存のOracle表から外部表を作成します。Oracle Databaseの外部表は、データベース外のデータの場所を識別および記述するOracle Databaseオブジェクトです。外部表は、アクセス・ドライバを使用して、データを解析および形式設定します。Copy to Hadoopでは、ORACLE_DATAPUMP
アクセス・ドライバを使用します。内部Oracle表からデータおよびメタデータをコピーして、外部表のデータ・ポンプ形式ファイルを移入します。
Oracle Databaseのデータベース・ディレクトリへの読取りおよび書込みアクセスが必要です。CREATE ANY DIRECTORY
システム権限を持つOracle Databaseユーザーのみディレクトリを作成できます。
この例は、Oracle Databaseサーバー(Oracle Exadata Database Machineなど)の/exportdir
ディレクトリを指すEXPORTDIR
という名前のデータベース・ディレクトリを作成します。
SQL> CREATE DIRECTORY exportdir AS '/exportdir';
データ・ポンプ形式ファイルの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;
この目的のために作成したデータベース・ディレクトリを識別します。「ターゲット・ディレクトリの識別」を参照してください。
作成するデータ・ポンプ・ファイルの名前をリストします。名前の数は、PARALLEL
句で指定される並列度(DOP)と一致する必要があります。それ以外の場合、DOPはファイルの数に削減されます。
ファイルの数および並列度は、データ・ポンプ形式ファイルを生成する場合にOracle Databaseのパフォーマンスに影響します。Hiveの問合せパフォーマンスには影響しません。
並列度(DOP)を設定します。Oracle DBAが使用を許可する最大数を使用します。デフォルトのDOPはシリアル処理の1です。大きい数値を使用すると並列処理が可能です。
この句の完全なSQL SELECT
構文を使用します。制限されていません。tablenameは、HDFSにコピーするOracle表を識別します。
関連項目:
これらのパラメータの説明:
『Oracle Database SQL言語リファレンス』
『Oracle Databaseユーティリティ』
Oracle Big Data SQLインストールは、Hadoopクライアント・ファイルをOracle Datatabaseサーバー(Oracle Exadata Database Machineなど)にインストールします。Hadoopクライアント・インストールでは、Hadoopコマンドを使用してデータ・ポンプ・ファイルをHDFSにコピーできます。HDFSディレクトリの書込み権限が必要です。
dmp
ファイルをHDFSにコピーするには、hadoop fs -put
コマンドを使用します。この例では、oracle
ユーザーが所有するHDFS customers
ディレクトリにファイルをコピーします。
$ hadoop fs -put customers*.dmp /user/oracle/customers
データ・ポンプ・ファイルのデータにアクセス可能にするには、データ・ポンプ・ファイルに対するHive外部表を作成します。Copy to Hadoopは、Hiveによるファイルの読取りが可能なSerDesを提供します。これらのSerDesは読取り専用であるため、これらを使用してファイルに書き込めません。
関連項目:
次のApache Hive LanguageManual DDL
外部表に対して、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'
Copy to Hadoopは、Oracle表のデータを適切なHiveデータ型に自動的に変換します。表4-1に、Oracleデータ型とHiveデータ型の間のデフォルトのマッピングを示します。
表4-1 Oracleデータ型からHiveデータ型への変換
Oracleデータ型 | Hiveデータ型 |
---|---|
NUMBER |
スケールが0、精度が10未満の場合はINT スケールが0、精度が19未満の場合はBIGINT スケールが0より大きく、精度が19より大きい場合はDECIMAL |
CLOB NCLOB |
STRING |
BINARY_DOUBLE |
DOUBLE |
BINARY_FLOAT |
FLOAT |
BLOB |
BINARY |
CHAR NCHAR |
CHAR |
VARCHAR2 NVARCHAR2 |
VARCHAR |
ROWID UROWID |
BINARY |
DATE |
TIMESTAMP |
TIMESTAMP |
TIMESTAMP |
TIMESTAMPTZ1 TIMESTAMPLTZ |
サポートなし |
RAW |
BINARY |
この例は、Copy to Hadoopを使用してOracle表からHive表を作成するプロセスのすべての手順を示します。
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サンプル・スキーマを参照してください。
これらのSQL文は、EXPDIR
という名前のローカル・データベース・ディレクトリを作成し、SH
ユーザーにアクセス権を付与します。
SQL> CREATE DIRECTORY expdir AS '/expdir'; Directory created. SQL> GRANT READ, WRITE ON DIRECTORY expdir TO SH; Grant succeeded.
次の例は、データ・ポンプ・ファイルの作成方法およびその内容の確認方法を示します。
Copy to Hadoopでは、例に示す構文しかサポートされません。エクスポート・ユーティリティまたはOracle Data Pumpで作成されるデータ・ポンプ・ファイルとの互換性はありません。
この例は、CUSTOMERS
表からデータ・ポンプ形式ファイルを作成する非常に簡単なSQLコマンドを示します。表全体を選択して、ローカル/expdir
ディレクトリのcustomers.dmp
という名前の単一の出力ファイルを生成します。
CREATE TABLE export_customers ORGANIZATION EXTERNAL ( TYPE oracle_datapump DEFAULT DIRECTORY expdir LOCATION('customers.dmp') ) AS SELECT * FROM customers;
次の例は、より複雑な構文を示しています。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;
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
次のコマンドはローカルexpdir
ディレクトリのファイルをリストし、customers
という名前のHadoopサブディレクトリを作成し、そこにファイルをコピーします。ユーザーは、oracle
ファイル・システム・ユーザーとしてHadoopクラスタ(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
このHiveQL文は、Copy to Hadoopの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
次の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
Oracle Shell for Hadoop Loadersとは
Oracle Shell for Hadoop Loadersは、Oracle Loader for Hadoop、Oracle SQL Connector for HDFSおよびCopy to Hadoopに簡単に使用できるコマンドライン・インタフェースを提供するヘルパー・シェルです。 コマンドライン・リコール、履歴、親プロセスからの環境変数の継承、 新規または既存の変数の設定、およびコマンドラインでの環境の取替えの実行などの基本的なシェル機能があります。
Oracle Shell for Hadoop Loadersの中心的な機能には次のものが含まれます。
Oracle Shell for Hadoop Loadersが対話してロード・タスクを実行する名前付き外部リソースの定義。
ロード操作用のデフォルト値の設定。
ロード・コマンドの実行。
単純な事前および事後ロード・タスクの、オペレーティング・システム、HDFS、HiveおよびOracleへの委任。 これらのタスクには、ロードされるデータの表示およびロード後のターゲット表でのデータの表示が含まれます。
Oracle Shell for Hadoop Loadersの概要
OHSHキットのexamplesディレクトリには、Oracle Shell for Hadoop Loadersを使用してリソースを定義したり、データをロードする多くの例が含まれています。 これらを実行する例および手順の詳細は、<OHSH_KIT>/examples/README.txt
を参照してください。
ヘルプの表示
OHSHシェルには、すべてのコマンドのオンライン・ヘルプがあります。
可能なすべてのOHSHコマンドのリストを表示するには、次のコマンドを実行します。
ohsh> help
特定のコマンドのヘルプを表示するには、help
の後にそのコマンドを続けます。
ohsh> help show
前提条件
Oracle Databaseサーバー上での前提条件は次のとおりです。
Copy to Hadoopがインストールされている
HadoopおよびHiveのクライアント・ライブラリがインストールされ、構成されている
SQL*Plusがインストールされている
Oracle DatabaseへのJDBCアクセスがある。
Oracle Big Data ConnectorsのOLHおよびOSCHのインストールはオプションです。
Oracle Shell for Hadoop Loadersのインストール
Oracle Databaseサーバー上にOracle Shell for Hadoop Loadersを設定するには、次の各項の手順に従います。
Oracle Big Data SQLがインストールされた後で、$ORACLE_HOME/bigdatasql/ohsh-<version>.zip
でOracle Shell for Hadoop Loadersのダウンロード・パッケージを探します。
ohsh-<version>.zip
の内容をデータベース上の選択したディレクトリに抽出します。
この抽出によって、README.txt
ファイルと次のサブディレクトリを持つohsh-<version>
という名前のディレクトリが作成されます。
README.txt /bin /conf /doc /examples /jlib
README.txt
の手順に従って、Oracle Shell for Hadoop Loadersを構成します。
/doc
ディレクトリには、Hadoopノード、データベース・ノードおよびエッジ・ノードにソフトウェアをインストールする手順、Hive表のロードのセキュリティ・モデルの説明、および他の役立つ情報が記載された追加のREADMEファイルがあります。
TIMESTAMPTZ
およびTIMESTAMPLTZ
データをHiveにコピーするには、データ・ポンプ・ファイルにエクスポートする場合に列をTIMESTAMP
にキャストします。Hiveは、タイム・ゾーンまたはタイム・オフセットをサポートするデータ型を持ちません。