JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:來自 Elastic?Jeffrey Rengifo

學習如何將 ES|QL 與 JavaScript 的 Apache Arrow 客戶端工具一起使用。

想獲得 Elastic 認證嗎?了解下一期 Elasticsearch Engineer 培訓的時間吧!

Elasticsearch 擁有眾多新功能,助你為自己的使用場景構建最佳搜索解決方案。深入了解我們的示例筆記本,開始免費的云試用,或立即在本地機器上體驗 Elastic。


Elasticsearch 查詢語言(ES|QL)是一種基于管道的新指令語言,旨在讓用戶以逐步的方式連接不同的操作。它是一種為數據分析優化的語言,并在一套新架構中運行,能夠高效分析海量數據。

你可以在這篇文章和文檔中進一步了解 ES|QL。

ES|QL 查詢支持構建多種格式的響應,例如 JSON、CSV、TSV、YAML、Arrow 和 binary。從 Elasticsearch 8.16 開始,Node.js 客戶端中包含了一些處理這些格式的工具。

本文將介紹最新的工具: toArrowReadertoArrowTable,它們在 Elasticsearch Node.js 客戶端中專門支持 Apache Arrow。更多關于工具的內容,請查看這篇文章。

什么是 Apache Arrow?

Apache Arrow 是一種列式數據分析工具,使用與現代環境中各種編程語言無關的通用格式。

Arrow 格式的主要優點之一是其二進制列式結構經過優化,可實現非常快速的讀取,從而支持高性能的分析計算。

來源: Format | Apache Arrow

閱讀這篇文章,了解如何在 ES|QL 中利用 Arrow。

ES|QL Apache Arrow 工具

在示例中,我們將使用 Elastic 的 Web 日志示例數據集。你可以按照這份文檔將其導入。

Elasticsearch 客戶端

通過指定你的 Elasticsearch 端點 URL 和 API Key 來配置 Elasticsearch 客戶端。

const { Client } = require("@elastic/elasticsearch");const esClient = new Client({node: "ELASTICSEARCH_ENDPOINT",auth: { apiKey: "ELASTICSEARCH_API_KEY" },
});

toArrowReader

toArrowReader 工具用于優化內存使用,它不會一次性將整個結果集加載到內存中,而是以批次方式進行流式處理。這使得可以在不耗盡系統內存的情況下,對超大數據集執行計算。

這個工具允許你逐行處理數據:

const q = `FROM kibana_sample_data_logs | KEEP message, response, tags, @timestamp, ip, agent | LIMIT 2 `;const reader = await esClient.helpers.esql({ query: q }).toArrowReader();const toArrowReaderResults = [];for await (const recordBatch of reader) {for (const record of recordBatch) {const recordData = record.toJSON();toArrowReaderResults.push(recordData);}
}console.log(JSON.stringify(toArrowReaderResults, null, 2));
/*RESULT: [{"message": "49.167.60.184 - - [2018-09-16T09:10:01.825Z] \"GET /kibana/kibana-6.3.2-darwin-x86_64.tar.gz HTTP/1.1\" 200 2603 \"-\" \"Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24\"","response": "200","tags": ["error","info"],"@timestamp": 1749373801825,"ip": {"0": 49,"1": 167,"2": 60,"3": 184},"agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24"},{"message": "225.72.201.213 - - [2018-09-16T09:37:35.555Z] \"GET /elasticsearch/elasticsearch-6.3.2.zip HTTP/1.1\" 200 6335 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\"","response": "200","tags": ["success","info"],"@timestamp": 1749375455555,"ip": {"0": 225,"1": 72,"2": 201,"3": 213},"agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"}]
*/

toArrowTable

如果你希望在請求完成后一次性將所有結果加載到一個 Arrow 表對象中,而不是以流的方式逐行返回,可以使用 toArrowTable

當你的數據集可以輕松裝入內存,同時又想利用 Arrow 的零拷貝讀取和緊湊傳輸格式,并保持代碼簡潔時,這個工具就非常有用。

如果應用本身已經在處理 Arrow 數據,toArrowTable 也是一個不錯的選擇,因為你無需對數據進行序列化。此外,由于 Arrow 與編程語言無關,無論使用什么平臺和語言,你都可以使用它。

