メインコンテンツまでスキップ
に最終更新

PostgreSQL JDBC カタログ

Doris JDBC Catalog は、標準の JDBC インターフェースを介した PostgreSQL データベースへの接続をサポートします。このドキュメントでは、PostgreSQL データベースへの接続方法を説明します。

JDBC Catalog の概要については、JDBC Catalog の概要を参照してください。

利用上の注意​

PostgreSQL データベースに接続するには、以下が必要です。

  • PostgreSQL 11.x 以降

  • PostgreSQL データベース用の JDBC ドライバー。最新版または指定したバージョンをMaven Repositoryからダウンロードできます。PostgreSQL JDBC Driver のバージョン 42.5.x 以降を推奨します。

  • Doris の各 FE ノードおよび BE ノードと PostgreSQL サーバーとのネットワーク接続。デフォルトのポートは 5432 です。

PostgreSQL への接続​

CREATE CATALOG postgresql_catalog PROPERTIES (
'type' = 'jdbc',
'user' = 'username',
'password' = 'pwd',
'jdbc_url' = 'jdbc:postgresql://host:5432/postgres',
'driver_url' = 'postgresql-42.5.6.jar',
'driver_class' = 'org.postgresql.Driver'
);

jdbc_url には、PostgreSQL JDBC ドライバーに渡す接続情報とパラメーターを指定します。サポートされる URL パラメーターについては、PostgreSQL JDBC Driver のドキュメントを参照してください。

接続のセキュリティ​

データソースにグローバルに信頼された証明書がインストールされ、TLS が設定されている場合は、jdbc_url プロパティに設定する JDBC 接続文字列にパラメーターを追加して、クラスターとデータソース間の TLS を有効にできます。

たとえば、PostgreSQL JDBC ドライバーのバージョン 42 では、jdbc_url 設定プロパティに ssl=true パラメーターを追加して TLS を有効にします。

"jdbc_url"="jdbc:postgresql://example.net:5432/database?ssl=true"

TLS の設定オプションについて詳しくは、PostgreSQL JDBC Driver のドキュメントを参照してください。

階層マッピング​

PostgreSQL をマッピングする場合、Doris のデータベースは、PostgreSQL の指定したデータベース内のスキーマに対応します(例の jdbc_url パラメーターでは postgres)。Doris のデータベース内のテーブルは、PostgreSQL のそのスキーマ内のテーブルに対応します。対応関係は次のとおりです。

DorisPostgreSQL
カタログデータベース
データベーススキーマ
テーブルテーブル

カラム型のマッピング​

PostgreSQL の型Doris の型
booleanboolean
smallint/int2smallint
integer/int4int
bigint/int8bigint
decimal/numericdecimal(P, S) / string精度が指定されていない Numeric は string 型にマッピングされます。数値計算には decimal 型への変換が必要で、書き戻しはサポートされません。
real/float4float
doubledouble
smallserialsmallint
serialint
bigserialbigint
char(N)char(N)
varchar/textstring
timestamp(S)datetime(S)
timestamptz(S)TIMESTAMPTZ(S)4.1.5 以降、この型は常に TIMESTAMPTZ(S) にマッピングされます。enable.mapping.timestamp_tz プロパティは互換性のために残されていますが、false に設定しても DATETIME へのマッピングには戻りません。精度の上限は 6 のため、それを超える精度は失われます。以前のバージョンでは、このプロパティで従来のマッピングを選択できます。
datedate
json/jsonbstring読み取りと計算のパフォーマンスのバランスを高めるため、Doris は JSON 型を STRING 型にマッピングします。
timestringDoris は time 型をサポートしていないため、time 型は string にマッピングされます。
intervalstring
point/line/lseg/box/path/polygon/circlestring
cidr/inet/macaddrstring
uuidstring
bitboolean / stringDoris は bit 型をサポートしていません。bit(1) は boolean に、それ以外は string にマッピングされます。
byteaVARBINARY4.1.5 以降、この型は常に VARBINARY にマッピングされます。enable.mapping.varbinary プロパティは互換性のために残されていますが、false に設定しても STRING へのマッピングには戻りません。以前のバージョンでは、このプロパティで従来のマッピングを選択できます。
arrayarray配列型のマッピング方法については、以下の説明を参照してください。
otherUNSUPPORTED
  • 配列型

    PostgreSQL では、配列型を次のように定義できます。

    col1 text[]
    col2 in4[][]

    ただし、PostgreSQL のメタデータから配列の次元数を直接取得することはできません。たとえば、text[] は一次元配列の場合も二次元配列の場合もあります。配列の次元数は、データが書き込まれた後にのみ判別できます。

    Doris では配列の次元数を明示的に宣言する必要があります。そのため、PostgreSQL の対応する配列カラムにデータが含まれている場合にのみ、Doris は正しくマッピングできます。データが含まれていない場合、その配列カラムは UNSUPPORTED にマッピングされます。

付録​

タイムゾーンに関する問題​

Doris はタイムゾーン付きの timestamp 型をサポートしていないため、PostgreSQL の timestampz 型を読み取る際には DATETIME 型にマッピングし、読み取り時にローカルタイムゾーンの時刻へ変換します。

また、JDBC 型の Catalog からデータを読み取る際、BE の Java 部分は JVM のタイムゾーンを使用します。JVM のタイムゾーンはデフォルトで BE を配置したマシンのタイムゾーンになるため、JDBC によるデータの読み取り時のタイムゾーン変換に影響します。

タイムゾーンを一致させるため、JAVA_OPTS で指定する JVM のタイムゾーンを、be.conf において Doris セッションの time_zone と一致するように設定することを推奨します。