天天看點

Apache Doris 2.1.4 版本正式釋出

作者:SelectDB

親愛的社群小夥伴們,Apache Doris 2.1.4 版本已于 2024 年 6 月 26 日正式釋出。在 2.1.4 版本中,我們對資料湖分析場景進行了多項功能體驗優化,重點修複了舊版本中異常記憶體占用的問題,同時送出了若幹改進項以及問題修複,進一步提升了系統的性能、穩定性及易用性,歡迎大家下載下傳使用。

官網下載下傳頁:https://doris.apache.org/download/

GitHub 下載下傳:https://github.com/apache/doris/releases

行為變更

  • 通過 Catalog 查詢外部表(如 Hive 資料表)時,系統将忽略不存在的檔案:當從中繼資料緩存中擷取檔案清單時,由于緩存更新并非實時,是以可能在實際的檔案清單已删除、而中繼資料緩存中仍存在該檔案的情況。為了避免由于嘗試通路不存在的檔案而導緻的查詢錯誤,系統會忽略這些不存在的檔案。
  • 預設情況下,建立 Bitmap Index 不再預設變更為 Inverted Index。該行為由 FE 配置項 enable_create_bitmap_index_as_inverted_index 控制,預設為 false。
  • 當使用 --console 啟動 FE、BE程序時,所有日志将輸出到标準輸出,并通過字首區分不同類型的日志。具體文檔位址如下:
    • https://doris.apache.org/zh-CN/docs/admin-manual/log-management/be-log
    • https://doris.apache.org/zh-CN/docs/admin-manual/log-management/fe-log
  • 如果建表時沒有填寫表注釋,預設注釋為空,不再使用表類型作為預設表注釋。
  • decimalv3 的預設精度從 (9, 0) 調整為 (38,9) ,以和最初釋出此功能的版本保持相容。

新功能

查詢優化器

  • 支援 FE 火焰圖工具:在 FE 部署目錄${DORIS_FE_HOME}/bin中會增加profile_fe.sh腳本,可以利用 async-profiler 工具生成 FE 的火焰圖,用以發現性能瓶頸點。
    • 參考文檔:https://doris.apache.org/zh-CN/community/developer-guide/fe-profiler/
  • 支援 SELECT DISTINCT 與聚合函數同時使用:支援SELECT DISTINCT與聚合函數同時使用,在一個查詢中同時去重和進行聚合操作,如 SUM、MIN/MAX 等。
  • 支援無 GROUP BY 的單表查詢重寫:無GROUP BY的單表查詢重寫功能允許資料庫優化器在不需要分組的情況下,根據查詢的複雜性和資料表的結構,自動選擇最佳的執行計劃來執行查詢,這可以提高查詢的性能,減少不必要的資源消耗,并簡化查詢邏輯。
  • 查詢優化器全面支援高并發點查詢功能 :在 2.1.4 版本之後,查詢優化器全面支援高并發點查詢功能,所有符合點查詢條件的 SQL 語句會自動走短路徑查詢,無需使用者在用戶端額外設定 set experimental_enable_nereids_planner = false。

湖倉一體

  • 支援 Paimon 的原生讀取器來處理 Deletion Vector:Deletion Vector 主要用于标記或追蹤哪些資料已被删除或标記為删除,通常應用在需要保留曆史資料的場景,基于本優化可以提升大量資料更新或删除時的處理效率。
    • 參考文檔:https://doris.apache.org/zh-CN/docs/lakehouse/datalake-analytics/paimon
  • 支援在表值函數(TVF)中使用 Resource:TVF 功能為 Apache Doris 提供了直接将對象存儲或 HDFS 上的檔案作為 Table 進行查詢分析的能力。通過在 TVF 中引用 Resource,可以避免重複填寫連接配接資訊,提升使用體驗。
    • 參考文檔:https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/table-functions/hdfs/
  • 支援通過 Ranger 插件實作資料脫敏:開啟 Ranger 鑒權功能後,支援使用 Ranger 中的 Data Mask 功能進行資料脫敏。
    • 參考文檔:https://doris.apache.org/zh-CN/docs/admin-manual/auth/ranger/

