Engine SQL distribuído de alta performance para análise de big data
Trino (anteriormente conhecido como PrestoSQL) é um engine SQL distribuído de código aberto projetado para consultas analíticas interativas rápidas em fontes de dados de qualquer tamanho. Trino permite consultar dados onde eles residem, sem necessidade de mover ou transformar os dados.
Originalmente desenvolvido no Facebook como Presto em 2012, o projeto foi posteriormente bifurcado em 2020, resultando no Trino. A Trino Software Foundation foi criada para governar o desenvolvimento contínuo do projeto, focando em performance, escalabilidade e facilidade de uso.
Trino utiliza uma arquitetura distribuída com os seguintes componentes:
Consulte múltiplas fontes de dados em uma única query
Processamento vetorizado e otimizações avançadas
Suporte nativo para diversas fontes de dados
Escala horizontalmente para milhares de nós
Armazenamento | HDFS, S3, Azure Blob, Google Cloud Storage |
Bancos Relacionais | PostgreSQL, MySQL, Oracle, SQL Server |
NoSQL | Cassandra, MongoDB, Elasticsearch |
Data Lakes | Delta Lake, Iceberg, Hudi |
Cloud Warehouses | Snowflake, BigQuery, Redshift |
Consultas unificadas em múltiplas fontes de dados sem ETL.
Análises ad-hoc e exploração de dados com baixa latência.
Consultas SQL em data lakes com formatos diversos (Parquet, ORC, JSON).
Alternativa moderna para data warehouses tradicionais.
-- Consulta combinando dados de PostgreSQL e S3
SELECT
u.user_id,
u.name,
s.total_sales,
s.last_purchase_date
FROM postgresql.public.users u
JOIN s3.sales_data.customer_sales s
ON u.user_id = s.customer_id
WHERE s.last_purchase_date >= DATE '2024-01-01'
ORDER BY s.total_sales DESC;
-- Consulta em dados Parquet no S3
SELECT
date_trunc('month', event_date) as month,
event_type,
COUNT(*) as event_count,
COUNT(DISTINCT user_id) as unique_users
FROM s3.datalake.events
WHERE event_date >= DATE '2024-01-01'
AND event_type IN ('purchase', 'signup', 'login')
GROUP BY 1, 2
ORDER BY month, event_count DESC;
# postgresql.properties
connector.name=postgresql
connection-url=jdbc:postgresql://localhost:5432/mydb
connection-user=myuser
connection-password=mypassword
# s3.properties
connector.name=hive
hive.metastore.uri=thrift://localhost:9083
hive.s3.endpoint=s3.amazonaws.com
hive.s3.aws-access-key=AKIAIOSFODNN7EXAMPLE
hive.s3.aws-secret-key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
-- Usando hints para otimização
SELECT /*+ BROADCAST(d) */
f.product_id,
d.product_name,
SUM(f.sales_amount) as total_sales
FROM fact_sales f
JOIN dim_product d ON f.product_id = d.product_id
WHERE f.sale_date >= DATE '2024-01-01'
GROUP BY f.product_id, d.product_name
ORDER BY total_sales DESC;
Aspecto | Trino | Apache Impala | ClickHouse | Snowflake |
---|---|---|---|---|
Federação de Dados | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
Conectores | 300+ | Limitado | Moderado | Muitos |
Escalabilidade | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
Custo | Gratuito | Gratuito | Gratuito/Pago | Alto |