日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORC 查询流程

發布時間:2024/1/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORC 查询流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ORC 文件格式

ORC 文件分成多個 Stripe,Stripe 里又分為多個 RowGroup,每個 RowGroup 包含文件中的所有列的一部分數據,每個 RowGroup 默認有 10000 行元組。查詢時只在 RowGroup 層做過濾,檢查各個列中是否可能存在結果。十分粗粒度,不能保證讀出來的每一行都滿足條件。

ORC 讀取流程

OrcFile.createReader() 時讀取文件的 Footer 和 Metadata 信息,記錄文件中的 Stripe,每個 Stripe 是包含所有列的一部分數據段。是 Orc 文件的最大的粒度。

  • 創建一個 VectorizedRowBatch,這個東西主要負責存放查出來的數據。查詢的schema里有幾列,VectorizedRowBatch 中就有幾列,每一列是原始數據類型的數組,默認長度 1024。

  • 創建 RecordReaderImpl 對象,用來讀數據,同時構造過濾器 SargApplier,創造 DataReader。

  • 讀取第一行滿足要求的數據。RecordReaderImpl.advanceToNextRow(),讀第一個 Stripe

  • 讀 Stripe 的流程: RecordReaderImpl.beginReadStripe()

    • 讀 StripeInformation,包括 Stripe Footer
    • 對 Stripe 內的每一個 RowGroup 進行過濾: RecordReaderImpl.pickRowGroups(),生成一個 includedRowGroups。根據這個東西構造出需要讀的數據的位置,并且把涉及到的數據的原始字節數組都讀出來。
  • 填充 batch: TreeReaderFactory.nextBatch()

    • 最后還是要根據讀出來的 RowGroup 填充 batch,batch是原始數據類型的數組,沒有封裝,很高效。

小坑

如果一個 batch 有兩列,第一列是遞增的1-100,第二列也是遞增的1-100,查詢過濾條件 第一列 < 50 and 第二列 > 60,這個 batch 也會讀出來。

總結

以上是生活随笔為你收集整理的ORC 查询流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。