Oracle Big Data SQLは、Apache Hive、HDFS、Oracle NoSQL Database、Apache HBaseなどの複数のビッグ・データ・ソースに格納された非リレーショナル・データに対する問合せをサポートしています。これにより、分散データに対して統一した問合せが可能になり、異なる製品のデータ・ストアのデータがすべて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 Databaseオブジェクトです。他のデータベース表に使用するのと同じSQL SELECT
構文を使用して、外部表を問い合せることができます。
外部表はアクセス・ドライバを使用して、データベース外のデータを解析します。外部データのタイプごとに一意のアクセス・ドライバが必要です。Oracle Big Data SQLには、ビッグ・データ用の2つのアクセス・ドライバが含まれています。メタデータがApache Hiveに定義されているデータ用のドライバ、およびHadoop Distributed File Systemに格納されているデータ(メタデータはOracle管理者のみによって指定される)にアクセスするためのドライバです。
多くのビッグ・データ・システムでは、ファイルタイプそのもの(Apache Parquetなど)またはHiveのパーティション化やStorageHandler APIを使用して、述語のオフロード機能が一部のレベルでサポートされています。Big Data SQLは、SARGable (Search ARGument ABLE)述語をOracle Databaseからサポート・システムにプッシュすることで、このようなオフロード機能を利用しています。たとえば、述語のプッシュダウンによって次の動作が自動的に行われるようになります。
パーティション化されたHive表に対する問合せは、パーティション列に対するフィルタ述語に基づいてプルーニングされます。
Apache ParquetおよびApache ORCファイルに対する問合せでは、ディスクからファイルを読み取るときにSARGable述語を使用すると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データベースの表に格納されている場合と同様に、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 Big Data SQLは、HadoopクラスタのDataNodeにBig Data SQL処理エージェントがインストールされていると、SmartScan機能(フィルタ述語のオフロードなど)をOracle外部表に拡張します。このテクノロジを使用すると、Hadoopクラスタは大部分(合計で最大99パーセント)の無関係なデータを破棄し、より小さい結果セットをOracle Databaseサーバーに返すことができます。エンド・ユーザーが問合せの結果を得るまでの時間は大幅に短縮されます。これは、Oracle Databaseに対する負荷、およびネットワーク上のトラフィックが軽減されたことの直接的な結果です。
関連項目:
外部表の概要、およびOracle Databaseドキュメント・ライブラリ内の詳細情報への手引きについては、『Oracle Database概要』を参照してください。
Oracle Big Data SQLでは、ストレージ索引が自動的に管理され、Oracle Databaseに対して透過的です。ストレージ索引には、HDFSに格納されているデータに関するハード・ディスク上のデータ分散のサマリーが含まれています。ストレージ索引により、I/O操作とフラット・ファイルからOracle Databaseブロックにデータを変換するCPUコストを減らすことができます。
ストレージ索引は、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)がブルーム・フィルタに存在しないため、ストレージ索引によって完全に回避されます。