# Trino (motor de consultas SQL)

Trino es un motor de consulta SQL distribuido de código abierto diseñado para acceder a grandes conjuntos de datos distribuidos en una o más fuentes de datos heterogéneas. Trino puede consultar data lakes que contengan archivos de datos abiertos orientados a columnas como ORC o Parquet que residen en diferentes sistemas de almacenamiento como HDFS, AWS S3, Google Cloud Storage o Azure Blob Storage, utilizando los formatos de tabla Hive e Iceberg. Además, Trino puede ejecutar consultas federadas que accedan a tablas en diferentes fuentes de datos, tales como MySQL, PostgreSQL, Cassandra, Kafka, MongoDB y Elasticsearch. Trino se publica bajo la Licencia Apache.

## Historia

En enero de 2019, los creadores originales de Presto, Martin Traverso, Dain Sundstrom y David Phillips, crearon una bifurcación del proyecto Presto. Inicialmente mantuvieron el nombre Presto y usaron el identificador web PrestoSQL para distinguirlo del proyecto PrestoDB original. Simultáneamente, anunciaron la creación de Presto Software Foundation. Esta fundación es una organización sin ánimo de lucro dedicada al desarrollo del motor de consulta SQL distribuido de código abierto de Presto.
En diciembre de 2020, PrestoSQL pasó a llamarse Trino. Trino Software Foundation, el código base y todos los demás activos de PrestoSQL fueron renombrados como parte del cambio de marca.
Presto y Trino fueron diseñados y desarrollados originalmente por Martin, Dain, David y Eric Hwang en Facebook para permitir que los analistas de datos ejecutasen consultas interactivas en su gran almacén de datos en Apache Hadoop. Trino comparte los primeros seis años de desarrollo con el proyecto Presto. Para obtener más información sobre la historia anterior de Trino, puede consultar la sección de historia de Presto.

## Arquitectura

Trino está escrito en Java. Contiene dos tipos de nodos, un coordinador y un trabajador.
* El coordinador es responsable de analizar, optimizar, planificar y programar una consulta enviada por un cliente. El coordinador interactúa con la interfaz de proveedor de servicio (service provider interface o SPI) para obtener las tablas disponibles, estadísticas de tablas y otras informaciones necesarias para realizar su tarea.
* Los trabajadores son responsables de ejecutar las tareas y los operadores proporcionados por el planificador. Estas tareas procesan datos procedentes de las fuentes de datos, ya sea en formato fila o columna, que producen resultados que son devueltos al coordinador y, en última instancia, al cliente.
Trino implementa el estándar ANSI SQL e incluye varias partes de las siguientes especificaciones ANSI: SQL-92, SQL:1999, SQL:2003, SQL:2008, SQL:2011, SQL:2016.
Trino separa computación y almacenamiento y se puede implementar tanto en servidores propios como en los principales proveedores de la nube.
Trino tiene una arquitectura masivamente paralela (MPP) de computación distribuida. Trino inicialmente distribuye la carga de trabajo entre varios trabajadores mediante la ejecución de operaciones de partición ad hoc o basándose en las particiones existentes en las bases de datos subyacentes. Una vez que estos datos han llegado al trabajador, los datos se procesan a través de operadores encadenados ejecutados por múltiples procesos ligeros.