Trino (Presto SQL) 官方回顧:十年的查詢引擎創新路!

語言: CN / TW / HK

令人驚訝的是我們已經走了多遠! 我們的大規模並行處理 SQL 查詢引擎 Trino 已經真正成長起來了。 我們已經超越了僅僅使用 Hive 查詢物件儲存,超越了只有一家公司使用該專案,超越了在矽谷的使用,超越了簡單的 SQL SELECT 語句,而且絕對超出了我們的預期。 讓我們看看該專案經歷的一些重大技術和架構變化,以及我們如何從  對質量、開放性和協作的承諾中 受益。

執行時和部署

從您甚至如何執行和安裝 Trino 開始,在過去十年中發生了許多變化。 我們從 Java 7 遷移到 Java 8,然後遷移到 Java 11, 直到最近才遷移到支援的最新 Java LTS 版本 - Java 17 每次我們都受益於執行時效能的創新以及改進的 Java 語言特性。 Java 17 中,我們即將開始大量這些改進。

在實際 執行和部署 Trino 時, tarball 仍然是簡單安裝和作為其他包的基礎的不錯選擇。 隨著時間的推移,我們添加了  RPM 歸檔支援,越來越多地被 Docker  容器 取代。 容器映象還可以使用我們的 Helm chart 在 Kubernetes 上進行現代部署

讓我們新增關於部署的最後一點說明。 Trino 一直被設計為在大型伺服器上工作。 然而,現實世界中十年的實際增長令人驚歎。 機器尺寸不斷增長到數百個 CPU 核心和接近 1 TB 的記憶體,這些真正的大型機器現在作為叢集執行,有許多這種規模的工人。 越來越多的這些部署利用了我們對 ARM 處理器架構 的新增支援以及雲提供商提供的合適伺服器的日益增加的可用性。

安全

什麼是安全、身份驗證、授權? 一開始,這些都不存在於 Trino 的第一個版本中。 推出兩年後,我們添加了第一個簡單的身份驗證和授權支援。 今天,Kerberos 至關重要,您需要在大多數部署中使用 Java KeyStore 的日子已經一去不復返了。 Trino 的廣泛採用帶來了一些改進,例如支援  自動證書建立和 TLS 用於內部通訊 、  從環境變數注入祕密 ,以及 從 LDAP 和密碼檔案開始 的許多  身份驗證型別,以及現代 OAuth2.0 和 SSO 系統。 Trino 支援細粒度的訪問控制和 安全管理 SQL 命令,如 GRANT 和  REVOKE 您可以保護來自客戶端工具的連線,並使用多種方法來確保對資料來源的安全訪問。

客戶端工具和整合

一開始您所能做的就是向 客戶端 REST API 提交查詢。 很快我們就添加了 Trino CLI  和 JDBC 驅動程式 雖然它繼續在社群中廣泛使用,並收集了命令完成和歷史記錄、不同輸出格式等強大功能,但 Trino CLI 不再是唯一的工具。 Starburst 的 JDBC 驅動、  Python 客戶端 Go 客戶端 和 ODBC 驅動  都擴充套件了對不同客戶端工具的支援。 您可以在基於 Java 的 IDE(例如 IntelliJ IDEA)或資料庫工具(例如 DBeaver 或  Metabase )中查詢 Trino 您可以利用 Apache Superset中的視覺化,或使用 Apache Airflow dbt 或  Apache Flink 實現自動化 許多商業工具,如  Tableau Looker 、  PowerBI 或  ThoughtSpot 也很自豪地支援 Trino 使用者。

SQL

所有客戶端工具和整合都依賴於 Trino 的豐富 SQL 支援,後者已大幅增長。 純粹與分析相關的支援 SELECT 及其所有複雜性是不夠的。 Trino 獲得了對資料管理的支援,以建立模式和表,以及檢視和物化檢視。 有了這種  寫支援,我們需要 INSERT , UPDATE 和  DELETE 這一切都完成了, MERGE 接下來就是。 但是核心語言功能並不能滿足我們使用者的需求。 我們為各種各樣的主題添加了函式,從簡單的字串和 日期函式 JSON 支援 地理空間函式 等等。