異步物化視圖

  • 建構支援内表觸發式更新,如果物化視圖使用的是内表,如果内表資料發生變化,可以觸發物化視圖重新整理,需要在建立物化視圖時指定 REFRESH ON COMMIT。
  • 支援單表透明改寫。
    • 參考文檔:https://doris.apache.org/zh-CN/docs/query/view-materialized-view/query-async-materialized-view
  • 透明改寫支援 agg_state, agg_union 類型的聚合上卷,物化視圖可以定義為 agg_state 或者 agg_union,查詢使用具體的聚合函數,或者使用 agg_merge
    • agg_state 參考文檔:https://doris.apache.org/zh-CN/docs/sql-manual/sql-types/Data-Types/AGG_STATE#agg_state

其他

  • 新增 replace_empty 函數:将字元串中的子字元串進行替換,當舊字元串為空時,會将新字元串插入到原有字元串的每個字元前以及最後。
    • 參考文檔:https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/string-functions/replace_empty
  • 支援 show storage policy using 語句:支援檢視所有或指定存儲政策關聯的表和分區。
    • 參考文檔:https://doris.apache.org/zh-CN/docs/sql-manual/sql-statements/Show-Statements/SHOW-STORAGE-POLICY-USING
  • 支援 BE 側的 JVM 名額: 通過在be.conf配置檔案中設定enable_jvm_monitor=true,可以啟用對 BE 節點 JVM 的監控和名額收集,有助于了解 BE JVM 的資源使用情況,以便進行故障排除和性能優化。

功能優化

  • 支援為中文列名建立反向索引。
  • 優化 Segment Cache 所消耗記憶體的估算準确度,以便能夠更快地釋放未使用的記憶體。
  • 在使用 Export 功能導出資料時,提前過濾空分區以提升導出效率。
  • 優化 Routine Load 任務配置設定算法以平衡 BE 節點之間的負載壓力。
  • 在設定錯誤的會話變量名時,自動識别近似變量值并給出更詳細的錯誤提示。
  • 支援将 Java UDF Jar 檔案放到 FE 的 custom_lib 目錄中并預設加載。
  • 為審計日志導入作業添加逾時的全局變量audit_plugin_load_timeout ,以控制在加載審計插件或處理審計日志時允許的最大執行時間。
  • 優化了異步物化視圖透明改寫規劃的性能。
  • 當 INSERT 源資料為空時,BE 将不會執行任何操作。
  • 支援分批擷取 Hudi 和 Hive 檔案清單,當存在大量資料檔案時可以提升資料掃描性能。
    • 120 萬檔案場景下,擷取檔案清單的時間由390秒縮減到46秒。
  • 建立異步物化視圖時,禁止使用動态分區。
  • 支援檢測 Hive 外表分區資料是否和異步物化視圖同步。
  • 允許異步物化視圖建立索引。

問題修複

查詢優化器

  • 修複 SQL Cache 在 truncate paritition 後依然傳回舊結果的問題。
  • 修複從 JSON Cast 到其他類型 Nullable 屬性不對的問題。
  • 修複偶現的 Datetimev2 Literal 化簡錯誤。
  • 修複視窗函數中不能使用 count(*) 的問題。
  • 修複 UNION ALL 下全部是無 FROM 的 SELECT 時,Nullable 屬性可能錯誤的問題。
  • 修複 Bitmap in Join 和子查詢解嵌套無法同時使用的問題。
  • 修複在特定情況下過濾條件不能下推到 CTE Producer 導緻的性能問題。
  • 修複聚合 Combinator 為大寫時,無法找到函數的問題。
  • 修複視窗函數沒有被列裁剪正确裁剪導緻的性能問題。
  • 修複多個同名不同庫的表同時出現在查詢中時,可能解析錯誤導緻結果錯誤的問題。
  • 修複對于 Schema 表掃描時,由于生成了 Runtime Filter 導緻查詢報錯的問題。
  • 修複關聯子查詢解嵌套,關聯條件被折疊為 Null Literal 導緻無法執行的問題。
  • 修複規劃時,偶現的 Decimal Literal 被錯誤設定精度的問題。
  • 修複偶現的多層聚合被合并後規劃錯誤的問題。
  • 修複偶現的聚合擴充規劃報錯輸入輸出不比對的問題。
  • 修複偶現的 <=> 被錯誤轉換為 = 的問題。

查詢執行

  • 修複 Pipeline 引擎上達到限定的行數且記憶體沒有釋放時查詢被挂起的問題。
  • 修複當設定 enable_decimal256 =true 且查詢優化器回退到舊版本時 BE 發生 Core 的問題。

