
# 通过JDBC Catalog对接MySQL或PostgreSQL数据源
JDBC Catalog支持通过标准JDBC接口连接支持JDBC协议的数据库。该方式仅适用于少量的数据集成，例如将少量数据从数据源导入到StarRocks集群中，或对JDBC数据源中的小表进行关联查询。
使用JDBC Catalog无法实现对原数据源的查询加速，且也不适用于一次性访问大量数据的场景。
当前CloudTable StarRocks已经默认集成了MariaDB和PostgreSQL的Driver（已集成"mariadb-java-client-2.7.13.jar"和"postgresql-42.7.11.jar"驱动包），用户可以直接通过标准JDBC接口连接MySQL和PostgreSQL数据库。
 #### 前提条件
- 已创建CloudTable StarRocks集群，集群运行正常。
- 被访问的数据源与StarRocks集群节点的网络已打通，并且保持网络连接稳定和低延迟。
- 仅支持对接PostgreSQL 11.x及之后版本数据库。
- 仅支持对接MySQL 5.7、8.0或之后版本数据库。
- 被访问的数据源未开启SSL连接。
- StarRocks用户需要具备创建External Catalog的权限，该权限无法通过角色管理页面管理，需要管理员通过命令授权，授权命令如下：
  ```
  GRANT CREATE EXTERNAL CATALOG ON SYSTEM TO ROLE/USER role_name/user_name;
  ```
  
 
#### 操作步骤
1. 使用SSH登录工具，通过弹性IP登录到Linux弹性云服务器。 
   具体登录操作步骤请参见弹性云服务器《用户指南》中的" [SSH密码方式登录](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0017955633.html)"。
   
   
2. 访问StarRocks集群，参见[使用MySQL客户端连接StarRocks普通集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0494.html)。
   
   ```
   ./mysql -uuser_name -ppassword -h集群内网IP地址 -P9030
   ```
   *user_name* 为[前提条件]中准备的StarRocks用户名。
   
   
3. 执行如下命令创建JDBC Catalog连接MySQL或PostgreSQL数据库： 
   - 连接MySQL数据库：
     ```
     CREATE EXTERNAL CATALOG mysql_catalog PROPERTIES (
         "type"="jdbc",
         "user"="username",
         "password"="xxx",
         "jdbc_uri"="jdbc:mariadb://host:3306",
         "driver_url"="mariadb-java-client-2.7.13.jar",
         "driver_class"="org.mariadb.jdbc.Driver"
     );
     ```
     
   
   - 连接PostgreSQL数据库：
     ```
     CREATE EXTERNAL CATALOG postgresql_catalog PROPERTIES (
         "type"="jdbc",
         "user"="username",
         "password"="xxx",
         "jdbc_uri"="jdbc:postgresql://host:5432/database_name",
         "driver_url"="postgresql-42.7.11.jar",
         "driver_class"="org.postgresql.Driver"
     );
     ```
     
   
   
   表1参数说明 
   | 参数名称         | 说明                                                                                                                |
   |:---|:---|
   | type         | Catalog类型，需设置为"jdbc"。                                                                                             |
   | user         | 访问MySQL或PostgreSQL数据源的用户名。                                                                                        |
   | password     | 访问数据源的用户对应的密码。                                                                                                    |
   | jdbc_uri     | 连接MySQL或PostgreSQL数据源的URL。 **需注意，连接PostgreSQL数据库时，需要指定访问的数据库名称。**            |
   | driver_url   | 数据源JDBC驱动包，当前仅支持"mariadb-java-client-2.7.13.jar"和" postgresql-42.7.11.jar"。 |
   | driver_class | 数据源JDBC驱动程序的类名。                                                                                                   |
      
   
   
4. 执行以下命令查看创建的Catalog： 
   ```
   show catalogs;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002597437124.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
   访问External Catalog下的数据的用户还需要具备该External Catalog的创建数据库权限以及对应数据库或表的查询权限，相关操作请参考[配置StarRocks用户权限](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0599.html)。
   
   
5. 执行以下命令切换到指定的Catalog： 
   ```
   set catalog catalog_name;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002597437444.png)
   
   
6. 执行以下命令查看数据库： 
   ```
   show databases;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002627683575.png)
   ![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
   由于PostgreSQL数据源在对接的时候已经指定了数据库的信息，针对PostgreSQL数据源，**show databases;**命令展示的是该数据库下的Schema。
   
   
7. 执行以下命令指定当前会话生效的数据库： 
   ```
   use database_name;
   ```
   
   
8. 执行以下命令查看当前数据库下的表： 
   ```
   show tables;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002597402934.png)
   
   
9. 执行以下命令查看表数据： 
   ```
   select * from table_name;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002597402986.png "点击放大")
   
   
 
#### 常见问题
问题现象：对接PostgreSQL数据后，切换到External Catalog，执行**show schemas;** 或**show databases;**命令时报错"Driver org.postgresql.Driver claims to not accept jdbcUrl"。
![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002595166498.png "点击放大")
可能原因：创建External Catalog时，"jdbc_uri"中未指定默认的数据库。
处理步骤：需要使用正确的语句重新创建Catalog。
