三種DuckDB電子表格插件的union all查詢性能對比

我選取了最穩定、兼容性最好的三種:官方excel對應函數read_xlsx()、官方spatial對應函數st_read()、rusty_sheet對應函數read_sheet。
1.建立兩個包含前50萬和后54萬的xlsx文件,用于比較。利用官方excel的copy()to進行。

D copy (from v1 order by l_orderkey,l_partkey,l_suppkey limit 500000)to '50_1.xlsx'WITH (HEADER 1);
Run Time (s): real 22.406 user 24.578125 sys 0.609375
D select count(*) from read_sheet('50_1.xlsx');
┌──────────────┐
│ count_star() │
│    int64     │
├──────────────┤
│    500000    │
└──────────────┘
Run Time (s): real 6.725 user 6.359375 sys 0.343750
D copy (from v1 order by l_orderkey,l_partkey,l_suppkey offset 500000)to '50_2.xlsx';
Run Time (s): real 22.259 user 24.625000 sys 0.484375
D select count(*) from read_sheet('50_2.xlsx',header=0);
┌──────────────┐
│ count_star() │
│    int64     │
├──────────────┤
│    548575    │
└──────────────┘
Run Time (s): real 7.590 user 7.296875 sys 0.250000

2.分別比較不同讀取函數的單文件、雙文件union all、更改列數、識別錯誤的st_read()更改數據類型的執行時間。

