Permite conectar-se a bancos de dados em um servidor MySQL remoto e executar consultas INSERT e SELECT para transferir dados entre o ClickHouse e o MySQL.
O mecanismo de banco de dados MySQL traduz consultas para o servidor MySQL, para que você possa executar operações como SHOW TABLES ou SHOW CREATE TABLE.
Não é possível executar as seguintes consultas:
RENAMECREATE TABLEALTER
Criar um banco de dados
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]Parâmetros do mecanismo
host:port— Endereço do servidor MySQL.database— Nome do banco de dados remoto.user— Usuário do MySQL.password— Senha do usuário.
Configurações
enable_compression
Habilita a compressão zlib para a conexão via protocolo MySQL. Quando definido como 1, o ClickHouse solicita a compressão no nível do protocolo ao servidor MySQL.
Valor padrão: 0.
Exemplo:
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;TLS/SSL
As credenciais de uma conexão criptografada com o MySQL são passadas como chaves de uma coleção nomeada (ou como argumentos de chave-valor):
| Parâmetro | Descrição |
|---|---|
ssl_ca_pem |
Conteúdo do certificado da CA usado para verificar o certificado do servidor MySQL. |
ssl_cert_pem |
Conteúdo do certificado do cliente, para autenticação baseada em certificado. |
ssl_key_pem |
Conteúdo da chave privada associada a ssl_cert_pem. |
Os valores correspondem ao conteúdo dos arquivos PEM respectivos, que pode ser copiado para uma coleção nomeada ou para uma consulta. Esses valores são mascarados nos logs e em consultas SHOW, assim como as senhas.
As mesmas credenciais também podem ser fornecidas como caminhos para arquivos no servidor, em ssl_ca, ssl_cert e ssl_key — mas somente em uma coleção nomeada definida no arquivo de configuração do servidor; esse valor não pode ser substituído em uma consulta. O servidor abre esses arquivos usando seus próprios privilégios; portanto, aceitar um caminho via SQL permitiria que qualquer usuário capaz de definir uma fonte MySQL sondasse o sistema de arquivos local e se autenticasse com um certificado e uma chave que não tem permissão para ler.
Suporte a tipos de dados
| MySQL | ClickHouse |
|---|---|
| UNSIGNED TINYINT | UInt8 |
| TINYINT | Int8 |
| UNSIGNED SMALLINT | UInt16 |
| SMALLINT | Int16 |
| UNSIGNED INT, UNSIGNED MEDIUMINT | UInt32 |
| INT, MEDIUMINT | Int32 |
| UNSIGNED BIGINT | UInt64 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| DATE | Date |
| DATETIME, TIMESTAMP | DateTime |
| BINARY | FixedString |
| POINT | Point |
| LINESTRING | LineString |
| POLYGON | Polygon |
| MULTILINESTRING | MultiLineString |
| MULTIPOLYGON | MultiPolygon |
| MULTIPOINT | MultiPoint |
| GEOMETRY | Geometry |
A conversão dos tipos espaciais (exceto POINT, que é sempre convertido) é controlada pela flag geometry da configuração mysql_datatypes_support_level, habilitada por padrão. O tipo de coluna genérico GEOMETRY é mapeado para o tipo abrangente Geometry (um Variant dos tipos geométricos concretos). Como essa coluna pode conter um valor de qualquer subtipo, a leitura de um valor cujo subtipo não tem equivalente no ClickHouse (GEOMETRYCOLLECTION) lança uma exceção no momento da leitura; essa incompatibilidade é aceita em troca de um tipo geométrico adequado. Colunas declaradas com o tipo GEOMETRYCOLLECTION são convertidas em String, como todos os outros tipos de dados do MySQL.
Há suporte para Nullable. Uma coluna espacial é mapeada para String (Nullable(String) se ela aceitar nulos), em vez de um tipo geométrico, em três casos: ela é declarada como GEOMETRYCOLLECTION; a flag geometry está desabilitada e o tipo não é POINT; ou a coluna aceita nulos e o tipo não é POINT, pois Point é o único tipo geométrico que pode ser aninhado em Nullable. Nos três casos, a string contém o valor exatamente como o MySQL o retorna: um prefixo SRID de 4 bytes seguido pelo payload WKB; portanto, remova esses 4 bytes iniciais antes de passá-lo a um decodificador WKB.
Suporte a variáveis globais
Para maior compatibilidade, é possível referenciar variáveis globais no estilo do MySQL, como @@identifier.
Há suporte para estas variáveis:
versionmax_allowed_packet
Exemplo:
SELECT @@version;Exemplos de uso
Tabela no MySQL:
mysql> USE test;
Database changed
mysql> CREATE TABLE `mysql_table` (
-> `int_id` INT NOT NULL AUTO_INCREMENT,
-> `float` FLOAT NOT NULL,
-> PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)
mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)
mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
| 1 | 2 |
+------+-----+
1 row in set (0,00 sec)Banco de dados no ClickHouse, com troca de dados com o servidor MySQL:
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;SHOW DATABASES┌─name─────┐
│ default │
│ mysql_db │
│ system │
└──────────┘SHOW TABLES FROM mysql_db┌─name─────────┐
│ mysql_table │
└──────────────┘SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐
│ 1 │ 2 │
└────────┴───────┘INSERT INTO mysql_db.mysql_table VALUES (3,4)SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐
│ 1 │ 2 │
│ 3 │ 4 │
└────────┴───────┘