リモートテーブル¶
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> ]*
[ CREATE_TABLE_TEMPLATE ( <template_definition:literal>
[ DEFAULT( <parameter definition> [, <parameter definition> ]* ) ] ) ]
[ 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 ]
<parameter definition> ::= '<parameter_name:literal>' = '<parameter_value:literal>'
<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
: インデックスで使用するフィールドの名前。CREATE_TABLE_TEMPLATE
(オプション): データソースにリモートテーブルを作成するために Denodo が使用するCREATE TABLE
コマンド。詳細については、「 テーブル作成テンプレート 」を参照してください。template_definition
: データソースにリモートテーブルを作成するために Denodo が使用する SQL テンプレートコマンド。@{parameter_name}
という構文のパラメータを含みます。DEFAULT
(オプション): テンプレートのユーザー定義パラメータの値を設定するために使用するプロパティ。オプションexport with properties
を使用してビューをエクスポートした場合、これらのプロパティの値は環境プロパティファイルにエクスポートされます。詳細については、「 プロパティファイルへのエクスポート 」を参照してください。以下に例を示します。
CREATE REMOTE TABLE <remote_table_name> INTO <data_source_name> ... CREATE_TABLE_TEMPLATE ( 'CREATE TABLE @{internal_parameter_table_name} (@{internal_parameter_columns} @{internal_parameter_restrictions}) IN ACCELERATOR @{accelerator}' DEFAULT('accelerator' = 'accel1') ) AS <select_query>
OPTIONS
: 挿入を設定するためのオプションのパラメータ。データソースの中には一部のパラメータをサポートしていないものがあります。使用できる挿入オプションは以下のとおりです。batch_insert_size
: 各バッチ挿入のタプルの数。location
: Virtual DataPort がデータをアップロードする場所。場所はデータソースに応じて変わります。Hadoop データソース (Hive、Impala、Presto、Spark、Denodo 組み込み MPP): 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 サーバーを再起動する必要はありません。
注釈
カタログもスキーマも指定しない場合、テーブルはデフォルトのカタログまたはスキーマに作成されます。
注釈
リモートテーブル名の先頭の文字は、大文字 (A ~ Z) または小文字 (a ~ z) の 1 文字である必要があります。次の文字は、小文字、大文字、数字、またはアンダースコアの 1 文字である必要があります。ターゲットデータソースの予約語をリモートテーブル名にすることはできません。
重要
VQL シェルから CREATE REMOTE TABLE
を実行する場合は、[Retrieve all rows] チェックボックスをチェックします。チェックしないと、VQL シェルの [Limit displayed 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 サーバーを再起動します。
リモートテーブルを作成してデータを挿入した後、データソースによっては、挿入後のコマンドの実行を要求または推奨するものがあります。実行エンジンは、必要に応じてコマンドを自動的に実行します。たとえば、Impala は REFRESH table_name
コマンドの実行を要求し、 COMPUTE STATS table_name
コマンドの実行を推奨します。
Denodo では、Impara と Kudu でのリモートテーブルの作成、サマリの作成、ビューの更新 (「 REFRESH 」を参照) の場合のみ COMPUTE STATS
コマンドを実行します。このコマンドは、ビューのキャッシュの読み込み、データ移動、 INSERT
コマンドの後は実行されません。挿入後にこのコマンドを実行するには、挿入クエリの CONTEXT
に 'compute_stats_on_target' = 'true'
プロパティを追加します。デフォルトでは、Virtual DataPort は COMPUTE STATS
コマンドを Impala 3.x Kudu
でのみ実行し、 Impala 2.x
以前のバージョンでは実行しません。デフォルトの動作を変更するには、以下のコマンドを実行します。
SET 'com.denodo.vdb.util.tablemanagement.sql.ImpalaTableManager.computeStatsOnTarget' = 'true' | 'false';
SET 'com.denodo.vdb.util.tablemanagement.sql.ImpalaKuduTableManager.computeStatsOnTarget' = 'true' | 'false';
必要な権限
このコマンドを実行するには、以下の権限が必要です。
JDBC データソースのデータベースに対する
Connect
権限。リモートテーブルの作成先とする JDBC データソースに対する
Execute
権限。クエリで使用するビューに対する
Execute
権限。
ユーザーは、カスタムテーブル作成テンプレートを使用してリモートテーブルを作成する必要がある場合に備えて、JDBC データソースに対する Write
権限も必要です。
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
に挿入します。