Oracle® Big Data SQL

ユーザーズ・ガイド

リリース3 (3.1)

E83728-02(原本部品番号:E77162-09)

2017年6月

管理者およびソフトウェア開発者が入手できるOracle Big Data SQLソフトウェアを説明します。

Oracle Big Data SQLユーザーズ・ガイド, リリース3 (3.1)

E83728-02

Copyright © 2012, 2017, Oracle and/or its affiliates.  All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- 関連ドキュメント

- 表記規則

- バッカス・ナウア記法の構文

- Oracle Big Data SQL 3.1での変更点

- 以前のリリースの変更履歴

- Oracle Big Data SQL 3.0.1での変更点

- Oracle Big Data SQL 3.0での変更点

1 Oracle Big Data SQLの概要

- 1.1 Oracle Big Data SQLとは

- 1.1.1 Oracle外部表について

- 1.1.2 Oracle Big Data SQLのアクセス・ドライバについて

- 1.1.3 Smart Scan for HDFSについて

- 1.1.4 ストレージ索引について

- 1.1.5述語のプッシュダウンについて

- 1.1.6 Oracle Big Data SQLの統計について

- 1.2 インストール

2 データ・アクセスのためのOracle Big Data SQLの使用

- 2.1 HiveデータのOracle外部表の作成

- 2.1.1 Hive表に関する情報の取得

- 2.1.2 CREATE_EXTDDL_FOR_HIVE関数の使用

- 2.1.3 Oracle SQL Developerを使用したHiveへの接続

- 2.1.4 ORACLE_HIVEのCREATE TABLE文の作成

- 2.1.4.1 ORACLE_HIVEのデフォルト設定の使用

- 2.1.4.2 ORACLE_HIVEのデフォルト設定の上書き

- 2.2 Oracle NoSQL DatabaseのOracle外部表の作成

- 2.2.1 Oracle NoSQL DatabaseのHive外部表の作成

- 2.2.2 Oracle NoSQLデータのOracle Database表の作成

- 2.2.3 列データ型マッピングについて

- 2.2.4 Oracle NoSQL Databaseのデータのアクセス例

- 2.2.4.1 Oracle NoSQL Database表の例の作成

- 2.2.4.2 vehicleTableのHive表の例の作成

- 2.2.4.3 VEHICLESのOracle表の作成

- 2.3 Apache HBaseのOracle外部表の作成

- 2.3.1 HBaseのHive外部表の作成

- 2.3.2 HBaseのOracle Database表の作成

- 2.4 HDFSファイルのOracle外部表の作成

- 2.4.1 デフォルトのアクセス・パラメータとORACLE_HDFSの使用

- 2.4.2 ORACLE_HDFSのデフォルト設定の上書き

- 2.4.2.1 デリミタ付きテキスト・ファイルへのアクセス

- 2.4.2.2 Avroコンテナ・ファイルへのアクセス

- 2.5 SQL CREATE TABLE文について

- 2.5.1 基本的な構文

- 2.5.2 外部表の句について

- 2.5.2.1 TYPE句

- 2.5.2.2 DEFAULT DIRECTORY句

- 2.5.2.3 LOCATION句

- 2.5.2.4 ORACLE_HDFS LOCATION句

- 2.5.2.5 ORACLE_HIVE LOCATION句

- 2.5.2.6 REJECT LIMIT句

- 2.5.2.7 ACCESS PARAMETERS句

- 2.6 データ型変換について

- 2.7 外部表の問合せ

- 2.7.1 ユーザー・アクセス権の付与

- 2.7.2 エラー処理について

- 2.7.3 ログ・ファイルについて

- 2.8 データベース・サーバー(Oracle Exadata Machineなど)上のOracle Big Data SQLについて

- 2.8.1 bigdata_configディレクトリについて

- 2.8.2 一般的な構成プロパティ

- 2.8.2.1 bigdata.properties

- 2.8.2.2 bigdata-log4j.properties

- 2.8.3 クラスタ・ディレクトリについて

- 2.8.4 権限について

3 HadoopへのOracleデータの格納

- 3.1 Copy to Hadoopの使用方法

- 3.1.1 Copy to Hadoopとは

- 3.1.2 Copy to Hadoopの使用の概要

- 3.1.2.1 Copy to Hadoopの表アクセス要件

- 3.1.3 Oracle Shell for Hadoop LoadersのCopy to Hadoopとの使用

- 3.1.3.1 Oracle Shell for Hadoop Loadersの概要

- 3.1.4 Copy to Hadoopを使用した直接コピーの実行

- 3.1.5 Copy to Hadoopを使用した段階的コピーの実行

- 3.1.6 Hiveのデータの問合せ

- 3.1.7 列マッピングおよびデータ型変換について

- 3.1.7.1 列マッピングの概要

- 3.1.7.2 データ型変換について

- 3.1.8 Sparkの使用

- 3.1.9 Copy to Hadoopと連携したOracle SQL Developerの使用

- 3.2 HDFSへのOracle表領域の格納

- 3.2.1 HDFS内の表領域の利点および制約

- 3.2.2 HDFS内の表領域とデータ暗号化について

- 3.2.3 HDFSへの表領域の移動

- 3.2.3.1 bds-copy-tbs-to-hdfsの使用

- 3.2.3.2 HDFSへの表領域の手動による移動

- 3.2.4 HDFS内の表領域に対するSmart Scan

4 Oracle Big Data SQLリファレンス

- 4.1 DBMS_HADOOP PL/SQLパッケージ

- 4.1.1 CREATE_EXTDDL_FOR_HIVE

- 4.1.1.1 例

- 4.2 CREATE TABLE ACCESS PARAMETERS句

- 4.2.1 プロパティを指定するための構文ルール

- 4.2.2 ORACLE_HDFSアクセス・パラメータ

- 4.2.2.1 ORACLE_HDFSのデフォルトのパラメータ設定

- 4.2.2.2 ORACLE_HDFSのオプションのパラメータ設定

- 4.2.3 ORACLE_HIVEアクセス・パラメータ

- 4.2.3.1 ORACLE_HIVEのデフォルトのパラメータ設定

- 4.2.3.2 ORACLE_HIVEのオプションのパラメータ値

- 4.2.4 com.oracle.bigdata.buffersize

- 4.2.5 com.oracle.bigdata.colmap

- 4.2.6 com.oracle.bigdata.datamode

- 4.2.7 com.oracle.bigdata.erroropt

- 4.2.8 com.oracle.bigdata.fields

- 4.2.9 com.oracle.bigdata.fileformat

- 4.2.10 com.oracle.bigdata.log.exec

- 4.2.11 com.oracle.bigdata.log.qc

- 4.2.12 com.oracle.bigdata.overflow

- 4.2.13 com.oracle.bigdata.rowformat

- 4.2.14 com.oracle.bigdata.tablename

- 4.3 Hiveの静的データ・ディクショナリ・ビュー

- 4.3.1 ALL_HIVE_DATABASES

- 4.3.2 ALL_HIVE_TABLES

- 4.3.3 ALL_HIVE_COLUMNS

- 4.3.4 DBA_HIVE_DATABASES

- 4.3.5 DBA_HIVE_TABLES

- 4.3.6 DBA_HIVE_COLUMNS

- 4.3.7 USER_HIVE_DATABASES

- 4.3.8 USER_HIVE_TABLES

- 4.3.9 USER_HIVE_COLUMNS

付録

A 段階的コピーにCopy to Hadoopを使用するための手動による手順

- A.1 データ・ポンプ・ファイルの生成

- A.1.1 データ・ポンプ形式ファイルについて

- A.1.2 ターゲット・ディレクトリの識別

- A.1.3 CREATE TABLE構文について

- A.2 HDFSへのファイルのコピー

- A.3 Hive表の作成

- A.3.1 Hive外部表について

- A.4 サンプル・スキーマの使用例

- A.4.1 サンプル・データについて

- A.4.2 EXPDIR Databaseディレクトリの作成

- A.4.3 顧客データのデータ・ポンプ形式ファイルの作成

- A.4.3.1 簡単なSELECT文を使用したCREATE TABLEの例

- A.4.3.2 さらに複雑なSQL SELECT文を使用したCREATE TABLEの例

- A.4.4 データ・ファイルの内容の確認

- A.4.5 Hadoopへのファイルのコピー

- A.4.6 Hive外部表の作成

B 直接コピーでのCopy to Hadoopの使用

- B.1 直接コピーにCopy to Hadoopを使用するための手動による手順

- B.2 Copy to Hadoopプロパティ・リファレンス

C 診断のヒントおよび詳細

- C.1 bdscheckswによる診断の実行

- C.2 クイック・テストの実行方法

- C.3 Oracle Big Data SQLのデータベース・オブジェクト

- C.4 その他のデータベース側のアーティファクト

- C.5 Hadoopデータノードのアーティファクト

- C.6 外部表を問い合せるためのプロセス

- C.7 Hiveデータ・ディクショナリ問合せのプロセス

- C.8 Oracle Big Data SQLの主な管理タスク

- C.9 その他のJava診断

- C.10 Oracle Big Data SQLの正しいパッチの確認

D ライセンス情報

- D.1 Oracle Big Data SQLのライセンス

- D.1.1 ANTLR 4.5.2

- D.1.2 JLine 2.13

- D.1.3 Apache Commons Exec 1.3

- D.1.4 Apache Licensed Code

- D.1.5 Apacheのライセンス

索引

はじめに

『Oracle Big Data SQLユーザーズ・ガイド』では、Oracle Big Data SQL製品の使用方法と管理方法について説明します。

対象読者

このガイドは、次に示すようにOracle Big Data SQLの管理者およびユーザーを対象としています。

- アプリケーション開発者

- データ・アナリスト

- データ科学者

- データベース管理者

- システム管理者

このマニュアルでは、手順を正しく行うために、読者がデータベース・サーバーおよびこのソフトウェアをホストする特定のHadoopプラットフォームに関する十分な知識を備えていることを前提としています。

関連ドキュメント

製品のインストール手順については、『Oracle Big Data SQLインストレーション・ガイド』を参照してください。

Oracle Big Data ApplianceおよびOracle Big Data Connectorsとのこの製品の併用に関する情報は、次の出版物をお薦めします。

- 『Oracle Big Data Applianceオーナーズ・ガイド』

- 『Oracle Big Data Applianceソフトウェア・ユーザーズ・ガイド』

- 『Oracle Big Data Connectorsユーザーズ・ガイド』

オラクル社のBig Dataソリューションの詳細は、Oracleヘルプ・センターを参照してください。

