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という名前のカタログを作成します。

一般的な設定プロパティ

プロパティ名

説明

デフォルト値

user-credential-name

JDBCドライバのユーザー名であるextraCredentialsプロパティの名前。 パラメータリファレンスextraCredentialsを参照してください。

password-credential-name

JDBCドライバのユーザーパスワードであるextraCredentialsプロパティの名前。 パラメータリファレンスextraCredentialsを参照してください。

case-insensitive-name-matching

データセットとテーブル名を大文字小文字を区別せずに照合します。

false

case-insensitive-name-matching.cache-ttl

リモートデータセットとテーブル名がキャッシュされる期間。0msに設定すると、キャッシュが無効になります。

1m

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への型マッピング

PostgreSQL型

PrestoDB型

BIT

BOOLEAN

BOOLEAN

BOOLEAN

SMALLINT

SMALLINT

INTEGER

INTEGER

BIGINT

BIGINT

DOUBLE PRECISION

DOUBLE

REAL

REAL

NUMERIC(p, s)

DECIMAL(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

ENUM

VARCHAR

BYTEA

VARBINARY

DATE

DATE

TIME

TIME

TIMESTAMP

TIMESTAMP

TIMESTAMPTZ

TIMESTAMP

MONEY

DOUBLE

UUID

UUID

JSON

JSON

JSONB

JSON

その他の型はサポートされていません。

PrestoDBからPostgreSQLへの型マッピング

コネクタは、PrestoDBの型を対応するPostgreSQLの型にマッピングします。

PrestoDBからPostgreSQLへの型マッピング

PrestoDB型

PostgreSQL型

BOOLEAN

BOOLEAN

SMALLINT

SMALLINT

INTEGER

INTEGER

BIGINT

BIGINT

DOUBLE

DOUBLE PRECISION

DECIMAL(p, s)

NUMERIC(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

VARBINARY

BYTEA

DATE

DATE

TIME

TIME

TIMESTAMP

TIMESTAMP

UUID

UUID

その他の型はサポートされていません。

サポートされていない列を持つテーブル

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文はサポートされていません。