Trino
Motor de Consulta Distribuído

Um mecanismo de consulta distribuído é concebido para executar consultas SQL complexas em grandes volumes de dados dispersos por várias fontes. Elimina a necessidade de mover ou duplicar dados, permitindo análises diretamente no local onde os dados estão armazenados, aumentando a eficiência e a escalabilidade.
Principais Características dum Mecanismo de Consulta Distribuído:
- Execução Paralela: Divide consultas em tarefas mais pequenas, que são processadas simultaneamente em diferentes nós dum cluster, otimizando o tempo de execução.
- Ligação a Múltiplas Fontes de Dados: Oferece integração com data lakes, data warehouses e bases de dados relacionais, permitindo a execução de consultas federadas.
- SQL como Linguagem Universal: Os analistas podem realizar consultas utilizando SQL, sem necessidade de aprender linguagens específicas.
- Desempenho Otimizado: Utiliza técnicas como pushdown de predicados e armazenamento em memória para reduzir a latência e maximizar a performance.
Entre os casos de uso mais comuns dos mecanismos de consulta distribuídos, destacam-se:
- Consultas federadas em várias fontes de dados.
- Análises em tempo real de grandes volumes de dados.
- Unificação de data lakes e data warehouses para facilitar a governança e auditoria.
O seu funcionamento básico envolve:
- O cliente envia uma consulta ao mecanismo.
- O mecanismo interpreta a consulta, cria um plano de execução e distribui tarefas aos workers.
- Cada worker processa a sua parte, acedendo diretamente às fontes de dados.
- Os resultados são consolidados e enviados de volta ao cliente.

Principais Características do Trino
O Trino é um mecanismo de consulta distribuído open-source, projetado para executar consultas SQL em grandes volumes de dados armazenados em fontes diversas, como data lakes, data warehouses e bases de dados relacionais.
Inicialmente desenvolvido como Presto por engenheiros do Facebook para responder às suas necessidades internas de análise de dados, o Trino surgiu em 2020 após uma divisão com a Presto Foundation. Desde então, tornou-se uma referência em soluções de alta performance para análise de dados distribuídos.
Principais Características:
- Velocidade: Desenvolvido para análises de baixa latência, o Trino utiliza execução altamente paralela e distribuída para processar consultas de forma eficiente.
- Escalabilidade Horizontal: Permite a adição de workers para ampliar a capacidade de processamento, sendo capaz de lidar com workloads em escala de exabytes, como em grandes data lakes e data warehouses.
- Simplicidade: Compatível com ANSI SQL, facilita a integração com ferramentas de BI como R, Tableau, Power BI, Superset, entre outras.
- Versatilidade: Suporta análises "ad hoc" interativas, consultas em lote de longa duração e aplicações de alto volume, garantindo tempos de resposta inferiores a um segundo em cenários críticos.
- Análise Local: Consulta dados diretamente em fontes como Hadoop, S3, Cassandra e MySQL, eliminando a necessidade de copiar ou mover dados, simplificando processos e reduzindo erros.
- Consultas Federadas: Possibilita a execução de consultas em múltiplas fontes de dados, como HDFS, S3, bases de dados relacionais e data warehouses.
- Alta Performance: A sua arquitetura é otimizada para workloads interativos, garantindo latência mínima.
- Extensibilidade: Oferece suporte para conectores personalizados, possibilitando integração com novas fontes de dados.
- Confiabilidade: Amplamente utilizado em operações críticas, como relatórios financeiros para mercados públicos, por algumas das maiores organizações globais.
- Suporte a Diversos Formatos: Compatível com formatos como Parquet, ORC, Avro, JSON e CSV.
- Comunidade Aberta: Desenvolvido sob a liderança da Trino Software Foundation, uma organização sem fins lucrativos.
Arquitetura do Trino
O Trino é um mecanismo de consulta distribuído que processa dados em paralelo em vários servidores. Os servidores dum Cluster Trino são classificados como Coordinators e Workers.
As secções seguintes descrevem os principais componentes da arquitetura do Trino.
Cluster
Um cluster Trino é composto por vários nós, incluindo um Coordinator e zero ou mais Workers. Os utilizadores ligam-se ao Coordinator através de ferramentas de consulta SQL. O Coordinator orquestra tarefas entre os Workers e acede às fontes de dados conectadas por meio de catálogos configurados.
Cada consulta é processada como uma operação com estado. O Coordinator distribui a carga de trabalho entre os Workers em paralelo. Cada nó executa uma única instância JVM, com paralelização adicional usando threads.
Nó (Node)
Um Node no Trino refere-se a qualquer servidor dentro dum cluster que executa um processo Trino. Normalmente corresponde a um único computador, uma vez que apenas um processo Trino é recomendado por máquina.
Coordinator
O Coordinator é o servidor central responsável por analisar instruções, planear consultas e gerenciar nós Workers. Atuando como o "cérebro" do cluster, rastreia as atividades dos Workers, coordena a execução de consultas e comunica-se com clientes e Workers por meio da API REST.
Para desenvolvimento ou testes, uma única instância do Trino pode ser configurada para funcionar como Coordinator e Worker.
Worker
Um Worker é um servidor responsável por executar tarefas e processar dados. Os Workers obtêm dados de conectores, trocam dados intermediários e comunicam-se com o Coordinator via API REST. Quando iniciado, um Worker regista-se no servidor de descoberta do Coordinator para alocação de tarefas.
Cliente
Os clientes ligam-se ao Trino para enviar consultas SQL e recuperar resultados. Podem aceder às fontes de dados configuradas por meio de catálogos e incluem ferramentas como interfaces de linha de comandos, aplicações de ambiente de trabalho e sistemas baseados na web. Alguns clientes também suportam autoria interativa de consultas, visualizações e relatórios.
Fonte de Dados
O Trino suporta consultas em diversas fontes de dados, incluindo data lakes, bases de dados relacionais e armazenamentos de chave-valor. O acesso a estas fontes de dados é configurado através de catálogos, que definem os conectores necessários, credenciais e outros parâmetros.
A seguir apresentamos os conceitos fundamentais associados às Fontes de Dados no Trino:
-
Conector: Os conectores permitem que o Trino interaja com fontes de dados específicas, funcionando como drivers de bases de dados. Exemplos incluem conectores para Hive, Iceberg, PostgreSQL, MySQL e Snowflake. Cada catálogo no Trino está associado a um conector.
-
Catálogo: Um catálogo é uma coleção de propriedades de configuração para aceder a uma fonte de dados. Os catálogos são definidos em ficheiros de propriedades armazenados no diretório de configuração do Trino. Um catálogo pode conter esquemas e tabelas, permitindo o acesso a múltiplas fontes de dados num único cluster.
-
Esquema: Os esquemas organizam tabelas e outros objetos dentro dum catálogo. Correspondem a conceitos semelhantes em bases de dados como Hive e MySQL.
-
Tabela: Uma tabela consiste em linhas desordenadas organizadas em colunas nomeadas com tipos específicos. As tabelas são acedidas por nomes totalmente qualificados enraizados em catálogos.
