SELECT e INSERT em dados armazenados em um servidor MySQL remoto.
Sintaxe
Argumentos
Os argumentos também podem ser passados usando coleções nomeadas. Nesse caso,
host e port devem ser especificados separadamente. Essa abordagem é recomendada para ambientes de produção.
Cláusulas WHERE simples, como =, !=, >, >=, <, <=, atualmente 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 a conclusão da consulta ao MySQL.
TLS/SSL
Os valores correspondem ao conteúdo dos respectivos arquivos PEM, que pode ser copiado para uma coleção nomeada ou para uma consulta. Eles são mascarados nos logs e em consultas
SHOW, da mesma forma que 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, e esse valor não pode ser substituído em uma consulta. O servidor abre esses arquivos com 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.
Passando uma consulta em vez de um nome de tabela
SELECT passada ao MySQL como está. A estrutura da tabela resultante é inferida a partir do resultado da consulta. A consulta pode ser escrita como uma subconsulta ou encapsulada na função query:
INSERT nela. A mesma sintaxe é compatível com o motor de tabela MySQL.
A forma de subconsulta
(SELECT ...) é analisada pelo ClickHouse e reserializada no dialeto do MySQL (identificadores entre crases) antes de ser enviada ao servidor. Portanto, ela deve ser um SQL válido do ClickHouse. Para passar 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 circundante não é enviado para execução na consulta fornecida — ele é aplicado no ClickHouse depois que todo o resultado 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 enviado para execução é rejeitado com uma exceção, em vez de ser aplicado localmente.|. Por exemplo:
Valor retornado
Alguns tipos de dados do MySQL podem ser mapeados para diferentes tipos do ClickHouse — isso é controlado pela configuração em nível de consulta mysql_datatypes_support_level
Na consulta
INSERT, para distinguir a função de tabela mysql(...) do nome da tabela com uma lista de nomes de colunas, você deve usar as palavras-chave FUNCTION ou TABLE FUNCTION. Veja os exemplos abaixo.Exemplos
enable_compression
false.
Esta configuração se aplica a:
- a função de tabela
mysql; - o motor de tabela
MySQL; - o mecanismo de banco de dados
MySQL; - coleções nomeadas usadas por integrações com MySQL.