D select sum(l_orderkey) from(from read_sheet('50_1.xlsx') union all from read_sheet('50_2.xlsx',header=0));
┌──────────────────┐
│ sum(l_orderkey)  │
│      int128      │
├──────────────────┤
│   549457354624   │
│ (549.46 billion) │
└──────────────────┘
Run Time (s): real 13.159 user 13.875000 sys 0.531250
D select sum(l_orderkey) from read_sheet('exli2.xlsx');
┌──────────────────┐
│ sum(l_orderkey)  │
│      int128      │
├──────────────────┤
│   549457354624   │
│ (549.46 billion) │
└──────────────────┘
Run Time (s): real 15.224 user 14.453125 sys 0.609375D select sum(l_orderkey) from(from st_read('50_1.xlsx') union all from st_read('50_2.xlsx'));
┌──────────────────┐
│ sum(l_orderkey)  │
│      int128      │
├──────────────────┤
│   549457354624   │
│ (549.46 billion) │
└──────────────────┘
Run Time (s): real 13.869 user 17.875000 sys 0.343750
D select sum(l_orderkey) from st_read('exli2.xlsx' );
┌──────────────────┐
│ sum(l_orderkey)  │
│      int128      │
├──────────────────┤
│   549457354624   │
│ (549.46 billion) │
└──────────────────┘
Run Time (s): real 19.012 user 18.750000 sys 0.250000D select sum(l_orderkey) from read_xlsx('exli2.xlsx' );
┌──────────────────┐
│ sum(l_orderkey)  │
│      double      │
├──────────────────┤
│  549457354624.0  │
│ (549.46 billion) │
└──────────────────┘
Run Time (s): real 7.982 user 7.593750 sys 0.375000
D select sum(l_orderkey) from(from read_xlsx('50_1.xlsx') union all from read_xlsx('50_2.xlsx'));
┌──────────────────┐
│ sum(l_orderkey)  │
│      double      │
├──────────────────┤
│  549457354624.0  │
│ (549.46 billion) │
└──────────────────┘
Run Time (s): real 7.190 user 6.656250 sys 0.515625
D select sum(l_orderkey::int64) from(from read_xlsx('50_1.xlsx') union all from read_xlsx('50_2.xlsx'));
┌─────────────────────────────────┐
│ sum(CAST(l_orderkey AS BIGINT)) │
│             int128              │
├─────────────────────────────────┤
│          549457354624           │
│        (549.46 billion)         │
└─────────────────────────────────┘
Run Time (s): real 4.234 user 6.906250 sys 0.421875
D select sum(l_orderkey::int64) from read_xlsx('exli2.xlsx' );
┌─────────────────────────────────┐
│ sum(CAST(l_orderkey AS BIGINT)) │
│             int128              │
├─────────────────────────────────┤
│          549457354624           │
│        (549.46 billion)         │
└─────────────────────────────────┘
Run Time (s): real 7.900 user 7.515625 sys 0.375000D select sum(l_orderkey::int64),sum(l_partkey::int64),sum(l_suppkey::int64) from(from read_xlsx('50_1.xlsx') union all from read_xlsx('50_2.xlsx'));
┌─────────────────────────────────┬────────────────────────────────┬────────────────────────────────┐
│ sum(CAST(l_orderkey AS BIGINT))sum(CAST(l_partkey AS BIGINT))sum(CAST(l_suppkey AS BIGINT)) │
│             int128              │             int128             │             int128             │
├─────────────────────────────────┼────────────────────────────────┼────────────────────────────────┤
│          5494573546241048673436545246691219           │
│        (549.46 billion)(104.87 billion)(5.25 billion)         │
└─────────────────────────────────┴────────────────────────────────┴────────────────────────────────┘
Run Time (s): real 4.183 user 6.906250 sys 0.406250
D select sum(l_orderkey),sum(l_partkey),sum(l_suppkey) from(from read_xlsx('50_1.xlsx') union all from read_xlsx('50_2.xlsx'));
┌──────────────────┬──────────────────┬────────────────┐
│ sum(l_orderkey)sum(l_partkey)sum(l_suppkey) │
│      doubledoubledouble     │
├──────────────────┼──────────────────┼────────────────┤
│  549457354624.0104867343654.05246691219.0  │
│ (549.46 billion)(104.87 billion)(5.25 billion) │
└──────────────────┴──────────────────┴────────────────┘
Run Time (s): real 7.217 user 6.750000 sys 0.421875
D select sum(l_orderkey),sum(l_partkey),sum(l_suppkey) from(from st_read('50_1.xlsx') union all from st_read('50_2.xlsx'));
┌──────────────────┬──────────────────┬────────────────┐
│ sum(l_orderkey)sum(l_partkey)sum(l_suppkey) │
│      int128      │      int128      │     int128     │
├──────────────────┼──────────────────┼────────────────┤
│   5494573546241048673436545246691219   │
│ (549.46 billion)(104.87 billion)(5.25 billion) │
└──────────────────┴──────────────────┴────────────────┘
Run Time (s): real 13.719 user 17.859375 sys 0.234375
D select sum(l_orderkey),sum(l_partkey),sum(l_suppkey) from(from read_sheet('50_1.xlsx') union all from read_sheet('50_2.xlsx'));
┌──────────────────┬──────────────────┬────────────────┐
│ sum(l_orderkey)sum(l_partkey)sum(l_suppkey) │
│      int128      │      int128      │     int128     │
├──────────────────┼──────────────────┼────────────────┤
│   5494568549411048672040405246689091   │
│ (549.46 billion)(104.87 billion)(5.25 billion) │
└──────────────────┴──────────────────┴────────────────┘
Run Time (s): real 13.495 user 14.000000 sys 0.812500

想從執行計劃看不同插件并行度差異的原因,完全沒有這方面的信息