物化視圖

  • 修複建構異步物化視圖指定 store_row_column 屬性,be core 的問題。
  • 修複建構異步物化視圖指定 storage_medium 不生效的問題。
  • 修複基表删除後,異步物化視圖 show partitions 報錯的問題。
  • 修複異步物化視圖引起備份恢複異常的問題。
  • 修複分區改寫可能導緻錯誤結果的問題。

半結構化資料分析

  • 修複帶有空 Key 的 Variant 類型發生 Core 的問題。
  • Bitmap 索引和 Bloom Filter 索引不應支援輕量級索引變更。

主鍵模型

  • 修複在有部分列更新導入的情況下發生異常重新開機,可能會産生重複 Key 的問題。
  • 修複在記憶體緊張時發生 Clone 時 BE 可能會發生 core 的問題。

湖倉一體

  • 修複建立 Hive 表時無法使用完全限定名(如 ctl.db.tbl)的問題。
  • 修複 Refresh 操作時 Hive Metastore 連接配接未關閉的問題。
  • 修複從 2.0.x 更新到 2.1.x 時可能的中繼資料回放問題。
  • 修複 TVF 表函數無法讀取空 Snappy 壓縮檔案的問題。
  • 修複無法讀取具有無效最小/最大列統計資訊的 Parquet 檔案的問題。
  • 修複 Parquet/ORC Reader 中無法處理帶有 null-aware 函數下推謂詞的問題。
  • 修複建立 Hive 表時分區列順序的問題。
  • 修複當分區值包含空格時無法将 Hive 表寫入 S3 的問題。
  • 修複 Doris 寫入 Parquet 格式 Hive 表無法被 Hive 讀取的問題。
  • 修複 Hive 表 Schema 變更後無法讀取 ORC 檔案的問題。
  • 修複了部分情況下,啟用 Hive Metastore Listener 後 FE 無法啟動的問題。
  • 修複由 Hadoop FS 緩存引起的 FE OOM 問題。
  • 修複寫出 Parquet 格式檔案寫出 Row Group 過小的問題。
  • 修複 Paimon 表 Schema 變更後無法通過 JNI 讀取 Paimon 表的問題。
  • 修複 Paimon 表 Schema 變更後由于表字段長度判斷錯誤導緻無法讀取的問題。
  • 修複了讀取 Iceberg 中的時間戳列類型時的時區問題。
  • 修複了 Iceberg 表上的日期時間轉換錯誤和資料路徑錯誤的問題。
  • 修複阿裡雲 OSS Endpoint 不正确的問題。
  • 修複了大量檔案導緻的查詢性能下降問題。
  • 允許使用者定義的屬性通過表函數傳遞給 S3 SDK。

資料導入

  • 修複 CANCEL LOAD 指令不生效的問題。
  • 修複導入事務 Publish 階段空指針錯誤導緻導入事務無法完成的問題。
  • 修複 bRPC 通過 HTTP 發送大資料檔案序列化的問題。

資料管控

  • 修複了在将 DDL 或 DML 轉發到主 FE 後,ConnectionContext 中的資源标簽未設定的問題。
  • 修複了在啟用 lower_case_table_names 時,Restore 表名不正确的問題。
  • 修複了清理無用資料或檔案的管理指令不生效的問題。
  • 修複了無法從分區中删除存儲政策的問題。
  • 修複了向多副本自動分區表導入資料時的資料丢失問題。
  • 修複了使用舊優化器查詢或插入自動分區表時,表的分區列發生變化的問題。

記憶體管理

  • 修複日志中頻繁報錯 Cgroup meminfo 擷取失敗的問題
  • 修複使用 Bloom filter 時 Segment 緩存大小不受控制導緻程序記憶體異常增長的問題。

權限

  • 修複開啟表名大小寫不敏感後,權限設定無效的問題。
  • 修複通過非Master FE 節點設定 LDAP 密碼不生效的問題。
  • 修複了無法檢查 SELECT COUNT(*) 語句授權的問題。

其他

  • 修複 MySQL 連接配接損壞情況下,用戶端 JDBC 程式無法關閉連接配接的問題。
  • 修改 SHOW PROCEDURE STATUS 語句傳回值與 MySQL 協定不相容的問題。
  • libevent 庫強制開啟 Keepalive 以解決部分情況下連接配接洩露的問題。