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
As credenciais de uma conexão criptografada com o MySQL são fornecidas como chaves de coleção nomeada (ou como argumentos de chave-valor):
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
Em vez de um nome de tabela, o terceiro argumento pode ser uma consultaSELECT 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 sobre as colunas da função de tabela é rejeitado com uma exceção, em vez de ser aplicado localmente, porque ele não pode ser enviado para a consulta fornecida. A verificação abrange o predicado WHERE de nível superior e cada conjunção de um AND de nível superior. Um PREWHERE sobre as colunas desta tabela não é um caso para essa configuração: este motor de tabela não é compatível com PREWHERE, e tal consulta é rejeitada com ILLEGAL_PREWHERE independentemente da configuração. A verificação é executada apenas onde um filtro poderia de fato ser enviado para execução: quando esta tabela é a única tabela da consulta, em qualquer um dos lados de um INNER JOIN, ou no lado preservado de uma junção externa (o lado esquerdo de um LEFT JOIN, o lado direito de um RIGHT JOIN). No lado não preservado de um LEFT/RIGHT JOIN e em qualquer um dos lados de um FULL JOIN, nada é enviado para execução e nada é verificado, portanto um filtro sobre as colunas desta tabela é aplicado localmente após a junção, mesmo no modo estrito. Onde a verificação é executada, um predicado que referencia outras tabelas unidas na consulta circundante não é enviado para execução e é excluído da verificação, seja ele referenciando apenas o lado unido ou misturando-o com esta tabela dentro de uma única expressão que não seja AND (por exemplo, um OR); tal predicado mantém seu ponto de avaliação usual no ClickHouse (WHERE depois da junção, PREWHERE antes dela) e não é rejeitado.|. Por exemplo:
Valor retornado
Um objeto de tabela com as mesmas colunas da tabela MySQL original.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
Tabela no MySQL:enable_compression
Habilita a compressão para a conexão via protocolo MySQL.
Valor padrão: 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.