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

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

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

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

    ノート:

    次の項で説明する回避策を使用してHiveを介してファイルが生成されないかぎり、Parquetファイルに対する問合せの述語のプッシュダウンは非効率です。
  • Oracle NoSQL DatabaseまたはApache HBaseに対する問合せでは、述語を使用してリモート・データ・ストア内のデータのサブスキャンが行われます。

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

述語のプッシュダウンでは、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)。