SELECT e INSERT em dados armazenados em um servidor MySQL remoto.
Criando uma tabela
- Os nomes das colunas devem ser os mesmos da tabela MySQL original, mas você pode usar apenas algumas delas e em qualquer ordem.
- Os tipos das colunas podem ser diferentes dos da tabela MySQL original. O ClickHouse tenta converter os valores para os tipos de dados do ClickHouse.
- A configuração external_table_functions_use_nulls define como lidar com colunas Nullable. Valor padrão: 1. Se for 0, a função de tabela não cria colunas Nullable e insere valores padrão em vez de nulos. Isso também se aplica a valores NULL dentro de arrays.
host:port— Endereço do servidor MySQL.database— nome do banco de dados remoto.table— Nome da tabela remota ou uma consulta passada ao MySQL como está (consulte Passando uma consulta em vez de um nome de tabela).user— usuário MySQL.password— Senha do usuário.replace_query— Sinalizador que converte consultasINSERT INTOemREPLACE INTO. Sereplace_query=1, a consulta é substituída.on_duplicate_clause— A expressãoON DUPLICATE KEY on_duplicate_clauseadicionada à consultaINSERT. Exemplo:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1, em queon_duplicate_clauseéUPDATE c2 = c2 + 1. Consulte a documentação do MySQL para ver qualon_duplicate_clausevocê pode usar com a cláusulaON DUPLICATE KEY. Para especificaron_duplicate_clause, você precisa passar0para o parâmetroreplace_query. Se passarreplace_query = 1eon_duplicate_clauseao mesmo tempo, o ClickHouse gera uma exceção.
host e port devem ser especificados separadamente. Essa abordagem é recomendada para o ambiente de produção.
Cláusulas WHERE simples, como =, !=, >, >=, <, <=, são executadas no servidor MySQL.
O restante das condições e a restrição de amostragem LIMIT são executados no ClickHouse somente após o término da consulta ao MySQL.
Passando uma consulta em vez do nome de uma tabela
table pode ser uma consulta SELECT passada ao MySQL como está. A estrutura da tabela é inferida a partir do resultado da consulta. A consulta pode ser escrita como uma subconsulta ou encapsulada na função query:
INSERT nela não é permitido. A mesma sintaxe também é compatível com a função de tabela mysql.
A forma de subconsulta
(SELECT ...) é analisada pelo ClickHouse e serializada novamente no dialeto do MySQL (com identificadores entre crases) antes de ser enviada ao servidor. Portanto, ela deve ser um SQL do ClickHouse válido. Para passar uma sintaxe específica do MySQL que o ClickHouse não analisa, use a forma query('...'), cujo texto é enviado ao MySQL literalmente.Qualquer WHERE, LIMIT, agregação etc. externo da consulta ClickHouse envolvente não é delegado à consulta fornecida — ele é aplicado no ClickHouse depois que o resultado completo da consulta é obtido. Para restringir os dados lidos do MySQL, coloque o filtro dentro da consulta fornecida. Com external_table_strict_query = 1, um filtro externo que não pode ser delegado é rejeitado com uma exceção em vez de ser aplicado localmente.|. Por exemplo:
Exemplo de uso
Configurações
connection_auto_close
- 1 — O fechamento automático da conexão é permitido, portanto a reutilização da conexão fica desativada
- 0 — O fechamento automático da conexão não é permitido, portanto a reutilização da conexão fica ativada
1.
connection_max_tries
- Inteiro positivo.
- 0 — Não há novas tentativas para o pool com failover.
3.
connection_pool_size
- Inteiro positivo.
16.
connection_wait_timeout
connection_pool_size conexões ativas); 0 - não aguardar.
Valores possíveis:
- Inteiro positivo.
5.
connect_timeout
- Inteiro positivo.
10.
read_write_timeout
- Inteiro positivo.
300.
enable_compression
false.
Esta configuração se aplica a:
- o mecanismo de tabela
MySQL; - o mecanismo de banco de dados
MySQL; - a função de tabela
mysql; - coleções nomeadas usadas por integrações do MySQL.