PostgreSQLコネクタ¶
PostgreSQLコネクタを使用すると、外部PostgreSQLデータベース内のテーブルのクエリと作成が可能です。これは、PostgreSQLとHive、または2つの異なるPostgreSQLインスタンス間など、異なるシステム間のデータの結合に使用できます。
設定¶
PostgreSQLコネクタを設定するには、etc/catalog
にカタログプロパティファイル(例:postgresql.properties
)を作成し、PostgreSQLコネクタをpostgresql
カタログとしてマウントします。以下の内容でファイルを作成し、接続プロパティをセットアップに合わせて適宜変更してください。
connector.name=postgresql
connection-url=jdbc:postgresql://example.net:5432/database
connection-user=root
connection-password=secret
複数のPostgreSQLデータベースまたはサーバ¶
PostgreSQLコネクタは、PostgreSQLサーバ内の単一のデータベースのみにアクセスできます。そのため、複数のPostgreSQLデータベースを使用する場合、または複数のPostgreSQLサーバに接続する場合は、PostgreSQLコネクタの複数のインスタンスを設定する必要があります。
別のカタログを追加するには、etc/catalog
に別の名前(.properties
で終わるようにする)のプロパティファイルを単純に追加します。たとえば、プロパティファイルにsales.properties
という名前を付ける場合、Prestoは設定されたコネクタを使用してsales
という名前のカタログを作成します。
一般的な設定プロパティ¶
プロパティ名 |
説明 |
デフォルト値 |
---|---|---|
|
JDBCドライバのユーザー名である |
|
|
JDBCドライバのユーザーパスワードである |
|
|
データセットとテーブル名を大文字小文字を区別せずに照合します。 |
|
|
リモートデータセットとテーブル名がキャッシュされる期間。 |
|
PostgreSQLへのクエリ¶
PostgreSQLコネクタは、PostgreSQLスキーマごとにスキーマを提供します。利用可能なPostgreSQLスキーマは、SHOW SCHEMAS
を実行することで確認できます。
SHOW SCHEMAS FROM postgresql;
web
という名前のPostgreSQLスキーマがある場合、SHOW TABLES
を実行することで、このスキーマ内のテーブルを表示できます。
SHOW TABLES FROM postgresql.web;
web
データベースのclicks
テーブルの列のリストは、次のいずれかの方法で確認できます。
DESCRIBE postgresql.web.clicks;
SHOW COLUMNS FROM postgresql.web.clicks;
最後に、web
スキーマのclicks
テーブルにアクセスできます。
SELECT * FROM postgresql.web.clicks;
カタログプロパティファイルに別の名前を付けた場合は、上記の例でpostgresql
の代わりにそのカタログ名を使用してください。
型マッピング¶
PrestoDBとPostgreSQLはそれぞれ、相手がサポートしていない型をサポートしています。PostgreSQLからの読み取りまたはPostgreSQLへの書き込みを行う場合、PrestoはPostgreSQLのデータ型を等価なPrestoデータ型に、そしてPrestoから等価なPostgreSQLデータ型に変換します。
PostgreSQLからPrestoDBへの型マッピング¶
コネクタは、PostgreSQLの型を対応するPrestoDBの型にマッピングします。
PostgreSQL型 |
PrestoDB型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
その他の型はサポートされていません。
PrestoDBからPostgreSQLへの型マッピング¶
コネクタは、PrestoDBの型を対応するPostgreSQLの型にマッピングします。
PrestoDB型 |
PostgreSQL型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
その他の型はサポートされていません。
サポートされていない列を持つテーブル¶
Prestoコネクタを使用してPostgreSQLテーブルをクエリし、そのテーブルにサポートされている列がないか、サポートされていないデータ型のみが含まれている場合、Prestoは次の例のようなエラーを返します。
クエリ 20231120_102910_00004_35dqb は失敗しました: テーブル 'public.unsupported_type_table' には、サポートされている列がありません(すべての 1 列がサポートされていません)。
SQLサポート¶
PostgreSQLコネクタでは、テーブルのクエリと作成が可能です。サポートされているSQL操作の例を以下に示します。
ALTER TABLE¶
ALTER TABLE postgresql.public.sample_table ADD COLUMN new_col INT;
ALTER TABLE postgresql.public.sample_table DROP COLUMN new_col;
ALTER TABLE postgresql.public.sample_table RENAME COLUMN is_active TO is_enabled;
ALTER TABLE postgresql.public.sample_table RENAME TO renamed_table;
注記
Prestoでは、ALTER TABLEコマンドを使用して列のデータ型を直接変更することはできません。
ALTER TABLE postgresql.public.users ALTER COLUMN age TYPE BIGINT;
次の例のようなエラーが返されます。
クエリ 20240322_091317_00007_syzb3 は失敗しました: 1行目、19文字目: 一致しない入力 'ALTER'。 期待される入力: 'FUNCTION'、'SCHEMA'、'TABLE'
CREATE TABLE¶
public
スキーマにtest_integer
という名前の新しいテーブルを作成します。
CREATE TABLE postgresql.public.test_integer ( id INTEGER );
注記
Prestoは主キー制約を強制しません。たとえば、次のステートメントは
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR,
email VARCHAR
);
次の例のようなエラーが返されます。
クエリ 20240322_095447_00010_syzb3 は失敗しました: 2行目、19文字目: 一致しない入力 'PRIMARY'。 期待される入力: ')'、','
CREATE TABLE AS SELECT¶
既存のテーブルrenamed_table
から新しいテーブルnew_table
を作成します。
CREATE TABLE postgresql.public.new_table AS SELECT * FROM postgresql.public.renamed_table;
記述¶
web
データベース内の clicks
テーブルのカラム一覧を表示するには、以下のいずれかの方法を使用します。
DESCRIBE postgresql.web.clicks;
SHOW COLUMNS FROM postgresql.web.clicks;
INSERT INTO¶
renamed_table
テーブルにデータ挿入します。
INSERT INTO postgresql.public.renamed_table (id, name) VALUES (1, 'Test');
SELECT¶
SELECT * FROM postgresql.public.test_integer;
SHOW SCHEMAS¶
利用可能なPostgreSQLスキーマを表示します。
SHOW SCHEMAS FROM postgresql;
SHOW TABLES¶
web
という名前のPostgreSQLスキーマ内のテーブルを表示します。
SHOW TABLES FROM postgresql.web;
TRUNCATE¶
テーブルrenamed_table
からすべてのデータを削除します(テーブル自体は削除しません)。
TRUNCATE TABLE postgresql.public.renamed_table;
PostgreSQLコネクタの制限¶
以下のSQL文はサポートされていません。