本文将介绍创建 MySQL 外部数据库和外部表的语法及使用方法。
ByteHouse 通过支持 MySQL 外表的方式,借助 MySQL 引擎对存储在远程 MySQL 服务器上的数据执行数据查询。
对于 MySQL 数据表,当前 ByteHouse 支持创建 MySQL 外表、创建 MySQL 外部数据库、创建 MySQL 外部 Catalog 三种方式实现 ByteHouse 与 MySQL 的数据映射。
数据映射方式 | 数据映射说明 |
|---|---|
创建 MySQL 外部表 | 在表维度建立 ByteHouse 表到 MySQL 表的映射。源表 schema 变更不会直接同步,如果有变更,需删除 ByteHouse 中的外表重新创建一个外表。 |
创建 MySQL 外部数据库 | 在 Database 维度建立 ByteHouse Database 到 MySQL Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射,可以感知 MySQL 表的新增和删除,源表 schema 变更可直接同步至 ByteHouse 中。 |
创建 MySQL 外部 Catalog | 在数据目录(Catalog)唯独建立 ByteHouse Catalog 到 MySQL Catalog 的映射。建立 Catalog 映射之后不需要再手动建立库、表映射,可自动同步 Catalog 下的库、表映射,可以感知 Paimon 库、表的新增和删除,源表 schema 变更可直接同步至 ByteHouse 中。创建 MySQL 外部 Catalog 的操作详情请参见 MySQL Catalog。 |
外部表的功能旨在提供除 ByteHouse 内部表以外的其他数据的处理能力。通过一条简单的 DDL 语句,即可在 ByteHouse 上创建一张外部表,建立 ByteHouse 表与外部数据源的关联。
在执行 MySQL 外表的创建、查询、更新、删除操作前,请确保您已获得该库、表对应的读写权限。
在执行 MySQL 外表的查询或管理操作前,请确保您已获得该表对应的读写权限。
CREATE TABLE [IF NOT EXISTS] [db.]table_name ( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], ... ) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']);
参数 | 配置说明 |
|---|---|
数据表描述 |
|
引擎参数(Engine) |
|
示例
使用时,请使用实际的连接地址、数据库、表、用户名和密码替换命令中的示例。
DROP TABLE IF EXISTS demo_db.mysql_table; -- 创建 MySQL 外表,需要确保同步的表 DDL 和 ByteHouse 保持一致 CREATE TABLE demo_db.mysql_table( id Int32, name String ) ENGINE = MySQL('127.x.x.1:3306', 'test_db', 'test_tb', 'demo_user', 'password'); -- 查看建表语句 SHOW CREATE TABLE demo_db.mysql_table;
通过创建 ByteHouse 外部数据库,在 Database 维度建立 ByteHouse Database 到 MySQL Database 的映射。建立库映射之后不需要再手动建立表映射,可自动同步数据库下的表映射。
CREATE DATABASE [IF NOT EXISTS] database_name ENGINE = MySQL('host:port', 'database', 'user', 'password');
参数 | 配置说明 |
|---|---|
数据库描述 | 自定义外部数据库名称。 |
引擎参数(Engine) |
|
示例
使用时,请使用实际的连接地址、数据库、用户名和密码替换命令中的占位符。
-- 创建 MySQL 外部数据库 CREATE DATABASE mysql_db ENGINE = MySQL('127.x.x.1:3306', 'test_db', 'demo_user', 'password'); -- 查询建库语句 SHOW CREATE DATABASE mysql_db;
外表的查询和普通表的查询操作一致。
SELECT * FROM demo_db.mysql_table LIMIT 10;
外部库表的删除操作和普通表的删除操作一致。
删除外部数据库
注意
删除外部数据库后,外部数据库下的所有外部表也将同时被删除,请谨慎操作。
DROP DATABASE mysql_db
删除外部数据表
DROP TABLE demo_db.mysql_table