const q = `FROM kibana_sample_data_logs | KEEP message, response, tags, @timestamp, ip, agent | LIMIT 2 `;const toArrowTableResults = await esClient.helpers.esql({ query: q }).toArrowTable();const arrayTable = toArrowTableResults.toArray();console.log(JSON.stringify(arrayTable, null, 2));
/*RESULT: [{"message": "49.167.60.184 - - [2018-09-16T09:10:01.825Z] \"GET /kibana/kibana-6.3.2-darwin-x86_64.tar.gz HTTP/1.1\" 200 2603 \"-\" \"Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24\"","response": "200","tags": ["error","info"],"@timestamp": 1749373801825,"ip": {"0": 49,"1": 167,"2": 60,"3": 184},"agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24"},{"message": "225.72.201.213 - - [2018-09-16T09:37:35.555Z] \"GET /elasticsearch/elasticsearch-6.3.2.zip HTTP/1.1\" 200 6335 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\"","response": "200","tags": ["success","info"],"@timestamp": 1749375455555,"ip": {"0": 225,"1": 72,"2": 201,"3": 213},"agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"}] 
*/

總結

Elasticsearch Node.js 客戶端提供的 Apache Arrow 工具有助于高效處理日常任務,例如分析大數據集,并以緊湊且與語言無關的格式接收 Elasticsearch 響應。

在本文中,我們學習了如何使用 ES|QL 客戶端工具,將 Elasticsearch 響應解析為 Arrow Reader 或 Arrow Table。

原文:ES|QL in JavaScript: Leveraging Apache Arrow helpers - Elasticsearch Labs

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

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

相關文章

從零實現富文本編輯器#5-編輯器選區模型的狀態結構表達

先前我們總結了瀏覽器選區模型的交互策略,并且實現了基本的選區操作,還調研了自繪選區的實現。那么相對的,我們還需要設計編輯器的選區表達,也可以稱為模型選區。編輯器中應用變更時的操作范圍,就是以模型選區為基準來…

一個小小的 flask app, 幾個小工具,拼湊一下

1. 起因, 目的: 自己的工具,為自己服務。給大家做參考。項目地址: https://github.com/buxuele/flask_utils 2. 先看效果 3. 過程: 一個有趣的 Flask 工具集:從無到有的開發歷程 緣起:為什么要做這個項目&#xff…

織夢dedecms怎樣用標簽調用隨機數?

?在使用織夢模板建站中,隨機數作為一個偶爾使用到的參數,在具體使用中雖然用的少,但是今天跟版網小編給大家介紹下,大家可以參考下: 實現隨機數的調用可以使用下面的js: 方法一:js代碼 Math…

訪問服務器項目,服務器可以ping通,但是端口訪問不到

原因:端口未開放 假設項目部署服務器為205,在90服務器訪問205項目 1、首先在205確定項目啟動,看端口是否占用 # Windows(檢查端口占用) netstat -ano | findstr "8103"期望輸出: TCP 0.0.…

云原生核心技術 (7/12): K8s 核心概念白話解讀(上):Pod 和 Deployment 究竟是什么?

大家好,歡迎來到《云原生核心技術》系列的第七篇! 在上一篇,我們成功地使用 Minikube 或 kind 在自己的電腦上搭建起了一個迷你但功能完備的 Kubernetes 集群。現在,我們就像一個擁有了一塊嶄新數字土地的農場主,是時…

華為云Flexus+DeepSeek征文 | 基于ModelArts Studio、DeepSeek大模型和Dify搭建網站智能客服助手

目錄 一、前言 二、ModelArts Studio(MaaS)介紹與應用場景 2.1ModelArts Studio(MaaS)介紹 2.2 ModelArts Studio(MaaS)使用場景 2.3 開通MaaS服務 2.4 開通DeepSeek-V3商用服務 三、華為云Flexus簡介 3.1 …

『uniapp』url攔截屏蔽 避免webview中打開淘寶店鋪自動跳轉淘寶

目錄 分析1. wv.overrideUrlLoading2. 參數 `mode: allow`3. 參數 `match: ^(http|https)://.*`4. 回調函數 `function(e) { console.warn(allow url:, e.url); }`作用:可能的應用場景:核心代碼總結歡迎關注 『uniapp』 專欄,持續更新中 歡迎關注 『uniapp』 專欄,持續更新…

將對透視變換后的圖像使用Otsu進行閾值化,來分離黑色和白色像素。這句話中的Otsu是什么意思?

Otsu 是一種自動閾值化方法,用于將圖像分割為前景和背景。它通過最小化圖像的類內方差或等價地最大化類間方差來選擇最佳閾值。這種方法特別適用于圖像的二值化處理,能夠自動確定一個閾值,將圖像中的像素分為黑色和白色兩類。 Otsu 方法的原…

Zookeeper 和 Kafka 版本與 JDK 要求

