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 Big Data SQLインストレーション・ガイド』を参照してください。Oracle Big Data SQLは、外部表で次世代のパフォーマンス向上を実現します。外部表は、データベース外のデータの場所を識別および記述するOracle Databaseオブジェクトです。他のデータベース表に使用するのと同じSQL SELECT
構文を使用して、外部表を問い合せることができます。
外部表はアクセス・ドライバを使用して、データベース外のデータを解析します。外部データのタイプごとに一意のアクセス・ドライバが必要です。Oracle Big Data SQLには、ビッグ・データ用の2つのアクセス・ドライバが含まれています。メタデータがApache Hiveに定義されているデータ用のドライバ、およびHadoop Distributed File Systemに格納されているデータ(メタデータはOracle管理者のみによって指定される)にアクセスするためのドライバです。
外部表への問合せによって、データが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は、これらのアクセス・ドライバを使用して問合せのパフォーマンスを最適化します。
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概要』を参照してください。
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)がブルーム・フィルタに存在しないため、ストレージ索引によって完全に回避されます。
多くのビッグ・データ・システムでは、ファイルタイプそのもの(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)。 |
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回を参照してください。
Oracle Big Data SQLは、データが存在するHadoopシステムの他、データを問い合せるOracle Databaseサーバーにもコンポーネントをインストールする必要があります。
インストールの詳細は、次のリソースを参照してください。
『Oracle Big Data SQLインストレーション・ガイド』
このガイドでは、サポートされているHadoopシステム/Oracle Databaseサーバーの組合せのためのインストールおよび構成の手順を説明します。
『Oracle Big Data SQL Master Compatibility Matrix』
Oracle Engineered Systems。
その他のシステム。
Linux OSのディストリビューションとバージョン。
Hadoopディストリビューション。
必要とされるパッチを含むOracle Databaseのリリース。