透過 JDBC 驅動程式擴展 Arrow Flight SQL 的影響範圍
已發布 2022 年 11 月 01 日
作者 The Apache Arrow PMC (pmc)
我們很高興宣布,從 10.0.0 版本開始,Arrow 專案現在包含基於 Arrow Flight SQL 的 JDBC 驅動程式實作。這要感謝資料湖倉平台 Dremio 的軟體贊助。Dremio 的貢獻者開發了這個驅動程式實作並開源,此外還設計和貢獻了 Flight SQL 本身。
Flight SQL 是一種用於用戶端-伺服器資料庫互動的協定。它定義了用戶端應如何與伺服器對話並執行查詢、提取結果集等等。請注意,儘管名稱如此,Flight SQL *不是* SQL 方言,甚至不特定於 SQL 本身。在底層,它建立在 Arrow Flight RPC 之上,Arrow Flight RPC 是一個用於跨網路高效傳輸 Arrow 資料的框架。雖然 Flight RPC 非常靈活,可以用於任何類型的應用程式,但從一開始,它的設計就著眼於 Flight SQL 支援的那些使用案例。
有了這個新的 JDBC 驅動程式,應用程式可以使用熟悉的 JDBC API 與任何實作 Flight SQL 協定的資料庫伺服器進行通訊。在底層,驅動程式透過 Flight SQL 將查詢傳送到伺服器,並將 Arrow 結果集調整為 JDBC 介面,以便資料庫可以支援 JDBC 使用者,而無需實作額外的 API 或自己的 JDBC 驅動程式。
為什麼要將 JDBC 與 Flight SQL 一起使用?
JDBC 提供以列為導向的 API,這與 Arrow 的欄狀結構相反。但是,對於許多應用程式來說,它仍然是一個流行且經過時間考驗的選擇。例如,許多商業智慧 (BI) 工具利用 JDBC 與多個資料庫進行通用互操作。基於 Arrow 的原生資料庫可能仍然希望能夠被所有這些現有軟體訪問,而無需自行實作多個用戶端驅動程式。此外,僅欄狀資料傳輸對於分析使用案例來說,就可以顯著加速。
這個 JDBC 驅動程式實作演示了 Arrow 和 Flight SQL 的通用性,並擴大了基於 Arrow 的應用程式的影響範圍。此外,基於 Flight SQL 的 ODBC 驅動程式實作 也由 Dremio 提供,儘管由於依賴授權問題,它尚未成為 Arrow 專案的一部分。
現在,資料庫可以透過僅實作單一線路協定:Flight SQL,來支援大量使用 JDBC 或 ODBC 的現有程式碼,以及基於 Arrow 的原生應用程式。一些專案反而會做一些事情,例如重新實作 Postgres 線路協定,以從其現有的驅動程式中受益。但對於基於 Arrow 的原生資料庫來說,這放棄了欄狀資料的優勢。另一方面,Flight SQL 是
- 欄狀和基於 Arrow 原生的,使用 Arrow 作為結果集,以避免不必要的資料複製和轉換;
- 專為多個資料庫實作而設計,具有高階 C++ 和 Java 程式庫以及 Protobuf 協定定義;以及
- 由於這項軟體贊助,可以透過 JDBC 和 ODBC 等 API 使用,也可以直接使用(或透過 ADBC)供想要欄狀資料的應用程式使用。
參與其中
JDBC 驅動程式已合併到 Arrow 10.0.0 版本 中,並且可以在 Arrow 儲存庫中找到原始碼。驅動程式的官方建置版本可在 Maven Central 上取得。Dremio 已經在使用這個驅動程式,我們期待看到更多基於它之上建構的東西。當然,仍然有改進的空間。如果您有興趣貢獻,或有回饋或問題,請在郵寄清單或 GitHub 上聯繫我們。
要了解更多關於何時使用 Flight SQL JDBC 驅動程式與 Flight SQL 原生用戶端程式庫,請參閱 Dremio 簡報的此部分,「Apache Arrow Flight SQL:來自資料庫的高效能資料傳輸通用標準」(從 22:23 開始)。有關 Dremio 如何使用 Apache Arrow 的更多資訊,請參閱他們的指南。