Oracle Big Data SQLをHortonworks HDPにインストールするユーザーは、補足情報を得るためにHortonworksのドキュメント・サイト(http://docs.hortonworks.com/index.html)を参照することをお薦めします

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

#プロンプト

ナンバー記号(#)プロンプトは、Linux rootユーザーとして実行されるコマンドを示します。

バッカス・ナウア記法の構文

このリファレンスの構文は、次の記号と表記規則を使用するバッカスナウア記法(BNF)の単純なバリエーションで示されます。

記号または表記規則

説明

[ ]

大カッコは、オプション項目を囲みます。

{ }

中カッコは、選択項目を囲み、そのうち1つのみが必須です。

|

縦線は、大カッコまたは中カッコ内の代替項目を区切ります。

...

省略記号は、先行する構文要素を反復できることを示します。

デリミタ

大カッコ、中カッコおよび縦線以外のデリミタは、記載されているとおりに入力する必要があります。

太字

太字で示されている語は、キーワードです。それらは記載されているとおりに入力する必要があります。(キーワードは、一部のオペレーティング・システムでは大/小文字の区別があります。)太字ではない語は、名前または値に置換する必要があるプレースホルダです。

Oracle Big Data SQL 3.1での変更点

Oracle Big Data SQLリリース3.1の変更点は次のとおりです。

拡張されたデプロイメント

リリース3.1では、Oracle Engineered Systemsとコモディティ・サーバー間のOracle Big Data SQL接続のサポートが拡大されています。

Oracle Big Data SQLの旧リリースでは、次のOracle Database/Hadoop接続が可能です。

- Oracle Exadata Database MachineからOracle Big Data Applianceへの接続。

- コモディティ・サーバー上のOracle DatabaseからコモディティHadoopシステムへの接続。

リリース3.1現在、Oracle Big Data SQLでは、次のOracle Database/Hadoopシステムの接続がすべてサポートされます。

- コモディティ・サーバー上のOracle DatabaseからOracle Big Data Applianceへの接続。

- コモディティ・サーバー上のOracle DatabaseからコモディティHadoopシステムへの接続。

- Oracle Exadata Database MachineからOracle Big Data Applianceへの接続。

- Oracle Exadata Database MachineからコモディティHadoopシステムへの接続。

"コモディティ・サーバー上のOracle Database"という語句は、Oracle Databaseプラットフォームとして公式にサポートされているExadata以外のLinuxシステムを指します。"コモディティHadoopシステム"という語句は、Hortonworks HDPシステム、またはOracle Big Data Appliance以外のCloudera CDHベースのシステムを指します。すべての場合で、Oracle DatabaseサーバーおよびHadoopシステムは、『Oracle Big Data SQL Master Compatibility Matrix』 (My Oracle SupportのドキュメントID 2119369.1)で規定されている前提条件を満たす必要があります。

Oracle SPARC SuperClusterサポート

リリース3.1ではOracle SPARC SuperClusterがサポートされますが、次のような特定の制約があります。

- BDA (およびコモディティHadoopシステム)とSPARC SuperCluster間のイーサネット接続はサポートされません。

- HDFS内のOracle Database表領域(Smart Scanテクノロジ使用)は、このプラットフォームではサポートされません。

Exadata Database Machineへの接続のためのイーサネット・オプション

Oracle Big Data ApplianceとOracle Exadata Databaseのどのような目的に対しても好ましい接続方法は、インフィニバンドを使用した接続です。旧リリースのOracle Big Data SQLでは、このような接続にインフィニバンドを必要とします。リリース3.1では、Exadata Database MachineとOracle Big Data Appliance間でイーサネット・ネットワークがサポートされるようになりました。これにより、この2つのエンジニアド・システムが互いに地理的に離れている場合など、インフィニバンドが使用できない環境でOracle Big Data SQLをこの2つのシステムとともに使用できます。

また、リリース3.1を使用すると、コモディティHadoopシステムとOracle Exadata Database Machine間でイーサネット接続が可能になります。

コモディティHadoopシステムとコモディティOracle Databaseサーバー間のOracle Big Data SQL接続は、旧リリース全体を通してイーサネットに基づいています。

現時点で、Oracle Big Data Appliance (またはコモディティHadoopシステム)とOracle SPARC SuperCluster間のイーサネット接続はサポートされません。

Oracle Databaseサーバーでの簡略化されたデプロイメント - Oracle Grid Infrastructureのオプション化

旧リリースのOracle Big Data SQLでは、Oracle Grid Infrastructureは、Oracle RACシステムに属さないスタンドアロン・サーバーを含め、すべてのOracle Databaseサーバーのインストールにおける前提条件です。リリース3.1では、Oracle Grid Infrastructureが存在しないサーバーにOracle Big Data SQLをインストールすることも選択できます。このような場合、インストーラによってOracle Databaseの再起動を必要とする構成ファイルの変更が行われます。

Oracle Big Data SQLインストーラの統一されたプラットフォームのサポート

Oracle Big Data SQLの旧リリースでは、Oracle Engineered Systems用とコモディティ・サーバー用にそれぞれ別々の2つのインストール手順があります。リリース3.1では、OracleプラットフォームとOracle以外のプラットフォームの両方に対して同じインストール・プロセスを使用します。これはメンテナンスの場合も同様です。サポートされているHadoop/Oracle Databaseの組合せ全部について、HadoopクラスタまたはOracle Databaseサーバーに対する変更がある場合、Oracle Big Data SQL構成を更新するための統一された一連の手順があります。

ILMを簡略化する新機能 - HDFS内のOracle Database表領域(Smart Scan テクノロジ使用)

Hadoopを使用して読取り専用のOracle Database表領域を格納するように、Oracle Database ILM (情報ライフサイクル管理)を拡張できるようになりました。Oracle DatabaseからHDFSに表領域を移動する際、表、パーティションおよびデータは、元のOracle Database内部形式を維持し、引き続き問合せでアクセスでき、次のようなOracle Databaseのパフォーマンス最適化機能とセキュリティ機能をすべてサポートします。

- Smart Scan for HDFS: HadoopクラスタでのOracle Big Data SQLに対する問合せ処理のオフロードを可能にします。Smart Scanにより、Oracle Databaseにデータを返す前に、Hadoopで問合せ結果のフィルタリングもできます。ほとんどの場合、これはかなりのパフォーマンスの最適化となります。索引付け、ハイブリッド列圧縮、パーティション・プルーニングおよびOracle Databaseインメモリーもサポートされます。

- Oracle Advanced Security Option (ASO)の透過的暗号化およびデータ・リダクション。

HDFSに格納される表領域は読取り専用であるため、このストレージはデータ・アーカイブに最適です。

詳細は、『Oracle Big Data SQLユーザーズ・ガイド』の3.2項を参照してください。

Oracle Shell for Hadoop Loaders 1.2の拡張機能

Oracle Shell for Hadoop Loaders (OHSH)は、データ移行のための直感的なコマンドライン・ツールです。Hive、HDFSまたはOracle Databaseに接続するようにリソースを設定し、統一されたOHSHインタフェースからこれらのデータ・ソースそれぞれにアクセスできます。OHSHは、Copy to Hadoopを使用するための手段の1つです。Copy to Hadoopユーザーは、OTNからOHSHをダウンロードできます。

OHSH 1.2には、次の変更点があります。

- $HOME/.ohshシャドウ・ディレクトリでのロード操作のオンディスク・ロギング。

- ロード・コマンドの実行時の出力を最小限に抑える機能。(set outputlevelについては、helpコマンドを参照してください。)

- oracleユーザーのスキーマ内で存続しないOracle表からのHive表のロード。

- OHSHによるウォレットおよびTNSの使用は、環境変数WALLET_LOCATIONおよびTNS_ADMINの設定に基づきます。set tnsadminコマンドとset walletlocationコマンドは、サポートされなくなりました。

また、%hive0リソースを作成するために、HIVE0_URLをリモートHiveServer2の完全修飾URLに設定しなくなりました。OHSH 1.2では、HiveServer2の<hostname>:<port>ペアである環境変数HS2_HOST_PORTをbin/ohshで設定します。

Copy To Hadoopの拡張

新しいメソッドdirectcopyがCopy to Hadoopに追加されました。

これは、Oracle DatabaseからHDFSにデータを直接コピーする単一ステップのメソッドです。詳細は、『Oracle Big Data SQLユーザーズ・ガイド』の「Copy to Hadoopを使用した直接コピーの実行」を参照してください。

アクセスの付与 – ユーザーに対するBDSQL_USERロールの要件の追加

Oracle Big Data SQLリリース以前は、すべてのユーザーにBig Data SQLアクセスが暗黙的に付与されました。リリース3.1では、BDSQL_USERロールが追加されました。Oracle Big Data SQLアクセスを必要とするユーザーには、このロールを明示的に付与する必要があります。

また、BigDataSQL構成ディレクトリ・オブジェクト上で読取り権限も付与する必要があるようになりました。

たとえば、user1にアクセスを付与するには、次のようにします。

SQL> grant BDSQL_USER to user1;
SQL> grant read on directory ORACLE_BIGDATA_CONFIG to user1;

『Oracle Big Data SQLインストレーション・ガイド』に移動されたインストール手順

『Oracle Big Data SQLインストレーション・ガイド』に、このソフトウェアのインストールおよびアンインストールの手順が記載されています。Oracle Big Data Appliance 3.1より前のリリースでは、インストール手順はユーザーズ・ガイドに記載されています。

以前のリリースの変更履歴

製品の以前のバージョンの変更は次のとおりです。

Oracle Big Data SQL 3.0.1での変更点

Oracle Big Data SQLリリース3.0.1の変更点は次のとおりです。

Oracle Big Data ApplianceおよびExadata Database Machineを引き続きサポートすることに加え、リリース3.0.1では、Big Data SQLのOracle Engineered Systems以外のプラットフォームのサポートがさらに向上しています。これらには現在、Big Data Appliance以外のコモディティ・ハードウェア上で動作するHortonworks Data Platform (HDP)およびCloudera's Distribution Including Apache Hadoop (CDH)が含まれます。ここでは、これらのHadoopシステムがExadata以外のサーバーで実行されるOracle Databaseと組み合せて使用されます。

新しいCDHおよびHDPプラットフォームのサポート

Oracle Big Data SQL 3.0.1は、Hortonworks Hadoop Data Platform (HDP) 2.3 – 2.4.xおよびCloudera's Distribution Including Apache Hadoop (CDH) 5.4.7 – 5.7上で実行します。CDH 5.4.7サポートには、コモディティCDHシステムとOracle Big Data Appliance 4.3の両方が含まれます。

インストール自動化の改善

HDPおよびCDHでのインストールで、以降のリストアのために、YARNリソース管理構成を自動保存できるようになりました。

oracleユーザーおよびoinstallグループの設定が、インストール・プログラムによって管理されるようになりました。

HDPおよびCDHの統一されたアンインストール手順

HDPおよびCDHの両システムでのアンインストール手順が同じになりました。

HDPおよびCDHの他の変更点

- デフォルトのJDKがjdk-8u66-linux-x64にアップグレードされています

- bds-database-create-bundle.shに、デフォルト以外のJDKを指定するための新しい--jdk-tar-pathパラメータが含められています。

- bds-database-install.shに次の新しいパラメータが含められています。

- --cell-config-dir

- --root-script-only

- cellinit.oraファイルが存在しないまたは空の場合、インストール・プロセスで新しいファイルが作成および移入されるようになりました。

Oracle Shell for Hadoop Loaders

Oracle Shell for Hadoop Loadersは、Copy to Hadoop、Oracle Loader for HadoopおよびOracle SQL Connector for HDFSに簡単に使用できるコマンドライン・インタフェースを提供するヘルパー・シェルです。

Oracle Big Data Appliance 4.5のサポート

Oracle Big Data SQLリリース3.0.1は、Oracle Big Data Appliance 4.5でのmammothインストール・オプションです。mammothインストール後にbdacliユーティリティを使用して、Oracle Big Data SQLリリース3.0.1をいつでも有効にすることもできます。

注意:
リリース3.0.1では、Oracle Big Data SQLはまだOracle Big Data Applianceと非Exadata Oracle Databaseサーバーとの間、または非Big Data Appliance HadoopシステムとExadata Database Machineとの間の接続をサポートしていません。

Oracle Big Data SQL 3.0での変更点

Oracle Big Data SQL 3.0での重要な変更には、Oracle Big Data Appliance/Oracle Exadata Database Machineのインストールに加え、非Oracleサーバーのサポートの拡大がありました。このリリースで追加されたもう1つの機能に述語のプッシュダウンがありました。

Oracle Engineered Systems以外のサーバーのサポート

リリース3.0以前は、Oracle Big Data SQLはOracle Engineered Systemsのみをサポートしていました。特に、Oracle Big Data Appliance (Hadoop側)およびOracle Exadata Database Machine (データベース・サーバー側)です。リリース3.0の時点で、Oracle Big Data SQLは、Oracle Big Data Appliance以外のHortonworks Hadoop Data Platform上およびCloudera's Distribution Including Apache Hadoop (CDH)システム上でも動作します。

またBig Data SQLは、Oracle Exadata Database Machine以外のサーバー上で実行するOracle Databaseもサポートするようになりました。

述語のプッシュダウン

Big Data SQL 3.0は、SARGable (Search ARGument ABLE)述語をOracle Databaseからサポート・システムにプッシュすることで、述語のオフロード・サポートを利用しています。

1 Oracle Big Data SQLの概要

1.1 Oracle Big Data SQLとは

Oracle Big Data SQLでは、Apache Hive、HDFS、Oracle NoSQL Database、Apache HBase、その他のNoSQLデータベースなど、複数のビッグ・データ・ソースに格納された非リレーショナル・データに対する問合せをサポートしています。これにより、分散データに対して統一した問合せが可能になり、異なる製品のデータ・ストアのデータがすべてOracleデータベースに格納されているかのようにシームレスに表示および分析できるようになります。

Oracle Big Data SQLではOracle SQLの構文が完全にサポートされます。手動で、または既存のアプリケーションを使用して、Hadoopエコシステム内のデータに対して非常に複雑なSQL SELECT文を実行できます。たとえば、Oracle Advanced Analyticsのユーザーである場合は、Oracle Big Data SQLを使用してOracle Databaseデータ・マイニング・モデルをHadoopのビッグ・データに拡張することができます。

次の項に詳細を示します。

- Oracle外部表について

- Oracle Big Data SQLのアクセス・ドライバについて

- Smart Scan for HDFSについて

- ストレージ索引について

- 述語のプッシュダウンについて

- Oracle Big Data SQLの統計について

注意:
インストール手順については、『Oracle Big Data SQLインストレーション・ガイド』を参照してください。

1.1.1 Oracle外部表について

Oracle Big Data SQLは、外部表で次世代のパフォーマンス向上を実現します。外部表は、データベース外のデータの場所を識別および記述するOracle Databaseオブジェクトです。他のデータベース表に使用するのと同じSQL SELECT構文を使用して、外部表を問い合せることができます。

外部表はアクセス・ドライバを使用して、データベース外のデータを解析します。外部データのタイプごとに一意のアクセス・ドライバが必要です。Oracle Big Data SQLには、ビッグ・データ用の2つのアクセス・ドライバが含まれています。メタデータがApache Hiveに定義されているデータ用のドライバ、およびHadoop Distributed File Systemに格納されているデータ(メタデータはOracle管理者のみによって指定される)にアクセスするためのドライバです。

1.1.2 Oracle Big Data SQLのアクセス・ドライバについて

外部表への問合せによって、データがOracleデータベースの表に格納されている場合と同様に、HDFSやHive表に格納されているデータにアクセスできます。Oracle Databaseは、外部表の作成時に指定されたメタデータを使用してデータにアクセスします。

Oracle Database 12.1.0.2は、Oracle Big Data SQL用の新しい2つのアクセス・ドライバをサポートしています。

- ORACLE_HIVE: Apache Hiveデータ・ソースに対するOracle外部表を作成できます。HDFSデータ・ソースに対してHive表がすでに定義されている場合、このアクセス・ドライバを使用します。ORACLE_HIVEは、Hive表が定義されている他の場所(HBaseなど)に格納されているデータにもアクセスできます。

- ORACLE_HDFS: HDFSに格納されているファイルに対するOracle外部表を直接作成できます。このアクセス・ドライバはHive構文を使用してデータ・ソースを記述し、COL_1、COL_2などのデフォルトの列名を割り当てます。個別の手順としてHive表を手動で作成する必要はありません。
ORACLE_HIVEと同じ方法でHiveメタデータ・ストアからメタデータを取得するのではなく、ORACLE_HDFSアクセス・ドライバは必要な情報をすべてアクセス・パラメータから取得します。メタデータを指定するにはORACLE_HDFSアクセス・パラメータが必要です。このパラメータは、Oracle Database内の外部表定義の一部として格納されます。

Oracle Big Data SQLは、これらのアクセス・ドライバを使用して問合せのパフォーマンスを最適化します。

1.1.3 Smart Scan for HDFSについて

Oracle外部表には従来の索引がありません。このような外部表に対する問合せは、通常、全表スキャンを必要とします。HadoopクラスタのDataNode上のOracle Big Data SQL処理エージェントにより、Smart Scan機能(フィルタ述語のオフロードなど)がOracle外部表にまで拡張されます。Smart Scanは、問合せ結果がデータベース・レイヤーに返信される前に、ストレージ・レイヤーで列および述語のフィルタリングを実行するために、Oracle Exadata Database Machineでしばらくの間使用されてきました。Oracle Big Data SQLでは、Smart Scanは、リクエストされた要素のみがOracle Databaseに送信されるようにHadoopサーバーでローカルに実行される最終フィルタリング・パスです。HadoopのDataNodeで稼働しているOracleストレージ・サーバーは、HDFSの様々なデータ形式(CSVテキスト、Avro、Parquetなど)に対してSmart Scansを実行できます。

このSmart Scanの実装では、Hadoopクラスタの超並列処理能力を利用してソースでデータをフィルタリングします。無関係なデータの大部分(全体の最大99パーセントまで)を先んじて破棄できます。これには、次のような利点があります。

- クラスタとデータベース間のデータの移動およびネットワーク・トラフィックを大幅に削減します。

- 非常に小さい結果セットをOracle Databaseサーバーに返します。

問合せ結果の返送速度が大幅に速くなります。これは、ネットワーク上のトラフィックおよびOracle Databaseでのロードが削減されたことによる直接の結果です。

関連項目:

スマート・スキャン対象のデータ・ファイルを設定する方法の詳細は、「HDFSへのOracle表領域の格納」を参照してください。

外部表の概要、およびOracle Databaseドキュメント・ライブラリ内の詳細情報への手引きについては、『Oracle Database概要』を参照してください。

1.1.4 ストレージ索引について

Oracle Big Data SQLでは、ストレージ索引が自動的に管理され、Oracle Databaseに対して透過的です。ストレージ索引には、HDFSに格納されているデータに関するハード・ディスク上のデータ分散のサマリーが含まれています。ストレージ索引により、I/O操作とフラット・ファイルからOracle Databaseブロックにデータを変換するCPUコストを減らすことができます。ストレージ索引を"否定の索引"と考えることができます。Smart Scanは、ストレージ索引からデータがデータのブロック内にないことがわかるため、そのブロックを読み飛ばすことができます。これにより、I/Oを大幅に回避できます。

ストレージ索引は、HDFSに基づいた外部表またはORACLE_HDFSドライバとORACLE_HIVEドライバのいずれかを使用して作成された外部表に対してのみ使用できます。ストレージ索引は、Apache HBaseやOracle NoSQLなどのStorageHandlerを使用する外部表に対しては使用できません。

ストレージ索引はインメモリー領域索引を収集したもので、各領域索引には最大32列のサマリーが格納されています。各分割に領域索引が1つあります。1つの領域索引に格納されているコンテンツは、その他の領域索引とは無関係です。これにより拡張性が高まり、ラッチ競合を回避できます。

各領域索引では、ストレージ索引が領域の列の最小値と最大値を管理します。最小値および最大値は、不要なI/Oの回避に使用されます。これは、I/Oフィルタリングとも呼ばれます。V$SYSSTATビューにあるストレージ索引統計別に保存されたセルのXTグラニュルI/Oバイト数は、ストレージ索引を使用して保存されたI/Oのバイト数を示したものです。

関連項目:

V$SYSSTATビューの詳細は、『Oracle® Databaseリファレンス』 を参照してください

次の比較を使用する問合せはストレージ索引によって改善されます。

- 等価(=)

- 不等価(<、!=または>)

- 以下(<=)

- 以上(>=)

- IS NULL

- IS NOT NULL

Oracle Big Data SQLサービスが受け取った問合せに含まれる比較述語が領域の列の最大値よりも大きい場合や最小値よりも小さい場合に、ストレージ索引が自動的に構築されます。

注意:

- WHERE問合せ句に頻繁に出現する列に基づいて表内の行を順序付けると、ストレージ索引の効果が上がります。

- ストレージ索引は、すべての非言語データ型で動作し、非言語索引に似た言語データ型でも動作します。

例1-1 ストレージ索引を使用したディスクI/Oの回避

次の図に、表および領域索引を示します。表内の値の範囲は1から8です。一方の領域索引には最小値として1、最大値として5が格納されています。もう一方の領域索引には、最小値として3、最大値として8が格納されています。

SELECT * FROM TABLE WHERE B < 2などの問合せの場合、最初の行セットのみが一致します。2番目の行セットの最小値と最大値は問合せのWHERE句と一致しないため、ディスクI/Oが回避されます。

例1-2 ストレージ索引による結合パフォーマンスの向上

ストレージ索引を使用すると、表の結合で不要なI/O操作をスキップできます。たとえば、次の問合せでは、I/O操作を実行し、ファクト表の最初のブロックにのみブルーム・フィルタを適用しています。

SELECT count(*) from fact, dim where fact.m=dim.m and dim.name="Hard drive"

ファクト表の2番目のブロックに対するI/Oは、最小値/最大値の範囲(5,8)がブルーム・フィルタに存在しないため、ストレージ索引によって完全に回避されます。

1.1.5 述語のプッシュダウンについて

多くのビッグ・データ・システムでは、ファイルタイプそのもの(Apache Parquetなど)またはHiveのパーティション化やStorageHandler APIを使用して、述語のオフロード機能が一部のレベルでサポートされています。Oracle Big Data SQLでは、述語をOracle Databaseからサポート・システムにプッシュすることで、このようなオフロード機能を利用しています。たとえば、述語のプッシュダウンによって次の動作が自動的に行われるようになります。

- パーティション化されたHive表に対する問合せは、パーティション列に対するフィルタ述語に基づいてプルーニングされます。

- Apache ParquetおよびApache ORCファイルに対する問合せでは、内部索引(これらのファイル形式内に含まれる構造など)に照らして述語を検証することで、I/O回数を削減します。

- Oracle NoSQL DatabaseまたはApache HBaseに対する問合せは、SARGable述語を使用して、リモート・データ・ストアでデータのサブスキャンを行います。

述語のプッシュダウンを有効にするために必要なデータ型

述語のプッシュダウンでは、Hiveデータ型とOracleデータ型の間に特定のマッピングが存在することが必要です。これらのマッピングを次の表に示します。

Hiveデータ型

Oracleデータ型にマッピング

CHAR(m)

CHAR(n)、VARCHAR2(n) (n >= m)

VARCHAR(m)

CHAR(n)、VARCHAR2(n) (n >= m)

string

CHAR(n)、VARCHAR2(n)

DATE

DATE

TIMESTAMP

TIMESTAMP(9) Hive TIMESTAMPにはナノ秒、9桁の小数秒が入ります。

TINYINT

NUMBER(3)が望ましいが、NUMBERまたはNUMBER(n) (任意の値n)も有効。

SMALLINT

NUMBER(5)が望ましいが、NUMBERまたはNUMBER(n) (任意の値n)も有効。

INT

NUMBER(10)が望ましいが、NUMBERまたはNUMBER(n) (任意の値n)も有効。

BIGINT

NUMBER(19)が望ましいが、NUMBERまたはNUMBER(n) (任意の値n)も可

DECIMAL(m)

m = nのNUMBER(n)が望ましいが、NUMBERまたはNUMBER(n) (任意の値n)も有効。

FLOAT

BINARY_FLOAT

DOUBLE

BINARY_DOUBLE

BINARY

RAW(n)

BOOLEAN

CHAR(n)、VARCHAR2(n) (n >= 5)、値TRUE、FALSE

BOOLEAN

NUMBER(1)が望ましいが、NUMBERまたはNUMBER(n) (任意の値n)も有効。値0 (false)、1 (true)。

1.1.6 Oracle Big Data SQLの統計について

Oracle Big Data SQLでは、パフォーマンス分析のためのデータを提供できる統計が多数用意されています。

5つの主要なセルのXTおよびストレージ索引の統計

問合せがオフロード可能である場合、次のXT関連の統計は、どのようなIOの節約がオフロードおよびSmart Scanに期待できるかを判断するのに役立ちます。

- cell XT granules requested for predicate offload
リクエストされるグラニュルの数は、HDFSブロック・サイズ、Hadoopデータ・ソースの分割可能性、およびHiveパーティションの回避の有効性など、多数の要素によって異なります。

- cell XT granule bytes requested for predicate offload
スキャンのためにリクエストされるバイト数。これは、Hiveパーティションの回避後およびストレージ索引の評価前に調査されるHadoop上のデータのサイズです。

- cell interconnect bytes returned by XT smart scan
XTスマート・スキャンによってOracle Databaseに返されるI/Oのバイト数。

- cell XT granule predicate offload retries
DataNode上で実行されるBig Data SQLプロセスで、リクエストされた操作を完了できなかった回数。Oracle Big Data SQLは、失敗したリクエストをそのデータのレプリカを含んだ他のDataNodes上で自動的に再試行します。retries値はゼロになります。

- cell XT granule IO bytes saved by storage index
ストレージ・セル・レベルで、ストレージ索引によるフィルタリングで除去されたバイト数。これは、ストレージ索引によって提供された情報に基づいてスキャンされなかったデータです。

これらの統計は、問合せを実行する前後に、次のようにして確認できます。この例は、問合せの実行前で、null値を示しています。

SQL> SELECT sn.name,ms.value
FROM V$MYSTAT ms, V$STATNAME sn
WHERE ms.STATISTIC#=sn.STATISTIC# AND sn.name LIKE '%XT%';

NAME                                                      VALUE
-----------------------------------------------------     -----
cell XT granules requested for predicate offload          0
cell XT granule bytes requested for predicate offload     0
cell interconnect bytes returned by XT smart scan         0
cell XT granule predicate offload retries                 0
cell XT granule IO bytes saved by storage index           0

問合せの有効性を検証するには、問合せの実行後に、次のようにこれらの統計の一部または全部を確認できます。

SQL> SELECT n.name, round(s.value/1024/1024)
FROM v$mystat s, v$statname n
WHERE s.statistic# IN (462,463)
AND s.statistic# = n.statistic#;

cell XT granule bytes requested for predicate offload  32768
cell interconnect bytes returned by XT smart scan   32

ヒント:

The Data Warehouse Insiderで公開されているブログ「Big Data SQL Quick Start」には、これらの統計を使用してOracle Big Data SQLのパフォーマンスを分析する方法を示す一連のコードおよび機能のウォークスルーが掲載されています。第2回、第7回および第10回を参照してください。

1.2 インストール

Oracle Big Data SQLは、データが存在するHadoopシステムの他、データを問い合せるOracle Databaseサーバーにもコンポーネントをインストールする必要があります。

インストールの詳細は、次のリソースを参照してください。

- 『Oracle Big Data SQLインストレーション・ガイド』
このガイドでは、サポートされているHadoopシステム/Oracle Databaseサーバーの組合せのためのインストールおよび構成の手順を説明します。

- 『Oracle Big Data SQL Master Compatibility Matrix』
このマトリクスは、My Oracle Supportでドキュメント2119369.1として入手できます。Big Data SQLの次のものとの互換性に関する最新情報は、このノートを参照してください。

- Oracle Engineered Systems。

- その他のシステム。

- Linux OSのディストリビューションとバージョン。

- Hadoopディストリビューション。

- 必要とされるパッチを含むOracle Databaseのリリース。

2 データ・アクセスのためのOracle Big Data SQLの使用

この章では、Oracle Big Data SQLを使用し、外部表を作成して、Hadoopデータ・ソースやOracle NoSQL Databaseのデータにアクセスする方法を説明します。

Oracle Databaseサーバーに対してOracle Big Data SQLが行う変更の一部についても説明します。

- HiveデータのOracle外部表の作成

- Oracle NoSQL DatabaseのOracle外部表の作成

- Apache HBaseのOracle外部表の作成

- HDFSファイルのOracle外部表の作成

- SQL CREATE TABLE文について

- データ型変換について

- 外部表の問合せ

- データベース・サーバー(Oracle Exadata Machineなど)上のOracle Big Data SQLについて

2.1 HiveデータのOracle外部表の作成

Oracle Big Data SQLでは、Oracle SQL SELECT文の強力なパワーを利用してOracle DatabaseからHive表を問い合せることができます。また、Oracle表とHiveデータを結合する問合せの書込み、堅牢なOracle Databaseセキュリティ機能の活用、および分析関数、JSON処理といった高度なSQL機能の利用もできます。

Oracle Big Data SQLでHive表の問合せを有効にするには、まず、HiveデータのOracle外部表を定義する必要があります。Oracle外部表を作成するのに役立つ多数のツールがあります。

- DBMS_HADOOP
DBMS_HADOOPは、CREATE_EXTDDL_FOR_HIVEプロシージャを含んだPL/SQLパッケージです。このプロシージャは、Hive表のOracle外部表を作成するためのDDLを生成します。オプションで、実行前に生成されたDDLのテキストを編集して外部表のプロパティをカスタマイズできます。

- Oracle SQL DeveloperのBig Data SQLウィザード
最新バージョンの無償のOracle SQL DeveloperツールにはBig Data SQLウィザードが含まれています。このプロセスに従って簡単にOracle外部表定義を作成できます。

Oracle SQL Developerに構成済のHive接続がある場合は、Connectionsナビゲータで、接続エントリ・ポイントからHive表にドリル・ダウンし、次を実行します。

1. 表アイコンを右クリックし、「Use in Oracle Big Data SQL...」を選択します

2. 要求されたら、Hive表のインポート用のOracle Database接続を選択します。

3. Oracle Big Data SQLが有効になっているターゲット・データベースを選択します。

4. 「Create Table」ダイアログで、列、外部表、プロパティ、およびストレージの現在の構成を確認します。必要に応じて変更します。また、生成されるDDLのテキストをプレビューすることもできます。

5. 表の定義の確認を終えたら、「OK」をクリックします。ウィザードによって、指定した場所に外部表が作成されます。

- Oracle SQL Developer Data Modeler
これは無償のグラフィカルな設計ツールで、これを使用してHiveメタストアに接続し、外部表を生成できます。1つ以上のHive表を選択してインポートし、必要に応じて表のプロパティを変更した後、SQLワークシート内にコピーし、実行してOracle外部表を作成するDDLを生成します。Data Modelerは他のオプションよりも複雑なツールですが、これを使用すると複数のHive表で作業できるという利点があります

Data Modelerの使用方法の詳細は、Oracle Blogスペースの「Oracle Big Data SQLのOracle SQL DeveloperおよびData Modelerのサポート」を参照してください。

関連項目:
Oracle SQL Developerのインストール方法および外部表作成のためのHiveへの接続方法は、「Oracle SQL Developerを使用したHiveへの接続」を参照してください

2.1.1 Hive表に関する情報の取得

DBMS_HADOOP PL/SQLパッケージには、CREATE_EXTDDL_FOR_HIVEという名前の関数が含まれています。データ・ディクショナリ言語(DDL)を返して、Hive表にアクセスするための外部表を作成します。この関数では、Hive表に関する基本情報を指定する必要があります。

- Hadoopクラスタの名前

- Hiveデータベースの名前

- Hive表の名前

- Hive表がパーティション化されているかどうか

ALL_HIVE_TABLESデータ・ディクショナリ・ビューを問い合せることで、この情報を取得できます。Oracle DatabaseからアクセスできるすべてのHive表に関する情報が表示されます。

この例では、現在のユーザーにデフォルト・データベース内のRATINGS_HIVE_TABLEという名前のパーティション化されていないHive表へのアクセス権があることを示します。JDOEという名前のユーザーは所有者です。

SQL> SELECT cluster_id, database_name, owner, table_name, partitioned FROM all_hive_tables;
CLUSTER_ID   DATABASE_NAME  OWNER    TABLE_NAME         PARTITIONED
------------ -------------- -------- ------------------ --------------
hadoop1      default        jdoe     ratings_hive_table  UN-PARTITIONED

関連項目:

「Hiveの静的データ・ディクショナリ・ビュー」

2.1.2 CREATE_EXTDDL_FOR_HIVE関数の使用

データ・ディクショナリからの情報とともに、DBMS_HADOOPのCREATE_EXTDDL_FOR_HIVE関数を使用できます。この例では、現在のスキーマ内のRATINGS_DB_TABLEのデータベース表名を指定します。関数は、DDLoutという名前のローカル変数でCREATE TABLEコマンドのテキストを返しますが、実行はしません。

DECLARE
DDLout VARCHAR2(4000);
BEGIN
dbms_hadoop.create_extddl_for_hive(
CLUSTER_ID=>'hadoop1',
DB_NAME=>'default',
HIVE_TABLE_NAME=>'ratings_hive_table',
HIVE_PARTITION=>FALSE,
TABLE_NAME=>'ratings_db_table',
PERFORM_DDL=>FALSE,
TEXT_OF_DDL=>DDLout
);
dbms_output.put_line(DDLout);
END;
/

このプロシージャを実行すると、PUT_LINE関数はCREATE TABLEコマンドを表示します。

CREATE TABLE ratings_db_table (
c0 VARCHAR2(4000),
c1 VARCHAR2(4000),
c2 VARCHAR2(4000),
c3 VARCHAR2(4000),
c4 VARCHAR2(4000),
c5 VARCHAR2(4000),
c6 VARCHAR2(4000),
c7 VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(
com.oracle.bigdata.cluster=hadoop1
com.oracle.bigdata.tablename=default.ratings_hive_table
)
) PARALLEL 2 REJECT LIMIT UNLIMITED

この情報をSQLスクリプトで取得し、アクセス・パラメータを使用して、実行前に必要に応じてOracle表名、列名およびデータ型を変更できます。アクセス・パラメータを使用して日付書式マスクを指定することもできます。

ALL_HIVE_COLUMNSビューには、デフォルトの列名およびデータ型の導出方法が表示されます。この例では、Hive列の名前がC0からC7であり、Hive STRINGデータ型がVARCHAR2(4000)にマップされることを示します。

SQL> SELECT table_name, column_name, hive_column_type, oracle_column_type FROM all_hive_columns;

TABLE_NAME            COLUMN_NAME  HIVE_COLUMN_TYPE ORACLE_COLUMN_TYPE
--------------------- ------------ ---------------- ------------------
ratings_hive_table    c0           string           VARCHAR2(4000)
ratings_hive_table    c1           string           VARCHAR2(4000)
ratings_hive_table    c2           string           VARCHAR2(4000)
ratings_hive_table    c3           string           VARCHAR2(4000)
ratings_hive_table    c4           string           VARCHAR2(4000)
ratings_hive_table    c5           string           VARCHAR2(4000)
ratings_hive_table    c6           string           VARCHAR2(4000)
ratings_hive_table    c7           string           VARCHAR2(4000)

8 rows selected.

関連項目:

「DBMS_HADOOP PL/SQLパッケージ」

2.1.3 Oracle SQL Developerを使用したHiveへの接続

Oracle SQL Developerでは、Hiveメタストアに接続し、Hiveに対するOracle外部表を作成できます。

次の手順に従って、Oracle Big Data SQLと連携するようにOracle SQL Developerを設定します。

1. Oracle SQL Developerをインストールします

2. Hive JDBCドライバをダウンロードします

3. 新しいHive JDBCドライバをOracle SQL Developerに追加します

4. Hiveへのデータベース接続を作成します。

Oracle SQL Developerのインストール

Oracle SQL Developer 4.2以上をインストールします。HDFSへのOracle Database表のオフロードに便利なOracle Big Data SQLツールである「Copy To Hadoop」のサポートが含まれているため、リリース4.2をお薦めします。

インストールは簡単です。パッケージをダウンロードして抽出するのみです。

1. Oracle Technology Network (OTN)のOracle SQL Developerダウンロード・サイトに移動します。

2. ライセンス契約を受け入れ、プラットフォームにとって適切なバージョンをダウンロードします。
たいていのユーザーの場合、「Windows 64–bit with JDK 8 included」が正しい選択です。

3. ダウンロードしたZIPファイルをローカル・ドライブに抽出します。
抽出先のフォルダ名は任意です。

インストールと構成の詳細は、『Oracle SQL Developerユーザーズ・ガイド』のSQL Developerのインストールおよび開始に関する項を参照してください。

Cloudera Enterprise用のHive JDBCドライバのダウンロードおよびインストール

Oracle SQL DeveloperをHadoop環境のHiveに接続するには、Cloudera Enterprise用のHive JDBCドライバをダウンロードしてインストールする必要があります。これらのドライバは、Oracle SQL Developerのダウンロード・パッケージには付属していません。

HDPユーザーに対する注意:
現時点で、SQL Developer 4.2には、Hive用のCloudera JDBCドライバが必要です。ただし、これらのドライバは、Hortonworksクラスタに対しても動作するように見えます。HDPユーザーは、これらのドライバがその要件に適合するかどうかを判別するためにテストを行う必要があります。

1. 最新のHive用Cloudera JDBCドライバをCloudera Webサイトから任意のローカル・ディレクトリにダウンロードします。
Cloudera Webサイトで「cloudera hive jdbc drivers download」を検索し、使用可能なドライバ・パッケージの場所を特定します。

ドライバ・バージョン、OSおよびOSバージョン(32/64ビット)を選択するよう求められます。現時点で最新のドライバ・バージョンは2.5.18です。使用可能な最新バージョンを選択できます。

2. アーカイブを解凍します。

unzip hive_jdbc_<version>.zip

3. 抽出したコンテンツを表示します。最上位フォルダの中には、複数のZIPファイルがあります。それぞれが異なるJDBCバージョン用です。この設定では、JBDC 4.0のみ使用可能です。JDBC4_ ZIPファイル(JDBC4_<version>.zip)を選択します。

重要:
JDBC 4.0用のドライバを含むJDBC4_ ZIPファイルのみを選択してください。これが互換性のある唯一のバージョンです。JDBC41_*などの他のパッケージのドライバは、SQL Developer 4.2と互換性がなく、接続を試みるとエラーが返されます。

4. Oracle SQL Developerからアクセスできるターゲット・ディレクトリ(./home/oracle/jdbcなど)にJDBC4アーカイブを解凍します。

# unzip Cloudera_HiveJDBC4_<version>.zip -d /home/oracle/jdbc/

抽出されたコンテンツは次のようになります。

Cloudera_HiveJDBC4_2.5.18.1050\Cloudera-JDBC-Driver-for-Apache-Hive-Install-Guide.pdf
Cloudera_HiveJDBC4_2.5.18.1050\Cloudera-JDBC-Driver-for-Apache-Hive-Release-Notes.pdf
Cloudera_HiveJDBC4_2.5.18.1050\commons-codec-1.3.jar
Cloudera_HiveJDBC4_2.5.18.1050\commons-logging-1.1.1.jar
Cloudera_HiveJDBC4_2.5.18.1050\HiveJDBC4.jar
Cloudera_HiveJDBC4_2.5.18.1050\hive_metastore.jar
Cloudera_HiveJDBC4_2.5.18.1050\hive_service.jar
Cloudera_HiveJDBC4_2.5.18.1050\httpclient-4.1.3.jar
Cloudera_HiveJDBC4_2.5.18.1050\httpcore-4.1.3.jar
Cloudera_HiveJDBC4_2.5.18.1050\libfb303-0.9.0.jar
Cloudera_HiveJDBC4_2.5.18.1050\libthrift-0.9.0.jar
Cloudera_HiveJDBC4_2.5.18.1050\log4j-1.2.14.jar
Cloudera_HiveJDBC4_2.5.18.1050\out.txt
Cloudera_HiveJDBC4_2.5.18.1050\ql.jar
Cloudera_HiveJDBC4_2.5.18.1050\slf4j-api-1.5.11.jar
Cloudera_HiveJDBC4_2.5.18.1050\slf4j-log4j12-1.5.11.jar
Cloudera_HiveJDBC4_2.5.18.1050\TCLIServiceClient.jar
Cloudera_HiveJDBC4_2.5.18.1050\zookeeper-3.4.6.jar

新しいHive JDBCドライバをOracle SQL Developerに追加します

次に、SQL Developerを起動して、抽出したすべてのドライバ・ファイルを「Preferences」ウィンドウの「Third Party JDBC Drivers」にコピーします。

1. Oracle SQL Developerをダウンロードして抽出したフォルダに移動します。

2. sqldeveloperサブフォルダをクリックします。次に、そのフォルダのsqldeveloper.exeをクリックします。

3. SQL Developerのメニュー・バーで、「Tools」→「Preferences」を選択します。

4. 「Preferences」ウィンドウのファイル・エクスプローラで、「Database」を展開し、「Third Party JDBC Drivers」をクリックします。

5. 「「Add Entry」をクリックします。

6. Cloudera_HiveJDBC4_<version>.zipから抽出したファイルを配置したフォルダに移動します。ZIPから抽出されたすべてのJARファイルをこのウィンドウにコピーして、「OK」をクリックします。

7. Oracle SQL Developerを再起動します。

Hiveへのデータベース接続の作成

ドライバがインストールされた後、Hiveserver2への接続を作成できます。

Kerberos保護のある接続を作成する場合、ユーザーID、Kerberos接続パラメータ、およびHadoopシステム上でHiveserver2が実行しているポートの番号(通常はポート10000)が必要になります。ユーザーのキータブが存在する必要があります。

Kerberosを使用していない場合は、ユーザーID (oracleユーザーまたは同等の権限を持つユーザー)、アカウントのパスワード、およびHiveserver2ポート番号が必要になります。

「New/Select Database Connection」ダイアログの「Oracle」および「Hive」タブの各フィールドに関する説明は、『Oracle SQL Developerユーザーズ・ガイド』のデータベース接続の作成、編集、選択に関する項を参照してください。

2.1.4 ORACLE_HIVEのCREATE TABLE文の作成

いずれの方法を使用してHiveに対するOracle外部表を作成する場合でも(DBMS_HADOOP、Oracle SQL Developer Data Modeler、Oracle SQL DeveloperのOracle Big Dataウィザード、または手動によるコーディング)、ORACLE_HIVEのデフォルトの動作を変更するにはいくつかのアクセス・パラメータを設定する必要があることがあります。

2.1.4.1 ORACLE_HIVEのデフォルト設定の使用

次の文は、HiveデータにアクセスするためにORDERという名前の外部表を作成します。

CREATE TABLE order (cust_num    VARCHAR2(10),
order_num   VARCHAR2(20),
description VARCHAR2(100),
order_total NUMBER (8,2))
ORGANIZATION EXTERNAL (TYPE  oracle_hive);

この文ではアクセス・パラメータが設定されていないため、ORACLE_HIVEアクセス・ドライバはデフォルト設定を使用して次の処理を実行します。

- デフォルトのHadoopクラスタに接続します。

- orderという名前のHive表を使用します。Hive表にCUST_NUM、ORDER_NUM、DESCRIPTIONおよびORDER_TOTALという名前のフィールドがない場合、エラーが発生します。

- CUST_NUM値が10バイトを超えるなど、変換エラーが発生した場合は、フィールドの値をNULLに設定します。

2.1.4.2 ORACLE_HIVEのデフォルト設定の上書き

外部表の句のACCESS PARAMETERS句でプロパティを設定できます。これにより、アクセス・ドライバのデフォルトの動作が上書きされます。次の句には、com.oracle.bigdata.overflowアクセス・パラメータが含まれています。前述の例でこの句を使用する場合、エラーをスローするのではなく、100文字を超えるDESCRIPTION列のデータが切り捨てられます。

(TYPE oracle_hive
ACCESS PARAMETERS (
com.oracle.bigdata.overflow={"action:"truncate", "col":"DESCRIPTION""} ))

次の例では、ORACLE_HIVEの使用可能なパラメータの大部分を設定します。

CREATE TABLE order (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_date DATE,
item_cnt NUMBER,
description VARCHAR2(100),
order_total (NUMBER(8,2)) ORGANIZATION EXTERNAL
(TYPE oracle_hive
ACCESS PARAMETERS (
com.oracle.bigdata.tablename:  order_db.order_summary
com.oracle.bigdata.colmap:     {"col":"ITEM_CNT", \
"field":"order_line_item_count"}
com.oracle.bigdata.overflow:   {"action":"TRUNCATE", \
"col":"DESCRIPTION"}
com.oracle.bigdata.erroropt:   [{"action":"replace", \
"value":"INVALID_NUM" , \
"col":["CUST_NUM","ORDER_NUM"]} ,\
{"action":"reject", \
"col":"ORDER_TOTAL}
))

これらのパラメータは、ORACLE_HIVEアクセス・ドライバがデータを特定してエラー条件を処理する方法で、次の変更を行います。

- com.oracle.bigdata.tablename: 表名の違いを処理します。ORACLE_HIVEは、ORDER.DBデータベース内のORDER_SUMMARYという名前のHive表を調べます。

- com.oracle.bigdata.colmap: 列名の違いを処理します。HiveのORDER_LINE_ITEM_COUNTフィールドはOracleのITEM_CNT列にマップされます。

- com.oracle.bigdata.overflow: 文字列データを切り捨てます。DESCRIPTION列の100文字を超える値は切り捨てられます。

- com.oracle.bigdata.erroropt: 不正なデータを置換します。CUST_NUMまたはORDER_NUMのデータのエラーにより、値がINVALID_NUMに設定されます。

2.2 Oracle NoSQL DatabaseのOracle外部表の作成

ORACLE_HIVEアクセス・ドライバを使用して、Oracle NoSQL Databaseに格納されているデータにアクセスできます。ただし、KVStoreにアクセスするHive外部表を最初に作成する必要があります。次に、「HiveデータのOracle外部表の作成」に示されているプロセスのように、それに対してOracle Databaseの外部表を作成できます。

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

- Oracle NoSQL DatabaseのHive外部表の作成

- Oracle NoSQLデータのOracle Database表の作成

- 列データ型マッピングについて

- Oracle NoSQL Databaseのデータのアクセス例

2.2.1 Oracle NoSQL DatabaseのHive外部表の作成

Oracle NoSQL Databaseのデータにアクセス可能にするには、Oracle NoSQL表に対してHive外部表を作成します。Oracle Big Data SQLは、HiveによるOracle NoSQL Database表形式の読取りが可能なoracle.kv.hadoop.hive.table.TableStorageHandlerという名前のStorageHandlerを提供します。

Oracle NoSQL表に対するHive外部表のHive CREATE TABLE文の基本的な構文は次のとおりです。

CREATE EXTERNAL TABLE tablename colname coltype[, colname coltype,...]
STORED BY 'oracle.kv.hadoop.hive.table.TableStorageHandler'
TBLPROPERTIES (
"oracle.kv.kvstore" = "database",
"oracle.kv.hosts" = "nosql_node1:port[, nosql_node2:port...]",
"oracle.kv.hadoop.hosts" = "hadoop_node1[,hadoop_node2...]",
"oracle.kv.tableName" = "table_name");

Hive CREATE TABLEパラメータ

tablename

作成されるHive外部表の名前。

この表名はOracle Databaseで発行されるSQL問合せで使用されるため、ユーザーに適した名前を選択してください。Oracle Databaseで作成する外部表の名前は、このHive表の名前と同じである必要があります。

表、列およびフィールド名は、Oracle NoSQL Database、Apache HiveおよびOracle Databaseで大文字と小文字を区別しません。

colname coltype

Hive外部表の列の名前およびデータ型。Oracle NoSQL DatabaseとHive間のデータ型マッピングは、表2-1を参照してください。

Hive CREATE TABLE TBLPROPERTIES句

oracle.kv.kvstore

KVStoreの名前。大文字、小文字および数字のみが名前で有効です。

oracle.kv.hosts

Oracle NoSQL Databaseクラスタのホスト名およびポート番号のカンマ区切りリスト。各文字列では形式hostname:portを使用します。ホストで障害が発生した場合の冗長性を提供するには、複数の名前を入力します。

oracle.kv.hadoop.hosts

Oracle Big Data SQLが有効であるHadoopクラスタのすべてのホスト名のカンマ区切りリスト。

oracle.kv.tableName

このHive外部表のデータを格納するOracle NoSQL Databaseの表の名前。

関連項目:

次のApache Hive LanguageManual DDL

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/Drop/TruncateTable

2.2.2 Oracle NoSQLデータのOracle Database表の作成

次の構文を使用して、Hive外部表を介してOracle NoSQLデータにアクセスできるOracle Databaseの外部表を作成します。

CREATE TABLE tablename(colname colType[, colname colType...])
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE DEFAULT DIRECTORY directory
ACCESS PARAMETERS
(access parameters)
)
REJECT LIMIT UNLIMITED;

この構文では、列名およびデータ型を識別します。この構文の詳細は、「SQL CREATE TABLE文について」を参照してください。

2.2.3 列データ型マッピングについて

Oracle Big Data SQLがOracle NoSQL Databaseからデータを取得する場合、データが次の別のデータ型に2回変換されます。

- データがHive外部表の列に読み込まれる場合にHiveデータ型。

- データがOracle Database外部表の列に読み込まれる場合にOracleデータ型。

Oracle NoSQL Database表に格納されたデータに対してBig Data SQL問合せを実行するには、まず、目的のOracle NoSQL Database表のスキーマとマップされているスキーマでHive外部表を作成する必要があります。表2-1に、Oracle NoSQL Database表APIのサポートされているデータ型およびHiveへのマッピングを示します。

表2-1 NoSQL Database表APIのデータ・モデルへのHiveデータ型のマッピング

Oracle NoSQL Database表API

Hive

FieldDef.Type.STRING

STRING

FieldDef.Type.BOOLEAN

BOOLEAN

FieldDef.Type.BINARY

BINARY

FieldDef.Type.FIXED_BINARY

BINARY

FieldDef.Type.INTEGER

INT

FieldDef.Type.LONG

BIGINT

FieldDef.Type.FLOAT

FLOAT

FieldDef.Type.DOUBLE

DOUBLE

FieldDef.Type.ENUM

STRING

FieldDef.Type.ARRAY

ARRAY

FieldDef.Type.MAP

MAP<STRING, data_type>

FieldDef.Type.RECORD

STRUCT<col_name : data_type, ...>

注意:

このマッピングを完成するには、対応するOracle Database外部表を、Hive表のスキーマとマップされているスキーマで作成する必要があります。

また、Hiveデータ型のVARCHAR、CHAR、TINYINT、SMALLINT、DECIMAL、TIMESTAMP、DATE、UNION TYPEは、Oracle NoSQLデータ型からOracle Databaseデータ型へのマッピングに当てはまらないことに注意してください。

関連項目:
HiveからOracle Databaseへのデータ型マッピングの詳細は、「データ型変換について」を参照してください。
Oracle Big Data SQLでの述語のプッシュダウンでは、Hiveデータ型とOracleデータ型の間に特定のマッピングが存在する必要があります。「述語のプッシュダウンについて」を参照してください

2.2.4 Oracle NoSQL Databaseのデータのアクセス例

この例は、Oracle NoSQL Databaseソフトウェアで用意されているサンプル・データを使用します。

- Oracle NoSQL Database表の例の作成

- vehicleTableのHive表の例の作成

- VEHICLESのOracle表の作成

2.2.4.1 Oracle NoSQL Database表の例の作成

次のファイルがexamples/hadoop/tableディレクトリにあることを確認します。

create_vehicle_table.kvs
CountTableRows.java
LoadVehicleTable.java

この例は、some1node07という名前のHadoopクラスタ・ノードで実行し、SOME1KVという名前のKVStoreを使用します。

Oracle NoSQL Databaseのサンプルの表を作成して移入するには、次の手順を実行します。

1. HadoopクラスタでOracle NoSQL Databaseノードへの接続を開きます。

2. vehicleTableという名前の表を作成します。次の例は、loadコマンドを使用して、create_vehicle_table.kvsのコマンドを実行します。

$ cd NOSQL_HOME
$ java -jar lib/kvcli.jar -host some1node07 -port 5000 \
load -file examples/hadoop/table/create_vehicle_table.kvs

3. LoadVehicleTable.javaをコンパイルします。

$ javac -cp examples:lib/kvclient.jar examples/hadoop/table/LoadVehicleTable.java

4. LoadVehicleTableクラスを実行して、表に移入します。

$ java -cp examples:lib/kvclient.jar hadoop.table.LoadVehicleTable -host some1node07 -port 5000 -store SOME1KV
{"type":"auto","make":"Chrysler","model":"PTCruiser","class":"4WheelDrive","colo
r":"white","price":20743.240234375,"count":30}
{"type":"suv","make":"Ford","model":"Escape","class":"FrontWheelDrive","color":"
.
.
.
10 new records added

vehicleTable表には、次のフィールドが含まれています。

表2-2 vehicleTable例のフィールド

フィールド名

データ型

type

STRING

Make

STRING

model

STRING

クラス

STRING

color

STRING

price

DOUBLE

count

INTEGER

2.2.4.2 vehicleTableのHive表の例の作成

次の例では、SOME1KV KVStoreのvehicleTableにアクセスするVEHICLESという名前のHive表を作成します。この例のシステムは、最初の6つのサーバー(some1node01からsome1node06)のHadoopクラスタと次の3つのサーバー(some1node07からsome1node09)のOracle NoSQL Databaseクラスタで構成されます。

CREATE EXTERNAL TABLE IF NOT EXISTS vehicles
(type STRING,
make STRING,
model STRING,
class STRING,
color STRING,
price DOUBLE,
count INT)
COMMENT 'Accesses data in vehicleTable in the SOME1KV KVStore'
STORED BY 'oracle.kv.hadoop.hive.table.TableStorageHandler'
TBLPROPERTIES
("oracle.kv.kvstore" = "SOME1KV",
"oracle.kv.hosts" = "some1node07.example.com:5000,some1node08.example.com:5000",
"oracle.kv.hadoop.hosts" = "some1node01.example.com,some1node02.example.com,some1node03.example.com,some1node04.example.com,some1node05.example.com,some1node06.example.com",
"oracle.kv.tableName" = "vehicleTable");

DESCRIBEコマンドは、VEHICLES表の列をリストします。

hive> DESCRIBE vehicles;
OK
type                    string                  from deserializer
make                    string                  from deserializer
model                   string                  from deserializer
class                   string                  from deserializer
color                   string                  from deserializer
price                   double                  from deserializer
count                   int                     from deserializer

Hive VEHICLES表に対する問合せは、Oracle NoSQL vehicleTable表のデータを返します。

hive> SELECT make, model, class
FROM vehicletable
WHERE type='truck' AND color='red'
ORDER BY make, model;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
.
.
.
Chrysler       Ram1500         RearWheelDrive
Chrysler       Ram2500         FrontWheelDrive
Ford           F150            FrontWheelDrive
Ford           F250            RearWheelDrive
Ford           F250            AllWheelDrive
Ford           F350            RearWheelDrive
GM             Sierra          AllWheelDrive
GM             Silverado1500   RearWheelDrive
GM             Silverado1500   AllWheelDrive

2.2.4.3 VEHICLESのOracle表の作成

Hive表を作成した後、メタデータをOracle Database静的データ・ディクショナリ・ビューで使用できます。次のSQL SELECT文は、前のトピックで作成されたHive表の情報を返します。

SQL> SELECT table_name, column_name, hive_column_type
FROM all_hive_columns
WHERE table_name='vehicles';
TABLE_NAME      COLUMN_NAME  HIVE_COLUMN_TYPE
--------------- ------------ ----------------
vehicles        type         string
vehicles        make         string
vehicles        model        string
vehicles        class        string
vehicles        color        string
vehicles        price        double
vehicles        count        int

次のSQL CREATE TABLE文は、ORACLE_HIVEアクセス・ドライバを使用して、Hive VEHICLES表に対するVEHICLESという名前の外部表を生成します。Oracle Databaseの表の名前は、Hiveの表の名前と同じである必要があります。ただし、Oracle NoSQL DatabaseおよびOracle Databaseは、大文字と小文字を区別しません。

CREATE TABLE vehicles
(type  VARCHAR2(10), make  VARCHAR2(12), model VARCHAR2(20),
class VARCHAR2(40), color VARCHAR2(20), price NUMBER(8,2),
count NUMBER)
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(com.oracle.bigdata.debug=true com.oracle.bigdata.log.opt=normal))
REJECT LIMIT UNLIMITED;

このSQL SELECT文は、Oracle NoSQL DatabaseのvehicleTableから赤いトラックのすべての行を取得します。

SQL> SELECT make, model, class
FROM vehicles
WHERE type='truck' AND color='red'
ORDER BY make, model;
MAKE         MODEL                CLASS
------------ -------------------- ---------------------
Chrysler     Ram1500              RearWheelDrive
Chrysler     Ram2500              FrontWheelDrive
Ford         F150                 FrontWheelDrive
Ford         F250                 AllWheelDrive
Ford         F250                 RearWheelDrive
Ford         F350                 RearWheelDrive
GM           Sierra               AllWheelDrive
GM           Silverado1500        RearWheelDrive
GM           Silverado1500        4WheelDrive
GM           Silverado1500        AllWheelDrive

2.3 Apache HBaseのOracle外部表の作成

ORACLE_HIVEアクセス・ドライバを使用して、Apache HBaseに格納されているデータにアクセスすることもできます。ただし、最初にHBase表にアクセスするHive外部表を作成する必要があります。次に、それに対してOracle Databaseの外部表を作成できます。基本的な手順は、「Oracle NoSQL DatabaseのOracle外部表の作成」で説明されているものと同じです。

2.3.1 HBaseのHive外部表の作成

HBase表のデータにアクセス可能にするには、それに対してHive外部表を作成します。Apacheは、ストレージ・ハンドラおよびHiveによるHBase表形式の読取りが可能なSerDeを提供します。

HBase表に対する外部表のHive CREATE TABLE文の基本的な構文は、次のとおりです。

CREATE EXTERNAL TABLE tablename colname coltype[, colname coltype,...]
ROW FORMAT
SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
'serialization.format'='1',
'hbase.columns.mapping'=':key,value:key,value:

関連項目:

- 次のApache Hive LanguageManual DDL
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/Drop/TruncateTable

- 次のHive HBaseIntegration
https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration#HBaseIntegration-StorageHandlers

- 次のHive APIリファレンスのClass HBaseSerDe
http://hive.apache.org/javadocs/r0.13.1/api/hbase-handler/index.html

2.3.2 HBaseのOracle Database表の作成

次の構文を使用して、Hive外部表を介してHBaseデータにアクセスできるOracle Databaseの外部表を作成します。

CREATE TABLE tablename(colname colType[, colname colType...])
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(access parameters)
)
REJECT LIMIT UNLIMITED;

この構文では、列名およびデータ型を識別します。アクセス・パラメータを指定するには、「SQL CREATE TABLE文について」を参照してください。

2.4 HDFSファイルのOracle外部表の作成

ORACLE_HDFSアクセス・ドライバを使用すると、HDFSに格納されている様々なタイプのデータにアクセスできますが、HDFSにはHiveメタデータはありません。テキスト・データのレコード形式を定義することも、特定のデータ形式のSerDeを指定することもできます。

HDFSファイルの外部表を手動で作成し、データを特定するためにアクセス・ドライバが必要とするすべての情報を提供して、レコードおよびフィールドを解析する必要があります。CREATE TABLE ORGANIZATION EXTERNAL文のいくつかの例を次に示します。

2.4.1 デフォルトのアクセス・パラメータとORACLE_HDFSの使用

次の文は、ORDERという名前の文を作成して、HDFSの/usr/cust/summaryディレクトリに格納されているすべてのファイル内のデータにアクセスします。

CREATE TABLE ORDER (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_total NUMBER (8,2))
ORGANIZATION EXTERNAL
( TYPE oracle_hdfs
DEFAULT DIRECTORY DEFAULT_DIR
)
LOCATION ('hdfs:/usr/cust/summary/*');

この文ではアクセス・パラメータが設定されていないため、ORACLE_HDFSアクセス・ドライバはデフォルト設定を使用して次の処理を実行します。

- デフォルトのHadoopクラスタに接続します。

- ファイルをデリミタ付きテキスト、フィールドをSTRINGタイプとして読み取ります。

- HDFSファイル内のフィールドの数は、列の数と一致すると仮定します(この例では3)。

- CUST_NUMデータが第1フィールド、ORDER_NUMデータが第2フィールド、ORDER_TOTALデータが第3フィールドになるように、フィールドは列と同じ順序であることを前提とします。

- 値によってデータ変換エラーが発生するレコードを拒否します。CUST_NUMの値が10文字を超える場合、ORDER_NUMの値が20文字を超える場合、またはORDER_TOTALの値がNUMBERに変換できない場合です。

2.4.2 ORACLE_HDFSのデフォルト設定の上書き

ORACLE_HDFSでも、ORACLE_HIVEと同じアクセス・パラメータの多くを使用できます。

2.4.2.1 デリミタ付きテキスト・ファイルへのアクセス

次の例は、「ORACLE_HIVEのデフォルト設定の上書き」に示した例に相当します。外部表は、HDFSに格納されているデリミタ付きテキスト・ファイルにアクセスします。

CREATE TABLE order (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_date DATE,
item_cnt NUMBER,
description VARCHAR2(100),
order_total NUMBER(8,2))
ORGANIZATION EXTERNAL
(
TYPE oracle_hdfs
DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(
com.oracle.bigdata.colmap: {"col":"item_cnt", "field":"order_line_item_count"}
com.oracle.bigdata.overflow: {"action":"TRUNCATE", "col":"DESCRIPTION"}
com.oracle.bigdata.erroropt: [{"action":"replace", \
"value":"INVALID NUM", \
"col":["CUST_NUM","ORDER_NUM"]} , \
{"action":"reject", "col":"ORDER_TOTAL}]
)
LOCATION ('hdfs:/usr/cust/summary/*'));

これらのパラメータは、ORACLE_HDFSアクセス・ドライバがデータを特定してエラー条件を処理する方法で、次の変更を行います。

- com.oracle.bigdata.colmap: 列名の違いを処理します。HDFSファイル内のORDER_LINE_ITEM_COUNTは、外部表のITEM_CNT列と一致します。

- com.oracle.bigdata.overflow: 文字列データを切り捨てます。DESCRIPTION列の100文字を超える値は切り捨てられます。

- com.oracle.bigdata.erroropt: 不正なデータを置換します。CUST_NUMまたはORDER_NUMのデータのエラーにより、値がINVALID_NUMに設定されます。

2.4.2.2 Avroコンテナ・ファイルへのアクセス

次の例では、SerDeを使用してAvroコンテナ・ファイルにアクセスします。

CREATE TABLE order (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_date DATE,
item_cnt NUMBER,
description VARCHAR2(100),
order_total NUMBER(8,2))
ORGANIZATION EXTERNAL
(
TYPE oracle_hdfs
DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS (
com.oracle.bigdata.rowformat: \
SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
com.oracle.bigdata.fileformat: \
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'\
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
com.oracle.bigdata.colmap: {  "col":"item_cnt", \
"field":"order_line_item_count"}
com.oracle.bigdata.overflow: {"action":"TRUNCATE", \
"col":"DESCRIPTION"}
)
LOCATION ('hdfs:/usr/cust/summary/*'));

アクセス・パラメータは、次の情報をORACLE_HDFSアクセス・ドライバうに提供します。

- com.oracle.bigdata.rowformat: アクセス・ドライバがレコードおよびフィールドを解析するために使用する必要があるSerDeを識別します。ファイルはデリミタ付きテキスト形式ではありません。

- com.oracle.bigdata.fileformat: レコードを抽出し、それらを目的の形式で出力できるJavaクラスを識別します。

- com.oracle.bigdata.colmap: 列名の違いを処理します。ORACLE_HDFSは、外部表のITEM_CNT列を持つHDFSファイル内のORDER_LINE_ITEM_COUNTと一致します。

- com.oracle.bigdata.overflow: 文字列データを切り捨てます。DESCRIPTION列の100文字を超える値は切り捨てられます。

2.5 SQL CREATE TABLE文について

SQLのCREATE TABLE文には、外部表の作成に特化した句があります。この句に指定する情報により、アクセス・ドライバは外部ソースからデータを読み取り、そのデータを外部表用に準備できます。

2.5.1 基本的な構文

次に外部表のCREATE TABLE文の基本的な構文を示します。

CREATE TABLE table_name (column_name datatype,
column_name datatype[,...])
ORGANIZATION EXTERNAL (external_table_clause);

他の表と同様に、列名およびデータ型を指定します。ORGANIZATION EXTERNALは、表を外部表として識別します。

external_table_clauseはアクセス・ドライバを識別し、データのロードに必要な情報を提供します。「外部表の句について」を参照してください。

2.5.2 外部表の句について

CREATE TABLE ORGANIZATION EXTERNALは、引数としてexternal_table_clauseを取ります。次の従属句があります。

- TYPE句

- DEFAULT DIRECTORY句

- LOCATION句

- REJECT LIMIT句

- ORACLE_HIVEアクセス・パラメータ

関連項目:

external_table_clauseの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

2.5.2.1 TYPE句

TYPE句はアクセス・ドライバを識別します。アクセス・ドライバのタイプによって、外部表定義の他の部分がどのように解釈されるかが決まります。

Oracle Big Data SQLに次の値のいずれかを指定します。

- ORACLE_HDFS: HDFSディレクトリ内のファイルにアクセスします。

- ORACLE_HIVE: Hive表にアクセスします。

注意:

ORACLE_DATAPUMPおよびORACLE_LOADERアクセス・ドライバは、Oracle Big Data SQLには関連付けられません。

2.5.2.2 DEFAULT DIRECTORY句

DEFAULT DIRECTORY句はOracle Databaseディレクトリ・オブジェクトを識別します。ディレクトリ・オブジェクトは、外部表が読取りおよび書込みを行うファイルを含むオペレーティング・システム・ディレクトリを識別します。

ORACLE_HDFSおよびORACLE_HIVEはデフォルト・ディレクトリのみを使用して、Oracle Databaseシステムにログ・ファイルを書き込みます。

2.5.2.3 LOCATION句

LOCATION句はデータ・ソースを識別します。

2.5.2.4 ORACLE_HDFS LOCATION句

ORACLE_HDFSのLOCATION句には、ファイルの場所のコンマ区切りのリストが含まれます。ファイルは、デフォルト・クラスタ上のHDFSファイル・システムに存在する必要があります。

場所は次のいずれかになります。

- 完全修飾HDFSディレクトリ名(/user/hive/warehouse/hive_seed/hive_typesなど)。ORACLE_HDFSはディレクトリ内のすべてのファイルを使用します。

- 完全修飾HDFSファイル名(/user/hive/warehouse/hive_seed/hive_types/hive_types.csvなど)。

- HDFSファイルまたはファイルのセットのURL (hdfs:/user/hive/warehouse/hive_seed/hive_types/*など)。ディレクトリ名のみの使用は無効です。

ファイル名には、表2-3に説明されているパターン一致文字を含めることができます。

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

文字

説明

?

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

*

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

[abc]

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

[a-b]

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

[^a]

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

\c

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

{ab\,cd}

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

{ab\,c{de\,fh}

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

2.5.2.5 ORACLE_HIVE LOCATION句

ORACLE_HIVEにLOCATION句を指定しないでください。指定すると、エラーが発生します。データはHiveに格納され、アクセス・パラメータおよびメタデータ・ストアは必要な情報を提供します。

2.5.2.6 REJECT LIMIT句

Oracle Databaseが問合せを停止し、エラーを返すまで、外部表の問合せ中に許可される変換エラーの数を制限します。

行が拒否される処理エラーは、制限に対してカウントされます。拒否制限は、各並列問合せ(PQ)プロセスに個別に適用されます。すべてのPQプロセスについて、拒否されたすべての行の合計ではありません。

2.5.2.7 ACCESS PARAMETERS句

ACCESS PARAMETERS句は、アクセス・ドライバがデータを外部表に正しくロードするために必要な情報を提供します。「CREATE TABLE ACCESS PARAMETERS句」を参照してください。

2.6 データ型変換について

アクセス・ドライバは、データを外部表にロードする際に、Hiveデータをターゲット列のデータ型に変換できることを確認します。互換性がない場合、アクセス・ドライバはエラーを返します。それ以外の場合は、適切なデータ変換を行います。

通常、Hiveは他の場所(HDFSファイル内など)に格納されているデータに表抽象化レイヤーを提供します。Hiveはシリアライザ/デシリアライザ(SerDe)を使用して、必要に応じてデータを格納されている形式からHiveデータ型に変換します。その後、アクセス・ドライバはHiveデータ型からOracleデータ型にデータを変換します。たとえば、テキスト・ファイルに対するHive表にBIGINT列がある場合、SerDeはデータをテキストからBIGINTに変換します。その後、アクセス・ドライバはデータをBIGINT (Hiveデータ型)からNUMBER (Oracleデータ型)に変換します。

2つではなく1つのデータ型変換を実行する場合、パフォーマンスが向上します。したがって、HDFSファイル内のフィールドのデータ型は、ディスク上に実際に格納されているデータを示す必要があります。たとえば、JSONはクリア・テキスト形式であるため、JSONファイル内のデータはすべてテキストです。フィールドのHiveタイプがDATEの場合、SerDeはデータを文字列(データ・ファイル内)からHive日付に変換します。その後、アクセス・ドライバはデータをHive日付からOracle日付に変換します。ただし、フィールドのHiveタイプが文字列の場合、SerDeは変換を実行せず、アクセス・ドライバはデータを文字列からOracle日付に変換します。2番目の例では、外部表に対する問合せはより速くなります。これは、アクセス・ドライバがデータ変換のみを実行するためです。

次の表に、データを外部表にロードするときにORACLE_HIVEが実行できるデータ型変換を示します。

表2-4 サポートされているHiveデータ型からOracleデータ型への変換

Hiveデータ型

VARCHAR2、CHAR、NCHAR2、NCHAR、CLOB

NUMBER、FLOAT、BINARY_NUMBER、BINARY_FLOAT

BLOB

RAW

DATE、TIMESTAMP、TIMESTAMP WITH TZ、TIMESTAMP WITH LOCAL TZ

INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND

INT

SMALLINT

TINYINT

BIGINT

はい

はい

はい

はい

いいえ

いいえ

DOUBLE

FLOAT

はい

はい

はい

はい

いいえ

いいえ

DECIMAL

はい

はい

いいえ

いいえ

いいえ

いいえ

BOOLEAN

はい脚注 1

はい脚注2

はい脚注 2

はい

いいえ

いいえ

BINARY

はい

いいえ

はい

はい

いいえ

いいえ

STRING

はい

はい

いいえ

いいえ

はい

はい

TIMESTAMP

はい

いいえ

いいえ

いいえ

はい

いいえ

STRUCT

ARRAY

UNIONTYPE

MAP

はい

いいえ

いいえ

いいえ

いいえ

いいえ

脚注1

FALSEは文字列FALSEにマップされ、TRUEは文字列TRUEにマップされます。

脚注2

FALSEは0にマップされ、TRUEは1にマップされます。

2.7 外部表の問合せ

ユーザーは、他の表を問い合せる場合と同じように、SQL SELECT文を使用して外部表を問い合せることができます。

2.7.1 ユーザー・アクセス権の付与

Hadoopクラスタ上のデータを問い合せるユーザーには、外部表、およびクラスタ・ディレクトリを指すデータベース・ディレクトリ・オブジェクトへのOracle Database内のREADアクセス権が必要です。「クラスタ・ディレクトリについて」を参照してください。

2.7.2 エラー処理について

デフォルトでは、列の値を計算しているときにエラーが発生した場合、問合せはデータを返しません。ほとんどのエラー(特に、列の値を計算中にスローされたエラー)の後も処理は続行します。

エラーの処理方法を決定するには、com.oracle.bigdata.erroroptパラメータおよびcom.oracle.bigdata.overflowパラメータを使用します。

2.7.3 ログ・ファイルについて

次のアクセス・パラメータを使用すると、ログ・ファイルをカスタマイズできます。

- com.oracle.bigdata.log.exec

- com.oracle.bigdata.log.qc

2.8 データベース・サーバー(Oracle Exadata Machineなど)上のOracle Big Data SQLについて

この項では、Oracle Big Data SQLインストールによってOracle Databaseシステム(Oracle Exadata Machineなど)に加えられる変更について説明します。

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

- bigdata_configディレクトリについて

- 一般的な構成プロパティ

- クラスタ・ディレクトリについて

2.8.1 bigdata_configディレクトリについて

bigdata_configディレクトリには、すべてのHadoopクラスタに共通の構成情報が含まれています。このディレクトリは、Oracle Databaseシステムの$ORACLE_HOME/bigdatasqlの下にあります。oracleファイル・システムのユーザー(またはOracle Databaseインスタンスを所有するユーザー)は、bigdata_configを所有します。Oracleデータベース・ディレクトリORACLE_BIGDATA_CONFIGはbigdata_configを指します。

2.8.2 一般的な構成プロパティ

インストールで、これらのファイルは$ORACLE_HOME/bigdatasqlの下のbigdata_configディレクトリ内に格納されます。

- bigdata.properties

- bigdata-log4j.properties

Oracle DBAは、必要に応じてこれらの構成ファイルを編集できます。

2.8.2.1 bigdata.properties

共通ディレクトリ内の bigdata.propertiesファイルには、HDFS内のデータにアクセスするために必要なJavaクラス・パスおよびネイティブ・ライブラリ・パスを定義するプロパティ/値のペアが含まれています。

次のプロパティを設定する必要があります。

- bigdata.cluster.default

- java.classpath.hadoop

- java.classpath.hive

- java.classpath.oracle

次のリストで、bigdata.propertiesで許可されているすべてのプロパティを説明します。

bigdata.properties

プロパティ

説明

bigdata.cluster.default

デフォルトのHadoopクラスタの名前。アクセス・パラメータがクラスタを指定しない場合、アクセス・ドライバはこの名前を使用します。必須。

デフォルトのクラスタ名を変更すると、明示的なクラスタ名なしで以前に作成された外部表が使用できなくなる可能性があります。

bigdata.cluster.list

Hadoopクラスタ名のコンマ区切りのリスト。オプション。

java.classpath.hadoop

Hadoopクラス・パス。必須。

java.classpath.hive

Hiveクラス・パス。必須。

java.classpath.oracle

Oracle JXAD Java JARファイルへのパス。必須。

java.classpath.user

ユーザーJARファイルへのパス。オプション。

java.libjvm.file

JVM共有ライブラリ(libjvm.soなど)への完全なファイル・パス。必須。

java.options

JVMに渡されるオプションのコンマ区切りのリスト。オプション。

この例では、最大ヒープ・サイズを2GBに設定し、Java Native Interface (JNI)呼出しの詳細なロギングを設定します。

Xmx2048m,-verbose=jni

LD_LIBRARY_PATH

Hadoopネイティブ・ライブラリを検索するためのディレクトリ・パスのコロン区切りの(:)リスト。推奨。

このオプションを設定した場合は、java.optionsでjava.libraryパスを設定しないでください。

例2-1は、サンプルのbigdata.propertiesファイルを示します。

例2-1 サンプルのbigdata.propertiesファイル

# bigdata.properties
#
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
#
#    NAME
#      bigdata.properties - Big Data Properties File
#
#    DESCRIPTION
#      Properties file containing parameters for allowing access to Big Data
#      Fixed value properties can be added here
#

java.libjvm.file=$ORACLE_HOME/jdk/jre/lib/amd64/server/libjvm.so
java.classpath.oracle=$ORACLE_HOME/hadoopcore/jlib/*:$ORACLE_HOME/hadoop/jlib/hver-2/*:$ORACLE_HOME/dbjava/lib/*
java.classpath.hadoop=$HADOOP_HOME/*:$HADOOP_HOME/lib/*
java.classpath.hive=$HIVE_HOME/lib/*
LD_LIBRARY_PATH=$ORACLE_HOME/jdk/jre/lib
bigdata.cluster.default=hadoop_cl_1

2.8.2.2 bigdata-log4j.properties

共通ディレクトリのbigdata-log4j.propertiesファイルは、外部表に対する問合せのロギング動作をJavaコードで定義します。このファイルでは、すべてのlog4jプロパティを使用できます。

例2-2に、サンプルのbigdata-log4j.propertiesファイルと、関連するlog4jプロパティを示します。

例2-2 サンプルのbigdata-log4j.propertiesファイル

# bigdata-log4j.properties
#
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
#
#    NAME
#      bigdata-log4j.properties - Big Data Logging Properties File
#
#    DESCRIPTION
#      Properties file containing logging parameters for Big Data
#      Fixed value properties can be added here

bigsql.rootlogger=INFO,console
log4j.rootlogger=DEBUG, file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
log4j.logger.oracle.hadoop.sql=ALL, file

bigsql.log.dir=.
bigsql.log.file=bigsql.log
log4j.appender.file.File=$ORACLE_HOME/bigdatalogs/bigdata-log4j.log

関連項目:

Apacheロギング・サービスのドキュメントの場所:

http://logging.apache.org/log4j/1.2/manual.html

2.8.3 クラスタ・ディレクトリについて

クラスタ・ディレクトリには、Hadoopクラスタの構成情報が含まれています。Oracle DatabaseがOracle Big Data SQLを使用してアクセスする各クラスタにクラスタ・ディレクトリがあります。このディレクトリは、Oracle Databaseシステムのbigdata_configディレクトリの下にあります。たとえば、bda1_cl_1という名前のクラスタは、bigdata_configディレクトリ–$ORACLE_HOME/bigdatasql/bigdata_config/bda1_c1_1内に同じ名前のディレクトリを持ちます。

クラスタ・ディレクトリには、次のようなクラスタにアクセスするためのクライアント構成ファイルが含まれています。

- bigdata.hosts (顧客による編集不可)

- core-site.xml

- hdfs-site.xml

- hive-site.xml

- mapred-site.xml (optional)

- log4jプロパティ・ファイル(hive-log4j.propertiesなど)

データベース・ディレクトリ・オブジェクトはクラスタ・ディレクトリを指します。クラスタ内のデータにアクセスするユーザーには、ディレクトリ・オブジェクトの読取りアクセス権が必要です。

2.8.4 権限について

- Oracle Databaseサーバーで、oracleユーザー(またはOracle Databaseインストール・ディレクトリを所有するユーザー)には、データベース・ディレクトリ(ログ・ディレクトリを指す)に対するREAD/WRITEアクセス権が必要です。

- 対応するoracleユーザーをHadoopクラスタにも定義する必要があります。oracleユーザーは、クラスタ内のすべてのDataNode上のHDFSに対するREADアクセス権が必要です。

- HDFSでは、ホーム・ディレクトリ(/user/oracle)はデフォルトで作成されますが、データベース・サーバー上でoracleがデータベース・インスタンスの所有者でない場合は、手動でユーザーのホーム・ディレクトリを作成する必要があります。
たとえば、"orclusr"(およびそのグループ"orclgrp")がデータベース・インスタンスを所有している場合は、ホーム・ディレクトリ/user/orclusrを作成します。

# hdfs dfs -mkdir /user/orclusr
# hdfs dfs -chown orclusr:orclgrp /user/orclusr

3 HadoopへのOracleデータの格納

Copy to HadoopおよびHDFS内のOracle Database表は、Oracle Database表をHadoopクラスタ上のHDFSファイル・システムにオフロードするための2つのOracle Big Data SQLリソースです。

次の表に、この2つのツールを比較します。

表3-1 Copy to HadoopとHDFS内のOracle表領域の比較

Copy to Hadoop

HDFS内のOracle表領域

Oracle Database表をHDFS内に格納されているOracle Data Pumpファイルにコピーします。

Oracle Databaseの表またはパーティションは、元のOracle内部形式でHDFSの表領域内に格納されます。

Hive外部表を通したアクセスと、Oracle Big Data SQLによるデータベースからのアクセス。

元のOracle Database表からの直接アクセス。外部表は不要です。

データは、Hadoopエコシステムの他のプロセスで(Hiveを通して)使用することも、Oracle Databaseで(Oracle Big Data SQLを通して)使用することも可能です。

データは、Oracle Databaseでのみ直接使用できます。データは、Hadoopの他のプロセスでアクセスできません。

3.1 Copy to Hadoopの使用方法

この項では、Copy to Hadoopを使用してOracle Database表をHadoopにコピーする方法について説明します。

- Copy to Hadoopとは

- Copy to Hadoopの使用の概要

- Oracle Shell for Hadoop LoadersのCopy to Hadoopとの使用

- Copy to Hadoopを使用した直接コピーの実行

- Copy to Hadoopを使用した段階的コピーの実行

- Hiveのデータの問合せ

- 列マッピングおよびデータ型変換について

- Sparkの使用

3.1.1 Copy to Hadoopとは

Oracle Big Data SQLには、Oracle Copy to Hadoopユーティリティが含まれています。このユーティリティを使用すると、Oracleデータの識別とHadoop Distributed File Systemへのコピーが簡単になります。コマンドライン・インタフェースのOracle Shell for Hadoop Loadersを通してアクセスできます。

Copy to HadoopによってHadoopクラスタにエクスポートされたデータは、Oracle Data Pump形式で格納されます。Oracle Data Pumpファイルは、HiveまたはBig Data SQLによって問い合せることができます。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のライセンスが必要です。

3.1.2 Copy to Hadoopの使用の概要

Copy to Hadoopをインストールして使用を開始するには、次のようにします。

1. 『Oracle Big Data SQLインストレーション・ガイド』のCopy to HadoopおよびOracle Shell for Hadoop Loadersのインストール手順を実行します。
インストレーション・ガイドで説明されているように、前提条件となるソフトウェアがHadoopクラスタ(Oracle Big Data Applianceまたは別のHadoopシステム上)とOracle Databaseサーバー(Oracle Exadata Database Machineなど)の両方にインストールされていることを確認します。

2. Oracle Shell for Hadoop Loaders (OHSH)を起動し、HDFS内のデータ・ポンプ形式ファイルへOracle Database内のデータの1ステップの直接コピーまたは2ステップの段階的コピーを実行し、そのファイルからHive外部表を作成します。
OHSHでは、directcopyがデフォルトで選択され、1ステップの直接コピーが実行されます。これは、2ステップの段階的コピーより速く、データベース・サーバー上にストレージを必要としません。しかし、2ステップの段階的コピーの実行が必要となる場合があります。

- 複数のOracle Databaseソース表から列をコピーする場合。(1ステップの直接コピーでは、1つの表からのみデータをコピーします。)

- 型TIMESTAMPTZまたはTIMESTAMPLTZの列をHiveにコピーする場合。
タイムゾーンまたはタイム・オフセットに対応するデータ型がHiveには存在しないため、このような列は、Data Pumpファイルに手動でエクスポートする際にTIMESTAMPに型変換する必要があります。

- ビューからデータをコピーする場合。ビューは、directcopyオプションではサポートされていません。

手動による手順を使用する2ステップの段階的コピーについては、「付録A 段階的コピーにCopy to Hadoopを使用するための手動による手順」を参照してください。

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

ヒント:
専門的な要件を備えたHadoopのパワー・ユーザーの場合は、直接コピーの手動オプションをお薦めします。付録Bの「直接コピーにCopy to Hadoopを使用するための手動による手順」を参照してください。

3.1.2.1 Copy to Hadoopの表アクセス要件

Copy to Hadoopを使用して表をコピーするには、Oracle Databaseユーザーが次の要件のいずれかを満たす必要があります。

- ユーザーは、表の所有者であること。または、

- ユーザーは、別のスキーマ内の表にアクセスし、次の権限を持っていること。

- その表に対するSELECT権限。

- select_catalog_role権限(データ・ディレクトリ・ビューに対するSELECT権限を提供)。

3.1.3 Oracle Shell for Hadoop LoadersのCopy to Hadoopとの使用

3.1.3.1 Oracle Shell for Hadoop Loadersの概要

Oracle Shell for Hadoop Loadersとは

Oracle Shell for Hadoop Loaders (OHSH)は、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の概要

Oracle Shell for Hadoop Loadersを設定するには、『Oracle Big Data SQLインストレーション・ガイド』の手順に従います。

OHSHキットのexamplesディレクトリには、Oracle Shell for Hadoop Loadersを使用してリソースを定義したり、データをロードする多くの例が含まれています。 これらを実行する例および手順の詳細は、<OHSH_KIT>/examples/README.txtを参照してください。

ヘルプの表示

OHSHシェルには、すべてのコマンドのオンライン・ヘルプがあります。

可能なすべてのOHSHコマンドのリストを表示するには、次のコマンドを実行します。

ohsh> help

特定のコマンドのヘルプを表示するには、helpの後にそのコマンドを続けます。

ohsh> help show

次の表に、使用可能なヘルプ・カテゴリを示します。

helpコマンド

説明

help load

OracleおよびHadoopの表に対するloadコマンドを示します。

help set

ロード操作のデフォルト値を設定するためのヘルプを表示します。また、特定の設定により影響を受けるロード・メソッドも示します。

help show

デフォルト設定を調査するためのヘルプを表示します。

help shell

シェルライクなコマンドを表示します。

help resource

指定リソースを作成および削除するためのコマンドを表示します。

3.1.4 Copy to Hadoopを使用した直接コピーの実行

この例では、Oracle Shell for Hadoop Loaders (OHSH)を使用してOracle DatabaseからHadoopへの1ステップの直接コピーを実行する方法を示します。

この例では、OHSHおよびOracle Big Data SQLがインストールされて構成されていることと、OHSHインストールのexamplesディレクトリにあるREADME.txtファイルの説明に従って例が構成されていることを前提としています。例のスクリプトは、OHSHインストールのexamplesディレクトリにあります。

例3-1 createreplace_directcopy.ohsh

このスクリプトでは、createまたはreplaceを使用して、Oracle表のFIVDTIからcp2hadoop_fivdtiというHive表を作成した後、そのHive表に10000行をロードします。directcopyコマンドを使用してマップ・ジョブをHadoopに対して実行し、Oracle表を入力スプリットに分割します。次に、すべてのスプリットが含まれるデータ・ポンプ形式ファイルをHDFSに作成し、データ・ポンプ形式ファイルにマップされるHive外部表を作成します。

create or replace hive table hive0:cp2hadoop_fivdti \
from oracle table olhp:fivdti using directcopy

load_directcopy.ohshスクリプトは、directcopyコマンドを使用して、Hive表にさらに30行をロードする方法を示しています。

load hive table hive0:cp2hadoop_fivdti from oracle table olhp:fivdti \
using directcopy where "(i7 < 30)";

必要に応じて、データはOHSHからParquet形式またはORC形式に変換できます。

%hive0 create table cp2hadoop_fivdti_parquet stored as parquet as select * from cp2hadoop_fivdti

3.1.5 Copy to Hadoopを使用した段階的コピーの実行

次の例に、Oracle Shell for Hadoop Loaders (OHSH)を使用して、Oracle DatabaseからHadoopへの2ステップの段階的コピーを実行する方法を示します。

この例では、OHSHおよびBig Data SQLがインストールされて構成されていることと、OHSHインストールのexamplesディレクトリにあるREADME.txtの説明に従って例が構成されていることを前提としています。次のスクリプトの他、多くのスクリプトもexamplesディレクトリで入手できます。

例3-2 createreplace_stage.ohsh

このスクリプトでは、createまたはreplaceを使用して、Oracle表のFIVDTIからcp2hadoop_fivdtiというHive表を作成します。stageコマンドを使用して、次の手順を自動的に実行します。

1. Oracleのソース表の内容をローカル・ディスク上のデータ・ポンプ形式ファイルにエクスポートします。

2. データ・ポンプ形式ファイルをHDFSに移動します。

3. データ・ポンプ形式ファイルにマップされるHive外部表をHDFSに作成します。

create or replace hive table hive0:cp2hadoop_fivdti \
from oracle table olhp:fivdti using stage

例3-3 load_stage.ohsh

load_stage.ohshスクリプトは、stageコマンドを使用して、Hive表にさらに30行をロードする方法を示しています。

load hive table hive0:cp2hadoop_fivdti from oracle table olhp:fivdti \
using stage where "(i7 < 30)";

手動オプション

createreplace_stage.ohshおよびload_stage.ohshのサンプル・スクリプトで示されている2ステップ方式では、段階的コピーの実行に必要なタスクの一部を自動化します。しかし、手順を手動で実行するには次のような理由があります。

- 複数のOracle Databaseソース表から列をロードするため。

- 型TIMESTAMPTZまたはTIMESTAMPLTZの列をロードするため。

「付録A 段階的コピーにCopy to Hadoopを使用するための手動による手順」を参照してください。

3.1.6 Hiveのデータの問合せ

次のOHSHコマンドは、Oracle表からコピーした後のHive表の行数を表示します。

%hive0 select count(*) from cp2hadoop_fivdti;

3.1.7 列マッピングおよびデータ型変換について

3.1.7.1 列マッピングの概要

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

3.1.7.2 データ型変換について

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

表3-2 Oracleデータ型からHiveデータ型への変換

Oracleデータ型

Hiveデータ型

NUMBER

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

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

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

CLOB

NCLOB

STRING

INTERVALYM

INTERVALDS

STRING

BINARY_DOUBLE

DOUBLE

BINARY_FLOAT

FLOAT

BLOB

BINARY

ROWID

UROWID

BINARY

RAW

BINARY

CHAR

NCHAR

CHAR

VARCHAR2

NVARCHAR2

VARCHAR

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP

TIMESTAMPTZ

TIMESTAMPLTZ脚注 1

サポートなし

脚注1

TIMESTAMPTZおよびTIMESTAMPLTZのデータをHiveにコピーするには、「付録A 段階的コピーにCopy to Hadoopを使用するための手動による手順」の手順を実行します。データ・ポンプ・ファイルにエクスポートする場合は、列をTIMESTAMPに型変換します。

3.1.8 Sparkの使用

Copy to HadoopによってエクスポートされたOracle Data Pumpファイルは、Sparkで使用できます。

Sparkインストールは、Hiveと連携するように構成する必要があります。Copy to Hadoopのjarを指定して、Sparkシェルを起動します。

prompt> spark-shell --jars orahivedp.jar,ojdbc7.jar,oraloader.jar,orai18n.jar,ora-hadoop-common.jar

SparkシェルでsqlContextの型を確認します。

scala> sqlContext
出力は次のようになります。

res0:org.apache.spark.sql.SQLContext = org.apache.spark.sql.hive.HiveContext@66ad7167
デフォルトのsqlContextがHiveContextでない場合は、これを作成します。

scala> val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
複数のOracle Data Pumpファイルに対して1つのHive外部表を指すデータ・フレームdfを作成できるようになります。

scala> val df = sqlContext.table("<hive external table>") <hive external table>:
org.apache.spark.sql.DataFrame = [ <column names> ]
これで、データ・フレームを介してデータにアクセスできます。

scala> df.count
scala> df.head
Hive外部表が作成されておらず、Copy to Hadoopによって作成されたOracle Data Pumpファイルしかない場合、Spark内からHive外部表を作成できます。

scala> sqlContext.sql(“CREATE EXTERNAL TABLE <hive external table> 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/oracle_warehouse/<hive database name>'")

3.1.9 Copy to Hadoopと連携したOracle SQL Developerの使用

Oracle SQL Developerは無償のGUIベースの開発環境で、Copy to Hadoopなど、Oracle Big Data Connectorsを操作するための使いやすいツールを提供します。

Oracle SQL Developerを使用して、データをコピーして新しいHive表を作成したり、またはCopy to Hadoopによって作成された既存のHive外部表にデータを追加したりできます。GUIで、Hiveスキーマの下の「Tables」アイコンを右クリックして、Oracle SQL DeveloperでCopy to Hadoopを起動できます。その後、既存のHive外部表のアイコンを右クリックしてそのHive表を追加できます。

Oracle SQL Developerの入手場所および基本的なインストール方法の手順は、このマニュアルの「Oracle SQL Developerのインストール」を参照してください。

関連項目:
Oracle SQL Developerの完全な詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。

3.2 HDFSへのOracle表領域の格納

Oracle Databaseでは、HDFSに読取り専用の表領域を格納できるようになりました。その結果、有能なBig Data SQL Smart Scanを使用してそのデータを処理できます。これは、読取り専用のデータをHadoopクラスタにアーカイブするための有効な手段となります。

HDFSの表領域内の表、パーティションおよびデータは、元のOracle Database内部形式を維持します。これはデータ・ダンプではありません。Hadoop (または他のNoSQLシステム)のデータにアクセスするための他の手段とは異なり、Oracle外部表を作成する必要はありません。対応するOracle表領域をHDFSにコピーした後、元のOracle表を参照してデータにアクセスします。

永続オンライン表領域(ASM表領域など)は、HDFSへの移動の対象となります。

3.2.1 HDFS内の表領域の利点および制約

HDFSにOracle Database表領域を格納する理由をいくつか次に示します。

- データはOracle Database内部形式のままであるため、リソースを大量消費するデータ型変換がI/Oで不要です。

- 索引付け、ハイブリッド列圧縮、パーティション・プルーニング、Oracle Databaseインメモリーなど、Oracle Databaseのあらゆるパフォーマンス最適化を適用できます。

- Oracleユーザーベースのセキュリティが維持されます。Oracle Data RedactionやASO透過的暗号化などの他のOracle Databaseセキュリティ機能は、有効になっていれば、引き続き有効です。HDFSでは、HDFS透過的暗号化のゾーンに表領域を格納できます。

- 問合せ処理をオフロードできます。Oracle Big Data SQL Smart ScanがHDFSのOracle Database表領域に適用されます。通常、Smart Scanにより、問合せのパフォーマンスを大幅に向上させることができます。Smart Scanを使用すると、問合せ処理のワークロードの多くは、表領域が存在するHadoopクラスタ上のOracle Big Data SQLサーバー・セルにオフロードされます。その後、Smart Scanは、問合せ条件を満たすデータのみが処理のためにデータベース層に返されるように、Hadoopノード上で述語フィルタリングをインプレースで実行して無関係のデータを除外します。データベースに返す前にSmart Scanの述語フィルタリングでデータセットを抜き出せる程度まで、データの移動およびネットワーク・トラフィックが削減されます。

- 表領域内の各表には、管理対象となるただ1つのオブジェクト(Oracle内部表自体)が存在します。Oracle Databaseでアクセス可能となるため、通常HDFSで使用されている他のファイル形式で格納されているデータは、外部表およびビューのオーバーレイを必要とします。

- Oracle内部パーティション化では常にそうであるように、パーティション化された表および索引は、別の表領域内にパーティションを保持でき、その一部はExadataやZFSSAなどのストレージ・デバイスに存在することもできます。この機能により、HDFSは別のストレージ・オプションとして追加されます。

HDFS内のOracle表領域の使用に関しては制約がいくつかあります。HDFSに格納されている全データと同様、HDFSに格納されているOracle Databaseの表、パーティションおよびデータは変更不可能です。更新するには、データを削除して置き換えます。この形式のストレージは、アーカイブを目的としたオフロードの表およびパーティションに最適です。また、OD4Hを除いて、HDFSのOracle表領域内のデータは、Hadoop環境の他のツール(Spark、Oracle Big Data Discovery、Oracle Big Data Spatial and Graphなど)ではアクセスできません。

3.2.2 HDFS内の表領域とデータ暗号化について

HDFS内のOracle Database表領域では、ASO (Oracle Advanced Security)透過的表暗号化の他、HDFS透過的暗号化を使用できます。

Oracle Database ASO暗号化が設定された表領域

Oracle Databaseでは、ASO透過的暗号化を表領域にまたは表領域内のオブジェクトに対して有効にできます。表領域が、その後HDFSに移動された場合でも、この暗号化は維持されます。このデータに対する問合せの場合、CELL_OFFLOAD_DECRYPTION設定により、データの復号をOracle Big Data SQLでするかOracle Databaseでするかが決まります。

- CELL_OFFLOAD_DECRYPTION = TRUEの場合は、暗号化鍵がHadoop内のOracle Big Dataサーバー・セルに送信され、データがセルで復号化されます。

- CELL_OFFLOAD_DECRYPTION = FALSEの場合は、暗号化鍵はセルに送信されないため、セルはTDE復号化を実行できません。データは、復号化のためにOracle Databaseに返されます。

デフォルト値はTRUEです。

注意:
CELL_OFFLOAD_DECRYPTIONがFALSEに設定されている場合、Smart Scanでは、暗号化されたデータを読み取ることができないため、Hadoop側での問合せ結果セットのフィルタリングによってパフォーマンスを向上させることができません。TDE列暗号化では、暗号化された列のみのSmart Scan処理が妨げられます。TDE表領域暗号化では、表領域全体のSmart Scan処理が妨げられます。

HDFS透過的暗号化ゾーン内の表領域

問合せアクセスやSmart Scanのデータ・フィルタリング機能に対して何の影響もなしに、Oracle Database表領域をHDFS透過的暗号化のゾーンに移動できます。

3.2.3 HDFSへの表領域の移動

Oracle Big Data SQLには、Oracle DatabaseからHadoopのHDFSファイル・システムに表領域を移動するためのオプションが2つあります。

- bds-copy-tbs-to-hdfsの使用
スクリプトbds-copy-tbs-to-hdfs.shでは、Oracle Databaseの既存の表領域を選択できます。このスクリプトは、HDFSへの選択した表領域の移動を自動化し、必要なSQL ALTER操作およびデータファイル権限の変更を実行します。表領域が再配置されるDataNodeは、スクリプトによって事前に決定されます。このスクリプトでは、FUSE-DFSを使用して、Oracle DatabaseからHadoopクラスタ内のHDFSファイル・システムにデータファイルを移動します。

bds-copy-tbs-to-hdfs.shは、Oracle Big Data SQLデータベース・バンドルが抽出されたbds-database-installディレクトリにあります。

- HDFSへの表領域の手動による移動
bds-copy-tbs-to-hdfs.shにかわる別の方法として、表領域をHDFSに移動する手順を手動で実行できます。既存の表領域を移動するか、または新しい表領域を作成し、オフロードする表およびパーティションを選択して追加することができます。この場合、FUSE-DFSまたはHDFS NFSゲートウェイ・サービスのいずれかを設定して、データファイルをHDFSに移動できます。

スクリプト化された方法の方が便利です。手動による方法には、柔軟性が多少あります。どちらの方法もサポートされます。

3.2.3.1 bds-copy-tbs-to-hdfsの使用

Oracle Databaseサーバーでは、スクリプトbds-copy-tbs-to-hdfs.shを使用し、Oracle表領域を選択してHDFSに移動できます。このスクリプトは、Oracle Big Data SQLのインストール時に、データベース・インストール・バンドルから抽出したbds-database-installディレクトリにあります。

構文

bds-copy-tbs-to-hdfs.shの構文は、次のとおりです。

bds-copy-tbs-to-hdfs.sh
bds-copy-tbs-to-hdfs.sh --install
bds-copy-tbs-to-hdfs.sh --tablespace=<tablespace name> [-pdb=<pluggable database name>]
bds-copy-tbs-to-hdfs.sh --list=<tablespace name> [--pdb=<pluggable database name>]
bds-copy-tbs-to-hdfs.sh --show=<tablespace name> [--pdb=<pluggable database name>]

表3-3 bds-copy-tbs-to-hdfsのパラメータ・オプション

パラメータ・リスト

説明

パラメータなし

FUSE-DFSステータスを返します。

--install

FUSE-DFSサービスをインストールします。サービスがすでにインストールされている場合、アクションは実行されません。

--tablespace=<tablespace name> [--pdb=<pluggable database name>]

HadoopクラスタのHDFS内のストレージに、指定されたPDB内の指定された表領域を移動します。PDBが存在しない場合は、--pdb引数は破棄されます。

--list=<tablespace name> [--pdb=<pluggable database name>

指定された名前と等しいまたは指定された名前が含まれる名前の表領域をリストします。--pdbパラメータは、オプションのスコープです。--list=*は、すべての表領域を返します。--pdb=*は、すべてのPDB内の表領域の名前で一致するものを返します。

--show=<tablespace name> [--pdb=<pluggable database name>

名前が指定された名前と等しいまたは指定された名前を含むもので、すでにHDFSに移動された表領域を表示します。--pdbパラメータは、オプションのスコープです。--show=*は、すべての表領域を返します。--pdb=*は、すべてのPDB内の表領域の名前で一致するものを返します。

使用方法

次のようにbds-copy-tbs-to-hdfs.shを使用して表領域をHDFSに移動します。

1. oracle Linuxユーザーとしてログオンし、ディレクトリをデータベース・バンドルが抽出されたbds-database-installディレクトリに変更します。このディレクトリでbds-copy-tbs-to-hdfs.shを見つけます。

2. FUSE-DFSがインストールされていることを確認します。

$ ./bds-copy-tbs-to-hdfs.sh

3. FUSE-DFSサービスをインストールします(前述の確認で見つからなかった場合)。このコマンドは、FUSE-DFSサービスも起動します。

$ ./bds-copy-tbs-to-hdfs.sh --install

このスクリプトでマウント・ポイントが検出されない場合は、2番目のスクリプトが起動します。要求されたら、このスクリプトをrootとして実行します。HDFSマウントを設定します。2番目のスクリプトは別のセッションで実行でき、必要に応じてこのセッションに戻れます。

RACデータベースの場合: 「Install FUSE_DFS on All Nodes」:

RACデータベースでは、スクリプトによってデータベースのその他のノードにFUSE-DFSをインストールするように求められます。

4. 選択したPDBまたはすべてのPDB内の対象となる表領域のリストを作成します。表領域の名前と場所がすでにわかっている場合は、この手順をスキップできます。

$ ./bds-copy-tbs-to-hdfs.sh --list=mytablesapce --pdb=pdb1

5. リストから表領域を選択した後、oracleとしてbds-copy-tbs-to-hdfs.shを再実行しますが、今回は、--tablespaceパラメータ(および指定した場合は--pdbパラメータ)を渡します。スクリプトにより、表領域がHDFSファイル・システムに移動します。

$ ./bds-copy-tbs-to-hdfs.sh --tablespace=mytablespace --pdb=pdb1

このコマンドにより、HDFS内の表領域が自動的にSmart Scanの対象となります。SQLでこれを実行するには、表領域の定義で"hdfs:"接頭辞をデータファイル名に追加します。名前の変更により、データベース制御ファイル内のポインタが変更されます。物理ファイル名は変更されません。

RACデータベースの場合: 「Replicate Symlinks to Mountpoints on All Nodes」:

bds-copy-tbs-to-hdfs.shを実行しているデータベース・ノード上で、対応するFUSE-DFSマウントポイントを指すデータファイルのsymlinkが$ORACLE_HOME/dbs/hdfs:<cluster name>内に作成されます。ただし、スクリプトでこれが行われるのはローカル・ノード上でのみです。データベースの各ノード上で同じsymlinkを手動で設定する必要があります。

たとえば、データベースが3つのノードで構成され、Node1上でbds-copy-tbs-to-hdfs.shを実行する場合、コピー操作の各データファイルに対して、スクリプトによってNode上のマウントポイントへのsymlinkが作成されます。この例では、データファイルは1つのみです。

$ ls -l $ORACLE_HOME/dbs/hdfs:<cluster>/<path to datafile>/<datafile name>
$ORACLE_HOME/dbs/hdfs:<cluster>/<path to datafile>/<datafile name> -> /mnt/fuse-<cluster>-hdfs/user/oracle/<path to datafile>/<datafile name>

Node2およびNode3上にマウントポイントが存在することが分かります(FUSE-DFSがインストールされている場合)。

$ ls -l /mnt/fuse-<cluster>-hdfs/user/oracle/<path to datafile>/<datafile name>
$ /mnt/fuse-<cluster>-hdfs/user/oracle/<path to datafile>/<datafile name>

しかし、bds-copy-tbs-to-hdfs.shではこれらの他のノード上にマウントポイントへのsymlinkが作成されず、ユーザーが手動でそれらを追加する必要があります。

$ ln -s /mnt/fuse-<cluster>-hdfs/user/oracle/<path to datafile>/<datafile name> $ORACLE_HOME/dbs/hdfs:<cluster>/<path to datafile>/<datafile name>

この手順を完了した後、表領域はオンラインに戻り、アクセスできるようになります。

3.2.3.2 HDFSへの表領域の手動による移動

bds-copy-tbs-to-hdfs.shにかわる別の方法として、次の手動による手順を使用してOracle表領域をHDFSに移動できます。

注意:
ASM表領域の場合、まず、RMANまたはASMCMDを使用して表領域をファイルシステムにコピーする必要があります。

Oracle Big Data SQLにはFUSE-DFSが組み込まれており、ここでの説明ではFUSE-DFSを使用してHDFSファイル・システムに接続します。かわりにHDFS NFSゲートウェイ・サービスを使用することもできます。Hadoopディストリビューション用のドキュメントには、その方法に関する説明が記載されています。

次の手順はすべてOracle Databaseサーバーで実行します。Linuxシェル・コマンドはすべてrootとして実行します。SQLコマンドの場合は、oracleユーザーとしてOracle Databaseにログオンします。

1. FUSE-DFSをインストールしていない、または起動していない場合は、bds-copy-tbs-to-hdfs.sh --installを実行します。このスクリプトにより、FUSE-DFSが(まだインストールされていない場合は)インストールされた後、起動します。
スクリプトでは、マウント・ポイント/mnt/fuse-<clustername>-hdfsが自動的に作成されます。

注意:
スクリプトbds-copy-tbs-to-hdfs.shと互換性があるのは、FUSE-DFS 2.8のみです。

2. SQLで、CREATE TABLESPACEを使用して表領域を作成します。それをローカルの.dbfファイルに格納します。移入後、そのファイルをHadoopクラスタに移動します。単一のbigfile表領域をお薦めします。
次に例を示します。

SQL> CREATE TABLESPACE movie_cold_hdfs DATAFILE '/u01/app/oracle/oradata/cdb/orcl/movie_cold_hdfs1.dbf' SIZE 100M reuse AUTOEXTEND ON nologging;

3. MOVE句を指定したALTER TABLEを使用して表領域にオブジェクトを移動します。
次に例を示します。

SQL> ALTER TABLE movie_fact MOVE PARTITION 2010_JAN TABLESPACE movie_cold_hdfs ONLINE UPDATE INDEXES;

オブジェクトの現在のステータスをチェックし、変更を確認する必要があります。その場合、どの表領域にパーティションが属しているかを確認します。

SQL> SELECT table_name, partition_name, tablespace_name FROM user_tab_partitions WHERE table_name='MOVIE_FACT';

4. 表領域を読取り専用にして、オフラインにします。

SQL> ALTER TABLESPACE movie_cold_hdfs READ ONLY;
SQL> ALTER TABLESPACE movie_cold_hdfs OFFLINE;

5. データファイルをHDFSにコピーしてから、ファイル権限を読取り専用に変更します。

hadoop fs -put /u01/app/oracle/oradata/cdb/orcl/movie_cold_hdfs1.dbf /user/oracle/tablespaces/
hadoop fs –chmod 440 /user/oracle/tablespaces/movie_cold_hdfs1.dbf

Oracle Big Data SQLの一般的なセキュリティ上の措置として、適切なHDFSファイル権限を適用して不正な読取り/書込みアクセスを防止します。

hadoop fsコマンドを実行する前に、$ORACLE_HOME/bigdatasql/hadoop_<clustername>.envをソーシングする必要がある場合があります。

それにかわる方法として、LINUX cpコマンドを使用してファイルをFUSEにコピーできます。

6. RENAME DATAFILE句を指定したALTER TABLESPACE文を使用して、データファイルの名前を変更します。

重要:
次のSQLの例のファイル・パスに対する"hdfs:"接頭辞に注目してください。これは、ファイルをスキャンする必要があることをSmart Scanに指示するキーワードです。また、Smart Scanでは、ファイルが読取り専用である必要があります。クラスタ名はオプションです。
また、下のSQL文を実行する前に、ディレクトリ$ORACLE_HOME/dbs/hdfs:<clustername>/user/oracle/tablespacesに/mnt/fuse-<clustername>-hdfs/user/oracle/tablespaces/movie_cold_hdfs1.dbfを指す、ソフト・リンクmovie_cold_hdfs1.dbfが含まれている必要があります。

SQL> ALTER TABLESPACE movie_cold_hdfs RENAME DATAFILE '/u01/app/oracle/oradata/cdb/orcl/movie_cold_hdfs1.dbf' TO 'hdfs:<clustername>/user/oracle/tablespaces/movie_cold_hdfs1.dbf';

データファイルの名前を変更すると、データベース制御ファイルのポインタのみが変更されます。この手順では、物理的にデータファイルの名前を変更しません。

表領域は単一のクラスタ上に存在する必要があります。データファイルが複数存在する場合、これらは同じクラスタを指す必要があります。

7. 表領域をオンラインに戻してテストします。

SQL> ALTER TABLESPACE movie_cold_hdfs ONLINE;
SQL> SELECT avg(rating) FROM movie_fact;

完全なコード例を次に示します。ここでは、3つのパーティションをOracle Databaseのローカル・ストレージからHDFS内の表領域に移動します。

mount hdfs
select * from dba_tablespaces;

CREATE TABLESPACE movie_cold_hdfs DATAFILE '/u01/app/oracle/oradata/cdb/orcl/movie_cold_hdfs1.dbf' SIZE 100M reuse AUTOEXTEND ON nologging;

ALTER TABLE movie_fact
MOVE PARTITION 2010_JAN TABLESPACE movie_cold_hdfs ONLINE UPDATE INDEXES;
ALTER TABLE movie_fact
MOVE PARTITION 2010_FEB TABLESPACE movie_cold_hdfs ONLINE UPDATE INDEXES;
ALTER TABLE movie_fact
MOVE PARTITION 2010_MAR TABLESPACE movie_cold_hdfs ONLINE UPDATE INDEXES;

-- Check for the changes
SELECT table_name, partition_name, tablespace_name FROM user_tab_partitions WHERE table_name='MOVIE_FACT';

ALTER TABLESPACE movie_cold_hdfs READ ONLY;
ALTER TABLESPACE movie_cold_hdfs OFFLINE;

hadoop fs -put /u01/app/oracle/oradata/cdb/orcl/movie_cold_hdfs1.dbf /user/oracle/tablespaces/
hadoop fs –chmod 444 /user/oracle/tablespaces/ movie_cold_hdfs1.dbf

ALTER TABLESPACE movie_cold_hdfs RENAME DATAFILE '/u01/app/oracle/oradata/cdb/orcl/movie_cold_hdfs1.dbf' TO 'hdfs:hadoop_cl_1/user/oracle/tablespaces/movie_cold_hdfs1.dbf';
ALTER TABLESPACE movie_cold_hdfs ONLINE;

-- Test
select avg(rating) from movie_fact;

3.2.4 HDFS内の表領域に対するSmart Scan

Smart Scanは、データが存在する場所に処理を移行するOracleパフォーマンス最適化です。Big Data SQLでは、Smart Scanによって"hdfs:"接頭辞がパスに含まれるデータファイルが検索されます。この接頭辞は、データファイルがスキャンの対象となることを示すキーです。

表領域データをHDFSおよび表領域に移動してデータファイルのパスの先頭に"hdfs:"タグを付けると、そのようなファイル内のデータにアクセスする問合せでは、デフォルトでBig Data SQL Smart Scanを利用します。Big Data SQL Smart Scanのパフォーマンス最適化がすべて適用されます。これにより、ストレージ層からデータベース層に移動されるデータ量が大幅に削減されます。このようなパフォーマンス最適化には、次のものがあります。

- Hadoopクラスタの超並列処理能力を利用してソースでデータをフィルタリングします。

- ストレージ索引を利用して、スキャンされるデータ量を削減できます。

- データ・マイニング・スコアリングをオフロードできます。

- 暗号化されたデータのスキャンをオフロードできます。

Smart Scanの無効化または有効化

初期化パラメータ_CELL_OFFLOAD_HYBRID_PROCESSINGにより、Smart Scan for HDFSが有効か無効を判別します。デフォルトは有効です。

HDFS内の表領域に対してSmart Scanを無効にするには、次の手順を実行します。

1. initまたはパラメータ・ファイルでパラメータをFALSEに設定します。

_CELL_OFFLOAD_HYBRID_PROCESSING=FALSE

アンダースコア接頭辞は、このパラメータ名に必要です。

2. Oracle Databaseインスタンスを再起動します。

SQLでALTER SYSTEMディレクティブを使用して、この変更を動的に実行することもできます。その場合、再起動は必要ありません。

SQL> alter system set _cell_offload_hybrid_processing=false;

Smart Scanを無効にする理由の1つに、Oracle表領域データファイルをHDFSから移動して、元の場所に戻す必要がある場合があります。

_CELL_OFFLOAD_HYBRID_PROCESSINGをTRUEに再設定すると、Smart Scanを再度有効にできます。

注意:
_CELL_OFFLOAD_HYBRID_PROCESSINGをFALSEに設定すると、Smart ScanはHDFS内に存在するOracle表領域に対して無効になります。

4 Oracle Big Data SQLリファレンス

この章には、Oracle Big Data SQLのリファレンス情報が含まれています。

- DBMS_HADOOP PL/SQLパッケージ

- CREATE TABLE ACCESS PARAMETERS句

- Hiveの静的データ・ディクショナリ・ビュー

4.1 DBMS_HADOOP PL/SQLパッケージ

DBMS_HADOOPパッケージには、Hive表のCREATE EXTERNAL TABLE DDLを生成するための関数が含まれています。

- CREATE_EXTDDL_FOR_HIVE

4.1.1 CREATE_EXTDDL_FOR_HIVE

この関数は、Hive表のSQL CREATE TABLE ORGANIZATION EXTERNAL文を返します。ORACLE_HIVEアクセス・ドライバを使用します。

構文

DBMS_HADOOP.CREATE_EXTDDL_FOR_HIVE (
cluster_id        IN    VARCHAR2,
db_name           IN    VARCHAR2   := NULL,
hive_table_name   IN    VARCHAR2,
hive_partition    IN    BOOLEAN,
table_name        IN    VARCHAR2   := NULL,
perform_ddl       IN    BOOLEAN    DEFAULT FALSE,
text_of_ddl       OUT   VARCHAR2
);

パラメータ

表4-1 CREATE_EXTDDL_FOR_HIVE関数のパラメータ

パラメータ

説明

cluster_id

HiveメタストアがあるHadoopクラスタ

db_name

Hiveデータベースの名前

hive_table_name

Hive表の名前

hive_partition

表がパーティション化されている(TRUE)かされていない(FALSE)か

table_name

作成されるOracle外部表の名前。すでに存在する名前にはできません。

perform_ddl

生成されたCREATE TABLE文を実行する(TRUE)か、コマンドのテキストを返すのみ(FALSE)か。

コマンドを確認または変更する場合は、コマンドを自動的に実行しないでください。

text_of_ddl

生成されたCREATE TABLE ORGANIZATION EXTERNAL文。

使用上の注意

Oracle DatabaseシステムはOracle Big Data SQL用に構成する必要があります。「データベース・サーバー(Oracle Exadata Machineなど)上のOracle Big Data SQLについて」を参照してください。

データ型変換は、Hiveデータ型とOracleデータ型の間のデフォルトのマッピングに基づいています。「データ型変換について」を参照してください。

4.1.1.1 例

次の問合せは、デフォルトのHiveデータベースからmy_hive_tableのCREATE EXTERNAL TABLE DDLを返します。Hiveへの接続は、ORACLE_BIGDATA_CONFIGディレクトリ内の構成ファイルを使用して確立されます。これは、HADOOP1クラスタの場所を識別します。

DECLARE
DDLtxt VARCHAR2(4000);
BEGIN
dbms_hadoop.create_extddl_for_hive(
CLUSTER_ID=>'hadoop1',
DB_NAME=>'default',
HIVE_TABLE_NAME=>'my_hive_table',
HIVE_PARTITION=>FALSE,
TABLE_NAME=>'my_xt_oracle',
PERFORM_DDL=>FALSE,
TEXT_OF_DDL=>DDLtxt
);
dbms_output.put_line(DDLtxt);
END;
/

問合せは、次のSQLコマンドのテキストを返します。

CREATE TABLE my_xt_oracle
(
c0 VARCHAR2(4000),
c1 VARCHAR2(4000),
c2 VARCHAR2(4000),
c3 VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE
DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS (
com.oracle.bigdata.cluster=hadoop1
com.oracle.bigdata.tablename=default.my_hive_table
)
)
PARALLEL 2 REJECT LIMIT UNLIMITED

4.2 CREATE TABLE ACCESS PARAMETERS句

この項では、ORACLE_HDFSまたはORACLE_HIVEアクセス・ドライバを使用する外部表を作成するときに使用するプロパティについて説明します。CREATE TABLE ORGANIZATION EXTERNAL文で、ACCESS PARAMETERSのopaque_format_spec句にパラメータを指定します。

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

- プロパティを指定するための構文ルール

- ORACLE_HDFSアクセス・パラメータ

- ORACLE_HIVEアクセス・パラメータ

- プロパティのアルファベット順リスト

4.2.1 プロパティを指定するための構文ルール

プロパティは、SQLのCREATE TABLE ACCESS PARAMETERS句および構成ファイルのキーワード/値のペアを使用して設定されます。構文は次のルールに従う必要があります。

- 各キーワード/値のペアの形式は、キーワード、コロンまたは等号および値です。次に有効なキーワード/値のペアを示します。

keyword=value
keyword:value

値は、セパレータの後の最初の非空白文字から行末まですべてです。セパレータと値の間の空白は無視されます。値の後の空白は保持されます。

- プロパティ定義は1行または複数行になります。

- 行の終了文字は、行フィード、キャリッジ・リターンまたはキャリッジ・リターンの後に続く行フィードです。

- プロパティ定義が複数行にまたがる場合は、行の終了文字の前にバックスラッシュ(エスケープ文字)を付けますが、最終行には付けません。この例では、Keyword1プロパティの値はValue part 1 Value part 2 Value part 3です。

Keyword1=  Value part 1 \
Value part 2 \
Value part 3

- 先頭の空白の各物理行を削除して行を連結することで、論理行を作成できます。パーサーは、論理行からプロパティ名および値を抽出します。

- 文字の前に代入を示すバックスラッシュ(エスケープ文字)を付けることで、プロパティ名またはプロパティ値に特殊文字を埋め込むことができます。表4-2に特殊文字を示します。

表4-2 プロパティの特殊文字

エスケープ順序

文字

\b

バックスペース(\u0008)

\t

水平タブ(\u0009)

\n

行フィード(\u000a)

\f

フォーム・フィード(\u000c)

\r

キャリッジ・リターン(\u000d)

\"

二重引用符(\u0022)

\'

一重引用符(\u0027)

\\

バックスラッシュ(\u005c)

複数のバックスラッシュが行末にある場合、パーサーは奇数のバックスラッシュに対してのみ値を次の行に継続します。

\uxxxx

2バイト、ビッグ・エンディアン、Unicodeコード・ポイント。

1文字に2コード・ポイント(4バイト)が必要な場合、パーサーは2番目のコード・ポイントに\uを要求します。

4.2.2 ORACLE_HDFSアクセス・パラメータ

ORACLE_HDFSアクセス・ドライバのアクセス・パラメータは、HDFS内のデータを特定するのに必要なメタデータを提供し、Hive表を作成します。

4.2.2.1 ORACLE_HDFSのデフォルトのパラメータ設定

CREATE TABLE文からすべてのアクセス・パラメータを省略した場合、ORACLE_HDFSは次のデフォルト値を使用します。

com.oracle.bigdata.rowformat=DELIMITED
com.oracle.bigdata.fileformat=TEXTFILE
com.oracle.bigdata.overflow={"action":"error"}
com.oracle.bigdata.erroropt={"action":"setnull"}

4.2.2.2 ORACLE_HDFSのオプションのパラメータ設定

ORACLE_HDFSは、次のオプションのcom.oracle.bigdataパラメータをサポートしています。このパラメータは、opaque_format_spec句で指定できます。

- com.oracle.bigdata.colmap

- com.oracle.bigdata.erroropt

- com.oracle.bigdata.fields

- com.oracle.bigdata.fileformat

- com.oracle.bigdata.log.exec

- com.oracle.bigdata.log.qc

- com.oracle.bigdata.overflow

- com.oracle.bigdata.rowformat

例4-1に、複数のアクセス・パラメータが設定されているCREATE TABLE文を示します。

例4-1 ORACLE_HDFSの複数のアクセス・パラメータの設定

CREATE TABLE ORDER (CUST_NUM VARCHAR2(10),
ORDER_NUM VARCHAR2(20),
ORDER_DATE DATE,
ITEM_CNT NUMBER,
DESCRIPTION VARCHAR2(100),
ORDER_TOTAL (NUMBER8,2)) ORGANIZATION EXTERNAL
(TYPE ORACLE_HDFS
ACCESS PARAMETERS (
com.oracle.bigdata.fields: (CUST_NUM,              \
ORDER_NUM,             \
ORDER_DATE,            \
ORDER_LINE_ITEM_COUNT, \
DESCRIPTION,           \
ORDER_TOTAL)
com.oracle.bigdata.colMap:     {"col":"item_cnt", \
"field":"order_line_item_count"}
com.oracle.bigdata.overflow:   {"action":"TRUNCATE", \
"col":"DESCRIPTION"}
com.oracle.bigdata.errorOpt:  [{"action":"replace", \
"value":"INVALID NUM", \
"col":["CUST_NUM","ORDER_NUM"]} , \
{"action":"reject", \
"col":"ORDER_TOTAL}]
)
LOCATION ("hdfs:/usr/cust/summary/*"));

4.2.3 ORACLE_HIVEアクセス・パラメータ

ORACLE_HIVEは、Hiveカタログから外部データ・ソースに関するメタデータを取得します。通常、外部データ表の列へのHiveデータのデフォルト・マッピングは適切です。ただし、状況によっては、特殊なパラメータ設定が必要です。独自の理由でデフォルト値を上書きする場合もあります。

4.2.3.1 ORACLE_HIVEのデフォルトのパラメータ設定

CREATE TABLE文からすべてのアクセス・パラメータを省略した場合、ORACLE_HIVEは次のデフォルト値を使用します。

com.oracle.bigdata.tablename=name of external table
com.oracle.bigdata.overflow={"action":"error"}
com.oracle.bigdata.erroropt={"action":"setnull"}

4.2.3.2 ORACLE_HIVEのオプションのパラメータ値

ORACLE_HIVEは、次のオプションのcom.oracle.bigdataパラメータをサポートしています。このパラメータは、opaque_format_spec句で指定できます。

- com.oracle.bigdata.colmap

- com.oracle.bigdata.erroropt

- com.oracle.bigdata.log.exec

- com.oracle.bigdata.log.qc

- com.oracle.bigdata.overflow

- com.oracle.bigdata.tablename

例4-2に、複数のアクセス・パラメータが設定されているCREATE TABLE文を示します。

例4-2 ORACLE_HIVEの複数のアクセス・パラメータの設定

CREATE TABLE ORDER (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_date DATE,
item_cnt NUMBER,
description VARCHAR2(100),
order_total (NUMBER8,2)) ORGANIZATION EXTERNAL
(TYPE oracle_hive
ACCESS PARAMETERS (
com.oracle.bigdata.tableName:  order_db.order_summary
com.oracle.bigdata.colMap:     {"col":"ITEM_CNT", \
"field":"order_line_item_count"}
com.oracle.bigdata.overflow:   {"action":"ERROR", \
"col":"DESCRIPTION"}
com.oracle.bigdata.errorOpt:   [{"action":"replace", \
"value":"INV_NUM" , \
"col":["CUST_NUM","ORDER_NUM"]} ,\
{"action":"reject", \
"col":"ORDER_TOTAL}]
));

4.2.4 com.oracle.bigdata.buffersize

大きいレコード読取りのバッファ・サイズをKBで設定します。デフォルトのバッファ・サイズよりも大きいレコードを読み取る必要がある場合にこの値を設定します。

デフォルト値

1000 KB

構文

com.oracle.bigdata.buffersize: n

例

次の例ではバッファ・サイズを100 MBに設定します。

com.oracle.bigdata.buffersize: 100000

4.2.5 com.oracle.bigdata.colmap

ソース・データの列をOracle外部表の列にマップします。１つまたは複数の列マッピングのペアを定義できます。ソース・フィールド名がOracle列名の最大長を超える場合、または外部表で別の列名を使用する場合、このプロパティを使用します。

デフォルト値

Hive列と同じ名前を持つ外部表の列

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

colmap:

colmap_entry:

セマンティクス

"col":name

"col": キーワードは小文字を使用して、引用符で囲む必要があります。

name: Oracle外部表の列の名前。大/小文字を区別し、引用符で囲む必要があります。

"field":name

"field": キーワードは小文字を使用して、引用符で囲む必要があります。

name: データ・ソースのフィールドの名前。大/小文字は区別しませんが、引用符で囲む必要があります。「プロパティを指定するための構文ルール」を参照してください。

例

この例は、ORDER_LINE_ITEM_COUNTという名前のHive列をITEM_CNTという名前のOracle列にマップします。

com.oracle.bigdata.colMap={"col":"ITEM_CNT", \
"field":"order_line_item_count"}

次の例は、複数の列のマッピングを示しています。

com.oracle.bigdata.colmap:[{"col":"KOL1", "field":"PROJECT_NAME"},{ "col":"KOL2","field":"wsdl_name"},{"col":"KOL3", "field":"method"}]

4.2.6 com.oracle.bigdata.datamode

SmartScanがHadoopデータ・ソースをスキャンするために使用する方法を指定します。方法によって、パフォーマンスに大きな違いが生じる可能性があります。

デフォルト値

automatic

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

datamode:

セマンティクス

automatic

メタデータに基づいて適切なモードを自動的に選択します。可能な場合はcモードを選択します。データにcモードでサポートされていない形式が含まれる場合は、javaモードを選択します。

c

ファイル・バッファを読み取る場合はJavaを使用しますが、データを処理してOracle形式に変換する場合はCコードを使用します。デリミタ付きデータにこのモードを指定します。

データにCコードでサポートされていない形式が含まれる場合は、エラーが返されます。

java

データを処理してOracle形式に変換する場合は、Java SerDesおよびInputFormatsを使用します。Parquet、RCFileおよびSerDeを必要とする他のデータ形式にこのモードを指定します。

4.2.7 com.oracle.bigdata.erroropt

列の値の計算中に発生するエラーを処理する方法を示します。

デフォルト値

{"action":"setnull"}

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

erroropt:

error_element:

セマンティクス

"action"、"reject"、"setnull"、"replace"、"value"および"col"キーワードは小文字を使用して、引用符で囲む必要があります。「プロパティを指定するための構文ルール」を参照してください。

"action":value

value: 次のキーワードのいずれかになります。

- "reject": 行をロードしません。

- "setnull": 列をNULLに設定します。

- "replace": 列を指定された値に設定します。

"value":string

string: 外部表の不正な値を置換します。引用符で囲む必要があります。

"col":name

name: 外部表の列を識別します。列名は大/小文字を区別し、引用符で囲む必要があります。リストできるのは1回のみです。

例

この例では、Hive値によってエラーが発生した場合、CUST_NUMまたはORDER_NUM列の値をINVALIDに設定します。その他の列では、エラーによってHive値が拒否されます。

com.oracle.bigdata.errorOpt: {"action":"replace",\
"value":"INVALID", \
"col":["CUST_NUM","ORDER_NUM"]

4.2.8 com.oracle.bigdata.fields

データ・ソースのフィールド名およびデータ型をリストします。

デフォルト値

未定義

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

fields:

data_type:

primitive_type:

セマンティクス

構文は、Hive表のフィールド・リストと同じです。フィールド・リストを複数行に分割する場合、バックスラッシュを使用して改行文字をエスケープする必要があります。

field_name

Hiveフィールドの名前。英数字およびアンダースコア(_)のみ使用します。最大長は128文字です。フィールド名は大/小文字を区別します。

data_type

Hiveフィールドのデータ型。オプション。デフォルトはSTRINGです。文字セットはUTF8である必要があります。

データ型は複合またはプリミティブになります。

Hive複合データ型

- ARRAY: 索引付け可能なリスト

- MAP: キー値のタプル

- STRUCT: 要素のリスト

- UNIONTYPE: 複数のデータ型

Hiveプリミティブ・データ型

- INT: 4バイトの整数

- BIGINT: 8バイトの整数

- SMALLINT: 2バイトの整数

- TINYINT: 1バイトの整数

- BOOLEAN: TRUEまたはFALSE

- FLOAT: 単精度

- DOUBLE: 倍精度

- STRING: 文字列

関連項目:

Apache Hive Language Manualのデータ型に関する項を参照してください。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

COMMENT col_comment

一重引用符で囲まれた文字列リテラル。Hive表のメタデータとして格納されます(TBLPROPERTIESのcommentプロパティ)。

4.2.9 com.oracle.bigdata.fileformat

ORACLE_HDFSによって生成されたHive表のROW FORMAT句に基づいて、データ・ソースの行形式を説明します。

デフォルト値

TEXTFILE

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

fileformat:

セマンティクス

ORC

最適化された行カラムナ・ファイル形式

PARQUET

列指向、バイナリ・ファイル形式

RCFILE

レコード・カラムナ・ファイル形式

SEQUENCEFILE

圧縮ファイル形式

TEXTFILE

プレーン・テキスト・ファイル形式

INPUTFORMAT

データ・ファイルからレコードを抽出できるJavaクラスを識別します。

OUTPUTFORMAT

出力レコードを目的の形式に設定できるJavaクラスを識別します。

4.2.10 com.oracle.bigdata.log.exec

アクセス・ドライバがCDH上の並列プロセスとして実行されている場合、問合せのCコードによって生成されたログ・ファイルを生成する方法を指定します。

アクセス・ドライバはHadoopクラスタ・ノード上で実行されている場合、ログ・ファイルの作成または書込みを行いません。並列問合せプロセスがログ・ファイルを書き込みます。Javaコードからのログ・ファイルはlog4jプロパティによって制御されます。このプロパティは、構成ファイルまたはアクセス・パラメータで指定されます。「bigdata-log4j.properties」を参照してください。

デフォルト値

未定義(ロギングなし)

構文

[directory_object:]file_name_template

セマンティクス

directory_object

ログ・ファイルが作成されるHadoopクラスタ上のHDFSパスのOracleディレクトリ・オブジェクト。

file_name_template

ファイル名の生成に使用する文字列。表4-2に、テンプレートで使用できるオプションの変数を示します。

表4-3 com.oracle.bigdata.log.execの変数

変数

値

%p

オペレーティング・システム・プロセス識別子(PID)

%a

プロセスを一意に識別する番号。

%%

パーセント記号(%)

例

次の例では、PIDおよび一意の番号を含むログ・ファイル名(xtlogp_hive14_3413_57など)を生成します。

com.oracle.bigdata.log.exec= xtlogp_hive14_%p_%a

4.2.11 com.oracle.bigdata.log.qc

アクセス・ドライバが問合せのログ・ファイルを生成する方法を指定します。

デフォルト値

未定義(ロギングなし)

構文

[directory_object:]file_name_template

セマンティクス

directory_object

ログ・ファイルが書き込まれるパスを指すOracleディレクトリ・オブジェクトの名前。この値を省略すると、ログは外部表のデフォルト・ディレクトリに書き込まれます。

file_name_template

ファイル名の生成に使用する文字列。表4-4に、文字列で使用できるオプションの変数を示します。

表4-4 com.oracle.bigdata.log.qcの変数

変数

値

%p

オペレーティング・システム・プロセス識別子(PID)

%%

パーセント記号(%)

例

この例では、PIDおよびパーセント記号を含むログ・ファイル名(xtlogp_hive213459_%など)を作成します。

com.oracle.bigdata.log.qc= xtlogp_hive21%p_%%

4.2.12 com.oracle.bigdata.overflow

外部表の列には長すぎる文字列データの処理方法を示します。データ・ソースは文字またはバイナリになります。Hiveの場合、データ・ソースはSTRUCT、UNIONTYPES、MAPまたはARRAYにすることもできます。

デフォルト値

{"action":"error"}

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

overflow ::=

overflow_element ::=

セマンティクス

"action"、"truncate"、"error"および"col"タグは小文字を使用して、引用符で囲む必要があります。「プロパティを指定するための構文ルール」を参照してください。

"action":value

"action"の値は次のキーワードのいずれかになります。

- truncate: 列に収まるようにデータを短くします。

- error: エラーをスローします。com.oracle.bigdata.erroroptプロパティは、エラーの結果を制御します。

"col":name

name: 外部表の列を識別します。名前は大/小文字を区別し、引用符で囲む必要があります。

例

この例では、DESCRIPTION列のソース・データが列幅を超える場合、ソース・データを切り捨てます。

com.oracle.bigdata.overflow={"action":"truncate", \
"col":"DESCRIPTION"}

4.2.13 com.oracle.bigdata.rowformat

アクセス・ドライバがファイル内のレコードからフィールドを抽出するために必要な情報を提供します。

重要:
com.oracle.bigdata.rowformatは、"type ORACLE_LOADER"を使用する従来の外部表のアクセス・パラメータ構文とは無関係です。FIELDS、TERMINATEDなどのキーワードもあれば、両方の句に現れるキーワードもありますが、ネーミングにおける共通性は偶然であり、共通機能を意味するものではありません。com.oracle.bigdata.rowformatアクセス・パラメータは、デフォルトのHive SerDeに対する変更なしに渡されます。行から列を抽出するHive SerDeは意図的に制限されます。複雑な場合は、専用のSerDesによって処理されます。

デフォルト値

DELIMITED

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

rowformat:

セマンティクス

DELIMITED

レコード内のフィールドを区切るために使用する文字を示します。

- FIELDS TERMINATED BY: レコード内の各フィールドを区切る文字。オプションのESCAPED BY文字は、フィールド値内に表示される場合、デリミタ文字の前に付けます。

- COLLECTION ITEMS TERMINATED BY: 配列要素の終了を示す文字。列がコレクションまたはネストされたレコードの場合に使用します。その場合、結果の値はJSON配列になります。

- MAP KEYS TERMINATED BY: MAPフィールドのエントリの終了を示す文字。列がコレクションまたはネストされたレコードの場合に使用します。結果の値はJSONオブジェクトです。

- LINES TERMINATED BY: レコードの終了を示す文字。

- NULL DEFINED AS: null値を示す文字。

SERDE

アクセス・ドライバが必要とするSerDeのデータおよびプロパティを解析できるSerDeを識別します。

例

この例では、Avroコンテナ・ファイルにSerDeを指定します。

com.oracle.bigdata.rowformat:
SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe'

次の例では、正規表現を含むファイルのSerDeを指定します。

com.oracle.bigdata.rowformat=\
SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' \
WITH SERDEPROPERTIES \
("input.regex" = "(\\\\d{6}) (\\\\d{5}) (.{29}) .*")

4.2.14 com.oracle.bigdata.tablename

ソース・データを含むHive表を識別します。

デフォルト値

DEFAULT.external_table_name

構文

[hive_database_name.]table_name

セマンティクス

hive_database_nameおよびtable_nameの最大長は128 UTF-8文字(512バイト)です。

hive_database_name

ソース・データが存在するHiveデータベース。DEFAULTはHive初期データベースの名前です。

table_name

データを含むHive表。table_nameを省略した場合、ORACLE_HIVEは外部表と同じ名前のHive表を検索します。表名は大/小文字を区別します。

例

この設定は、ソース・データがHiveのORDER_DBデータベース内のORDER_SUMMARYという表にあることを示します。

com.oracle.bigdata.tablename ORDER_DB.ORDER_SUMMARY

4.3 Hiveの静的データ・ディクショナリ・ビュー

Oracle Databaseカタログには、Hive表の複数の静的データ・ディクショナリ・ビューが含まれています。これらのデータ・ディクショナリ・ビューを問い合せて、アクセスできるHive表に関する情報を検出できます。

Oracle DatabaseからHiveデータベースにアクセスする場合、ORACLE_BIGDATA_CONFIGディレクトリ・オブジェクトの読取りアクセス権が必要です。

- ALL_HIVE_DATABASES

- ALL_HIVE_TABLES

- ALL_HIVE_COLUMNS

- DBA_HIVE_DATABASES

- DBA_HIVE_TABLES

- DBA_HIVE_COLUMNS

- USER_HIVE_DATABASES

- USER_HIVE_TABLES

- USER_HIVE_COLUMNS

4.3.1 ALL_HIVE_DATABASES

ALL_HIVE_DATABASESは、現在のユーザーにアクセスできるHiveメタストア内のすべてのデータベースを示します。

関連ビュー

- DBA_HIVE_DATABASESは、Hiveメタストア内のすべてのデータベースを示します。

- USER_HIVE_DATABASESは、現在のユーザーが所有するHiveメタストア内のデータベースを示します。

列

データ型

NULL

説明

CLUSTER_ID

VARCHAR2(4000)

NOT NULL

HiveメタストアがあるHadoopクラスタ

DATABASE_NAME

VARCHAR2(4000)

NOT NULL

Hiveデータベース名

DESCRIPTION

VARCHAR2(4000)

Hiveデータベースの説明

DB_LOCATION

VARCHAR2(4000)

NOT NULL

HIVE_URI

VARCHAR2(4000)

HiveデータベースのURI

関連項目:

- 「DBA_HIVE_DATABASES」

- 「USER_HIVE_DATABASES」

4.3.2 ALL_HIVE_TABLES

ALL_HIVE_TABLESは、現在のユーザーにアクセスできるHiveメタストア内のすべての表を示します。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連ビュー

- DBA_HIVE_TABLESは、Hiveメタストア内のすべての表を示します。

- USER_HIVE_TABLESは、Hiveメタストア内の現在のユーザーが所有するデータベースの表を示します。

列

データ型

NULL

説明

CLUSTER_ID

VARCHAR2(4000)

NOT NULL

HiveメタストアがあるHadoopクラスタ

DATABASE_NAME

VARCHAR2(4000)

NOT NULL

Hiveデータベースの名前

TABLE_NAME

VARCHAR2(4000)

NOT NULL

Hive表の名前

LOCATION

VARCHAR2(4000)

NO_OF_COLS

NUMBER

Hive表内の列の数

CREATION_TIME

DATE

表が作成された時刻

LAST_ACCESSED_TIME

DATE

最新のアクセス時刻

OWNER

VARCHAR2(4000)

Hive表の所有者

TABLE_TYPE

VARCHAR2(4000)

NOT NULL

Hive表のタイプ(外部、管理対象など)

PARTITIONED

VARCHAR2(4000)

表がパーティション化されている(YES)かされていない(NO)か

NO_OF_PART_KEYS

NUMBER

パーティションの数

INPUT_FORMAT

VARCHAR2(4000)

入力形式

OUTPUT_FORMAT

VARCHAR2(4000)

出力形式

SERIALIZATION

VARCHAR2(4000)

SerDeシリアル化情報

COMPRESSED

NUMBER

表が圧縮されている(YES)かされていない(NO)か

HIVE_URI

VARCHAR2(4000)

HiveデータベースのURI

関連項目:

- 「DBA_HIVE_TABLES」

- 「USER_HIVE_TABLES」

4.3.3 ALL_HIVE_COLUMNS

ALL_HIVE_COLUMNSは、現在のユーザーにアクセスできるすべてのHive表の列を示します。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連ビュー

- DBA_HIVE_COLUMNSは、Hiveメタストア内のすべての表の列を示します。

- USER_HIVE_COLUMNSは、現在のユーザーが所有するHiveデータベースの表の列を示します。

列

データ型

NULL

説明

CLUSTER_ID

VARCHAR2(4000)

NOT NULL

HiveメタストアがあるHadoopクラスタ

DATABASE_NAME

VARCHAR2(4000)

NOT NULL

Hiveデータベースの名前。空白の場合は、デフォルト・データベース

TABLE_NAME

VARCHAR2(4000)

NOT NULL

Hive表の名前

COLUMN_NAME

VARCHAR2(4000)

NOT NULL

Hive列の名前

HIVE_COLUMN_TYPE

VARCHAR2(4000)

NOT NULL

Hive列のデータ型

ORACLE_COLUMN_TYPE

VARCHAR2(4000)

NOT NULL

Hiveデータ型と同等のOracleデータ型

LOCATION

VARCHAR2(4000)

OWNER

VARCHAR2(4000)

Hive表の所有者

CREATION_TIME

DATE

表が作成された時刻

HIVE_URI

VARCHAR2(4000)

HiveデータベースのURI

関連項目:

- 「DBA_HIVE_COLUMNS」

- 「USER_HIVE_COLUMNS」

4.3.4 DBA_HIVE_DATABASES

DBA_HIVE_DATABASESは、Hiveメタストア内のすべてのデータベースを示します。列はALL_HIVE_DATABASESの列と同じです。

関連項目:

「ALL_HIVE_DATABASES」

4.3.5 DBA_HIVE_TABLES

DBA_HIVE_TABLESは、Hiveメタストア内のすべての表を示します。列はALL_HIVE_TABLESの列と同じです。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。「bigdata_configディレクトリについて」を参照してください。

関連項目:

「ALL_HIVE_TABLES」

4.3.6 DBA_HIVE_COLUMNS

DBA_HIVE_COLUMNSは、Hiveメタストア内のすべての表の列を示します。列はALL_HIVE_COLUMNSの列と同じです。

関連項目:

「ALL_HIVE_COLUMNS」

4.3.7 USER_HIVE_DATABASES

USER_HIVE_DATABASESは、現在のユーザーが所有するHiveメタストア内のデータベースを示します。列(OWNERを除く)はALL_HIVE_DATABASESの列と同じです。

関連項目:

「ALL_HIVE_DATABASES」

4.3.8 USER_HIVE_TABLES

USER_HIVE_TABLESは、Hiveメタストア内の現在のユーザーが所有するデータベースの表を示します。列(OWNERを除く)はALL_HIVE_TABLESの列と同じです。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連項目:

「ALL_HIVE_TABLES」

4.3.9 USER_HIVE_COLUMNS

USER_HIVE_COLUMNSは、現在のユーザーが所有するHiveデータベースの表の列を示します。列(OWNERを除く)はALL_HIVE_COLUMNSの列と同じです。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連項目:

「ALL_HIVE_COLUMNS」

付録

A 段階的コピーにCopy to Hadoopを使用するための手動による手順

Copy to Hadoopを使用してOracle DatabaseからHadoopにデータを手動でコピーするには、次の手順を実行します。

1. Oracle Databaseサーバーで、Oracle Databaseに接続し、表データおよびメタデータを含むデータ・ポンプ形式ファイルを生成します。
「データ・ポンプ・ファイルの生成」を参照してください

2. ファイルをHadoopクラスタ上のHDFSにコピーします。
「HDFSへのファイルのコピー」を参照してください。

3. Apache Hiveに接続して、ファイルから外部表を作成します。
「Hive表の作成」を参照してください。

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

A.1 データ・ポンプ・ファイルの生成

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

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

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

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

- CREATE TABLE構文について

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

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

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

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

A.1.2 ターゲット・ディレクトリの識別

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

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

SQL> CREATE DIRECTORY exportdir AS '/exportdir';

A.1.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ユーティリティ』

A.2 HDFSへのファイルのコピー

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

A.3 Hive表の作成

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

関連項目:

次のApache Hive LanguageManual DDL

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/Drop/TruncateTable

A.3.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'

A.4 サンプル・スキーマの使用例

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

A.4.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サンプル・スキーマを参照してください。

A.4.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.

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

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

Copy to Hadoopでは、例に示す構文しかサポートされません。エクスポート・ユーティリティまたはOracle Data Pumpで作成されるデータ・ポンプ・ファイルとの互換性はありません。

A.4.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;

A.4.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;

A.4.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

A.4.5 Hadoopへのファイルのコピー

次のコマンドはローカル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

A.4.6 Hive外部表の作成

この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

B 直接コピーでのCopy to Hadoopの使用

直接コピー・オプションを設定したCopy to Hadoopでは、Oracle Database表からHDFS内に格納されているOracle Data Pumpファイルにデータが直接コピーされます。

データベース・サーバー上に中間ストレージを必要としないため、Copy to Hadoopによってデータ・コピーが簡略化されます。コピーされたデータにアクセスするためのHive外部表の作成やHive問合せの実行など、Hadoopエコシステムでデータにアクセスできるようにするために必要な残りの手順は、両方のコピー・オプション(段階的と直接)に共通します

この項の対象読者は、専門的な要件を備えたHadoopのパワー・ユーザーです。その他すべてのユーザーは、Copy to Hadoopの操作にOracle Shell for Hadoop Loader (OHSH) CLIを使用してください。「Oracle Shell for Hadoop LoadersのCopy to Hadoopとの使用」を参照してください。

B.1 直接コピーにCopy to Hadoopを使用するための手動による手順

次の手順を実行します。

はじめに

1. まず、Copy to Hadoopがインストールおよび構成されていることを確認します。

2. ユーザー・アカウントにデータベース表をコピーするのに十分な権限があることを確認します。(「Copy to Hadoopの表アクセス要件」を参照してください。)

3. 表にサポートされている列型が含まれていることを確認します。(「列マッピングおよびデータ型変換について」を参照してください。)

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

5. ソース・クラスタに接続している場合は、『Oracle Big Data Applianceソフトウェア・ユーザーズ・ガイド』の説明に従って、kinitを実行してユーザーを認証します。

6. 直接コピーを使用してCopy To Hadoopジョブを実行します。次の「Copy To Hadoopジョブの実行(直接コピーの使用)」を参照してください。

7. ジョブが正常終了したら、HDFS内の出力ディレクトリの_ctohサブディレクトリ内にあるjobReport.logファイルを確認します。ログ・ファイルに表示されたRowCountがデータベース表の行数と一致していることを確認します。

8. Apache Hiveに接続して、データ・ポンプ・ファイルから外部表を作成します。(「Hive表の作成」を参照してください。)

Copy To Hadoopジョブの実行(直接コピーの使用)

1. Copy to Hadoopで必要となる環境変数を設定します。
Copy to Hadoopのインストール・ディレクトリを探し、CP2HADOOP_HOME Bashシェル変数を設定します。次に例を示します。

# export CP2HADOOP_HOME=”/opt/oracle/orahivedp-3.1.0”

Copy to HadoopのJARをHADOOP_CLASSPATHに追加します。次に例を示します。

# export HADOOP_CLASSPATH="${CP2HADOOP_HOME}/jlib/*:${HADOOP_CLASSPATH}"

ヒント:
Copy to Hadoopを使用する際は、常にまず$CP2HADOOP_HOME/jlib/*をHADOOP_CLASSPATHにリストする必要があります。または、それを使用するスクリプト内に適切な順序のHADOOP_CLASSPATHを定義することで、JARの競合を避けることができます。

2. ジョブを実行します。
コマンドの構文は次のとおりです。

# hadoop jar ${CP2HADOOP_HOME}/jlib/orahivedp.jar oracle.hadoop.ctoh.CtohDriver \
[-D <configuration-property>=<configuration-value>]+

例1: Oracleウォレットを使用したセキュアなクラスタでのジョブの実行

# hadoop jar ${CP2HADOOP_HOME}/jlib/orahivedp.jar oracle.hadoop.ctoh.CtohDriver \
-D oracle.hadoop.ctoh.connection.tnsEntry=<my-oracle-tns-entry> \
-D oracle.hadoop.ctoh.connection.walletLoc=<local-oracle-wallet-dir> \
-D oracle.hadoop.ctoh.connection.tnsAdmin=<local-oracle-wallet-dir> \
-D oracle.hadoop.ctoh.connection.clusterWalletLoc=<oracle-wallet-dir-on-hadoop-cluster> \
-D oracle.hadoop.ctoh.connection.clusterTnsAdmin=<oracle-wallet-dir-on-hadoop-cluster> \
-D mapreduce.output.fileoutputformat.outputdir=<mytab-hdfs-output-dir> \
-D oracle.hadoop.ctoh.splitterType="BLOCK_SPLITTER" \
-D oracle.hadoop.ctoh.table=<dbSchema.dbTable> \
-D oracle.hadoop.ctoh.maxSplits=10

例2: 保護されていないHadoopクラスタでのジョブの実行(デモ専用)

# hadoop jar ${CP2HADOOP_HOME}/jlib/orahivedp.jar oracle.hadoop.ctoh.CtohDriver \
-D oracle.hadoop.ctoh.jdbc.url="jdbc:oracle:thin:@myhost:1521/myservice" \
-D oracle.hadoop.ctoh.connection.username="myuser" \
-D oracle.hadoop.ctoh.connection.password="mypassword" \
-D mapreduce.output.fileoutputformat.outputdir="mytable_output_dir" \
-D oracle.hadoop.ctoh.splitterType="BLOCK_SPLITTER" \
-D oracle.hadoop.ctoh.table="otherUser.mytable" \
-D oracle.hadoop.ctoh.maxSplits=10

パフォーマンス・チューニングのヒント

Copy to Hadoopジョブの並列度を制御するには、oracle.hadoop.ctoh.maxSplitsプロパティを使用してマップ・プロセスの数を指定します。マップ・プロセス数が多いほど、並列度が高くなります。各プロセスがデータベースに接続するため、この値によってデータベースへの同時接続数も決まります。通常、64などの数値が適しています。

必須の構成プロパティ

これらのプロパティとその他のプロパティの詳細は、構成プロパティ・リファレンスの項を参照してください。

- oracle.hadoop.ctoh.table

- mapreduce.output.fileoutputformat.outputdir

- oracle.hadoop.ctoh.maxSplits

- oracle.hadoop.ctoh.splitterType

Oracleウォレットを使用しているセキュアなHadoopクラスタの接続プロパティ:

- oracle.hadoop.ctoh.connection.walletLoc

- oracle.hadoop.ctoh.connection.tnsAdmin

- oracle.hadoop.ctoh.connection.tnsEntry

- Hadoopクラスタ上のOracleウォレット・ディレクトリがHadoopクライアント上のディレクトリとは異なる場合は、次のプロパティも必須です。

- oracle.hadoop.ctoh.connection.clusterWalletLoc

- oracle.hadoop.ctoh.connection.clusterTnsAdmin

保護されていないHadoopクラスタ用の接続プロパティ(デモ専用)

デモ目的の場合は、保護されているクラスタで使用されるプロパティのかわりに、次のプロパティを使用します。

- oracle.hadoop.ctoh.connection.username

- oracle.hadoop.ctoh.connection.password

- oracle.hadoop.ctoh.jdbc.url

Copy to Hadoopを使用した増分コピー

同じOracle表からHDFS内の既存の宛先ディレクトリへデータの増分コピーを実行するには、さらに次のプロパティが必須です。(この構成では、最初にCopy To Hadoopジョブを実行してOracle Database表からHDFSディレクトリ内のデータ・ポンプ・ファイルにデータをコピーしたことを前提としています。)

- oracle.hadoop.ctoh.whereClause

- oracle.hadoop.ctoh.datapump.output

- oracle.hadoop.ctoh.datapump.basename

oracle.hadoop.ctoh.datapump.outputでは、Copy To Hadoopの前の実行によるデータ・ポンプ・ファイルが格納されている既存のHDFSの場所を指定します。

oracle.hadoop.ctoh.whereClauseでは、増分ロード用にOracle表からコピーする行のサブセットを指定します。

oracle.hadoop.ctoh.datapump.basenameでは、データ・ポンプ・ファイルの一意の接頭辞を指定します。このプロパティは、増分ロード時にファイル名の衝突が発生しないように一意のデータ・ポンプ・ファイル名を生成するために使用されます。

B.2 Copy to Hadoopプロパティ・リファレンス

このリファレンスでは、Copy to Hadoopの顧客によるアクセスが可能なプロパティについて説明します。

Copy to Hadoop構成プロパティ・リファレンス(直接コピー用)

プロパティ

説明

oracle.hadoop.ctoh.home

型: String

デフォルト値: CP2HADOOP_HOME環境変数の値。

説明: この構成プロパティは、Copy to Hadoopジョブに必要なJARを探すのに使用されます。

oracle.hadoop.ctoh.table

型: String

デフォルト値: なし。

説明: 内容をデータ・ポンプ・ファイルとしてHdoopにコピーするデータベース表の名前。修飾したスキーマでもかまいません。たとえば、スキーマMANAGERの表EMPLOYEEを指定するには、MANAGER.EMPLOYEEを使用できます。

mapreduce.output.fileoutputformat.outputdir

型: String

デフォルト値: なし。

説明: Hadoopジョブによってデータ・ポンプ・ファイルが作成される出力ディレクトリの名前。ジョブ出力ログも_ctohサブディレクトリに格納されます。

oracle.hadoop.ctoh.datapump.output

型: String

デフォルト値: なし。

説明: データ・ポンプ・ファイルの宛先ディレクトリを指定します。このプロパティを指定しない場合、データ・ポンプ・ファイルは、mapreduce.output.fileoutputformat.outputdirプロパティで指定したディレクトリに格納されます。

oracle.hadoop.ctoh.datapump.basename

型: String。

デフォルト値: dppart

説明: 生成されたデータ・ポンプ・ファイルの接頭辞またはベース名。たとえば、このプロパティを"dp_tbl"と指定した場合、生成されるデータ・ポンプ・ファイルはdp_tbl-m-00000.dmpとなります。

oracle.hadoop.ctoh.datapump.extension

型:

デフォルト値: dmp

説明: 生成されたデータ・ポンプ・ファイルの接尾辞。たとえば、このプロパティを".dp"と指定した場合、生成されるデータ・ポンプ・ファイルはdppart—m-00000.dpとなります。

oracle.hadoop.ctoh.maxSplits

型: Integer。

デフォルト値: なし。

説明: Hadoopジョブによって作成されるデータ・ポンプ・ファイルの数。これは、Hadoopジョブによって生成されるマッパーの数でもあります。

oracle.hadoop.ctoh.splitterType

型:

デフォルト値: なし。

説明: 表データの分割に使用するスプリッタのタイプ。

- BLOCK_SPLITTER: このスプリッタはブロック範囲に表を分割します。

- ROW_SPLITTER: このスプリッタは行範囲に表を分割します。

- PARTITION_SPLITTER: 表がパーティション化されている場合、パーティション・スプリッタを使用できます。このスプリッタを指定すると、Hadoopジョブによって作成されるデータ・ポンプ・ファイルの数は最大で表のパーティション数となります。

oracle.hadoop.ctoh.columns

型:

デフォルト値: なし。

説明: コピー対象の列のサブセットを指定します。たとえば、"NAME,MANAGER"と指定した場合、NAME列とMANAGER列のデータがコピーされます。このプロパティを指定しない場合は、すべての列が(WHERE句でフィルタリングされないかぎり)コピーされます。

oracle.hadoop.ctoh.whereClause

型: String。

デフォルト値: なし。

説明: このプロパティは、行のサブセットをコピーするのに使用されます。たとえば、IDが1000より小さく500より大きい従業員をコピーするには、次のWHERE句を指定します: EMPLOYEE_ID < 1000 AND EMPLOYEE_ID > 500。

oracle.hadoop.ctoh.jdbc.url

型: String。

デフォルト値: なし。

説明: データベースに接続するためのJDBC URL。このプロパティは、デモ目的とセキュアでないクラスタに使用できます。本番環境のセキュアなHadoopクラスタでは、Oracleウォレットを使用します。

oracle.hadoop.ctoh.connection.username

型: String。

デフォルト値: なし。

説明: Oracle Databaseユーザーの名前。このプロパティは、デモ目的とセキュアでないクラスタに使用できます。本番環境のセキュアなHadoopクラスタでは、Oracleウォレットを使用します。

oracle.hadoop.ctoh.connection.password

型: String。

デフォルト値: なし。

説明: Oracle Databaseユーザーのパスワード。このプロパティは、デモ目的とセキュアでないクラスタに使用できます。本番環境のセキュアなHadoopクラスタでは、Oracleウォレットを使用します。

oracle.hadoop.ctoh.connection.walletLoc

型: String。

デフォルト値: なし。

説明: Hadoopクライアント上のOracleウォレット・ディレクトリの場所。

Oracleウォレットを使用する場合、次のプロパティも設定する必要があります。

- oracle.hadoop.ctoh.connection.tnsAdmin

- oracle.hadoop.ctoh.connection.tnsEntry

oracle.hadoop.ctoh.connection.clusterWalletLoc

型:

デフォルト値: oracle.hadoop.ctoh.connection.walletLocの値。

説明: Hadoopクラスタ上のOracleウォレット・ディレクトリの場所。注意: このディレクトリは、Hadoopクラスタ内のすべてのノードから見える必要があります。このプロパティを使用する場合、次のプロパティも設定する必要があります。

- oracle.hadoop.ctoh.connection.clusterTnsAdmin

- oracle.hadoop.ctoh.connection.tnsEntry

oracle.hadoop.ctoh.connection.tnsAdmin

型: String。

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

説明: sqlnet.oraやtnsnames.oraなどのSQL*Net構成ファイルが格納されている、Hadoopクライアント上のディレクトリの場所。データベース接続文字列でTNSエントリ名を使用できるようにこのプロパティを設定します。Oracleウォレットを使用する場合、このプロパティ値はoracle.hadoop.ctoh.connection.walletLocプロパティの値と同じでもかまいません。

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

oracle.hadoop.ctoh.connection.clusterTnsAdmin

型: String。

デフォルト値: プロパティoracle.hadoop.ctoh.connection.tnsAdminの値。

説明: sqlnet.oraやtnsnames.oraなどのSQL*Net構成ファイルが格納されている、Hadoopクラスタ上のディレクトリの場所。注意: このディレクトリは、Hadoopクラスタ内のすべてのノードから見える必要があります。

データベース接続文字列でTNSエントリ名を使用できるようにこのプロパティを設定します。Oracleウォレットを使用する場合、このプロパティ値はoracle.hadoop.ctoh.connection.clusterWalletLocの値と同じでもかまいません。

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

oracle.hadoop.ctoh.connection.tnsEntry

型: String。

デフォルト値: なし。

説明: tnsnames.oraファイルに定義されたTNSエントリ名。このプロパティは、oracle.hadoop.ctoh.connection.tnsAdminとともに使用します。Oracleウォレットを使用する場合は、必ずtnsEntry名とウォレット資格証明を一致させます。

oracle.hadoop.ctoh.cachePath

型: String。

デフォルト値: ${mapreduce.output.fileoutputformat.outputdir}/../ctohCache

説明: MapReduceの分散キャッシュにロードされるファイルをCopy to Hadoopが作成できるHDFSディレクトリのフル・パスを指定します。この分散キャッシュは、大規模なアプリケーション固有ファイルをキャッシュし、クラスタ内のノード間に効率的に分散する機能です。

C 診断のヒントおよび詳細

Oracle Big Data SQLのトラブルシューティングと一般的な理解に役立つ注意事項をまとめたものを次に示します。

C.1 bdscheckswによる診断の実行

Oracle Databaseサーバーで、Big Data SQL診断データ収集ツールbdscheckswを使用して、Oracle Big Data SQLの簡単なサニティ・テストを実行できます。このスクリプトでは、Oracle DatabaseとHadoopクラスタの両側からOracle Big Data SQLインストールに関する診断情報を収集して分析します。このスクリプトは、$ORACLE_HOME/binにあります。

構文

bdschecksw Required_Params [Options]

次の表では、bdscheckswで使用する必須およびオプションのパラメータについて説明します。

表C-1 bdscheckswのパラメータ

パラメータ

説明

必須またはオプション

-h, --help

コマンド・ヘルプを表示して終了します。

オプション

-d, --dbhome ORACLE_HOME

Oracle Databaseサーバー上のOracleインストールへのパス。

bdscheckswが実行されるOracle DatabaseサーバーでORACLE_HOME環境変数が定義されていない場合のみ必須。

-s, --sid=[ORACLE_SID]

Oracle DatabaseサーバーのSID。

bdscheckswが実行されるOracle DatabaseサーバーでORACLE_SID環境変数が定義されていない場合のみ必須。

-g, --gihome=Grid_Infrastructure_home Oracle_Database_node_IP_address

Oracle Databaseサーバー上のグリッド・インフラストラクチャのパス。

bdscheckswが実行されるOracle DatabaseサーバーでGI_HOME環境変数が定義されていない場合のみ必須。

-q, --sqlplus Oracle_Database_node_IP_address username

Oracle DatabaseサーバーのSQLPlusユーザー名。ユーザーは、パスワードを要求されます。

必須。

-c, --cell DNS short name [...n]

Hadoopクラスタ・セル・ノード。DNS短縮名(FQDNからドメイン名を除いたもの)をデリミタの空白とともに使用します。1つのノードが複数のネットワークに存在することもあるため、IPアドレスは使用しないでください。

Hortonworks HDPの場合のみ、必須です。

-u, --uname Hadoop_cluster_node_username

Oracle DatabaseサーバーからHadoopクラスタに対してリモート・コマンドを実行するための資格証明。これは通常、oracleユーザーです。

ユーザー名およびパスワードは常に必須です。

-p,--pdb=PDB_CONTAINER

Oracle Databaseサーバーのプラガブル・データベースのコンテナ名。

プラガブル・データベース(PDB)コンテナが、bdscheckswが実行されるOracle Databaseサーバーで構成されている場合にのみ必要です。

-k, --key SSH_identity_key_file

SSH (セキュア・シェル)鍵ファイルへのパス。

-uおよび-pに加えてオプションのSSHアイデンティティ(または鍵)ファイルを使用し、公開鍵認証のアイデンティティ(秘密鍵)の読取り元となるファイルを選択します。

-r, --cluster Hadoop_cluster_name

Hadoopクラスタ名。

オプション。

-t, --trace

テストの実行中に、extprocおよびlog4jトレーシングを有効にします。

オプション。

-f, --file=file_path

出力をファイルにリダイレクトします。

オプション。

-i, --interactive

対話形式で(一度に全部ではなく)コマンドライン引数を入力します。

オプション。

-v, --verbose

冗長レポート・モード。

オプション。(レポートでの完全詳細の場合に推奨。)

終了ステータス

bdscheckswスクリプトは、次のステータス・コードのいずれかを戻します。

表C-2 bdscheckswのステータス・コード

ステータス

説明

0

成功

1

軽微な問題(対話型モードでの応答なしなど)。

2

重大な問題(無効なコマンドライン引数など)。

例

$ ./bdschecksw -d /u03/app/oracle/product/12.1.0/dbhome_1 -s orcl -p pdborcl -g /u03/app/oracle/product/12.1.0/grid -q sys -u oracle -v

C.2 クイック・テストの実行方法

Oracle Big Data SQLが機能していることを確認するための一連の基本チェックを次に示します。

1. Oracle Databaseサーバーで、$ORACLE_HOME/bigdatasqlのhadoop_<hcluster>.envファイルを使用して、環境をソーシングします。

2. Kerberosが有効になっている場合、oracle LinuxユーザーとしてOracle Databaseサーバーに対してkinitを実行します。また、可能な場合は、oracleユーザーとして各Big Data SQLデータノードに対してkinitを実行します。

注意:
データノードに対してkinitを実行しなくてもこのテストは実行できますが、テストでのオフロードは機能しません。オフロードが機能していることを確認するために、最終的にはデータノードに対してkinitを実行する必要があります。

3. テキスト・ファイルを作成して複数行のランダム・テキストを追加します。

4. テキスト・ファイルをHDFSに/user/oracle/test.txtとしてコピーします。

$ hadoop fs -put test.txt /user/oracle/test.txt

5. ORACLE_HDFS型のOracle外部表を定義します。

a. CREATE TABLE bds_test (line VARCHAR2(4000))
ORGANIZATION EXTERNAL
( TYPE ORACLE_HDFS DEFAULT DIRECTORY DEFAULT_DIR LOCATION ('/user/oracle/test.txt') )
REJECT LIMIT UNLIMITED;

b. Select * from bds_test;

c. select n.name, s.value /* , s.inst_id, s.sid */ from v$statname n, gv$mystat s where n.name like '%XT%' and s.statistic# = n.statistic#;

6. Hive表を定義します。

a. HueまたはHive/Beelineコマンドライン経由で、あるいはOracle SQL DeveloperをHive JDBCドライバとともに使用してHiveに接続します。

b. CREATE TABLE bds_test_hive (line string);

c. LOAD DATA INPATH '/user/oracle/test.txt' OVERWRITE INTO TABLE bds_test_hive;

7. 外部表ORACLE_HIVEを定義します。

CREATE TABLE bds_test_hive (line VARCHAR2(4000))
ORGANIZATION EXTERNAL
( TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(com.oracle.bigdata.tablename=default.bds_test_hive)
)
REJECT LIMIT UNLIMITED;

C.3 Oracle Big Data SQLのデータベース・オブジェクト

表C-3 Big Data SQLのデータベース・オブジェクト

タイプ

オブジェクト

ディレクトリ

- DEFAULT_DIR: $ORACLE_HOME/bigdatasql/default_dirを指します。

- ORACLE_BIGDATA_CONFIG: $ORACLE_HOME/bigdatasql/bigdata_configを指します。

- ORA_BIGDATA_CL_<hcluster>: パスの値をnullとする必要があります。
これはアクセスを制限する方法です。外部表に関連付けられたディレクトリ・オブジェクトが常に存在する必要があります。ディレクトリ・オブジェクトは権限チェックに使用されるため、ディレクトリ下にファイルが存在しないHive/HDFSの場合でも、これは必要条件です。

データベース・リンク(パブリック)

これらにより、Big Data SQLはMTA(マルチスレッド・エージェント)にアクセスできるようになります。

- BDSQL$_DEFAULT_CLUSTER: 接続文字列のSIDは、bds_<dbname>_<hcluster>とする必要があります。また、<hcluster>は、$ORACLE_HOME/bigdatasql/bigdata_config /bigdata.propertiesのデフォルト・クラスタ(bigdata.cluster.defaultによって定義)である必要があります。

- BDSQL$_<hcluster>: 接続文字列のSIDは、bds_<dbname>_<hcluster>とする必要があります。

データ・ディクショナリ・ビュー

- User_hive_tables, all_hive_tables, dba_hive_tables: 全Hadoopクラスタの全Hiveデータベースの全Hive表を問い合せます。

- User_hive_databases, all_hive_databases, dba_hive_databases: 全Hadoopクラスタの全Hiveデータベースを問い合せます。

- User_hive_columns, all_hive_columns, dba_hive_columns: 全Hadoopクラスタの全Hiveデータベースの全Hive表を問い合せます。

- V$cell: データノードで実行中のOracle Big Data SQLサーバー・プロセスがここに表示されます(diskmonによって適切に検出された場合)。

Hiveデータ・ディクショナリのファンクションおよびプロシージャ

「 cathive.sql」、「dbmshadp.sql」を参照してください。

- DBMS_HADOOP

- Create_extddl_for_hive()

- GetHiveTable: extproc外部プロシージャからデータを戻すパイプライン・ファンクション。*_hive_[tables/databases/columns]ビューおよびDBMS_HADOOPで使用されます。

- HiveMetadata: 外部プロシージャGetHiveTableを定義しているODCIフレームワーク。

- SYS.DBMSHADOOPLIB (libkubsagt12.so): 外部プロシージャのCライブラリ。

- HiveMetadata.jar: libkubsagt12.soによってコールされるJavaライブラリ。

表

SYS.HIVE_URI$: DBA以外のユーザー用のセキュリティ表。

統計

- すべての統計の名前には%XT%が含まれます。

- cell XT granules requested for predicate offload

- cell XT granule bytes requested for predicate offload

- cell interconnect bytes returned by XT smart scan

- cell XT granule predicate offload retries

- cell XT granule IO bytes saved by storage index

- 次の問合せを使用します。

select n.name, s.value /* , s.inst_id, s.sid */ from v$statname n, v$mystat s
where n.name like '%XT%' and s.statistic# = n.statistic# ;

必要な場合は、grant select any catalog to <dbuser>;も使用します。

C.4 その他のデータベース側のアーティファクト

表C-4 $ORACLE_HOME/bigdatasqlディレクトリ

サブディレクトリまたはファイル名

内容の説明

bigdata_configディレクトリ

- bigdata.properties: JARファイルの場所を定義します。Hive表で標準以外のJavaライブラリを使用している場合は、そのようなライブラリをデータベースにコピーし、このファイルのclasspathエントリを更新する必要があります。また、Hadoopクラスタ・リストおよびデフォルト・クラスタも定義します。変更後にextprocbds_<dbname>_<hcluster>を再起動します。

- bigdata-log4j.properties: 外部表の問合せのメタデータ検出フェーズやセルが使用不可の場合の問合せフェッチ・フェーズなど、Java部分のロギングを制御します。詳しくログを記録するには、log4j.logger.oracle.hadoop.sqlをINFOに変更します。変更後にextprocbds_<dbname>_<hcluster>を再起動します。

- <hcluster>ディレクトリ: Hadoopクラスタからコピーされたクライアント構成ファイル(hive-site.xmlなど)が格納されます。

default_dirディレクトリ

通常、このディレクトリは空です。

logディレクトリ

2タイプのextprocからのJavaログ・ファイルが格納されます。ファイル名の一部であるPIDを使用して、探しているextprocを特定します(1つのログ・ファイルのみが現在実行中のextprocbds_ <dbname>_<hcluster>プロセスのPIDを保有します)。

hadoop_<hcluster>.env

このファイルをソーシングしてからhadoop fsコマンドを実行して、Hadoop接続を短時間でテストできます。

表C-5 外部プロシージャ・エージェント

エージェント

説明

extproc

*_hive_tablesビュー、*_hive_databasesビューおよびDBMS_HADOOPプロシージャで使用される外部プロシージャ・コードを実行します。

$ORACLE_HOME/hs/admin/extproc.oraにより、extprocは構成されます。TRACE_LEVEL=ONを追加して、より詳細なトレースを取得できます(ただし、場合によっては先にSET EXTPROC_DLLS=をコメント・アウトして「Error in assignment statement」メッセージを修正する必要があります)。C部分のログ・ファイルは$ORACLE_HOME/hs/log/orcl_agt*にありますが、これらは通常、診断目的で関心を引くものではありません。JVM部分のログ・ファイルは$ORACLE_HOME/bigdatasql/logに書き込まれます(ただし、先にbigdata-log4j.propertiesを設定する必要があります)。

extprocbds_<dbname>_<hcluster>

外部表を問い合せる際に使用されるBDSマルチスレッド・エージェント。これは、Oracle Clusterwareによって起動/停止されますが、mtactlユーティリティを実行します。これは、bds_exa_install.shが最後のデータベース・サーバー・ノードで実行されると、Oracle Clusterwareに登録されます。

このextprocbds_<dbname>_<hcluster>が実行されていない場合は、RACクラスタ内のすべてのデータベース・サーバーでbds_exa_install.shを実行しなかった可能性が高いです。C部分のログ・ファイルは、$ORACLE_HOME/hs/logにあります(ただし、ロギングを確認するには、$ORACLE_HOME/hs/admin/initbdsを編集してTRACE_LEVEL=ONを追加した後、再起動する必要があります)。JVM部分のログ・ファイルは、$ORACLE_HOME/bigdatasql/logに格納されます(ただし、bigdata-log4j.propertiesを設定して再起動する必要があります)。再起動するには、(プロセスでkill -9を実行する方が手早い方法ですが)次に示す方法をお薦めします。

$ crsctl stop resource bds_<dbname>_<hcluster>
$ crsctl start resource bds_<dbname>_<hcluster>

注意:
前述の表の外部プロシージャはいずれも、データベースへのコールバックを実行しますが、これは、セキュアな外部パスワード・ストア機能を使用することでブロックできます。セキュアな外部パスワード・ストア(SQLNET.WALLET_OVERRIDE=TRUE)を使用する場合は、My Oracle Supportでドキュメント2126903.1を参照してください。

表C-6 ログ・ファイルとトレース・ファイル

ディレクトリまたはファイル名

説明

$ORACLE_HOME/bigdatasql/log

extprocbds_<dbname>_<hcluster>によって実行されたJavaコードからのログ・ファイル、すなわち、PIDがextprocbds_<dbname>_<hcluster> PIDと同じ共有ファイルが1つとextproc (セッションで*_hive_tablesまたはDBMS_HADOOPが使用されている場合、セッションごとに1つ)が格納されます。ヒント: これは、有用な診断情報です。

$ORACLE_HOME/hs/log

extprocプロセス(セッションごとに1つ)およびextbds_<dbname>_<hcluster>マルチスレッド・プロセスのCコードからのログ・ファイルが格納されます。exprocは通常、診断目的で関心を引くものではありません。extprocbds_*には、もう少し興味深い情報が含まれます(ただし、initbds_*.oraでTRACE_LEVEL=ONを設定する必要があります)。

データベースのdiagディレクトリ

データベース・セッションからのログ・ファイルが格納されます。これらからは有用な情報を取得できます。

- 正確なデータベース・セッション・ログ・ファイルの場所を特定する場合:

select value from v$diag_info WHERE name = 'Default Trace File';

- 外部表のロギングを有効にする場合:

alter session set "_xt_trace"="low","compilation","execution";

- その他のロギングを有効にする場合:

alter session set events 'trace[KCFIS] disk high, memory high';

/u01/oracle/diag/crs/<hostname>/crs/trace/diskmon.trc

diskmonのログおよびエラーが格納されます。コモディティOracle Databaseサーバー対コモディティHadoop (Oracle Big Data SQL 3.0以上でサポート)の環境では、通信エラーまたはフェンシング(ENTITY_FENCED)がないか、このトレース・ファイルを確認します。必要な場合は、diskmonを再起動します(crsctlを使用)。コモディティ・ツー・コモディティ環境ではdiskmonプロセスを単純に強制終了できますが、Oracle Exadata Database Machine環境ではプロセスの強制終了は実行しないでください。

diskmonのトレーシングを追加で取得する場合は、crsctlコマンドを呼び出してクラスタを起動する前に、環境パラメータを設定できます。クラスタはすでに実行されていることが多いため、まず、クラスタを停止する必要があります。次に、環境を設定してバックアップを開始します。Oracle Big Data SQL 3.xコモディティ・データベース・サーバーのシナリオで、Oracle Restartを使用してどのようにするかを次に示します。(RAC、ASMまたはExadataを使用している場合、crsctlコマンドは異なります。)

crsctl stop has export CELLCLIENT_TRACE_LEVEL="all,4"
export CELLCLIENT_AUTOFLUSH_LEVEL="all,4"
crsctl start has

/etc/oracle/cell/network-config/cellinit.ora

/etc/oracle/cell/network-config/celliniteth.ora

データベース・サーバーのIPアドレスとサブネット範囲を記録します。コモディティ・サーバーのOracle Big Data SQLの場合、このファイルには、インフィニバンドRDSからTCP/UDPにプロトコルを切り替えるパラメータ(_skgxp_dynamic_protocol=2)も含まれます。コモディティ・サーバーでは、データベース・サーバーのdiskmon (Oracle Gridホームから実行)が、TCPポート5042でリスニングしているデータノードのBDSプロセスと通信します。

Kerberosファイル: kinit、klist、etc/krb5.conf、krb5-workstation*.rpm

HadoopクラスタでKerberosを使用している場合、データベースでKerberosを設定する必要があり、oracle Linuxユーザーについて有効なKerberosチケットを常時保持するためのメカニズム(crontabなど)が必要です。BDSデータノード上にも同様のチケット更新メカニズムが必要です。

C.5 Hadoopデータノードのアーティファクト

次の表に、Big Data SQLのトラブルシューティングに役立つ情報を提供できるHadoopサーバーのオブジェクトを示します。

表C-7 トラブルシューティングに役立つHadoop側のデータノードのアーティファクト

データノードのアーティファクト

説明

bdscliコマンド

- List quarantine detail

- Drop quarantine all

- List alerthistory

- Drop alerthistory

- List bdsql detail

ログ・ファイル

- /var/log/bigdatasql/DM – インストーラ・ログ・ファイル

- /var/log/bigdatasql/cloudera or /var/log/bigdatasql/ambari – AmbariまたはCMサービス・ログ・ファイル。

- /opt/oracle/bigdatasql/bdcell-12.1/bigdata.properties

- /opt/oracle/bigdatasql/bdcell-12.1/bigdata-log4j.properties

- ロギングはオフにデフォルト設定されています。log4j.logger.oracle.hadoop.sql=INFOに変更して再起動します。

- /opt/oracle/bigdatasql/bdcell-12.1/logディレクトリ

- bigdata-log4j.log: Big Data SQLのJVM部分からのエントリをログに記録します(ロギングはオフにデフォルト設定されているため、まず、bigdata-log4j.propertiesを編集して再起動します)。これは、特に有用な情報となります。

- /var/log/oracle/diag/bdsql/cell/<hostname>/trace/: 管理サーバー、再起動サーバーおよびモニター・サーバー用の一般的なセル・トレース・ファイル。alert.logファイルには、検疫および検疫解除のイベントに関する詳細が含まれます。

- /var/log/oracle/diag/bdsql/cell/SYS_*/trace/: C部分用のOracle Big Data SQLオフロード・サーバー・トレース・ファイル。これらは、ほとんどの場合、トラブルシューティングに有用ではありません。

その他のデータノードのアーティファクト

/opt/oracle/cell/cellsrv/deploy/config/cellinit.ora: セルのIPアドレスを記録します。

C.6 外部表を問い合せるためのプロセス

1. ユーザーがOracle Big Data SQL外部表にかかわるSELECT問合せを発行します。

2. データベースが、SQL内のオブジェクトの1つがORACLE_HIVE型の外部表であることを確認します。

3. データベースは、外部表定義のcom.oracle.bigdata.clusterパラメータからクラスタ名を特定します(特定できない場合、デフォルト・クラスタを使用します)。

4. データベースは、com.oracle.bigdata.tablenameパラメータからHive表名を特定します(特定できない場合、Hive表名はOracle表名と同じであると想定します)。

5. データベースは、ORACLE_HIVE外部表の実装で、extprocbds_<dbname>_<hcluster>マルチスレッド・エージェントによって呼び出される外部プロシージャを使用することを認識します。

注意:
問合せの第1フェーズでは、Hiveメタデータを取得する必要があります。この第1フェーズでエラーが発生すると、次のように始まるエラーが表示されます。ODCIEXTTABLEOPENの"OPEN"に注目してください。
ORA-29913: error in executing ODCIEXTTABLEOPEN callout

6. データベースは、パブリック・データベース・リンクのBDSQL$_DEFAULT_CLUSTERまたはBDSQL$_<hcluster>を使用して、extprocbds_dbname>_hcluster>マルチスレッド・エージェントのスレッドにデータベース・セッションを接続するかリスナーに問うための接続文字列を検索します。

a. extprocbds_<dbname>_<hcluster>がすでにOracle Clusterwareによって起動されており、$ORACLE_HOME/bigdatasql/bigdata_configディレクトリからの構成情報を使用しています。

b. extprocbds_<dbname>_<hcluster>は、前述の構成情報を使用してHadoopクライアント・ライブラリを実行するJVMを生成しています。Hadoopクライアント・ライブラリは、bds-exa-install.shスクリプトの実行時に、Oracle Big Data ApplianceからOracle Databaseサーバーにコピーされています。

7. extprocbds_<dbname>_<hcluster>は、JVMおよびHiveメタストア・クライアント・ライブラリを使用して、Hiveメタストアを(thrift://hostname>:9083などのURLを使用して)コールし、Hive表のメタデータ(列、入力形式、SerDe、その他の表プロパティ)を取得します。

a. この時点で、HiveメタストアがKerberos認証によって保護されている場合、Oracle Databaseサーバーのextprocbds JVMで実行されているHiveクライアント・ライブラリは、ローカルKerberosチケットをHiveサーバーに送信しようとします。これは、データベースを実行しているoracle Linuxユーザー・アカウントが所有するチケットになります。

8. extprocbds_<dbname>_<hcluster>は、Hiveメタストアをコールして、Hive表の中にデータを保持する入力パスのリストを取得します。

9. extprocbds_<dbname>_<hcluster>は、Hadoop MapReduceのライブラリおよびロジックを使用して、入力パスのリストをスプリット/ブロックのリストに変換します。次に、HDFSネームノードにすべてのスプリット/ブロックの場所(レプリカを含む)を要求します。

a. HDFSがKerberosで保護されている場合、データベースのoracle Linuxユーザー・アカウントからのKerberosチケットを使用する必要があります。

b. 圧縮が使用されている場合、この時点で、JVMは特定の圧縮Javaライブラリまたはネイティブ・ライブラリをロードする必要があります。これらが標準以外のライブラリである場合、Oracle DatabaseサーバーとHadoop側の両方にそれらをインストールする必要があります。たとえば、LZO圧縮では、データベース側とHadoop側の両方で追加のインストールおよび構成を実行する必要があります。

この時点で、"記述"フェーズが実行され、データベースはHive表の構造の他、データの全ブロックの場所(レプリカを含む)も認識します。この情報は、メタデータ・ペイロードとも呼ばれます。今度は、"フェッチ"フェーズを開始します。

10. Oracle Exadataシステムでも使用されるデータベース・インテリジェント・ストレージ・レイヤーのKCFIS (Kernel Cache File Intelligent Storage)が、データのブロックが格納されるホスト名を、グリッドのdiskmonプロセスによって保持されているアクティブなBDSQLサーバー・ホストのリストと比較します。(diskmonのBDSQLサーバー・ホストのリストはV$CELLで確認できます)。

注意:
問合せの第2フェーズでは、データをフェッチする必要があります。この第2フェーズでエラーが発生すると、次のように始まるエラーが表示されます。ODCIEXTTABLEFETCHの"FETCH"に注目してください。

ORA-29913: error in executing ODCIEXTTABLEFETCH callout

11. データノードのホスト名のリストがBDSQLホスト名のリストと一致した場合、データベースはローカル・ブロック(グラニュルとも呼ばれる)のリストを各BDSQLサーバーに送信します。また、データベースはBDSQLサーバーにアクセス先の表、列および構造に関するメタデータを送信します。パフォーマンス上、これはパラレルで非同期に実行されます。

注意:
データベース統計の"cell XT granules requested for predicate offload"および"cell XT granule bytes requested for predicate offload"は、この時点で更新されます。

12. データノード上で実行されているBDSQLプロセスが、検疫されたSQL_IDのローカル・リストに照らしてSQL_IDをチェックします。SQL_IDが検疫リストと一致した場合、データノードのBDSQLプロセスはエラーを返します。ただし、ユーザーはこのエラーを確認する必要はありません。かわりに、データベースが、まず別のセルを試した後、その処理自体を実行しようとします。(手順15および16を参照してください)。

13. SQL_IDがデータノードのBDSQLプロセスによって検疫されなかった場合、BDSQLプロセスは、送信されたブロック/グラニュルのリストに照らしてSmartScanの処理を実行します。

ヒント:
ストレージ索引およびSmartScan処理のその他の特徴の詳細は、The Data Warehouse Insiderのブログ・エントリBig Data SQL Quick Start. Storage Indexes - Part10を参照してください。

a. BDSQLオフロード・プロセスが、/opt/oracle/bigdatasql/bdcell-12.1/bigdata.propertiesから構成情報をすでに読み取っています。

b. BDSQLプロセスは、前述の構成で定義されているプロパティに基づいてJVMをすでにロードしています。

c. Hive表に特殊なInputFormatクラスまたはSerdeクラスが含まれる場合、前述の構成で定義されているクラスパスに基づいて検出できれば、JVMはそのようなクラスをロードします。一部の一般的なInputFormats (デリミタ付きテキストなど)について、オラクル社では、そのような形式を通常のJavaコードよりも速く処理できるCコードを作成しています。

d. Kerberos認証が使用されている場合、BDSQLのJVMはローカルKerberosチケットをHDFSデータノード・プロセスに送信します。これは、BDSQLが稼働しているデータノードでoracle Linuxユーザーに関連付けられたKerberosチケットです。

e. Sentry認証が使用されている場合は、oracle LinuxユーザーのKerberosチケットのアイデンティティにHive表および基礎となるHDFSデータに対するアクセス権が付与されている必要があります。

f. BDSQLサーバーが、実行時に"cell XT granule IO bytes saved by storage index"などの統計を更新します。

14. データベースkcfisレイヤーが、データノードのBDSQLプロセスから返される結果を収集し、次のバッチのブロック/グラニュルをBDSQLプロセスに送信します。

a. バイト数が返されると、データベースが、"cell interconnect bytes returned by XT smart scan"統計を更新します。

15. 特定のブロックについてBDSQLプロセスで問題が発生した場合、データベースは、その処理を別のBDSQLプロセスに送信しようとします(失敗したブロックのレプリカがある場所を捜します)。

a. データベースは、"cell XT granule predicate offload retries"統計を更新します。

16. 再試行後でも、BDSQLプロセスでブロックを正常にオフロードできない場合、データベースは"フォールバック"してextprocbds_<db>_<cluster>内のJVMでその処理を実行します。

a. これは、生データを処理のためにデータベース・サーバーに移動する必要があるため、遅くなります。

b. Hive表に特殊なInputFormatまたはSerdeが含まれる場合、extprocbds_<db>_<cluster>のJVMは、データベースのbigdata.propertiesファイルで定義されているクラスパス構成に基づいて、それらをロードする必要があります。

17. 入力パス/ブロック/グラニュルがすべて処理されるまで、外部表データ・ソースからの結果は引き続き収集されます。

C.7 Hiveデータ・ディクショナリ問合せのプロセス

1. ユーザーがOracle Big Data SQLデータ・ディクショナリ・ビューのいずれか(all_hive_tablesなど)を問い合せます。
Oracle Big Data SQL 2.0以前では、これがuser_hive_*ビューであり、ユーザーがDBAでなかった場合、ユーザーはSYS.HIVE_URI$表にリストされている必要がありました。Oracle Big Data SQL 3.0では、HIVE_URI$チェックが削除されています。

2. ビューが、GetHiveTable pl/sqlパイプライン・テーブル・ファンクションにアクセスします。

3. GetHiveTableファンクションが、SYS.DBMSHADOOPLIBライブラリを使用して外部プロシージャとして実装されるHiveMetadata型で実装されます。

4. Oracle Databaseが、このデータベース・セッション用に"extproc"の新しいインスタンスを生成します。extprocが、設定用の$ORACLE_HOME/hs/admin/extproc.oraファイルを読み取ります。
CコードをトレースするためにTRACE_LEVEL=ONと設定できます。ログ・ファイルは$ORACLE_HOME/hs/logに書き込まれます。

デフォルトでは、extproc.oraに誤りがあって、ログに「Error in assignment statement」メッセージが書き込まれることがあります。文"SET EXTPROC_DLLS=" (等号記号の後に値なし)は有効ではありません。TRACE_LEVEL=ONを使用する場合は、この行をコメント・アウトします。

5. extprocが、libkubsagt.soライブラリ(SYS.DBMSHADOOPLIB)をアタッチします。

6. Libkubsagt12.soが、JVMを起動してHiveMetadata.jarをロードします。

a. JVMは、$ORACLE_HOME/bigdatasql/bigdata_config/内の構成情報を使用して、クラスタのリストおよびHiveメタストア接続情報を識別します。

b. JVMに関するロギングは、$ORACLE_HOME/bigdatasql/bigdata_config/bigdata-log4j.propertiesに基づいています。ログ・ファイルは$ORACLE_HOME/bigdatasql/logに書き込まれます。データベース・セッションごとに新しいログ・ファイルが1つ存在します。

7. HiveMetadata.jarのJavaコードは、Hiveメタストア・クライアント・ライブラリを使用してHiveメタストアに接続し、すべてのデータベースおよびすべての表に関するデータを取得します。

a. HiveメタストアがKerberosによって保護されている場合、JVMは、データベースを実行しているoracle LinuxユーザーのKerberosチケットを送信しようとします。

8. Javaコードが、データベースにリクエスト・データを返します。

C.8 Oracle Big Data SQLの主な管理タスク

- extprocbds_<db>_<hcluster>の再起動:

$  crsctl stop res bds_<dbname>_<hcluster>

手早い方法ですが、最良ではありません。最良な方法は、extprocbds_*プロセスを強制終了して、復帰するのを待ちます。

- extprocの再起動。
これにより、新しいデータベース・セッションが開始されます。

- データノードでのOracle Big Data SQLソフトウェアの再起動:

- Cloudera ManagerまたはAmbari Web UIを使用します。

- 手早い方法ですが、最良ではありません。最良な方法は、bdsqloflsrvプロセスを強制終了して、復帰するのを待ちます。

- Oracle Big Data Appliance (ノード1でrootとしてログオン)に対するコマンドライン・メソッド:

$ bdacli stop big_data_sql_cluster
$ bdacli start big_data_sql_cluster

- 単一データノードでのOracle Big Data SQL検疫のチェック:

$ bdscli -e list quarantine detail

すべてのデータノードに対して検疫をチェックするには、次のようにします。

$ dcli -g cells.lst bdscli -e list quarantine detail

- 単一データノードでのOracle Big Data SQL検疫のクリア:

$ bdscli -e drop quarantine all

すべてのデータノードに対して検疫をクリアするには、次のようにします。

$ dcli -g cells.lst bdscli -e drop quarantine all

- 適切なオフロードについての統計のチェック:

- SQLモニター・ヒント(/*+ MONITOR*/)を使用します。

- XTの統計を問い合せます。"retries"がゼロかつ"bytes returned"がゼロより大きいことを確認します。

- データノードでのログ・ファイルの検索:

1. すべてのデータノードに対して検疫をクリアします。

2. データノードの/opt/oracle/bigdatasql/bdcell-12.1/bigdata-log4j.propertiesでLogプロパティを設定します。

3. データノードでbdsqloflsrvを再起動します。

4. ディレクトリをログ・ファイル・ディレクトリ(/opt/oracle/bigdatasql/bdcell-12.1/log)に変更します。

5. tail -f bigdata-log4j.log

6. 調べているノードに関するデータが問合せに含まれるようにします(つまり、問合せでは多数のブロックが含まれるファイルにアクセスする必要があります。少数のブロックにしかアクセスしない場合、データノードにまったく処理が要求されないという結果になります)。

7. 新しいデータベース・セッションを作成して(XTの統計をリセットするため)、問合せを実行します。

ヒント:
必ずSQLモニターで表示する場合は、/*+MONITOR*/ hintを使用します。

データノードのbigdata-log4j.logに新しいエントリが表示されます。

8. Oracle Databaseサーバーで、XTの統計を問い合せて、retries=0およびbytes returned>0であることを確認します。

- データベースでのログ・ファイルの検索:

1. すべてのデータノードに対して検疫をクリアします。

2. 新しいデータベース・セッションを作成します(XTの統計をリセットするため)。

3. セッションの接続先となるインスタンスを見つけます(ログオンしたのとは別のデータベース・サーバーにロード・バランシングしている場合):

select host_name from v$instance;

4. Linuxレベルでそのインスタンスのデータベース・サーバーにログインします。

5. $ORACLE_HOME/bigdatasql/bigdata-log4j.propertiesでログのプロパティを設定します。

6. そのインスタンスでextprocbds_<db>_<hcluster>を再起動し、ログのプロパティ変更を収集します。

7. XTトレースを有効にします。
次のコマンドは、外部表のロギングを有効にします。

alter session set "_xt_trace"="low","compilation","execution";

次のコマンドは、トレースをさらに追加します。

alter session set events 'trace[KCFIS] disk high, memory high';

8. 問合せを実行します。

ヒント:
必ずSQLモニターで表示する場合は、/*+ MONITOR */ hintを使用します。

9. XTの統計を問い合せて、retries=0およびbytes returned>0であるかどうかを確認します。

select n.name, s.value /* , s.inst_id, s.sid */ from v$statname n, gv$mystat s where n.name like '%XT%' and s.statistic# = n.statistic# ;

10. JVMログ・ファイル($ORACLE_HOME/bigdatasql)を調べます。(extprocbds_*プロセスと同じPIDのものを探します。)

11. データベースのtrace_fileを調べます。

select value from v$diag_info WHERE name = 'Default Trace File';

C.9 その他のJava診断

- 次に示すように、JVMプロパティをbigdata.propertiesファイルに追加できます。これは、目立ちにくく低いレベルのKerberosの問題に役立つことがあります。

java.options=-Dsun.security.krb5.debug=true

- データベースではextprocプロセスとextprocbds_<dbname>_<hcluster>プロセスによってJVMが実行され、データノードではbdsqloflsrvプロセスによってJVMが実行されます。これを確認するには、"jps"コマンドを実行します。

$ORACLE_HOME/bigdatasql/jdk*/bin/jps

- Javaスキルを非常に簡単に操れる場合は、Oracle JVisualVMまたはOracle JConsoleを使用してJVMに接続することもできます。

C.10 Oracle Big Data SQLの正しいパッチの確認

パッチ・エラーおよびデータパッチ・エラーの原因と結果は多種多様です。1つ実行できることは、必要なパッチがロードされているかを確認することです。

エラー・スタックの'FETCH_OPEN'のコールで、誤った数または型の引数を見つけた場合

正しいパッチがロードされているかどうかを判別するDBA_REGISTRY_SQLPATCHの問合せの根拠となるエラー・スタックの例を次に示します。

ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-29400: data cartridge error
ORA-06550: line 1, column 25:
PLS-00306: wrong number or types of arguments in call to 'FETCH_OPEN'
ORA-06550: line 1, column 14:PL/SQL: Statement ignored

これは、いくつかの問題の1つを示している場合があります。

- バンドル・パッチが正しく適用されていない。

- データパッチが実行されていないため、Oracle Big Data SQLのインストール済のバージョンで必要なパッチがインストールされていない。

その場合、『Oracle Big Data SQL Master Compatibility Matrix』 (My Oracle SupportのドキュメントID 2119369.1)でこのインストールに対する要件として規定されているパッチが適用されているかどうかを判別するために、次の問合せを実行します。

select PATCH_ID, PATCH_UID, VERSION, STATUS, DESCRIPTION from DBA_REGISTRY_SQLPATCH order by BUNDLE_SERIES

たとえば、BP 12.1.0.2.160419 (22806133)が適用されたOracle Big Data SQL 3.0.1の場合、問合せによって次の結果が返されます。

PATCH_ID    PATCH_UID   VERSION              STATUS           DESCRIPTION
----------  ----------  -------  ----  ------- --  ------------
22806133     19983161    12.1.0.2             SUCCESS          DATABASE BUNDLE PATCH: 12.1.0.2.160419 (22806133)

問合せが失敗した場合またはインストール済のバンドルに対する正しいパッチが見つからない場合は、データパッチにおける問題の詳細をMy Oracle Supportの1609718.1で確認してください。

D ライセンス情報

D.1 Oracle Big Data SQLのライセンス

Oracle Big Data SQLのライセンスは他のOracle製品のライセンスとは別です。

Oracle Big Data SQLのライセンスを購入する場合は、次の点に注意してください。

- Hadoopクラスタごと、ディスクごとに、別のライセンスを購入する必要があります。

- Oracle Big Data SQLを実行するHadoopクラスタ内のすべてのノードにライセンスが必要です。

- Oracle Big Data SQLを実行するクラスタを構成する各ノードのすべてのディスクにライセンスが必要です。ノード内に部分的なライセンスを供与することはできません。クラスタ内のすべてのノードが含まれます。

- Oracle Big Data SQLインストールのHadoopクラスタ側(Oracle Big Data Applianceなど)のみがライセンスされますが、データベース・サーバー側に追加のライセンスは不要です。

- Oracle Copy to Hadoopのライセンスが含まれています。

- Oracle Super Clusterは含まれていません。

Oracle Shell for Hadoop Loadersのサードパーティ・ライセンス

Oracle Shell for Hadoop Loadersは、Oracle Big Data SQLのインストール・バンドルに含まれています。Oracle Shell for Hadoop Loadersに含まれるサードパーティ・プロジェクトは次のとおりです。

- ANTLR 4.5.2

- JLine 2.13

- Apache Commons Exec 1.3

- Apache Commons CLI 1.3.1

特に断りがないかぎり、あるいは、サードパーティ・ライセンス(LGPLなど)の条項で求められている場合、Apache Licensed Codeに関連するすべてのステートメントを含めた、この項のライセンスとステートメントは、告知のみを目的とするものです。

D.1.1 ANTLR 4.5.2

Copyright (c) 2015 Terence Parr, Sam Harwell

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

D.1.2 JLine 2.13

Copyright (c) 2002-2015 Marc Prud'hommeaux <mwp1@cornell.edu>

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Neither the name of JLine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

D.1.3 Apache Commons Exec 1.3

ライセンスの下、複数の製品がライセンス供与される場合であっても、ドキュメントには次のライセンス情報を1回のみ含めます。

次のことはApache 2.0ライセンスの下でライセンス供与されるすべての製品に適用されます。

Apache License Version 2.0 (「ライセンス」)に従わない場合は、これらのファイルを使用できない場合があります。

ライセンスのコピーは、http://www.apache.org/licenses/LICENSE-2.0から入手できます。ライセンスのコピーは次の条件で複製することができます。

D.1.4 Apache Licensed Code

次に示すものは、Apache 2.0 Licenseの条件に従って予告として含まれ、Apache 2.0ライセンスの基に使用許諾されているすべてのプログラムに適用されます。

Apache License Version 2.0 (「ライセンス」)に従わない場合は、これらのファイルを使用することができない場合があります。

ライセンスのコピーは、次から入手できます

http://www.apache.org/licenses/LICENSE-2.0

ライセンスのコピーは次の条件で複製することができます。

適用法により求められた場合、または書面をもって同意された場合を除き、ライセンスに基づいて配布されたソフトウェアは、明示的、黙示的を問わず一切の保証または条件なしに「現状のまま」で提供されています。

特定の言語下のライセンス許諾事項および制限事項については、ライセンスを確認してください。

D.1.5 Apacheのライセンス

- Version 2.0, January 2004

- http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity.For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner.For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright LicenseSubject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent LicenseSubject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted.If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution.You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

a. You must give any other recipients of the Work or Derivative Works a copy of this License; and

b. You must cause any modified files to carry prominent notices stating that You changed the files; and

c. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

d. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear.The contents of the NOTICE file are for informational purposes only and do not modify the License.You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions.Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions.Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks.This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty.Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability.In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional LiabilityWhile redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License.However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information.(Don't include the brackets!)The text should be enclosed in the appropriate comment syntax for the file format.We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.ライセンスのコピーは、次から入手できます

http://www.apache.org/licenses/LICENSE-2.0

適用法により求められた場合、または書面をもって同意された場合を除き、ライセンスに基づいて配布されたソフトウェアは、明示的、黙示的を問わず一切の保証または条件なしに「現状のまま」で提供されています。特定の言語下のライセンス許諾事項および制限事項については、ライセンスを確認してください。

This product includes software developed by The Apache Software Foundation (http://www.apache.org/) (listed below):

索引

A  B  C  D  E  F  H  L  O  P  R  S  T  U

A

- アクセス・ドライバ 1

- ACCESS PARAMETERS句

- 特殊文字 1

- 構文ルール 1

- ACCESS PARAMETERS句

- 構文 1

- ALL_HIVE_COLUMNSビュー 1

- ALL_HIVE_DATABASESビュー 1

- ALL_HIVE_TABLESビュー 1 , 2

- 配列オーバーフロー 1

B

- BDSQL_USER 1

- bigdata_configディレクトリ 1

- BigDataSQL構成ディレクトリ・オブジェクト 1

- バイナリ・オーバーフロー 1

C

- カタログ・ビュー 1

- セルのXT 1

- 文字オーバーフロー 1

- 列マッピング 1

- com.oracle.bigdata.buffersize 1

- com.oracle.bigdata.colmap 1

- com.oracle.bigdata.datamode 1

- com.oracle.bigdata.erroropt 1

- com.oracle.bigdata.fields 1

- com.oracle.bigdata.fileformat 1

- com.oracle.bigdata.log.exec 1

- com.oracle.bigdata.log.qc 1

- com.oracle.bigdata.overflow 1

- com.oracle.bigdata.rowformat 1

- com.oracle.bigdata.tablename 1

- CREATE_EXTDDL_FOR_HIVE関数

- 構文 1

- CREATE TABLE ORGANIZATION EXTERNAL構文 1 , 2

- CREATE TABLE文

- Hive用の自動生成 1

D

- データ・ディクショナリ・ビュー 1

- データ・モード 1

- データソース名 1

- データ型変換(Big Data SQL) 1

- データ型(HDFS) 1

- DBA_HIVE_COLUMNSビュー 1

- DBA_HIVE_DATABASESビュー 1

- DBA_HIVE_TABLESビュー 1

- DBMS_HADOOPパッケージ 1

- DBMS_OUTPUTパッケージ 1

- DEFAULT DIRECTORY句 1

- デリミタ付きテキスト・ファイル 1

E

- エラー処理 1

- エラー処理(Big Data SQL) 1

- 外部表

- 概要 1

F

- フィールド抽出 1

- フィールド名 1

H

- Hadoopログ・ファイル 1 , 2

- Hive列 1

- Hiveデータ

- Oracle Databaseからのアクセス 1

- Hiveデータベース 1

- Hive表 1

- Hive表ソース 1

- Hiveビュー 1

L

- ライセンス, サードパーティ 1

- LOCATION句 1

- ログ・ファイル 1

O

- ORACLE_HDFSアクセス・ドライバ 1

- ORACLE_HIVE

- アクセス・パラメータ 1

- ORACLE_HIVEの例 1

- Oracle Big Data SQL

- アクセス・ドライバ 1

- データ型の変換 1

- 概要 1

- Oracle Databaseサーバーでのインストールの変更。 1

- Oracle Database

- Hiveデータへのアクセス 1

- Data Modeler 1

- DBMS_HADOOP 1

- SQL Developer 1

- Oracle Big Data SQLでの使用 1

- Oracle Exadata Machine

- Big Data SQLインストールの変更 1

- ORCファイル 1

- オーバーフロー処理 1

P

- Parquetファイル 1

- HDFSファイルの解析 1

- PL/SQLパッケージ 1

- PUT_LINE関数 1

R

- RCファイル 1

- REJECT LIMIT句 1

- 行形式の説明 1

- 行形式 1

S

- 順序ファイル 1

- SerDe解析 1

- Smart Scan 1

- SmartScanモード 1

- ソース名 1

- 静的データ・ディクショナリ・ビュー 1

- 統計 1

- structオーバーフロー 1

T

- テキスト・ファイル 1

- テキスト・オーバーフロー 1

- サードパーティ・ライセンス 1

- TYPE句 1

U

- unionオーバーフロー 1

- USER_HIVE_COLUMNSビュー 1

- USER_HIVE_DATABASESビュー 1

- USER_HIVE_TABLESビュー 1

- Oracle Databaseからのユーザー・アクセス 1

- ユーザー

- BDSQL_USER 1

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。