暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

StarRocks 中的穿越门

原创 严少安 2024-09-09
674

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

srarch.png

在各家数据库中,均有允许用户访问另一个数据库对象的功能,只是实现方式不同。比如,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

  1. 查看 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)
  1. 查看某个 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 中的表数据

  1. 通过 USE 直接将会话切换到目标 Catalog 下的指定数据库。
StarRocks> USE mysql_catalog.mytest;
Database changed
StarRocks> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| t                |
+------------------+
1 row in set (0.01 sec)
  1. 通过 SELECT 查询目标数据库中的目标表。
StarRocks> SELECT * FROM t;
+------+----------+
| id   | name     |
+------+----------+
|    1 | ShawnYan |
+------+----------+
1 row in set (0.02 sec)
  1. 也可以直接访问 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 变量在用户登录时生效。

示例

  1. 创建用户,并指定用户属性。
StarRocks> CREATE USER 'shawnyan' PROPERTIES ('catalog' = 'mysql_catalog', 'database' = 'mytest', 'session.query_timeout' = '10');
Query OK, 0 rows affected (0.01 sec)
  1. 更改用户属性。
StarRocks> ALTER USER 'shawnyan' SET PROPERTIES ('max_user_connections' = '5');
Query OK, 0 rows affected (0.01 sec)
  1. 查看用户属性。
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)
  1. 给用户赋权。
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';
  1. 以 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论