D explain analyze select sum(l_orderkey::int64),sum(l_partkey::int64),sum(l_suppkey::int64) from(from read_xlsx('50_1.xlsx') union all from read_xlsx('50_2.xlsx'));
┌─────────────────────────────────────┐
│┌───────────────────────────────────┐│
││    Query Profiling Information    ││
│└───────────────────────────────────┘│
└─────────────────────────────────────┘
explain analyze select sum(l_orderkey::int64),sum(l_partkey::int64),sum(l_suppkey::int64) from(from read_xlsx('50_1.xlsx') union all from read_xlsx('50_2.xlsx'));
┌────────────────────────────────────────────────┐
│┌──────────────────────────────────────────────┐│
││               Total Time: 4.21s              ││
│└──────────────────────────────────────────────┘│
└────────────────────────────────────────────────┘
┌───────────────────────────┐
│           QUERY           │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│      EXPLAIN_ANALYZE      │
│    ────────────────────   │
│           0 Rows          │
│          (0.00s)          │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│    UNGROUPED_AGGREGATE    │
│    ────────────────────   │
│        Aggregates:        │
│          sum(#0)          │sum(#1)          │sum(#2)          │
│                           │
│           1 Rows          │
│          (0.00s)          │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│         PROJECTION        │
│    ────────────────────   │
│ CAST(l_orderkey AS BIGINT)│
│ CAST(l_partkey AS BIGINT) │
│ CAST(l_suppkey AS BIGINT) │
│                           │
│        1048575 Rows       │
│          (0.01s)          │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│           UNION           │
│    ────────────────────   │
│           0 Rows          ├──────────────┐
│          (0.00s)          │              │
└─────────────┬─────────────┘              │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│         PROJECTION        ││         PROJECTION        │
│    ────────────────────   ││    ────────────────────   │
│         l_orderkey        ││             A1            │
│         l_partkey         ││             B1            │
│         l_suppkey         ││             C1            │
│                           ││                           │
│        500000 Rows        ││        548575 Rows        │
│          (0.00s)          ││          (0.00s)          │
└─────────────┬─────────────┘└─────────────┬─────────────┘
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│         TABLE_SCAN        ││         TABLE_SCAN        │
│    ────────────────────   ││    ────────────────────   │
│    Function: READ_XLSX    ││    Function: READ_XLSX    │
│                           ││                           │
│        500000 Rows        ││        548575 Rows        │
│          (3.15s)          ││          (3.49s)          │
└───────────────────────────┘└───────────────────────────┘
Run Time (s): real 4.214 user 7.515625 sys 0.500000
D explain analyze select sum(l_orderkey),sum(l_partkey),sum(l_suppkey) from(from read_sheet('50_1.xlsx') union all fromread_sheet('50_2.xlsx'));
┌─────────────────────────────────────┐
│┌───────────────────────────────────┐│
││    Query Profiling Information    ││
│└───────────────────────────────────┘│
└─────────────────────────────────────┘
explain analyze select sum(l_orderkey),sum(l_partkey),sum(l_suppkey) from(from read_sheet('50_1.xlsx') union all from read_sheet('50_2.xlsx'));
┌────────────────────────────────────────────────┐
│┌──────────────────────────────────────────────┐│
││              Total Time: 13.04s              ││
│└──────────────────────────────────────────────┘│
└────────────────────────────────────────────────┘
┌───────────────────────────┐
│           QUERY           │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│      EXPLAIN_ANALYZE      │
│    ────────────────────   │
│           0 Rows          │
│          (0.00s)          │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│    UNGROUPED_AGGREGATE    │
│    ────────────────────   │
│        Aggregates:        │
│          sum(#0)          │sum(#1)          │sum(#2)          │
│                           │
│           1 Rows          │
│          (0.00s)          │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│         PROJECTION        │
│    ────────────────────   │
│         l_orderkey        │
│         l_partkey         │
│         l_suppkey         │
│                           │
│        1048574 Rows       │
│          (0.00s)          │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│           UNION           │
│    ────────────────────   │
│           0 Rows          ├──────────────┐
│          (0.00s)          │              │
└─────────────┬─────────────┘              │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│         PROJECTION        ││         PROJECTION        │
│    ────────────────────   ││    ────────────────────   │
│         l_orderkey        ││           499683          │
│         l_partkey         ││           139614          │
│         l_suppkey         ││            2128           │
│                           ││                           │
│        500000 Rows        ││        548574 Rows        │
│          (0.00s)          ││          (0.00s)          │
└─────────────┬─────────────┘└─────────────┬─────────────┘
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│         TABLE_SCAN        ││         TABLE_SCAN        │
│    ────────────────────   ││    ────────────────────   │
│    Function: READ_SHEET   ││    Function: READ_SHEET   │
│                           ││                           │
│        500000 Rows        ││        548574 Rows        │
│          (1.17s)          ││          (1.26s)          │
└───────────────────────────┘└───────────────────────────┘
Run Time (s): real 13.212 user 13.968750 sys 0.500000

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92888.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 中使用多進程編程的“三兩”問題

文章目錄一、簡介二、選擇合適的啟動方式三、手動終止所有的進程小結一、簡介 這里簡單介紹在Python中使用多進程編程的時候容易遇到的情況和解決辦法,有助于排查和規避某類問題,但是具體問題還是需要具體分析,后續會補充更多的內容。 二、…

Ansible部署應用

目錄Ansible概述1:什么是Ansible2:Ansible的架構組成3:Ansible與SaltStack的對比安裝部署Ansible服務1:系統環境設置2:安裝Ansible(第一臺)2:配置主機清單3:修改Ansible配…

疏老師-python訓練營-Day44預訓練模型

浙大疏錦行 知識點回顧: 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰:resnet18 作業: 嘗試在cifar10對比如下其他的預訓練模型,觀察差異,盡可能和他人選擇的不同嘗試通過ctrl進…

AI入門學習--如何寫好prompt?

寫好Prompt(提示詞)是駕馭AI模型的核心技能。以下是結合測試工程師需求的 結構化方法論 和 黃金模板一、prompt設計金字塔終極心法: Prompt 對AI的測試需求文檔,需像設計測試用例一樣:可執行:明確輸入輸出…

Linux編程 IO(標準io,文件io,目錄io)

標準IO C語言標準IO概述標準IO&#xff08;Standard Input/Output&#xff09;是C語言中用于處理文件和數據流的一組函數庫&#xff0c;定義在<stdio.h>頭文件中。與低級IO&#xff08;如read/write&#xff09;相比&#xff0c;標準IO提供了緩沖機制&#xff0c;提高了數…

C# WPF本地Deepseek部署

模型下載地址 using LLama; using LLama.Common; using System; using System.IO; using System.Threading.Tasks; using System.Windows; using System.Windows.Input;namespace YF_Talk {public partial class MainWindow : Window{private LLamaWeights _model;private LLa…

【Abp.VNext】Abp.Vnext框架模塊學習

1、Abp.Vnext-集成 Volo.Abp.Core2、Abp.vNext-Web模塊 Volo.Abp.AspNetCore.MVC框架&#xff08;framework文件夾&#xff09; 七、Abp.vNext-應用模塊-Identity身份認證 業務模塊&#xff08;modules文件夾->identity&#xff09; 1、添加領域模型 Volo.Abp.Identity.Doma…

【完整源碼+數據集+部署教程】火柴實例分割系統源碼和數據集:改進yolo11-rmt

背景意義 研究背景與意義 在計算機視覺領域&#xff0c;實例分割技術作為一種重要的圖像處理方法&#xff0c;近年來得到了廣泛的關注和應用。實例分割不僅能夠識別圖像中的物體類別&#xff0c;還能精確地分割出每個物體的輪廓&#xff0c;提供更為細致的視覺信息。這一技術在…

飛算JavaAI云原生實踐:基于Docker與K8s的自動化部署架構解析

一、飛算JavaAI詳細介紹 1.1 飛算JavaAI飛算JavaAI是飛算云智推出的一款革命性Java開發輔助工具&#xff0c;它通過人工智能技術深度賦能傳統軟件開發流程&#xff0c;特別為大學生課程設計、畢業設計等實踐教學環節提供了強有力的技術支持。在當前高校計算機相關專業教學中&am…

小程序打通美團核銷:解鎖到店綜合業態私域密碼,賦能6000+門店破局增長

數字化浪潮奔涌而來&#xff0c;棋牌室、臺球廳、親子樂園等線下綜合業態面臨經營轉型的關鍵節點。小程序與美團核銷功能的深度耦合&#xff0c;正成為撬動私域流量的核心杠桿&#xff0c;為超6000家門店打通了一條低成本、高轉化的經營快車道。過往經營模式中&#xff0c;線上…

Linux Shell:Nano 編輯器備忘

打開文件 sudo nano /etc/apt/sources.list選中多行&#xff0c;然后刪除 用方向鍵將光標定位到要刪除的起始位置按下 Alt A 設置錨點用方向鍵選擇要刪除的區域 (以上 3 步是為了選中文本)用 Ctrl K(剪切) 或 Alt D(直接刪除) 全選并刪除 按下 Alt \ 將光標移動到文件開頭…

常見的設計模式(2)單例模式

目錄 一、版本一&#xff1a;禁用構造與拷貝 二、版本二&#xff1a;注冊析構函數/嵌套垃圾回收 &#xff08;1&#xff09;使用atexit注冊程序結束時的函數 &#xff08;2&#xff09;使用對象嵌套垃圾回收 三、版本三&#xff1a;線程安全 四、版本四&#xff1a;編譯器…

JAiRouter 0.2.1 更新啦:內存優化 + 配置合并 + IP 限流增強,運維體驗再升級

JAiRouter 0.2.1 更新啦&#xff1a;內存優化 配置合并 IP 限流增強&#xff0c;運維體驗再升級 如果你已經在 0.2.0 生產環境中穩定運行&#xff0c;那么這篇更新會讓你無痛升級&#xff0c;直接“更輕、更穩、更省心”。 &#x1f4ce; 官方倉庫 & issue 直達 https://…

學習嵌入式第二十六天

文章目錄IO(續上)1.標準IO1.標準IO的接口2.流的定位2.文件IO1.概念&#xff1a;2.系統調用和庫函數3.文件IO函數接口習題IO(續上) 1.標準IO 1.標準IO的接口 fwrite 原型&#xff1a;size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); 功能&#xff1…

GDB 程序啟動參數設置深度指南

GDB 程序啟動參數設置深度指南 1. 概述 在程序調試過程中&#xff0c;正確設置啟動參數對于驗證程序行為、重現特定場景至關重要。GDB提供多種靈活的方式設置啟動參數&#xff0c;特別是當您需要調試命令行參數處理邏輯或配置敏感型應用時。 2. 參數設置的核心方法 2.1 啟動GDB…

Autudl華為昇騰系列NPU簡介和部署推理yolo11 yolov8 yolov5分割模型

0.配置Autudl 下面圖片是我所租的昇騰卡和具體環境版本&#xff0c;太具體的就不說了&#xff0c;有需要的話我單獨出一期Autudl租顯卡的教程&#xff0c;主要是為了學習昇騰環境如何運行Yolo系列模型。 0.1華為昇騰芯片&#xff08;Ascend&#xff09;簡介 1.Ascend 310&…

什么是JSP和Servlet以及二者的關系

JSP&#xff08;JavaServer Pages&#xff09; 是“HTML 里寫 Java”的模板技術&#xff0c;最終會被容器轉換成 Servlet。Servlet 是“Java 里寫 HTML”的 Java 類&#xff0c;直接繼承 javax.servlet.http.HttpServlet&#xff0c;用來接收/響應 HTTP 請求。Servlet 是什么 純…

【WonderTrader源碼詳解 1】【環境搭建 2】【編譯安裝WonderTrader】

一、引言 本篇來講述如何搭建 wondertrader 和 wtpy 二、wondertrader 2.1 源碼下載 # /home/leo/sda_1.6TBgit clone https://gitee.com/wondertrader/wondertrader.gitgit clone https://gitee.com/wondertrader/wtpy.git2.2 源碼編譯 cd /home/leo/sda_1.6TB/wondertrader/s…

hutool 作為http 客戶端工具調用的一點點總結

場景一&#xff1a;客戶端timeout 的時間給的很短//100毫秒 private static final int HTTP_TIMEOUT_MS 1 * 100; response HttpUtil.createPost(patrolresultconfirmUrl).body(JSONObject.toJSONString(search)).header("Authorization", token).timeout(HTTP_TI…

基于MongoDB/HBase的知識共享平臺的設計與實現

標題:基于MongoDB/HBase的知識共享平臺的設計與實現內容:1.摘要 在當今信息爆炸的時代&#xff0c;知識的有效共享和管理變得愈發重要。本研究的目的是設計并實現一個基于MongoDB/HBase的知識共享平臺&#xff0c;以滿足大規模知識數據的存儲、高效查詢和快速共享需求。方法上&…