tencent cloud

文档反馈

JDBC Catalog

最后更新时间:2024-06-27 11:16:10
    说明:
    该功能适用于 TCHouse-D 1.2及后续版本。
    JDBC Catalog 通过标准 JDBC 协议,连接其他数据源。连接后,TCHouse-D 会自动同步数据源下的 Database 和 Table 的元数据,以便快速访问这些外部数据。

    创建 Catalog

    MySQL

    CREATE CATALOG jdbc_mysql PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:mysql://127.0.0.1:3306/demo",
    "driver_url" = "mysql-connector-java-5.1.47.jar",
    "driver_class" = "com.mysql.jdbc.Driver");

    PostgreSQL

    CREATE CATALOG jdbc_postgresql PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:postgresql://127.0.0.1:5449/demo",
    "driver_url" = "postgresql-42.5.1.jar",
    "driver_class" = "org.postgresql.Driver");
    映射 PostgreSQL 时,Doris 的一个 Database 对应于 PostgreSQL 中指定 Catalog 下的一个 Schema(如示例中 jdbc_url 参数中 "demo"下的 schemas)。而 Doris 的 Database 下的 Table 则对应于 PostgreSQL 中,Schema 下的 Tables。即映射关系如下:
    Doris
    PostgreSQL
    Catalog
    Database
    Database
    Schema
    Table
    Table
    通过 SQL 语句来获得 PG user 能够访问的所有 schema 并将其映射为 Doris 的 database
    select nspname from pg_namespace where has_schema_privilege('<UserName>', nspname, 'USAGE');

    Oracle

    CREATE CATALOG jdbc_oracle PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:oracle:thin:@127.0.0.1:1521:helowin",
    "driver_url" = "ojdbc6.jar",
    "driver_class" = "oracle.jdbc.driver.OracleDriver");
    映射 Oracle 时,Doris 的一个 Database 对应于 Oracle 中的一个 User。而 Doris 的 Database 下的 Table 则对应于 Oracle 中,该 User 下的有权限访问的 Table。即映射关系如下:
    Doris
    Oracle
    Catalog
    Database
    Database
    User
    Table
    Table

    Clickhouse

    CREATE CATALOG jdbc_clickhouse PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:clickhouse://127.0.0.1:8123/demo",
    "driver_url" = "clickhouse-jdbc-0.3.2-patch11-all.jar",
    "driver_class" = "com.clickhouse.jdbc.ClickHouseDriver");

    SQLServer

    CREATE CATALOG sqlserver_catalog PROPERTIES (
    "type"="jdbc",
    "user"="SA",
    "password"="Doris123456",
    "jdbc_url" = "jdbc:sqlserver://localhost:1433;DataBaseName=doris_test", "driver_url" = "mssql-jdbc-11.2.3.jre8.jar",
    "driver_class" = "com.microsoft.sqlserver.jdbc.SQLServerDriver");
    映射 SQLServer 时,Doris 的一个 Database 对应于 SQLServer 中指定 Database(如示例中 jdbc_url 参数中的 "doris_test")下的一个 Schema。而 Doris 的 Database 下的 Table 则对应于 SQLServer 中,Schema 下的 Tables。即映射关系如下:
    Doris
    SQLServer
    Catalog
    Database
    Database
    Schema
    Table
    Table

    Doris

    JDBC Catalog 也支持连接另一个 Doris 数据库:
    CREATE CATALOG doris_catalog PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:mysql://127.0.0.1:9030?useSSL=false",
    "driver_url" = "mysql-connector-java-5.1.47.jar",
    "driver_class" = "com.mysql.jdbc.Driver");
    目前 JDBC Catalog 连接一个 Doris 数据库只支持用5.x版本的 JDBC jar 包。如果使用8.x JDBC jar 包,可能会出现列类型无法匹配问题。

    参数说明

    参数
    是否必须
    默认值
    说明
    user
    -
    对应数据库的用户名
    password
    -
    对应数据库的密码
    jdbc_url
    -
    JDBC 连接串
    driver_url
    -
    JDBC Driver Jar 包名称*
    driver_class
    -
    JDBC Driver Class 名称
    only_specified_database
    "false"
    指定是否只同步指定的 database
    lower_case_table_names
    "false"
    是否以小写的形式同步 JDBC 外部数据源的表名
    include_database_list
    ""
    当 only_specified_database=true 时,指定同步多个 database,以','分隔。db 名称是大小写敏感的
    exclude_database_list
    ""
    当 only_specified_database=true 时,指定不需要同步的多个 database,以','分割。db名称是大小写敏感的

    驱动包路径

    driver_url 可以通过以下三种方式指定:
    1. 文件名。如 mysql-connector-java-5.1.47.jar。需将 Jar 包预先存放在 FE 和 BE 部署目录的 jdbc_drivers/ 目录下。系统会自动在这个目录下寻找。该目录的位置,也可以由 fe.conf 和 be.conf 中的 jdbc_drivers_dir 配置修改。
    2. 本地绝对路径。如 file:///path/to/mysql-connector-java-5.1.47.jar。需将 Jar 包预先存放在所有 FE/BE 节点指定的路径下。
    3. Http 地址。如:https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/jdbc_driver/mysql-connector-java-5.1.47.jar。系统会从这个 http 地址下载 Driver 文件。仅支持无认证的 http 服务。

    指定同步数据库

    only_specified_database:在 jdbc 连接时可以指定链接到哪个 database/schema,如:MySQL 中 jdbc_url 中可以指定 database,pg 的 jdbc_url 中可以指定 currentSchema。
    include_database_list:当 only_specified_database=true 时,指定需要同步的 database,以','分割。默认为'',即不做任何过滤,同步所有 database。db 名称是大小写敏感的
    exclude_database_list:当 only_specified_database=true 时,指定不需要同步的多个 database,以','分割。默认为'',即不做任何过滤,同步所有database。db 名称是大小写敏感的。
    include_database_listexclude_database_list 有重合的 database 配置时,exclude_database_list会优先生效。
    如果使用该参数时连接 Oracle 数据库,要求使用 ojdbc8.jar 以上版本 jar 包。

    数据查询

    select * from mysql_catalog.mysql_database.mysql_table where t1 > 1000 and t2 ='term';
    由于可能存在使用数据库内部的关键字作为字段名,为解决这种状况下仍能正确查询,所以在 SQL 语句中,会根据各个数据库的标准自动在字段名与表名上加上转义符。例如 MYSQL(``)、PostgreSQL("")、SQLServer([])、ORACLE(""),所以此时可能会造成字段名的大小写敏感,具体可以通过 explain sql,查看转义后下发到各个数据库的查询语句。

    列类型映射

    MySQL

    MYSQL Type
    Doris Type
    Comment
    BOOLEAN
    BOOLEAN
    -
    TINYINT
    TINYINT
    -
    SMALLINT
    SMALLINT
    -
    MEDIUMINT
    INT
    -
    INT
    INT
    -
    BIGINT
    BIGINT
    -
    UNSIGNED TINYINT
    SMALLINT
    Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
    UNSIGNED MEDIUMINT
    INT
    Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
    UNSIGNED INT
    BIGINT
    Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
    UNSIGNED BIGINT
    LARGEINT
    -
    FLOAT
    FLOAT
    -
    DOUBLE
    DOUBLE
    -
    DECIMAL
    DECIMAL
    -
    DATE
    DATE
    -
    TIMESTAMP
    DATETIME
    -
    DATETIME
    DATETIME
    -
    YEAR
    SMALLINT
    -
    TIME
    STRING
    -
    CHAR
    CHAR
    -
    VARCHAR
    VARCHAR
    -
    TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB、TINYSTRING、STRING、MEDIUMSTRING、LONGSTRING、BINARY、VARBINARY、JSON、SET、BIT
    STRING
    -
    Other
    UNSUPPORTED
    -

    PostgreSQL

    POSTGRESQL Type
    Doris Type
    Comment
    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
    DATETIME
    -
    date
    DATE
    -
    time
    STRING
    -
    interval
    STRING
    -
    point/line/lseg/box/path/polygon/circle
    STRING
    -
    cidr/inet/macaddr
    STRING
    -
    bit/bit(n)/bit varying(n)
    STRING
    bit 类型映射为 doris 的 STRING 类型,读出的数据是 true/false,而不是1/0
    uuid/JSONB
    STRING
    -
    Other
    UNSUPPORTED
    -

    Oracle

    ORACLE Type
    Doris Type
    Comment
    number(p) / number(p,0)
    TINYINT/SMALLINT/INT/BIGINT/LARGEINT
    Doris会根据p的大小来选择对应的类型:p < 3 -> TINYINT; p < 5 -> SMALLINT; p < 10 -> INT; p < 19 -> BIGINT; p > 19 -> LARGEINT
    number(p,s), [ if(s>0 && p>s) ]
    DECIMAL(p,s)
    -
    number(p,s), [ if(s>0 && p < s) ]
    DECIMAL(s,s)
    -
    number(p,s), [ if(s<0) ]
    TINYINT/SMALLINT/INT/BIGINT/LARGEINT
    s<0的情况下, Doris会将p设置为 p+|s|, 并进行和number(p) / number(p,0)一样的映射
    number
    -
    Doris 目前不支持未指定 p 和 s 的 oracle 类型
    decimal
    DECIMAL
    -
    float/real
    DOUBLE
    -
    DATE
    DATETIME
    -
    TIMESTAMP
    DATETIME
    -
    CHAR/NCHAR
    STRING
    -
    VARCHAR2/NVARCHAR2
    STRING
    -
    LONG/ RAW/ LONG RAW/ INTERVAL
    STRING
    -
    Other
    UNSUPPORTED
    -

    SQLServer

    SQLServer Type
    Doris Type
    Comment
    bit
    BOOLEAN
    -
    tinyint
    SMALLINT
    SQLServer 的 tinyint 是无符号数,所以映射为 Doris 的 SMALLINT
    smallint
    SMALLINT
    -
    int
    INT
    -
    bigint
    BIGINT
    -
    real
    FLOAT
    -
    float
    DOUBLE
    -
    money
    DECIMAL(19,4)
    -
    smallmoney
    DECIMAL(10,4)
    -
    decimal/numeric
    DECIMAL
    -
    date
    DATE
    -
    datetime/datetime2/smalldatetime
    DATETIMEV2
    -
    char/varchar/text/nchar/nvarchar/ntext
    STRING
    -
    binary/varbinary
    STRING
    -
    time/datetimeoffset
    STRING
    -
    Other
    UNSUPPORTED
    -

    Clickhouse

    ClickHouse Type
    Doris Type
    Comment
    Bool
    BOOLEAN
    -
    String
    STRING
    -
    Date/Date32
    DATEV2
    Jdbc Catlog 连接 ClickHouse 时默认使用 DATEV2类型
    DateTime/DateTime64
    DATETIMEV2
    Jdbc Catlog 连接 ClickHouse 时默认使用 DATETIMEV2类型
    Float32
    FLOAT
    -
    Float64
    DOUBLE
    -
    Int8
    TINYINT
    -
    Int16/UInt8
    SMALLINT
    Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
    Int32/UInt16
    INT
    Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
    Int64/Uint32
    BIGINT
    Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
    Int128/UInt64
    LARGEINT
    Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
    Int256/UInt128/UInt256
    STRING
    Doris 没有这个数量级的数据类型,采用 STRING 处理
    DECIMAL
    DECIMAL/DECIMALV3/STRING
    将根据 Doris DECIMAL 字段的(precision, scale)和 enable_decimal_conversion 开关选择用何种类型
    Enum/IPv4/IPv6/UUID
    STRING
    在显示上 IPv4,IPv6会额外在数据最前面显示一个“/”,需要自己用 split_part 函数处理
    Array
    ARRAY
    Array 内部类型适配逻辑参考上述类型,不支持嵌套类型
    Other
    UNSUPPORTED
    -
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持