Apache Zookeeper 和 Apache Kafka 在不同版本中對 JDK 的要求如下表所示(基于官方文檔和歷史版本記錄整理): 1. Zookeeper 版本與 JDK 要求 Zookeeper 版本要求的最低 JDK 版本說明3.4.x 系列JDK 6生產環境建議用 JDK 8(舊版兼容性強)。3.5.x 系列(3.5.5+)JDK 83.5.0 …

V837s-SDK Telnetd服務連接不上異常解決

目錄 前言 一、檢查 Telnetd 服務是否啟動 二、問題解決 總結 前言 在基于 V837s-SDK 進行開發的過程中,Telnetd 服務連接不上是一個較為常見且棘手的問題。Telnet 作為一種遠程登錄協議,在開發調試時為我們提供了便捷的遠程操作方式。若其連接出現異常,將嚴重影響開發進度…

滑動窗口最大值和最小值

題目: 思路: 窗口進行滑動時,需要快速獲取min和max,因此需要一個結構來保存最值,而不是臨時計算。動態的最值更新容易聯想到單調棧,但是這里需要頻繁增刪元素,因此用雙端隊列,front…

JVM——對象創建全家桶:JVM中對象創建的模式及最佳實踐

引入 在 Java 應用開發中,對象創建是最基礎且高頻的操作,但往往也是性能優化的關鍵切入點。想象一個在線閱讀平臺,每天需要創建數百萬個 Book 對象來統計閱讀數據。如果每個對象的創建過程存在內存浪費或性能瓶頸,累積效應將導致…

VSCode中PHP使用Xdebug

本地環境 windows10php8.2 ntsxdebug v3thinkphp v8 下載Xdebug Xdebug下載地址 從xdebug下載地址,下載最新的xdebug,解壓后將php_xdebug.dll放入php目錄的ext目錄下 配置php.ini [Xdebug] zend_extension php_xdebug xdebug.client_host 127.0.0.1 xdebug.client_port…

金融系統滲透測試

金融系統滲透測試是保障金融機構網絡安全的核心環節,它的核心目標是通過模擬攻擊手段主動發現系統漏洞,防范數據泄露、資金盜取等重大風險。 一、金融系統滲透測試的核心框架 合規性驅動 需嚴格遵循《網絡安全法》《數據安全法》及金融行業監管要求&am…

高考志愿填報管理系統---開發介紹

高考志愿填報管理系統是一款專為教育機構、學校和教師設計的學生信息管理和志愿填報輔助平臺。系統基于Django框架開發,采用現代化的Web技術,為教育工作者提供高效、安全、便捷的學生管理解決方案。 ## 📋 系統概述 ### 🎯 系統定…

PHP 項目中新增定時任務類型的詳細步驟(以 CRMEB 為例)

1.首先需要在下面文件中增加定時任務類型 2.在app\services\system\crontab\CrontabRunServices類中增加第一步中與定時任務類型同名的方法,注意需要下劃線轉小駝峰 例如定時任務的類型為:order_tick,而在CrontabRunServices類中的方法名稱為&#xff1…

Day27 函數專題2:裝飾器

1.裝飾器的思想:進一步復用 裝飾器(Decorator)是 Python 中一種強大的編程工具,核心作用是在不修改原函數代碼的前提下,為函數添加額外功能(如日志記錄、性能統計、權限校驗等)。它充分利用了 …

Qt進階開發:動畫框架的介紹和使用

文章目錄 一、QPropertyAnimation 簡介二、基本用法三、常用屬性和方法四、支持的屬性&#xff08;部分常用&#xff09;五、多個動畫組合六、使用緩和曲線七、狀態機框架 一、QPropertyAnimation 簡介 #include <QPropertyAnimation>QPropertyAnimation 可以讓你在一段…

IP選擇注意事項

IP選擇注意事項 MTP、FTP、EFUSE、EMEMORY選擇時&#xff0c;需要考慮以下參數&#xff0c;然后確定后選擇IP。 容量工作電壓范圍溫度范圍擦除、燒寫速度/耗時讀取所有bit的時間待機功耗擦寫、燒寫功耗面積所需要的mask layer

Flask RESTful 示例

目錄 1. 環境準備2. 安裝依賴3. 修改main.py4. 運行應用5. API使用示例獲取所有任務獲取單個任務創建新任務更新任務刪除任務 中文亂碼問題&#xff1a; 下面創建一個簡單的Flask RESTful API示例。首先&#xff0c;我們需要創建環境&#xff0c;安裝必要的依賴&#xff0c;然后…