リモートテーブル¶
Virtual DataPort では、クエリの結果を外部データベースのテーブルに格納できます。この機能は リモートテーブル と呼ばれます。このプロセスでは、Denodo によって適切なスキーマのテーブルが作成され、クエリの結果がこのテーブルに挿入されます。この機能では、Denodo でクエリを実行して結果をデータベースに格納するために、別のツールを使用する必要がありません。
この機能の主な構成要素は以下のとおりです。
コマンド
CREATE REMOTE TABLE
(以下 を参照)。このコマンドでは以下の処理が実行されます。JDBC データソースの基盤となるデータベースにテーブルを作成します。
Virtual DataPort サーバーでクエリを実行します。
このクエリの結果をデータベースのテーブルに挿入します。
このコマンドからは何の行も返されません。このコマンドを管理ツールで実行するとトレースが返されます。
ターゲットデータベースに一括データロードの API があり、ターゲットデータソースで Use bulk data load APIs オプションが有効になっていれば、このコマンドでは、その API を使用してデータが挿入されます。
ストアドプロシージャ CREATE_REMOTE_TABLE: 前の 3 つの手順のほかに、このプロシージャを使用して、データベースに作成されたテーブルにクエリを実行する基本ビューを作成します。
ストアドプロシージャ DROP_REMOTE_TABLE: 基本ビューと、JDBC データソースの基本ビューからアクセスするリモートテーブルを削除します。

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://prestodb.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
プロパティを有効にする必要があります。
Presto サーバーでこのプロパティを有効にするには、以下の手順に従います。
ファイル
/opt/presto-server-<version>/etc/catalog/hive.properties
を編集します。行
hive.non-managed-table-writes-enabled=true
を追加します。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';
このコマンドは以下の手順を実行します。
JDBC データソース
ds_jdbc_oracle
の基盤となるデータベースに、テーブルreporting_customer360_state_ca
を作成します。VDP サーバーで以下のクエリを実行します。
SELECT * FROM customer360.customer WHERE state = 'CA';
前のクエリの結果をテーブル
reporting_customer360_state_ca
に挿入します。