前文介绍了 StarRocks 的基础概念,且介绍了 SR v3.3.3 的部分新特性。

在各家数据库中,均有允许用户访问另一个数据库对象的功能,只是实现方式不同。比如,MySQL 中的 CONNECT 引擎,Oracle 中的 DBLink,PostgreSQL 中的 FDW。
在老版本的 SR 中,可以使用外表实现(前文已介绍)。
SR JDBC CATALOG
从 StarRocks v3.0 开始,支持 JDBC Catalog。
JDBC Catalog 是一种 External Catalog。通过 JDBC Catalog,您不需要执行数据导入就可以直接查询 JDBC 数据源里的数据。
此外,您还可以基于 JDBC Catalog ,结合 INSERT INTO 能力对 JDBC 数据源的数据实现转换和导入。
JDBC Catalog 自 3.0 版本开始支持 MySQL、PostgreSQL,自 3.3.1 版本开始支持 Oracle 和 SQLServer。
下面通过几个栗子演示此功能。
创建 JDBC CATALOG
通过创建 JDBC CATALOG,将允许用户从 SR 访问 MySQL。
CREATE EXTERNAL CATALOG mysql_catalog
PROPERTIES
(
"type"="jdbc",
"user"="root",
"password"="1",
"jdbc_uri"="jdbc:mysql://localhost:3306",
"driver_url"="file:///tmp/mysql-connector-java-8.0.30.jar",
"driver_class"="com.mysql.cj.jdbc.Driver",
"Comment"="MySQL Catalog"
);
查看 JDBC CATALOG
- 查看 SR 集群中所有 Catalog。
StarRocks> SHOW CATALOGS;
+-----------------+----------+------------------------------------------------------------------+
| Catalog | Type | Comment |
+-----------------+----------+------------------------------------------------------------------+
| default_catalog | Internal | An internal catalog contains this cluster's self-managed tables. |
| mysql_catalog | JDBC | NULL |
+-----------------+----------+------------------------------------------------------------------+
2 rows in set (0.00 sec)
- 查看某个 Catalog 的创建语句。
StarRocks> SHOW CREATE CATALOG mysql_catalog\G
*************************** 1. row ***************************
Catalog: mysql_catalog
Create Catalog: CREATE EXTERNAL CATALOG `mysql_catalog`
PROPERTIES ("Comment" = "MySQL Catalog",
"driver_class" = "com.mysql.cj.jdbc.Driver",
"checksum" = "ad7ef879830dbf17c7a73bf03b34f6fc",
"driver_url" = "file:///tmp/mysql-connector-java-8.0.30.jar",
"type" = "jdbc",
"user" = "root",
"jdbc_uri" = "jdbc:mysql://localhost:3306"
)
1 row in set (0.00 sec)
访问 CATALOG 中的表数据
- 通过 USE 直接将会话切换到目标 Catalog 下的指定数据库。
StarRocks> USE mysql_catalog.mytest;
Database changed
StarRocks> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| t |
+------------------+
1 row in set (0.01 sec)
- 通过 SELECT 查询目标数据库中的目标表。
StarRocks> SELECT * FROM t;
+------+----------+
| id | name |
+------+----------+
| 1 | ShawnYan |
+------+----------+
1 row in set (0.02 sec)
- 也可以直接访问 CATALOG 下数据库的某张表。
StarRocks> SELECT * FROM mysql_catalog.mytest.t;
+------+----------+
| id | name |
+------+----------+
| 1 | ShawnYan |
+------+----------+
1 row in set (0.02 sec)
设定用户默认 CATALOG
自 StarRocks v3.3.3 起,支持创建用户时指定用户属性(PROPERTY),包括用户最大连接数(max_user_connections),Catalog,数据库,或用户级别的 Session 变量。用户级别的 Session 变量在用户登录时生效。
示例
- 创建用户,并指定用户属性。
StarRocks> CREATE USER 'shawnyan' PROPERTIES ('catalog' = 'mysql_catalog', 'database' = 'mytest', 'session.query_timeout' = '10');
Query OK, 0 rows affected (0.01 sec)
- 更改用户属性。
StarRocks> ALTER USER 'shawnyan' SET PROPERTIES ('max_user_connections' = '5');
Query OK, 0 rows affected (0.01 sec)
- 查看用户属性。
StarRocks> SHOW PROPERTY FOR 'shawnyan';
+-----------------------+---------------+
| Key | Value |
+-----------------------+---------------+
| max_user_connections | 5 |
| catalog | mysql_catalog |
| database | mytest |
| session.query_timeout | 10 |
+-----------------------+---------------+
4 rows in set (0.01 sec)
- 给用户赋权。
GRANT ALL ON ALL DATABASES TO 'shawnyan';
GRANT ALL on *.* to 'shawnyan';
GRANT ALL ON CATALOG mysql_catalog TO 'shawnyan';
SET CATALOG mysql_catalog;
GRANT ALL ON ALL TABLES IN ALL DATABASES TO 'shawnyan';
- 以 shawnyan 用户查看数据目录 mysql_catalog 下数据库 mytest 中表 t 的数据。
$ mysql -P 9030 -h 127.0.0.1 -u shawnyan -e 'select @@catalog;select * from mytest.t;' -E
*************************** 1. row ***************************
@@catalog: mysql_catalog
*************************** 1. row ***************************
id: 1
name: ShawnYan
OK!穿越成功。
最后修改时间:2024-09-09 10:52:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




