Initial configuration¶
拡張機能と、拡張機能を使用するデータベースオブジェクトを作成する前に、Postgresホストを変更して、サポートライブラリの場所を提供する必要があります。
Postgresをインストールした後、次の場所にあるpostgresql.conf
を変更します。
/var/lib/edb/as_version/data
構成ファイルを変更し、 hdfs_fdw.jvmpath
パラメーターを構成ファイルの最後に追加し、値を設定してJava仮想マシン(libjvm.so
)の場所を指定します。 hdfs_fdw.classpath
の値を設定して、アダプターが使用するJavaクラスファイルの場所を示します。各パス間の区切り文字としてコロン(:)を使用します。例:
hdfs_fdw.classpath=
/usr/edb/as12/lib/HiveJdbcClient-1.0.jar:/home/edb/Projects/hadoop_fdw/hadoop/share/hadoop/common/hadoop-common-2.6.4.jar:/home/edb/Projects/hadoop_fdw/apache-hive-1.0.1-bin/lib/hive-jdbc-1.0.1-standalone.jar
注釈
jarファイル(hive-jdbc-1.0.1-standalone.jar および`hadoop-common-2.6.4.jar` )を、HiveおよびHadoopのソースまたはWebサイトからHadoop Foreign Data WrapperがインストールされているPostgreSQLインスタンスにコピーします。
EDB Postgres Advanced Serverを使用していて、データベースにDATE
列がある場合は、 postgresql.conf
ファイルにedb_redwood_date = OFF を設定する必要があります。
パラメーター値を設定したら、Postgresサーバーを再起動します。 EDB Postgres Advanced Serverホストでのサービスの制御の詳細については、
EDB Postgres Advanced Server documentation を参照してください。
Hadoop Foreign Data Wrapperを使用する前に:
拡張機能を作成する コマンドを使用して、Postgresホストで拡張機能を作成します。
サーバーを作成する コマンドを使用して、Hadoopファイルシステムへの接続を定義します。
ユーザーマッピングを作成する コマンドを使用して、Postgresロールをサーバーに関連付けるマッピングを定義します。
外国のテーブルを作成する コマンドを使用して、Hadoopクラスターにあるデータベースに対応するEDB
Postgres Advanced Serverデータベースにテーブルを定義します。
拡張機能を作成する¶
CREATE EXTENSION コマンドを使用して、 hdfs_fdw
拡張機能を作成します。コマンドを呼び出すには、選択したクライアント(psqlなど)を使用して、HiveまたはSparkサーバーを照会するPostgresデータベースに接続し、コマンドを呼び出します。
CREATE EXTENSION [IF NOT EXISTS] hdfs_fdw [WITH] [SCHEMA schema_name];
パラメーター¶
IF NOT EXISTS
IF NOT EXISTS
句を含めて、同じ名前の拡張機能が既に存在する場合にエラーを返す代わりに通知を発行するようにサーバーに指示します。
schema_name
オプションで、拡張機能のオブジェクトをインストールするスキーマの名前を指定します。
例¶
次のコマンドは、 hdfs_fdw Hadoop Foreign Data
Wrapperをインストールします。
CREATE EXTENSION hdfs_fdw;
外部データラッパー CREATE EXTENSION
コマンドの使用の詳細については、[PostgreSQLドキュメント](https://www.postgresql.org/docs/current/static/sql-createextension.html)を参照してください。
サーバーを作成する¶
CREATE SERVER
コマンドを使用して、外部サーバーへの接続を定義します。構文は次のとおりです。
CREATE SERVER server_name FOREIGN DATA WRAPPER hdfs_fdw
[OPTIONS (option value [, ...])]
サーバーを定義するロールは、サーバーの所有者です。 ALTER SERVER
コマンドを使用して、外部サーバーの所有権を再割り当てします。外部サーバーを作成するには、
CREATE SERVER
コマンドで指定された外部データラッパーに対するUSAGE
特権が必要です。
パラメーター¶
server_name
server_name
を使用して、外部サーバーの名前を指定します。サーバー名はデータベース内で一意である必要があります。
FOREIGN_DATA_WRAPPER
FOREIGN_DATA_WRAPPER
句を含めて、サーバーがクラスターに接続するときにhdfs_fdw
外部データラッパーを使用するように指定します。
OPTIONS
CREATE SERVER コマンドのOPTIONS
句を使用して、外部サーバーの接続情報を指定します。次を含めることができます。
Option |
Description |
|---|---|
host |
Hadoop クラスターのアドレスまたはホスト名。デフォルト値は`localhost`です。 |
port |
Hive ThriftサーバーまたはSpark Thriftサーバーのポート番号。デフォルトは`10000`です。 |
client_type |
クライアントタイプは`hiveserver2`または`spark`を指定します。 Sparkで`ANALYZE`ステートメントを使用するには、 `spark`の値を指定する必要があります。デフォルト値は`hiveserver2`です。 |
auth_type<br /> |
クライアントの認証タイプ。 `LDAP`または`NOSASL`を指定します。 `auth_type`を指定しない場合、データラッパーはユーザーマッピングに基づいて`auth_type`値を決定します。ユーザーマッピングにユーザー名とパスワードが含まれる場合、データラッパーはLDAP認証を使用します。ユーザーマッピングにユーザー名とパスワードが含まれていない場合、データラッパーはNOSASL認証を使用します。 |
connect_timeout |
接続試行がタイムアウトするまでの時間。デフォルト値は300秒です |
enable_join_pushdown |
テーブルレベルのオプションに似ていますが、サーバーレベルで構成されます。 true`の場合、両方のテーブルのすべての行をフェッチしてローカルで結合を実行する代わりに、同じ外部サーバーから2つの外部テーブル間の結合をプッシュします。このオプションを個々のテーブルに設定することもできます。結合に関係するテーブルのいずれかでオプションが `false に設定されている場合、結合はプッシュダウンされません。オプションのテーブルレベルの値は、サーバーレベルのオプション値よりも優先されます。デフォルトは`true`です。 |
fetch_size |
JDBC API `setFetchSize`へのパラメーターとして提供されます。デフォルト値は`10,000`です。 |
log_remote_sql |
`true`の場合、ログにはリモートHiveサーバーで実行されたSQLコマンドとスキャンが繰り返された回数が含まれます。デフォルトは`false`です。 |
query_timeout |
`query_timeout`を使用して、Hiveサーバーが要求を満たさない場合にタイムアウトするまでの秒数を提供します。クエリのタイムアウトは、Hive JDBCドライバーでサポートされていません。 |
use_remote_estimate |
`use_remote_estimate`を含めて、処理コストを見積もるときにリモートサーバーで`EXPLAIN`コマンドを使用するようにサーバーに指示します。デフォルトでは、`use_remote_estimate`は`false`であり、リモートテーブルには1000行があると想定されます。 |
例¶
次のコマンドは、 hdfs_fdw
外部データラッパーを使用して170.11.2.148
のIPアドレスを持つホストに接続するhdfs_server
という名前の外部サーバーを作成します。
CREATE SERVER hdfs_server FOREIGN DATA WRAPPER hdfs_fdw OPTIONS (host 170.11.2.148, port 10000, client_type hiveserver2, auth_type LDAP, connect_timeout 10000, query_timeout 10000);
外部サーバーは、Hadoopクラスター上のクライアントへの接続にデフォルトのポート(10000)を使用します。接続はLDAPサーバーを使用します。
CREATE SERVER コマンドの使用の詳細については、 PostgreSQL documentation
を参照してください。
ユーザーマッピングを作成する¶
CREATE USER MAPPING
コマンドを使用して、Postgresロールを外部サーバーに関連付けるマッピングを定義します。
CREATE USER MAPPING FOR role_name SERVER server_name
[OPTIONS (option value [, ...])];
そのサーバーのユーザーマッピングを作成するには、そのサーバーの所有者である必要があります。
注釈
Hadoop Foreign Data WrapperはNOSASLおよびLDAP認証をサポートしています。 LDAP認証を使用するサーバーのユーザーマッピングを作成している場合は、 OPTIONS 句を使用して、既存のLDAPユーザーの接続資格情報(ユーザー名とパスワード)を指定します。サーバーがNOSASL認証を使用する場合、ユーザーマッピングを作成するときに`OPTIONS` 句を省略します。
パラメーター¶
role_name
role_name を使用して、外部サーバーに関連付けるロールを指定します。
server_name
server_name
を使用して、Hadoopクラスターへの接続を定義するサーバーの名前を指定します。
OPTIONS
OPTIONS 句を使用して、外部サーバーの接続情報を指定します。
LDAP認証を使用している場合は、次を提供します。
username — LDAPサーバー上のユーザーの名前。
password —ユーザー名に関連付けられたパスワード。
ユーザー名とパスワードを指定しない場合、データラッパーはNOSASL認証を使用します。
例¶
次のコマンドは、enterprisedb
という名前のロールのユーザーマッピングを作成します。マッピングはhdfs_server
という名前のサーバーに関連付けられています。
CREATE USER MAPPING FOR enterprisedb SERVER hdfs_server;
データベースホストがLDAP認証を使用する場合、ユーザーマッピングを作成するときに接続資格情報を提供します。
CREATE USER MAPPING FOR enterprisedb SERVER hdfs_server OPTIONS (username alice, password 1safepwd);
このコマンドは、hdfs_server
という名前のサーバーに関連付けられているenterprisedb
という名前のロールのユーザーマッピングを作成します。
LDAPサーバーに接続すると、HiveまたはSparkサーバーはalice
として認証し、1safepwd のパスワードを提供します。
CREATE USER MAPPING コマンドの詳細については、 PostgreSQL documentation
を参照してください。
外国のテーブルを作成する¶
外部テーブルは、Hadoopホストにあるテーブルへのポインターです。
Postgresサーバーで外部テーブル定義を作成する前に、HiveまたはSparkサーバーに接続してテーブルを作成します。テーブルの列は、Postgresサーバー上のテーブルの列にマップされます。次に、
CREATE FOREIGN TABLE
コマンドを使用して、Hadoopホストにあるテーブルに対応する列を持つテーブルをPostgresサーバーに定義します。構文は次のとおりです。
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
{ column_name data_type [ OPTIONS ( option value [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint }
[, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
SERVER server_name [ OPTIONS ( option value [, ... ] ) ]
column_constraint は次のとおりです。
[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL | CHECK (expr) [ NO INHERIT ] | DEFAULT default_expr }
table_constraint は次のとおりです。
[ CONSTRAINT constraint_name ] CHECK (expr) [ NO INHERIT ]
パラメーター¶
table_name
外部テーブルの名前を指定します。スキーマ名を含めて、外部テーブルが存在するスキーマを指定します。
IF NOT EXISTS
IF NOT EXISTS
句を含めて、同じ名前のテーブルが既に存在する場合にエラーを返さないようにサーバーに指示します。同名のテーブルが存在する場合、サーバーは通知を発行します。
column_name
新しいテーブルの列の名前を指定します。各列は、HiveまたはSparkサーバーで説明されている列に対応しています。
data_type
列のデータ型を指定します。可能な場合、PostgresサーバーとHiveまたはSparkサーバーの各列に同じデータ型を指定します。同じ名前のデータ型が利用できない場合、PostgresサーバーはHiveまたはSparkサーバーと互換性のある型にデータ型をキャストしようとします。サーバーが互換性のあるデータ型を識別できない場合、エラーを返します。
COLLATE collation
COLLATE
句を含めて、列に照合を割り当てます。デフォルトでは、列データ型のデフォルトの照合が使用されます。
INHERITS (parent_table [, ... ])
INHERITS
句を含めて、新しい外部テーブルがすべての列を自動的に継承するテーブルのリストを指定します。親テーブルは、プレーンテーブルまたは外部テーブルです。
CONSTRAINT constraint_name
列またはテーブルの制約のオプションの名前を指定します。指定しない場合、サーバーは制約名を生成します。
NOT NULL
NOT NULL
キーワードを含めて、列にnull値を含めることができないことを示します。
NULL
NULL
キーワードを含めて、列にNULL値を含めることが許可されていることを示します。これがデフォルトです。
CHECK (expr) [NO INHERIT]
CHECK
句を使用して、テーブルの各行が満たす必要があるブール結果を生成する式を指定します。列制約として指定されたチェック制約はその列の値のみを参照できますが、テーブル制約に表示される式は複数の列を参照できます。
CHECK
式には、サブクエリを含めたり、現在の行の列以外の変数を参照したりできません。
NO INHERIT
キーワードを含めて、制約が子テーブルに伝播できないことを指定します。
DEFAULT default_expr
DEFAULT
句を含めて、列定義が表示される列のデフォルトのデータ値を指定します。デフォルトの式のデータ型は、列のデータ型と一致する必要があります。
SERVER server_name [OPTIONS (option 'value' [, ... ] ) ]
Hadoopファイルシステムにあるテーブルを照会できる外部テーブルを作成するには、
SERVER 句を含め、Hadoopデータアダプターを使用する外部サーバーの
server_name 値を指定します。
OPTIONS 句を使用して、次のオプションとそれに対応する値を指定します。
Option |
Value |
|---|---|
dbname |
The name of the database on the Hive server. The database name is required. |
table_name |
The name of the table on the Hive server. The default is the name of the foreign table. |
enable_join_pushdown |
Similar to the server-level option but configured at table level. If true, pushes the join between two foreign tables from the same foreign server instead of fetching all the rows for both the tables and performing a join locally. You can also set this option for an individual table. If any of the tables involved in the join has set the option to false, then the join isn't pushed down. The table-level value of the option takes precedence over the server-level option value. Default is true. |
例¶
分散ファイルシステムに保存されているデータを使用するには、Hadoopテーブルの列をPostgresテーブルの列にマップするテーブルをPostgresホストに作成する必要があります。たとえば、次の定義を持つHadoopテーブルの場合。
CREATE TABLE weblogs (
client_ip STRING,
full_request_date STRING,
day STRING,
month STRING,
month_num INT,
year STRING,
hour STRING,
minute STRING,
second STRING,
timezone STRING,
http_verb STRING,
uri STRING,
http_status_code STRING,
bytes_returned STRING,
referrer STRING,
user_agent STRING)
row format delimited
fields terminated by \t;
Postgresサーバーで同等のテーブルを作成するコマンドを実行します。
CREATE FOREIGN TABLE weblogs
(
client_ip TEXT,
full_request_date TEXT,
day TEXT,
Month TEXT,
month_num INTEGER,
year TEXT,
hour TEXT,
minute TEXT,
second TEXT,
timezone TEXT,
http_verb TEXT,
uri TEXT,
http_status_code TEXT,
bytes_returned TEXT,
referrer TEXT,
user_agent TEXT
)
SERVER hdfs_server
OPTIONS (dbname webdata, table_name weblogs);
SERVER 句を含めて、Hadoopファイルシステム(webdata
)の名前とPostgresサーバー上のテーブルに対応するテーブルの名前(weblogs
)を指定します。
CREATE FOREIGN TABLE コマンドの使用の詳細については、 PostgreSQL documentation
を参照してください。
データ型のマッピング¶
外部データラッパーを使用する場合、HiveサーバーにあるテーブルをミラーリングするテーブルをPostgresサーバーに作成する必要があります。 Hadoopデータラッパーは、次のHiveデータ型をターゲットのPostgres型に自動的に変換します。
Hive |
Postgres |
|---|---|
BIGINT |
BIGINT/INT8 |
BOOLEAN |
BOOL/BOOLEAN |
BINARY |
BYTEA |
CHAR |
CHAR |
DATE |
DATE |
DOUBLE |
FLOAT8 |
FLOAT |
FLOAT/FLOAT4 |
INT/INTEGER |
INT/INTEGER/INT4 |
SMALLINT |
SMALLINT/INT2 |
STRING |
TEXT |
TIMESTAMP |
TIMESTAMP |
TINYINT |
INT2 |
VARCHAR |
VARCHAR |
ドロップエクステンション¶
DROP EXTENSION
コマンドを使用して、拡張機能を削除します。コマンドを呼び出すには、選択したクライアント(たとえば、
psql)を使用して、Hadoopサーバーを削除するPostgresデータベースに接続し、コマンドを実行します。
DROP EXTENSION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ];
パラメーター¶
IF EXISTS
IF EXISTS
句を含めて、指定された名前の拡張機能が存在しない場合にエラーを返す代わりに通知を発行するようにサーバーに指示します。
name
必要に応じて、インストールされている拡張機能の名前を指定します。
CASCADE
拡張機能に依存するオブジェクトを自動的にドロップします。他のすべての依存オブジェクトも削除します。
RESTRICT
同じ DROP
コマンドにリストされているメンバーオブジェクトと拡張機能以外のオブジェクトが依存している場合、拡張機能を削除しないでください。
例¶
次のコマンドは、既存のデータベースから拡張機能を削除します。
DROP EXTENSION hdfs_fdw;
- 外部データラッパー
DROP EXTENSIONコマンドの使用の詳細については、 PostgreSQL documentation を参照してください。
ドロップサーバー¶
DROP SERVER
コマンドを使用して、外部サーバーへの接続を削除します。構文は次のとおりです。
DROP SERVER [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
サーバーを削除するロールはサーバーの所有者です。 ALTER SERVER
コマンドを使用して、外部サーバーの所有権を再割り当てします。外部サーバーを削除するには、
DROP SERVER
コマンドで指定された外部データラッパーに対するUSAGE
権限が必要です。
パラメーター¶
IF EXISTS
IF EXISTS
句を含めて、指定された名前のサーバーが存在しない場合にエラーを返す代わりに通知を発行するようにサーバーに指示します。
name
オプションで、インストールされたサーバーの名前を指定します。
CASCADE
サーバーに依存するオブジェクトを自動的に削除します。他のすべての依存オブジェクトも削除します。
RESTRICT
サーバーに依存しているオブジェクトがある場合は、サーバーを削除しないでください。
例¶
次のコマンドは、hdfs_server という名前の外部サーバーを削除します。
DROP SERVER hdfs_server;
DROP SERVER コマンドの使用の詳細については、 PostgreSQL documentation
を参照してください。
DROPユーザーマッピング¶
DROP USER MAPPING
コマンドを使用して、Postgresロールを外部サーバーに関連付けるマッピングを削除します。そのサーバーのユーザーマッピングを削除するには、そのサーバーの所有者である必要があります。
DROP USER MAPPING [ IF EXISTS ] FOR { user_name | USER | CURRENT_USER | PUBLIC } SERVER server_name;
パラメーター¶
IF EXISTS
ユーザーマッピングが存在しない場合にエラーを返す代わりに通知を発行するようにサーバーに指示するには、
IF EXISTS 句を含めます。
user_name
マッピングのユーザー名を指定します。
server_name
Hadoopクラスターへの接続を定義するサーバーの名前を指定します。
例¶
次のコマンドは、enterprisedb
という名前のロールのユーザーマッピングを削除します。マッピングはhdfs_server
という名前のサーバーに関連付けられています。
DROP USER MAPPING FOR enterprisedb SERVER hdfs_server;
DROP USER MAPPING コマンドの詳細については、 PostgreSQL documentation
を参照してください。
外国のテーブルをドロップ¶
外部テーブルは、Hadoopホストにあるテーブルへのポインターです。
DROP FOREIGN TABLE
コマンドを使用して、外部テーブルを削除します。外部テーブルの所有者のみが削除できます。
DROP FOREIGN TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
パラメーター¶
IF EXISTS
IF EXISTS
句を含めて、指定された名前の外部テーブルが存在しない場合にエラーを返す代わりに通知を発行するようにサーバーに指示します。
name
外部テーブルの名前を指定します。
CASCADE
外部テーブルに依存するオブジェクトを自動的に削除します。他のすべての依存オブジェクトも削除します。
RESTRICT
オブジェクトが依存している場合、外部テーブルを削除しないでください。
例¶
DROP FOREIGN TABLE warehouse;
DROP FOREIGN TABLE コマンドの使用の詳細については、 PostgreSQL documentation
を参照してください。