SELECT 和 INSERT 查询。
语法
参数
参数也可以通过命名集合传递。在这种情况下,需要分别指定
host 和 port。这种方式推荐在生产环境中使用。
目前,诸如 =, !=, >, >=, <, <= 这样的简单 WHERE 子句会在 MySQL 服务器上执行。
其余条件以及 LIMIT 采样约束,只会在对 MySQL 的查询完成后由 ClickHouse 执行。
TLS/SSL
这些值为相应 PEM 文件的内容,可复制到命名集合或查询中。与密码一样,它们会在日志和
SHOW 查询中被屏蔽。
也可通过 ssl_ca、ssl_cert 和 ssl_key 将相同凭据指定为服务器上的文件路径,但仅限在服务器配置文件中定义的命名集合中使用,且此类值无法在查询中覆盖。服务器以自身的特权打开这些文件;因此,如果允许通过 SQL 提供路径,任何能够定义 MySQL source 的用户都可以探测本地文件系统,并使用其无权自行读取的证书和密钥进行身份验证。
传递查询而非表名
SELECT 查询。返回表的结构会根据查询结果自动推断。该查询既可以写成子查询,也可以封装在 query 函数中:
INSERT。MySQL 表引擎也支持相同的语法。
子查询形式
(SELECT ...) 会先由 ClickHouse 解析,再在发送到 server 之前按 MySQL 方言 (使用反引号引用标识符) 重新序列化。因此,它必须是有效的 ClickHouse SQL。若要传递 ClickHouse 无法解析的 MySQL 特定语法,请使用 query('...') 形式,其文本会原样发送给 MySQL。外层 ClickHouse 查询中的任何 WHERE、LIMIT、聚合等都不会下推到传入的查询中,而是在拉取完整查询结果后由 ClickHouse 应用。要限制从 MySQL 读取的数据,请将过滤条件放在传入的查询内部。启用 external_table_strict_query = 1 时,无法下推的外层过滤器会直接抛出异常,而不是在本地应用。| 分隔列出。例如:
返回值
MySQL 的某些数据类型可映射为不同的 ClickHouse 类型——可通过查询级设置 mysql_datatypes_support_level 来处理这一点。
在
INSERT 查询中,为了将表函数 mysql(...) 与带列名列表的表名区分开来,必须使用关键字 FUNCTION 或 TABLE FUNCTION。请参见下面的示例。示例
enable_compression
false。
此设置适用于:
mysql表函数;MySQL表引擎;MySQL数据库引擎;- 用于 MySQL 集成的命名集合。