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