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)。 |