CREATE_REMOTE_TABLE¶
説明
ストアドプロシージャ CREATE_REMOTE_TABLE
は、 リモートテーブル 機能のコンポーネントの 1 つです。管理ガイドの「 リモートテーブル 」のセクションで、リモートテーブルについて詳しく説明しています。
このプロシージャは、以下の処理を実行します。
JDBC データソースの基盤となるデータベースにテーブルを作成する。
Virtual DataPort サーバーでクエリを実行する。
クエリの結果を、手順 1 で作成したデータベースのテーブルに挿入する。
このプロシージャは、手順 1 で作成したテーブルから基本ビューを作成する。
手順 1 ~ 3 を実行するために、このプロシージャは CREATE REMOTE TABLE
コマンドを呼び出して、基本ビューを作成します (手順 4)。
DROP_REMOTE_TABLE プロシージャは、このプロシージャによって作成された基本ビューと、基盤となるデータベースに作成されたテーブルを削除します。
構文
CREATE_REMOTE_TABLE(
remote_table_name : text
, replace_remote_table_if_exist : boolean
, query : text
, datasource_database_name : text
, datasource_name : text
, datasource_catalog : text
, datasource_schema : text
, base_view_database_name : text
, base_view_name : text
, base_view_folder : text
, replace_base_view_if_exist: boolean
, options : text
, create_table_template : text
, create_table_template_parameters : text
)
remote_table_name
: JDBC データソースの基盤となるデータベース内の新しいテーブルの名前。ターゲットデータベース内で有効な ID である必要があり、予約語であってはいけません。先頭の文字は、大文字 (A ~ Z) または小文字 (a ~ z) の 1 文字である必要があります。次の文字は、小文字、大文字、数字、またはアンダースコアの 1 文字である必要があります。replace_remote_table_if_exist
(オプション): この値がtrue
で、同名のテーブルがデータベース (同じスキーマ/カタログ) にすでに存在する場合、このプロシージャはそのテーブルを削除してから再び作成します。デフォルト値はfalse
です。そのため、同名のテーブルがすでに存在する場合、このプロシージャは失敗します。query
: データベースの新しいテーブルに挿入されるデータを取得するために Virtual DataPort サーバーで実行されるクエリ。datasource_database_name
(オプション): 新しいテーブルが作成される JDBC データソースのデータベース。null
の場合、現在のデータベースのdatasource_name
を検索します。datasource_name
: テーブルが作成されるデータベースを指す JDBC データソース。datasource_catalog
: テーブルが作成されるデータベースのカタログ。必須ですが、データベースがカタログをサポートしていない場合、これをnull
に設定します。datasource_schema
: テーブルが作成されるデータベースのスキーマ。必須ですが、データベースがスキーマをサポートしていない場合、これをnull
に設定します。base_view_database_name
(オプション): 基本ビューが作成される Virtual DataPort データベース。null
の場合、基本ビューは現在のデータベースに作成されます。base_view_name
(オプション): 新しい基本ビューの名前。null
の場合、名前はremote_table_name
の値になります。base_view_folder
(オプション): 基本ビューが作成されるフォルダ。フォルダが存在しない場合は、このプロシージャによって作成されます。null
の場合、基本ビューはルートフォルダに作成されます。replace_base_view_if_exist
(オプション):true
で、同名のビューが Virtual DataPort データベースにすでに存在する場合、このプロシージャはそのビューを削除してから再び作成します。デフォルト値はfalse
です。そのため、同名のビューがすでに存在する場合、このプロシージャは失敗します。options
(オプション):CREATE REMOTE TABLE
コマンドの一部のプロパティのデフォルト値を変更するためのオプション。'option1=value1, option2=value2, ...'
という形式で指定します。使用可能なオプションについては、「 CREATE REMOTE TABLE コマンド 」を参照してください。create_table_template
(オプション): データソースにリモートテーブルを作成するために Denodo が使用するCREATE TABLE
コマンドテンプレート。@{parameter_name}
という構文のパラメータを含みます。詳細については、「 テーブル作成テンプレート 」を参照してください。create_table_template_parameters
(オプション): テンプレートのユーザー定義パラメータの値を設定するために使用するプロパティ。形式は、'parameter_name_1=value_1, parameter_name_2=value_2, ...'
です。 オプションexport with properties
を使用してこのプロシージャで作成したビューをエクスポートした場合、これらのプロパティの値は環境プロパティファイルにエクスポートされます。詳細については、「 プロパティファイルへのエクスポート 」を参照してください。
ストアドプロシージャの結果
このプロシージャは、各フェーズのステータスが格納された 3 つの行を返します。このストアドプロシージャの結果には、以下の列が含まれます。
Stored Procedure Result
(text): このフェーズで実行されたタスクの概要。phase
(int): フェーズ番号。3 つのフェーズがあります。remote_table
(text): 基盤となるデータベースに作成されたリモートテーブルの名前。base_view
(text): このプロシージャによって作成された基本ビューの名前。base_view_database
(text): このプロシージャによって基本ビューが作成されたデータベース。inserted_rows
(int): リモートテーブルに挿入された行の数。error
(boolean): フェーズの実行中にエラーが存在した場合は true、それ以外の場合は false。status
(text): フェーズの結果を表す状態。ステータスのリストは以下のとおりです。
OK, UNKNOWN, INVALID_BASE_VIEW_NAME, VIEW_ALREADY_EXISTS, CATALOG_SCHEMA_NOT_SPECIFIED, NO_CREATE_FOLDER_PRIVILEGE, INVALID_FOLDER_NAME, EMPTY_QUERY, MORE_THAN_ONE_QUERY, INVALID_QUERY, DATASOURCE_DOES_NOT_EXIST, INVALID_CATALOG, INVALID_SCHEMA, REMOTE_TABLE_ALREADY_EXISTS
CREATE_REMOTE_TABLE ストアドプロシージャの結果の例
stored procedure result |
phase |
remote_table |
base_view |
database |
inserted_rows |
error |
status |
---|---|---|---|---|---|---|---|
Step 1 of 3: Created remote table '<table_name>' successfully. |
1 |
table_name |
NULL |
NULL |
NULL |
false |
OK |
Step 2 of 3: Inserted 2 rows into remote table '<table_name>'. |
2 |
table_name |
NULL |
NULL |
2 |
false |
OK |
Step 3 of 3: Created base view '<view_name>' successfully in the '<vdp_database>' database. |
3 |
NULL |
view_name |
vdp_database |
NULL |
false |
OK |
注意
ターゲットデータベースが HDFS (Hadoop、Impala、Hive) に基づいている場合、このプロシージャを実行する前に、データソースで一括データロードを有効にする必要があります。
このプロシージャは、アダプターがキャッシュエンジンでサポートされている JDBC データソースに対してのみ機能します (キャッシュエンジンでサポートされているデータベースのリスト)。
Teradata にデータを挿入する場合、実行エンジンは Teradata の増分ロード ( INSERT INTO <view> ON DUPLICATE KEY UPDATE <select query>
) よりも Teradata FastLoad メカニズムを優先します。Teradata FastLoad は、プライマリインデックスのあるテーブルに重複行を挿入することを許可しません。実行エンジンは、Teradata にリモートテーブルを作成するために使用される SELECT クエリに重複行を含めることができるかどうかを確認します。ビューのプライマリキーまたは GROUP BY が含まれる場合、クエリは重複行を返すことはできません。
重複行を返すことができない場合: プライマリインデックスを使用してリモートテーブルを作成します。
重複行を返すことができる場合: プライマリインデックスを使用せずにリモートテーブルを作成します。
VDP はいずれのケースでも FastLoad を使用します。一方、増分ロード機能は、最初のケース (プライマリインデックスを使用してテーブルを作成した場合) でのみ機能します。
必要な権限
ユーザーには、以下の権限が必要です。
JDBC データソースのデータベースに対する
Connect
権限。JDBC データソースに対する
Execute
権限。基本ビューが作成される Virtual DataPort データベースに対する
Connect
権限およびCreate view
権限。基本ビューが作成されるデータベースに対する
Create folder
権限 (このプロシージャがフォルダに基本ビューを作成する必要があり、フォルダが存在しない場合)。クエリで参照されるビューに対する
Execute
権限。
ユーザーは、カスタムテーブル作成テンプレートを使用してリモートテーブルを作成する必要がある場合に備えて、JDBC データソースに対する Write
権限も必要です。
JDBC データソースのユーザーアカウントは、基盤となるデータベースにテーブルを作成できる必要があります。
例
SELECT *
FROM CREATE_REMOTE_TABLE()
WHERE datasource_database_name = 'common_sources'
AND datasource_name = 'ds_jdbc_oracle'
AND datasource_catalog = ''
AND datasource_schema = 'REPORTING'
AND remote_table_name = 'reporting_customer360_state_ca'
AND replace_remote_table_if_exist = true
AND query = 'SELECT * FROM customer WHERE state = ''CA'''
AND base_view_database_name = 'customer360'
AND base_view_name = 'customer360_state_ca'
AND base_view_folder = '/reporting_customer'
AND replace_base_view_if_exist = false;
query
はリテラルであるため、一重引用符をエスケープする必要があります。
この例は、以下の操作を実行します。
「REPORTING」スキーマで、データソース「ds_jdbc_oracle」のデータベースにテーブル「reporting_customer360_state_ca」が存在するかどうかをチェックします。存在する場合、このテーブルを削除します。
同じスキーマで、「query」の結果を格納するためにテーブル「reporting_customer360_state_ca」を作成します。
クエリを実行し、結果をこのテーブルに挿入します。
フォルダ「/reporting_customer」を作成します。
このフォルダに、JDBC 基本ビュー「customer360_state_ca」を作成します。このビューは、データソース「ds_jdbc_oracle」のデータベースの「reporting_customer360_state_ca」テーブルに対してクエリを実行します。
Virtual DataPort Administration Tool
このプロシージャで作成された基本ビューを開くと、ダイアログの最下部にある [Data load query] ボックスにソースクエリが表示されます。
また、ビューの [Edit] ダイアログの [Metadata] タブにも表示されます。