Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

MySQL

Sem suporte no ClickHouse Cloud

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:

  • RENAME
  • CREATE TABLE
  • ALTER

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:

  • version
  • max_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 │
└────────┴───────┘
Navigation