一.starrocks为什么需要需要建立mysql外部表
StarRocks 支持以外部表 (External Table) 的形式,接入其他数据源。外部表指的是保存在其他数据源中的数据表,而 StartRocks 只保存表对应的元数据,并直接向外部表所在数据源发起查询。目前 StarRocks 已支持的第三方数据源包括 MySQL、StarRocks、Elasticsearch、Apache Hive™、Apache Iceberg 和 Apache Hudi。对于 StarRocks 数据源,现阶段只支持 Insert 写入,不支持读取,对于其他数据源,现阶段只支持读取,还不支持写入 。
星型模型中,数据一般划分为维度表 (dimension table) 和事实表 (fact table)。维度表数据量少,但会涉及 UPDATE 操作。目前 StarRocks 中还不直接支持 UPDATE 操作(可以通过 Unique/Primary 数据模型实现),在一些场景下,可以把维度表存储在 MySQL 中,查询时直接读取维度表。
在使用 MySQL 的数据之前,需在 StarRocks 创建外部表 (CREATE EXTERNAL TABLE),与之相映射。StarRocks 中创建 MySQL 外部表时需要指定 MySQL 的相关连接信息,如下所示。
二.如何实现mysql外部表
2.1.mysql创建表aaa
sql
CREATE TABLE `aaa` (
`id` bigint NOT NULL AUTO_INCREMENT,
`province` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0',
`city` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT 'ssss',
`area` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT 's2sss',
`remark` int NOT NULL DEFAULT '0' COMMENT '备注信息',
`pid` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '备注信息',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3
2.2.starrock创建外表
less
CREATE EXTERNAL TABLE mysql_external_table_aaa
(
`id` bigint NOT NULL AUTO_INCREMENT,
`province` varchar(100) ,
`city` varchar(100) ,
`area` varchar(200),
`remark` int ,
`pid` varchar(200)
)
ENGINE=mysql
PROPERTIES
(
"host" = "172.1xx.x.x",
"port" = "3306",
"user" = "root",
"password" = "root",
"database" = "test",
"table" = "t_user"
);
2.3.测试
csharp
select * from mysql_external_table_aaa
结果