7.4.3 PostgreSQL¶
Doris JDBC Catalog
支持通过标准 JDBC
接口连接 PostgreSQL
数据库。本文档介绍如何配置 PostgreSQL
数据库连接。
1 使用须知¶
要连接到 PostgreSQL
数据库,您需要
-
PostgreSQL 11.x
或更高版本 -
PostgreSQL
数据库的JDBC
驱动程序,您可以从Maven
仓库下载最新或指定版本的PostgreSQL JDBC
驱动程序。推荐使用PostgreSQL JDBC Driver 42.5.x
及以上版本。 -
Doris
每个FE
和BE
节点和PostgreSQL
服务器之间的网络连接,默认端口为5432
。
2 连接 PostgreSQL¶
SQL | |
---|---|
1 2 3 4 5 6 7 8 |
|
Tip
jdbc_url
定义要传递给 PostgreSQL JDBC
驱动程序的连接信息和参数。支持的 URL
的参数可在 PostgreSQL JDBC
驱动程序文档中找到。
2.1 连接安全¶
如果您使用数据源上安装的全局信任证书配置了 TLS
,则可以通过将参数附加到在 jdbc_url
属性中设置的 JDBC
连接字符串来启用集群和数据源之间的 TLS
。
例如,对于版本 42
的 PostgreSQL JDBC
驱动程序,通过将 ssl=true
参数添加到 jdbc_url
配置属性中启用 TLS
:
Bash | |
---|---|
1 |
|
有关 TLS
配置选项的更多信息,请参阅 PostgreSQL JDBC
驱动程序文档。
3 层级映射¶
映射 PostgreSQL
时, Doris
的一个 Database
对应于 PostgreSQL
中指定 database
下的一个 Schema
(如示例中 jdbc_url
参数中 postgres
下的 schemas
)。而 Doris
的 Database
下的 Table
则对应于 PostgreSQL
中,该 Schema
下的 Tables
。即映射关系如下:
Doris | PostgreSQL |
---|---|
Catalog | Database |
Database | Schema |
Table | Table |
4 类型映射¶
4.1 PostgreSQL 到 Doris 类型映射¶
PostgreSQL Type | Doris Type |
---|---|
boolean | BOOLEAN |
smallint/int2 | SMALLINT |
integer/int4 | INT |
bigint/int8 | BIGINT |
decimal/numeric | DECIMAL |
real/float4 | FLOAT |
double precision | DOUBLE |
smallserial | SMALLINT |
serial | INT |
bigserial | BIGINT |
char | CHAR |
varchar/text | STRING |
timestamp/timestampz | DATETIME |
date | DATE |
json/jsonb | STRING |
time | STRING |
interval | STRING |
point/line/lseg/box/path/polygon/circle | STRING |
cidr/inet/macaddr | STRING |
bit | BOOLEAN/STRING |
uuid | STRING |
Other | UNSUPPORTED |
Tip
-
无精度
numeric
会被映射为String
类型,进行数值计算时需要先转换为DECIMAL
类型,且不支持回写。 -
为了更好的读取与计算性能均衡,
Doris
会将JSON
类型映射为STRING
类型。 -
Doris
不支持BIT
类型,BIT
类型会在BIT(1)
时被映射为BOOLEAN
,其他情况下映射为STRING
。 -
Doris
不支持time
类型,TIME
类型会被映射为STRING
。
4.2 时间戳类型处理¶
由于 Doris
不支持带时区的时间戳类型,所以在读取 PostgreSQL
的 timestampz
类型时, Doris
会将其映射为 DATETIME
类型,且会在读取时转换成本地时区的时间。
且由于在 JDBC
类型 Catalog
读取数据时, BE
的 Java
部分使用 JVM
时区。 JVM
时区默认为 BE
部署机器的时区,这会影响 JDBC
读取数据时的时区转换。
为了确保时区一致性,建议在 be.conf
的 JAVA_OPTS
中设置 JVM
时区与 Doris session
的 time_zone
一致。
5 查询优化¶
5.1 谓词下推¶
当执行类似于 where dt = '2022-01-01'
这样的查询时, Doris
能够将这些过滤条件下推到外部数据源,从而直接在数据源层面排除不符合条件的数据,减少了不必要的数据获取和传输。这大大提高了查询性能,同时也降低了对外部数据源的负载。
5.2 行数限制¶
如果在查询中带有 limit
关键字, Doris
会将 limit
下推到 PostgreSQL
,以减少数据传输量。
5.3 转义字符¶
Doris
会在下发到 PostgreSQL
的查询语句中,自动在字段名与表名上加上转义符: ("")
,以避免字段名与表名与 PostgreSQL
内部关键字冲突。