You need to enable JavaScript to run this app.
导航

mysql 表函数

最近更新时间2024.04.29 14:14:23

首次发布时间2024.04.29 14:14:23

允许对存储在远程MySQL服务器上的数据执行SELECTINSERT查询。
语法

mysql('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']);

参数

  • host:port — MySQL服务器地址.
  • database — 远程数据库名称.
  • table — 远程表名称.
  • user — MySQL用户.
  • password — 用户密码.
  • replace_query — 将INSERT INTO查询转换为REPLACE INTO的标志。
    • 0 - 查询被执行为 INSERT INTO
    • 1 - 查询被执行为 REPLACE INTO
  • on_duplicate_clause — 添加 ON DUPLICATE KEY on_duplicate_clause 表达式到 INSERT 查询。使用此项时,需要设置 replace_query = 0 。如果你同时设置replace_query = 1on_duplicate_clause,ClickHouse / ByteHouse将产生异常。

简单的 WHERE 子句如 =, !=, >, >=, <, <= 将即时在MySQL服务器上执行。其余的条件和 LIMIT 只有在对MySQL的查询完成后,才会在ClickHouse / ByteHouse中执行采样约束。
支持使用|并列进行多副本查询,示例如下:

SELECT name FROM mysql(`mysql{1|2|3}:3306`, 'mysql_database', 'mysql_table', 'user', 'password');

SELECT name FROM mysql(`mysql1:3306|mysql2:3306|mysql3:3306`, 'mysql_database', 'mysql_table', 'user', 'password');

返回值
与原始MySQL表具有相同列的表对象。

说明

INSERT查询中为了区分mysql(...)与带有列名列表的表名的表函数,你必须使用关键字FUNCTIONTABLE FUNCTION。查看如下示例。

用法示例

MySQL中的表:

mysql> CREATE TABLE `test`.`test` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));

mysql> INSERT INTO test (`int_id`, `float`) VALUES (1,2);

mysql> SELECT * FROM test;
+--------+-------+
| int_id | float |
+--------+-------+
|      1 |     2 |
+--------+-------+

从ClickHouse中查询数据:

SELECT * FROM mysql('localhost:3306', 'test', 'test', 'bayonet', '123')
┌─int_id─┬─float─┐
│      1 │     2 │
└────────┴───────┘

替换和插入:

INSERT INTO FUNCTION mysql('localhost:3306', 'test', 'test', 'bayonet', '123', 1) (int_id, float) VALUES (1, 3);
INSERT INTO TABLE FUNCTION mysql('localhost:3306', 'test', 'test', 'bayonet', '123', 0, 'UPDATE int_id = int_id + 1') (int_id, float) VALUES (1, 4);
SELECT * FROM mysql('localhost:3306', 'test', 'test', 'bayonet', '123');
┌─int_id─┬─float─┐
│      1 │     3 │
│      2 │     4 │
└────────┴───────┘