リモートテーブル

Virtual DataPort では、クエリの結果を外部データベースのテーブルに格納できます。この機能は リモートテーブル と呼ばれます。このプロセスでは、Denodo によって適切なスキーマのテーブルが作成され、クエリの結果がこのテーブルに挿入されます。この機能では、Denodo でクエリを実行して結果をデータベースに格納するために、別のツールを使用する必要がありません。

この機能の主な構成要素は以下のとおりです。

  • コマンド CREATE REMOTE TABLE (以下 を参照)。このコマンドでは以下の処理が実行されます。

    1. JDBC データソースの基盤となるデータベースにテーブルを作成します。

    2. Virtual DataPort サーバーでクエリを実行します。

    3. このクエリの結果をデータベースのテーブルに挿入します。

    このコマンドからは何の行も返されません。このコマンドを管理ツールで実行するとトレースが返されます。

    ターゲットデータベースに一括データロードの API があり、ターゲットデータソースで Use bulk data load APIs オプションが有効になっていれば、このコマンドでは、その API を使用してデータが挿入されます。

  • ストアドプロシージャ CREATE_REMOTE_TABLE: 前の 3 つの手順のほかに、このプロシージャを使用して、データベースに作成されたテーブルにクエリを実行する基本ビューを作成します。

  • ストアドプロシージャ DROP_REMOTE_TABLE: 基本ビューと、JDBC データソースの基本ビューからアクセスするリモートテーブルを削除します。

`CREATE REMOTE TABLE` steps

CREATE REMOTE TABLE の手順

CREATE REMOTE TABLE コマンド

コマンド CREATE REMOTE TABLE の構文は以下のとおりです。

構文

CREATE REMOTE TABLE ステートメントの構文
CREATE [ OR REPLACE ] REMOTE TABLE <remote_table_name:identifier>
     INTO <data_source_name:identifier>
     [ CATALOG = <data_source_catalog:literal> ]
     [ SCHEMA = <data_source_schema:literal> ]
     [ <create index clause> ]*
     [ OPTIONS ( <option information> [ , <option information> ]* ) ]
     AS <select query>

<create index clause> ::=

    CREATE INDEX <index_name:identifier> [ UNIQUE ]

    ON ( <table index field> [, <table index field> ]* )

<table index field> :: = <index_field_name:identifier> [ ASC | DESC ]

<option information> ::=
      'batch_insert_size' = <literal>
    | 'location' = <literal>
    | 'parquet_row_group_size' = <literal>

<literal> ::= '.*' (a single quote in a literal has to be escaped with another single quote. E.g. 'literal''with a quote')

<select query> ::= (「 SELECT ステートメントの構文 」を参照)

  • OR REPLACE: 指定している場合、テーブル remote_table_name がデータベースにすでに存在すれば、Virtual DataPort によってそのテーブルが削除され、再作成されます。この句を指定していない場合にこのテーブルが存在すると、このコマンドは失敗します。

  • query: 他のクエリと同様に、Virtual DataPort によって実行されるクエリです。

  • data_source_name: JDBC データソース。このデータソースのデータベースに新しいテーブルが作成されます。

  • data_source_catalog (オプション): テーブルの作成先とする、基盤となるデータベースのカタログの名前。

  • data_source_schema (オプション): テーブルの作成先とする、基盤となるデータベースのスキーマの名前。

  • index_name: 作成されるインデックスの名前。

  • index_field_name: インデックスで使用するフィールドの名前。

  • OPTIONS: 挿入を設定するためのオプションのパラメーター。データソースの中には一部のパラメーターをサポートしていないものがあります。使用できる挿入オプションは以下のとおりです。

    • batch_insert_size: 各バッチ挿入のタプルの数。

    • location: Virtual DataPort がデータをアップロードする場所。場所はデータソースに応じて変わります。

      • Hadoop データソース (Hive、Impala、Presto、Spark): HDFS URI。

      • Redshift: S3 バケット名

      • Athena: S3 の場所

    • parquet_row_group_size: 行グループのサイズ (MB 単位)。プロパティは、Virtual DataPort が Parquet ファイルを使用してデータを挿入するデータソース (Athena、Hive、Impala、Presto、Spark) のみで有効です。

注釈

以下のコマンドを使用して parquet_row_group_size のデフォルト値を設定します。

SET 'com.denodo.vdb.util.tablemanagement.sql.insertion.HdfsInsertWorker.parquet.rowGroupSize' = '<value>';

この変更を適用するために Virtual DataPort サーバーを再起動する必要はありません。

注釈

カタログもスキーマも指定しない場合、テーブルはデフォルトのカタログまたはスキーマに作成されます。

重要

VQL シェルから CREATE REMOTE TABLE を実行する場合は、[Retrieve all rows] チェックボックスをチェックします。チェックしないと、VQL シェルの [Display rows] ボックスで設定した数の行のみが実行エンジンによって挿入されます。

注意

データベースが HDFS (Hadoop、Impala、Presto など) に基づいている場合、このコマンドを実行する前に、データソースで一括データロードを有効にする必要があります。

このプロシージャは、JDBC データソースに対してのみ機能します。

このコマンドで作成したテーブルは、別のアプリケーションから削除する必要があります。ただし、 プロシージャ CREATE_REMOTE_TABLE で作成したテーブルは、 プロシージャ DROP_REMOTE_TABLE を使用して Denodo から削除できます。

フィールド名のいずれかがデータソースの予約語である場合、そのフィールド名は VDP によって 'field_0' に変更されます。予約語が名前になっているフィールドがほかにもある場合は、'field_1'、'field_2' のように名前が順次変更されます。

Presto では、 Hive コネクター <https://prestosql.io/docs/current/connector/hive.html> を使用している場合にのみ、 CREATE REMOTE TABLE コマンドを実行できます。

CREATE REMOTE TABLE によって、Hive および Impala では INTERNAL TABLES が作成され、Presto、Spark、Databricks では EXTERNAL TABLES が作成されます。

Presto で CREATE REMOTE TABLE コマンドによって作成したテーブルで IDU クエリを実行する場合は、Presto サーバーの構成で hive.non-managed-table-writes-enabled=true プロパティを有効にする必要があります。

Hive connector configuration

Presto サーバーでこのプロパティを有効にするには、以下の手順に従います。

  1. ファイル /opt/presto-server-<version>/etc/catalog/hive.properties を編集します。

  2. hive.non-managed-table-writes-enabled=true を追加します。

  3. Presto サーバーを再起動します。

必要な権限

このコマンドを実行するには、以下の権限が必要です。

  • JDBC データソースのデータベースに対する Connect 権限。

  • リモートテーブルの作成先とする JDBC データソースに対する Execute 権限。

  • クエリで使用するビューに対する Execute 権限。

JDBC データソースのユーザーアカウントは、基盤となるデータベースにテーブルを作成できる必要があります。

CREATE REMOTE TABLE reporting_customer360_state_ca
INTO common_sources.ds_jdbc_oracle
SCHEMA = 'REPORTING'
AS
SELECT * FROM customer360.customer WHERE state = 'CA';

このコマンドは以下の手順を実行します。

  1. JDBC データソース ds_jdbc_oracle の基盤となるデータベースに、テーブル reporting_customer360_state_ca を作成します。

  2. VDP サーバーで以下のクエリを実行します。

    SELECT *
    FROM customer360.customer
    WHERE state = 'CA';
    
  3. 前のクエリの結果をテーブル reporting_customer360_state_ca に挿入します。