從核心語言的角度來看,我們添加了更新的 SQL 功能,例如  視窗函式和 MATCH_RECOGNIZE 支援 目前,我們正在實現  對錶函式的支援,包括多型表函式

聯結器和資料來源

談到新的 SQL 語言功能時,有兩類。 有一些通用函式和語句建立在常用功能之上,例如 SELECT 這些通常適用於任何聯結器,因此適用於任何資料來源。 還有一些需要在聯結器中支援的 SQL 語言功能。 畢竟,在 PostgreSQL 中插入資料和物件儲存系統是非常不同的。 然而,我們的社群一直在努力工作,許多聯結器已經超越了簡單的只讀訪問。

從可用聯結器的數量來看,創新是巨大的。 支援 HDFS 和 Hive Metastore 服務的原始 Hive 聯結器成為功能強大的引擎。 對物件儲存系統(包括 Amazon S3 和相容系統、Azure Data Lake Storage 和 Google Cloud Storage)的支援得到了對 Amazon Glue 作為元儲存的支援的補充。 我們還在這些系統中不斷新增對不同檔案格式的支援,並提高了 ORC、Parquet、Avro 等的效能。

支援其他資料來源的最初想法導致了十幾個其他資料庫的聯結器,包括關係系統,如  PostgreSQL 、  Oracle SQL Server 和許多其他資料庫。 我們還獲得了對 Elasticsearch 和  OpenSearch MongoDB 、  Apache Kafka 以及其他傳統上無法使用 SQL 查詢的系統的支援。 Trino 為這些系統解鎖了全新的用例。

廣泛的支援系統包括傳統的資料湖和資料倉庫。 藉助新興的新表格格式和相關的 Trino 聯結器,我們的專案是執行您的 Lakehouse 系統的強大工具。 Delta Lake Apache Iceberg  聯結器已經能夠進行完整的讀寫操作,幷包含許多其他功能。 Apache Hudi 聯結器 正在開發中,即將推出。

我們還為實時分析系統(如 Apache Pinot Apache Druid Clickhouse  )提供強大且廣泛使用的聯結器,這些聯結器由社群不斷改進。

查詢處理和效能

最後但同樣重要的是,這些查詢也需要處理。 從一開始,高效率和低延遲就是核心設計目標,並且憑藉本機編譯等功能,所產生的效能超越了其他系統。 多年來,我們的查詢分析器和規劃器得到了越來越複雜的演算法和功能的補充。 聯結器學會了檢索和管理表統計資訊,建立了優化器並將其轉變為 基於成本的優化器 ,我們還進一步改進了查詢處理效能。 我們添加了動態過濾、 動態分割槽修剪 ,謂詞下推,連線下推,聚合函式下推等等。 這些改進中的每一項也都經過了微調,並在生產環境中執行,工作量巨大,為我們提供了更多關於下一步如何改進的資料。

我們最近新增的一大關鍵是添加了 容錯查詢執行模式 啟用此功能後,查詢執行可以在叢集節點故障中倖存下來。 可以重試部分執行並且可以繼續查詢處理。 Trino 正在從最好的分析引擎發展成為更多用例的最佳查詢引擎!

期待

正如你所看到的,有很多值得回顧和慶祝的事情。 但是,儘管我們為與社群合作所取得的成功感到非常自豪,但我們沒有時間休息。 我們正在努力進行更多改進。 只是為了逗你一下,讓我們提一下,將會有更多的多型表函式、新的 Lakehouse 聯結器和特性、更多的客戶端工具,甚至可能是叢集的動態配置。

你想補充什麼? 加入我們,慶祝和創新您最喜歡的功能。 誰知道呢,我們可能會在 11 月的 Trino 峰會 上見到你,或者在未來的 Trino 社群廣播 節目中見到你。