- Apache Presto 教程
- Apache Presto - 首頁
- Apache Presto - 概述
- Apache Presto - 架構
- Apache Presto - 安裝
- Apache Presto - 配置
- Apache Presto - 管理
- Apache Presto - SQL 操作
- Apache Presto - SQL 函式
- Apache Presto - MySQL 聯結器
- Apache Presto - JMX 聯結器
- Apache Presto - HIVE 聯結器
- Apache Presto - KAFKA 聯結器
- Apache Presto - JDBC 介面
- 自定義函式應用
- Apache Presto 有用資源
- Apache Presto 快速指南
- Apache Presto - 有用資源
- Apache Presto - 討論
Apache Presto 快速指南
Apache Presto - 概述
資料分析是分析原始資料以收集相關資訊以進行更好決策的過程。它主要用於許多組織中做出商業決策。好吧,大資料分析涉及大量資料,並且此過程非常複雜,因此公司使用不同的策略。
例如,Facebook 是世界上領先的資料驅動型和最大的資料倉庫公司之一。Facebook 倉庫資料儲存在 Hadoop 中以進行大規模計算。後來,當倉庫資料增長到 PB 級時,他們決定開發一個新的低延遲系統。在 2012 年,Facebook 團隊成員設計了“Presto” 用於互動式查詢分析,即使在 PB 級資料的情況下也能快速執行。
什麼是 Apache Presto?
Apache Presto 是一個分散式並行查詢執行引擎,針對低延遲和互動式查詢分析進行了最佳化。Presto 可以輕鬆執行查詢並在不宕機的情況下擴充套件,即使是從 GB 到 PB。
單個 Presto 查詢可以處理來自多個數據源的資料,例如 HDFS、MySQL、Cassandra、Hive 和許多其他資料來源。Presto 使用 Java 構建,並且易於與其他資料基礎設施元件整合。Presto 功能強大,並且 Airbnb、DropBox、Groupon、Netflix 等領先公司正在採用它。
Presto - 特性
Presto 包含以下特性 -
- 簡單且可擴充套件的架構。
- 可插拔聯結器 - Presto 支援可插拔聯結器為查詢提供元資料和資料。
- 流水線執行 - 避免不必要的 I/O 延遲開銷。
- 使用者定義函式 - 分析師可以建立自定義使用者定義函式以輕鬆遷移。
- 向量化列式處理。
Presto - 優勢
以下是 Apache Presto 提供的優勢列表 -
- 專門的 SQL 操作
- 易於安裝和除錯
- 簡單的儲存抽象
- 快速擴充套件 PB 級資料,同時保持低延遲
Presto - 應用
Presto 支援當今大多數優秀的工業應用。讓我們看看一些值得注意的應用。
Facebook - Facebook 為資料分析需求構建了 Presto。Presto 可以輕鬆擴充套件大量資料。
Teradata - Teradata 提供大資料分析和資料倉庫的端到端解決方案。Teradata 對 Presto 的貢獻使更多公司更容易滿足所有分析需求。
Airbnb - Presto 是 Airbnb 資料基礎設施不可或缺的一部分。好吧,數百名員工每天都在使用這項技術執行查詢。
為什麼選擇 Presto?
Presto 支援標準 ANSI SQL,這使得資料分析師和開發人員非常容易使用。儘管它使用 Java 構建,但它避免了與記憶體分配和垃圾回收相關的典型 Java 程式碼問題。Presto 具有對 Hadoop 友好的聯結器架構。它允許輕鬆插入檔案系統。
Presto 可以在多個 Hadoop 發行版上執行。此外,Presto 可以從 Hadoop 平臺查詢 Cassandra、關係資料庫或其他資料儲存。這種跨平臺分析能力使 Presto 使用者能夠從 GB 到 PB 的資料中提取最大業務價值。
Apache Presto - 架構
Presto 的架構與經典 MPP(大規模並行處理)DBMS 架構幾乎相同。下圖說明了 Presto 的架構。
上圖包含不同的元件。下表詳細描述了每個元件。
| 序號 | 元件和描述 |
|---|---|
| 1. | 客戶端 客戶端(Presto CLI)將 SQL 語句提交給協調器以獲取結果。 |
| 2. | 協調器 協調器是一個主守護程序。協調器首先解析 SQL 查詢,然後分析並計劃查詢執行。排程程式執行管道執行,將工作分配給最近的節點並監視進度。 |
| 3. | 聯結器 儲存外掛稱為聯結器。Hive、HBase、MySQL、Cassandra 等充當聯結器;否則,您還可以實現自定義聯結器。聯結器為查詢提供元資料和資料。協調器使用聯結器獲取元資料以構建查詢計劃。 |
| 4. | 工作節點 協調器將任務分配給工作節點。工作節點從聯結器獲取實際資料。最後,工作節點將結果傳遞給客戶端。 |
Presto - 工作流程
Presto 是一個在節點叢集上執行的分散式系統。Presto 的分散式查詢引擎針對互動式分析進行了最佳化,並支援標準 ANSI SQL,包括複雜查詢、聚合、聯接和視窗函式。Presto 架構簡單且可擴充套件。Presto 客戶端 (CLI) 將 SQL 語句提交給主守護程序協調器。
排程程式透過執行管道連線。排程程式將工作分配給最靠近資料且監視進度的節點。協調器將任務分配給多個工作節點,最後工作節點將結果傳遞迴客戶端。客戶端從輸出程序中提取資料。可擴充套件性是關鍵設計。可插拔聯結器(如 Hive、HBase、MySQL 等)為查詢提供元資料和資料。Presto 的設計採用了“簡單儲存抽象”,這使得針對這些不同型別的資料來源輕鬆提供 SQL 查詢功能。
執行模型
Presto 支援自定義查詢和執行引擎,並使用旨在支援 SQL 語義的運算子。除了改進的排程之外,所有處理都在記憶體中進行,並在不同階段的網路之間進行流水線處理。這避免了不必要的 I/O 延遲開銷。
Apache Presto - 安裝
本章將說明如何在您的機器上安裝 Presto。讓我們瞭解 Presto 的基本要求,
- Linux 或 Mac OS
- Java 版本 8
現在,讓我們繼續執行以下步驟以在您的機器上安裝 Presto。
驗證 Java 安裝
希望您現在已經在您的機器上安裝了 Java 版本 8,因此您只需使用以下命令驗證它。
$ java -version
如果 Java 已成功安裝在您的機器上,您將看到已安裝 Java 的版本。如果 Java 未安裝,請按照後續步驟在您的機器上安裝 Java 8。
下載 JDK。透過訪問以下連結下載最新版本的 JDK。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
最新版本是 JDK 8u 92,檔案為“jdk-8u92-linux-x64.tar.gz”。請將檔案下載到您的機器上。
之後,解壓縮檔案並移動到特定目錄。
然後設定 Java 備選方案。最後,Java 將安裝在您的機器上。
Apache Presto 安裝
透過訪問以下連結下載最新版本的 Presto,
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.149/
現在,“presto-server-0.149.tar.gz”的最新版本將下載到您的機器上。
解壓 tar 檔案
使用以下命令解壓縮tar檔案 -
$ tar -zxf presto-server-0.149.tar.gz $ cd presto-server-0.149
配置設定
建立“data”目錄
在安裝目錄之外建立一個 data 目錄,該目錄將用於儲存日誌、元資料等,以便在升級 Presto 時輕鬆保留它。它使用以下程式碼定義 -
$ cd $ mkdir data
要檢視其所在路徑,請使用命令“pwd”。此位置將在下一個 node.properties 檔案中分配。
建立“etc”目錄
使用以下程式碼在 Presto 安裝目錄中建立一個 etc 目錄 -
$ cd presto-server-0.149 $ mkdir etc
此目錄將儲存配置檔案。讓我們逐個建立每個檔案。
節點屬性
Presto 節點屬性檔案包含每個節點特有的環境配置。它在 etc 目錄(etc/node.properties)中使用以下程式碼建立 -
$ cd etc $ vi node.properties node.environment = production node.id = ffffffff-ffff-ffff-ffff-ffffffffffff node.data-dir = /Users/../workspace/Presto
完成所有更改後,儲存檔案並退出終端。這裡node.data是上面建立的 data 目錄的位置路徑。node.id表示每個節點的唯一識別符號。
JVM 配置
在 etc 目錄(etc/jvm.config)中建立一個檔案“jvm.config”。此檔案包含用於啟動 Java 虛擬機器的一系列命令列選項。
$ cd etc $ vi jvm.config -server -Xmx16G -XX:+UseG1GC -XX:G1HeapRegionSize = 32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError = kill -9 %p
完成所有更改後,儲存檔案並退出終端。
配置屬性
在 etc 目錄(etc/config.properties)中建立一個檔案“config.properties”。此檔案包含 Presto 伺服器的配置。如果您正在設定一臺機器進行測試,則 Presto 伺服器只能充當協調程序,如以下程式碼中定義的那樣 -
$ cd etc $ vi config.properties coordinator = true node-scheduler.include-coordinator = true http-server.http.port = 8080 query.max-memory = 5GB query.max-memory-per-node = 1GB discovery-server.enabled = true discovery.uri = https://:8080
這裡,
coordinator - 主節點。
node-scheduler.include-coordinator - 允許在協調器上排程工作。
http-server.http.port - 指定 HTTP 伺服器的埠。
query.max-memory=5GB - 分散式記憶體的最大量。
query.max-memory-per-node=1GB - 每個節點的最大記憶體量。
discovery-server.enabled - Presto 使用 Discovery 服務查詢叢集中的所有節點。
discovery.uri - Discovery 伺服器的 URI。
如果您正在設定多臺機器 Presto 伺服器,Presto 將充當協調和工作程序。使用此配置設定在多臺機器上測試 Presto 伺服器。
協調器配置
$ cd etc $ vi config.properties coordinator = true node-scheduler.include-coordinator = false http-server.http.port = 8080 query.max-memory = 50GB query.max-memory-per-node = 1GB discovery-server.enabled = true discovery.uri = https://:8080
工作節點配置
$ cd etc $ vi config.properties coordinator = false http-server.http.port = 8080 query.max-memory = 50GB query.max-memory-per-node = 1GB discovery.uri = https://:8080
日誌屬性
在 etc 目錄(etc/log.properties)中建立一個檔案“log.properties”。此檔案包含命名日誌記錄器層次結構的最小日誌級別。它使用以下程式碼定義 -
$ cd etc $ vi log.properties com.facebook.presto = INFO
儲存檔案並退出終端。這裡,使用了四個日誌級別,如 DEBUG、INFO、WARN 和 ERROR。預設日誌級別為 INFO。
目錄屬性
在 etc 目錄(etc/catalog)中建立一個目錄“catalog”。這將用於掛載資料。例如,使用以下內容建立etc/catalog/jmx.properties以將jmx 聯結器作為 jmx 目錄掛載 -
$ cd etc $ mkdir catalog $ cd catalog $ vi jmx.properties connector.name = jmx
啟動 Presto
可以使用以下命令啟動 Presto,
$ bin/launcher start
然後您將看到類似於此的響應,
Started as 840
執行 Presto
要啟動 Presto 伺服器,請使用以下命令 -
$ bin/launcher run
成功啟動 Presto 伺服器後,您可以在“var/log”目錄中找到日誌檔案。
launcher.log - 此日誌由啟動器建立,並連線到伺服器的 stdout 和 stderr 流。
server.log - 這是 Presto 使用的主日誌檔案。
http-request.log - 伺服器接收到的 HTTP 請求。
到目前為止,您已成功在您的機器上安裝了 Presto 配置設定。讓我們繼續執行以下步驟以安裝 Presto CLI。
安裝 Presto CLI
Presto CLI 提供了一個基於終端的互動式 shell 用於執行查詢。
透過訪問以下連結下載 Presto CLI,
https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.149/
現在“presto-cli-0.149-executable.jar”將安裝在您的機器上。
執行 CLI
下載 presto-cli 後,將其複製到您想要執行它的位置。此位置可以是任何能夠訪問協調器的節點。首先將 Jar 檔案重新命名為 Presto。然後使用以下程式碼使用chmod + x命令使其可執行。
$ mv presto-cli-0.149-executable.jar presto $ chmod +x presto
現在使用以下命令執行 CLI,
./presto --server localhost:8080 --catalog jmx --schema default Here jmx(Java Management Extension) refers to catalog and default referes to schema.
您將看到以下響應,
presto:default>
現在在您的終端上鍵入“jps”命令,您將看到正在執行的守護程序。
停止 Presto
執行完所有操作後,您可以使用以下命令停止 presto 伺服器:
$ bin/launcher stop
Apache Presto - 配置設定
本章將討論 Presto 的配置設定。
Presto 驗證器
Presto 驗證器可用於針對另一個數據庫(例如 MySQL)測試 Presto,或將兩個 Presto 叢集相互測試。
在 MySQL 中建立資料庫
開啟 MySQL 伺服器並使用以下命令建立資料庫。
create database test
現在您已在伺服器中建立了“test”資料庫。使用以下查詢建立表並載入資料。
CREATE TABLE verifier_queries( id INT NOT NULL AUTO_INCREMENT, suite VARCHAR(256) NOT NULL, name VARCHAR(256), test_catalog VARCHAR(256) NOT NULL, test_schema VARCHAR(256) NOT NULL, test_prequeries TEXT, test_query TEXT NOT NULL, test_postqueries TEXT, test_username VARCHAR(256) NOT NULL default 'verifier-test', test_password VARCHAR(256), control_catalog VARCHAR(256) NOT NULL, control_schema VARCHAR(256) NOT NULL, control_prequeries TEXT, control_query TEXT NOT NULL, control_postqueries TEXT, control_username VARCHAR(256) NOT NULL default 'verifier-test', control_password VARCHAR(256), session_properties_json TEXT, PRIMARY KEY (id) );
新增配置設定
建立一個屬性檔案來配置驗證器:
$ vi config.properties suite = mysuite query-database = jdbc:mysql://:3306/tutorials?user=root&password=pwd control.gateway = jdbc:presto://:8080 test.gateway = jdbc:presto://:8080 thread-count = 1
這裡,在query-database欄位中,輸入以下詳細資訊:mysql 資料庫名稱、使用者名稱和密碼。
下載 JAR 檔案
訪問以下連結下載 Presto-verifier jar 檔案:
https://repo1.maven.org/maven2/com/facebook/presto/presto-verifier/0.149/
現在版本“presto-verifier-0.149-executable.jar”已下載到您的機器上。
執行 JAR
使用以下命令執行 JAR 檔案:
$ mv presto-verifier-0.149-executable.jar verifier $ chmod+x verifier
執行驗證器
使用以下命令執行驗證器:
$ ./verifier config.properties
建立表
讓我們使用以下查詢在“test”資料庫中建立一個簡單的表。
create table product(id int not null, name varchar(50))
插入表
建立表後,使用以下查詢插入兩條記錄:
insert into product values(1,’Phone') insert into product values(2,’Television’)
執行驗證器查詢
在驗證器終端 (./verifier config.propeties) 中執行以下示例查詢以檢查驗證器結果。
示例查詢
insert into verifier_queries (suite, test_catalog, test_schema, test_query,
control_catalog, control_schema, control_query) values
('mysuite', 'mysql', 'default', 'select * from mysql.test.product',
'mysql', 'default', 'select * from mysql.test.product');
這裡,select * from mysql.test.product查詢指的是 mysql 目錄,test是資料庫名稱,product是表名稱。透過這種方式,您可以使用 Presto 伺服器訪問 mysql 聯結器。
這裡,兩個相同的 select 查詢相互測試以檢視效能。類似地,您可以執行其他查詢以測試效能結果。您還可以連線兩個 Presto 叢集以檢查效能結果。
Apache Presto - 管理工具
在本章中,我們將討論 Presto 中使用的管理工具。讓我們從 Presto 的 Web 介面開始。
Web 介面
Presto 提供了一個用於監控和管理查詢的 Web 介面。可以透過協調器配置屬性中指定的埠號訪問它。
啟動 Presto 伺服器和 Presto CLI。然後您可以從以下 URL 訪問 Web 介面:https://:8080/
輸出將類似於以上螢幕。
這裡,主頁列出了查詢,以及唯一查詢 ID、查詢文字、查詢狀態、完成百分比、使用者名稱和此查詢的來源等資訊。最新的查詢首先執行,然後已完成或未完成的查詢顯示在底部。
調整 Presto 的效能
如果 Presto 叢集存在任何與效能相關的問題,請將您的預設配置設定更改為以下設定。
配置屬性
task. info -refresh-max-wait - 減少協調器的工作負載。
task.max-worker-threads - 將程序拆分並分配給每個工作節點。
distributed-joins-enabled - 基於雜湊的分散式連線。
node-scheduler.network-topology - 將網路拓撲設定為排程程式。
JVM 設定
將您的預設 JVM 設定更改為以下設定。這將有助於診斷垃圾回收問題。
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCCause -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintReferenceGC -XX:+PrintClassHistogramAfterFullGC -XX:+PrintClassHistogramBeforeFullGC -XX:PrintFLSStatistics = 2 -XX:+PrintAdaptiveSizePolicy -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount = 1
Apache Presto - 基本 SQL 操作
在本章中,我們將討論如何在 Presto 上建立和執行查詢。讓我們瞭解 Presto 支援的基本資料型別。
基本資料型別
下表描述了 Presto 的基本資料型別。
| 序號 | 資料型別 & 描述 |
|---|---|
| 1. | VARCHAR 可變長度字元資料 |
| 2. | BIGINT 64 位有符號整數 |
| 3. | DOUBLE 64 位浮點雙精度值 |
| 4. | DECIMAL 固定精度的十進位制數。例如 DECIMAL(10,3) - 10 是精度,即總位數,3 是表示為小數點的比例值。比例是可選的,預設值為 0 |
| 5. | BOOLEAN 布林值 true 和 false |
| 6. | VARBINARY 可變長度二進位制資料 |
| 7. | JSON JSON 資料 |
| 8. | DATE 日期資料型別,表示為年-月-日 |
| 9. | TIME, TIMESTAMP, TIMESTAMP with TIME ZONE TIME - 一天中的時間(時-分-秒-毫秒) TIMESTAMP - 日期和一天中的時間 TIMESTAMP with TIME ZONE - 日期和一天中的時間,以及來自值的時間區域 |
| 10. | INTERVAL 拉伸或擴充套件日期和時間資料型別 |
| 11. | ARRAY 給定元件型別的陣列。例如,ARRAY[5,7] |
| 12. | MAP 給定元件型別之間的對映。例如,MAP(ARRAY[‘one’,’two’],ARRAY[5,7]) |
| 13. | ROW 由命名欄位組成的行結構 |
Presto − 運算子
Presto 運算子列在下表中。
| 序號 | 運算子 & 描述 |
|---|---|
| 1. | 算術運算子
Presto 支援算術運算子,如 +、-、*、/、% |
| 2. | 關係運算符
<,>,<=,>=,=,<> |
| 3. | 邏輯運算子
AND、OR、NOT |
| 4. | 範圍運算子
範圍運算子用於測試特定範圍內的值。Presto 支援 BETWEEN、IS NULL、IS NOT NULL、GREATEST 和 LEAST |
| 5. | 十進位制運算子
二元算術十進位制運算子對十進位制型別執行二元算術運算 一元十進位制運算子 - - 運算子執行否定 |
| 6. | 字串運算子
‘||’ 運算子執行字串連線 |
| 7. | 日期和時間運算子
對日期和時間資料型別執行算術加法和減法運算 |
| 8. | 陣列運算子
下標運算子 [] - 訪問陣列的元素 連線運算子 || - 將陣列與陣列或相同型別的元素連線起來 |
| 9. | 對映運算子
對映下標運算子 [] - 從對映中檢索與給定鍵對應的值 |
Apache Presto - SQL 函式
到目前為止,我們一直在討論在 Presto 上執行一些簡單的基本查詢。本章將討論重要的 SQL 函式。
數學函式
數學函式對數學公式進行運算。下表詳細描述了函式列表。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | abs(x)
返回x的絕對值 |
| 2. | cbrt(x)
返回x的立方根 |
| 3. | ceiling(x)
返回x值向上舍入到最接近的整數 |
| 4. | ceil(x) ceiling(x)的別名 |
| 5. | degrees(x)
返回x的度數值 |
| 6. | e(x)
返回尤拉數的雙精度值 |
| 7. | exp(x) 返回尤拉數的指數值 |
| 8. | floor(x)
返回x向下舍入到最接近的整數 |
| 9. | from_base(string,radix) 返回解釋為基數為 radix 的數字的字串的值 |
| 10. | ln(x) 返回x的自然對數 |
| 11. | log2(x)
返回x的以 2 為底的對數 |
| 12. | log10(x) 返回x的以 10 為底的對數 |
| 13. | log(x,y) 返回x的以y為底的對數 |
| 14. | mod(n,m)
返回n除以m的模數(餘數) |
| 15. | pi() 返回 pi 值。結果將作為雙精度值返回 |
| 16. | power(x,p)
返回值‘p’對x值的冪 |
| 17. | pow(x,p) power(x,p)的別名 |
| 18. | radians(x)
將角度x從度數轉換為弧度 |
| 19. | rand() radians()的別名 |
| 20. | random()
返回偽隨機值 |
| 21. | rand(n) random()的別名 |
| 22. | round(x)
返回 x 的舍入值 |
| 23. | round(x,d) x值舍入到‘d’位小數 |
| 24. | sign(x) 返回 x 的符號函式,即: 如果引數為 0,則返回 0 如果引數大於 0,則返回 1 如果引數小於 0,則返回 -1 對於雙精度引數,該函式還返回: 如果引數為 NaN,則返回 NaN 如果引數為 +Infinity,則返回 1 如果引數為 -Infinity,則返回 -1 |
| 25. | sqrt(x)
返回x的平方根 |
| 26. | to_base(x,radix)
返回型別為 archer。結果將作為x的基數 radix 返回 |
| 27. | truncate(x)
截斷x的值 |
| 28. | width_bucket(x, bound1, bound2, n)
返回指定 bound1 和 bound2 邊界以及 n 個儲存桶的x的儲存桶編號 |
| 29. | width_bucket(x, bins)
根據陣列 bins 指定的儲存桶返回x的儲存桶編號 |
三角函式
三角函式引數表示為弧度。下表列出了這些函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | acos(x)
返回反餘弦值(x) |
| 2. | asin(x) 返回反正弦值(x) |
| 3. | atan(x) 返回反正切值(x) |
| 4. | atan2(y,x)
返回反正切值(y/x) |
| 5. | cos(x) 返回餘弦值(x) |
| 6. | cosh(x)
返回雙曲餘弦值(x) |
| 7. | sin(x)
返回正弦值(x) |
| 8. | tan(x) 返回正切值(x) |
| 9. | tanh(x) 返回雙曲正切值(x) |
按位函式
下表列出了按位函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | bit_count(x, bits)
計算位數 |
| 2. | bitwise_and(x,y)
對兩個位x和y執行按位 AND 運算 |
| 3. | bitwise_or(x,y)
兩個位元x, y之間的按位或運算 |
| 4. | bitwise_not(x)
位元x的按位非運算 |
| 5. | bitwise_xor(x,y)
位元x, y的異或運算 |
字串函式
下表列出了字串函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | concat(string1, ..., stringN)
連線給定的字串 |
| 2. | length(string)
返回給定字串的長度 |
| 3. | lower(string)
返回字串的小寫格式 |
| 4. | upper(string)
返回給定字串的大寫格式 |
| 5. | lpad(string, size, padstring)
給定字串的左填充 |
| 6. | ltrim(string)
刪除字串開頭的空格 |
| 7. | replace(string, search, replace)
替換字串值 |
| 8. | reverse(string)
反轉對字串執行的操作 |
| 9. | rpad(string, size, padstring)
給定字串的右填充 |
| 10. | rtrim(string)
刪除字串末尾的空格 |
| 11. | split(string, delimiter)
根據分隔符拆分字串,並返回大小最多為limit的陣列 |
| 12. | split_part(string, delimiter, index)
根據分隔符拆分字串並返回欄位索引 |
| 13. | strpos(string, substring)
返回子字串在字串中的起始位置 |
| 14. | substr(string, start)
返回給定字串的子字串 |
| 15. | substr(string, start, length)
返回給定字串的指定長度的子字串 |
| 16. | trim(string)
刪除字串開頭和結尾的空格 |
日期和時間函式
下表列出了日期和時間函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | current_date
返回當前日期 |
| 2. | current_time
返回當前時間 |
| 3. | current_timestamp
返回當前時間戳 |
| 4. | current_timezone()
返回當前時區 |
| 5. | now()
返回當前日期、時間戳以及時區 |
| 6. | localtime
返回本地時間 |
| 7. | localtimestamp
返回本地時間戳 |
正則表示式函式
下表列出了正則表示式函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | regexp_extract_all(string, pattern)
返回模式的正則表示式匹配的字串 |
| 2. | regexp_extract_all(string, pattern, group)
返回模式和組的正則表示式匹配的字串 |
| 3. | regexp_extract(string, pattern)
返回模式的正則表示式匹配的第一個子字串 |
| 4. | regexp_extract(string, pattern, group)
返回模式和組的正則表示式匹配的第一個子字串 |
| 5. | regexp_like(string, pattern)
返回與模式匹配的字串。如果返回字串,則值為true,否則為false |
| 6. | regexp_replace(string, pattern)
用模式替換表示式匹配的字串的例項 |
| 7. | regexp_replace(string, pattern, replacement)
用模式和替換替換表示式匹配的字串的例項 |
| 8. | regexp_split(string, pattern)
根據給定模式拆分正則表示式 |
JSON 函式
下表列出了 JSON 函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | json_array_contains(json, value)
檢查值是否存在於 JSON 陣列中。如果值存在,則返回 true,否則返回 false |
| 2. | json_array_get(json_array, index)
獲取 JSON 陣列中索引對應的元素 |
| 3. | json_array_length(json)
返回 JSON 陣列的長度 |
| 4. | json_format(json)
返回 JSON 結構格式 |
| 5. | json_parse(string)
將字串解析為 JSON |
| 6. | json_size(json, json_path)
返回值的尺寸 |
URL 函式
下表列出了 URL 函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | url_extract_host(url)
返回 URL 的主機 |
| 2. | url_extract_path(url)
返回 URL 的路徑 |
| 3. | url_extract_port(url)
返回 URL 的埠 |
| 4. | url_extract_protocol(url)
返回 URL 的協議 |
| 5. | url_extract_query(url)
返回 URL 的查詢字串 |
聚合函式
下表列出了聚合函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | avg(x) 返回給定值的平均值 |
| 2. | min(x,n)
返回兩個值中的最小值 |
| 3. | max(x,n)
返回兩個值中的最大值 |
| 4. | sum(x)
返回值的總和 |
| 5. | count(*)
返回輸入行的數量 |
| 6. | count(x)
返回輸入值的計數 |
| 7. | checksum(x)
返回x的校驗和 |
| 8. | arbitrary(x)
返回x的任意值 |
顏色函式
下表列出了顏色函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | bar(x, width)
使用 rgb low_color 和 high_color 渲染單個條形 |
| 2. | bar(x, width, low_color, high_color)
渲染指定寬度的單個條形 |
| 3. | color(string)
返回輸入字串的顏色值 |
| 4. | render(x, color)
使用特定的顏色(使用 ANSI 顏色程式碼)渲染值 x |
| 5. | render(b)
接受布林值 b,並使用 ANSI 顏色程式碼渲染綠色 true 或紅色 false |
| 6. | rgb(red, green, blue) 返回一個顏色值,捕獲作為 int 引數提供的三個分量顏色值的 RGB 值,範圍從 0 到 255 |
陣列函式
下表列出了陣列函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | array_max(x)
查詢陣列中的最大元素 |
| 2. | array_min(x)
查詢陣列中的最小元素 |
| 3. | array_sort(x)
對陣列中的元素進行排序 |
| 4. | array_remove(x,element)
從陣列中刪除特定元素 |
| 5. | concat(x,y)
連線兩個陣列 |
| 6. | contains(x,element)
查詢陣列中是否存在給定元素。如果存在,則返回 True,否則返回 False |
| 7. | array_position(x,element)
查詢給定元素在陣列中的位置 |
| 8. | array_intersect(x,y)
執行兩個陣列之間的交集運算 |
| 9. | element_at(array,index)
返回陣列元素的位置 |
| 10. | slice(x,start,length)
使用指定的長度切片陣列元素 |
Teradata 函式
下表列出了 Teradata 函式。
| 序號 | 函式 & 描述 |
|---|---|
| 1. | index(string,substring)
返回包含給定子字串的字串的索引 |
| 2. | substring(string,start)
返回給定字串的子字串。您可以在此處指定起始索引 |
| 3. | substring(string,start,length)
返回給定字串的子字串,用於指定的起始索引和字串的長度 |
Apache Presto - MySQL 聯結器
MySQL 聯結器用於查詢外部 MySQL 資料庫。
先決條件
MySQL 伺服器安裝。
配置設定
希望您已在您的機器上安裝了 MySQL 伺服器。要在 Presto 伺服器上啟用 MySQL 屬性,您必須在“etc/catalog”目錄中建立一個名為“mysql.properties”的檔案。執行以下命令以建立 mysql.properties 檔案。
$ cd etc $ cd catalog $ vi mysql.properties connector.name = mysql connection-url = jdbc:mysql://:3306 connection-user = root connection-password = pwd
儲存檔案並退出終端。在上述檔案中,您必須在 connection-password 欄位中輸入您的 MySQL 密碼。
在 MySQL 伺服器中建立資料庫
開啟 MySQL 伺服器並使用以下命令建立資料庫。
create database tutorials
現在您已在伺服器中建立了“tutorials”資料庫。要啟用資料庫型別,請在查詢視窗中使用命令“use tutorials”。
建立表
讓我們在“tutorials”資料庫上建立一個簡單的表。
create table author(auth_id int not null, auth_name varchar(50),topic varchar(100))
插入表
建立表後,使用以下查詢插入三條記錄。
insert into author values(1,'Doug Cutting','Hadoop') insert into author values(2,’James Gosling','java') insert into author values(3,'Dennis Ritchie’,'C')
選擇記錄
要檢索所有記錄,請鍵入以下查詢。
查詢
select * from author
結果
auth_id auth_name topic 1 Doug Cutting Hadoop 2 James Gosling java 3 Dennis Ritchie C
截至目前,您已使用 MySQL 伺服器查詢了資料。讓我們將 Mysql 儲存外掛連線到 Presto 伺服器。
連線 Presto CLI
鍵入以下命令以在 Presto CLI 上連線 MySql 外掛。
./presto --server localhost:8080 --catalog mysql --schema tutorials
您將收到以下響應。
presto:tutorials>
這裡“tutorials”指的是 mysql 伺服器中的模式。
列出模式
要列出 mysql 中的所有模式,請在 Presto 伺服器中鍵入以下查詢。
查詢
presto:tutorials> show schemas from mysql;
結果
Schema -------------------- information_schema performance_schema sys tutorials
從這個結果中,我們可以得出結論,前三個模式是預定義的,最後一個模式是您自己建立的。
列出模式中的表
以下查詢列出了 tutorials 模式中的所有表。
查詢
presto:tutorials> show tables from mysql.tutorials;
結果
Table -------- author
我們只在這個模式中建立了一個表。如果您建立了多個表,它將列出所有表。
描述表
要描述表字段,請鍵入以下查詢。
查詢
presto:tutorials> describe mysql.tutorials.author;
結果
Column | Type | Comment -----------+--------------+--------- auth_id | integer | auth_name | varchar(50) | topic | varchar(100) |
顯示錶中的列
查詢
presto:tutorials> show columns from mysql.tutorials.author;
結果
Column | Type | Comment -----------+--------------+--------- auth_id | integer | auth_name | varchar(50) | topic | varchar(100) |
訪問表記錄
要從 mysql 表中獲取所有記錄,請執行以下查詢。
查詢
presto:tutorials> select * from mysql.tutorials.author;
結果
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
從這個結果中,您可以在 Presto 中檢索 mysql 伺服器記錄。
使用 as 命令建立表
Mysql 聯結器不支援 create table 查詢,但您可以使用 as 命令建立表。
查詢
presto:tutorials> create table mysql.tutorials.sample as select * from mysql.tutorials.author;
結果
CREATE TABLE: 3 rows
您不能直接插入行,因為此聯結器有一些限制。它不支援以下查詢:
- create
- insert
- update
- delete
- drop
要檢視新建立表中的記錄,請鍵入以下查詢。
查詢
presto:tutorials> select * from mysql.tutorials.sample;
結果
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Apache Presto - JMX 聯結器
Java 管理擴充套件 (JMX) 提供有關 Java 虛擬機器和 JVM 內部執行的軟體的資訊。JMX 聯結器用於在 Presto 伺服器中查詢 JMX 資訊。
由於我們已經在“etc/catalog”目錄下啟用了“jmx.properties”檔案。現在連線 Prest CLI 以啟用 JMX 外掛。
Presto CLI
查詢
$ ./presto --server localhost:8080 --catalog jmx --schema jmx
結果
您將收到以下響應。
presto:jmx>
JMX 模式
要列出“jmx”中的所有模式,請鍵入以下查詢。
查詢
presto:jmx> show schemas from jmx;
結果
Schema -------------------- information_schema current
顯示錶
要檢視“current”模式中的表,請使用以下命令。
查詢 1
presto:jmx> show tables from jmx.current;
結果
Table ------------------------------------------------------------------------------ com.facebook.presto.execution.scheduler:name = nodescheduler com.facebook.presto.execution:name = queryexecution com.facebook.presto.execution:name = querymanager com.facebook.presto.execution:name = remotetaskfactory com.facebook.presto.execution:name = taskexecutor com.facebook.presto.execution:name = taskmanager com.facebook.presto.execution:type = queryqueue,name = global,expansion = global ……………… ……………….
查詢 2
presto:jmx> select * from jmx.current.”java.lang:type = compilation";
結果
node | compilationtimemonitoringsupported | name | objectname | totalcompilationti --------------------------------------+------------------------------------+--------------------------------+----------------------------+------------------- ffffffff-ffff-ffff-ffff-ffffffffffff | true | HotSpot 64-Bit Tiered Compilers | java.lang:type=Compilation | 1276
查詢 3
presto:jmx> select * from jmx.current."com.facebook.presto.server:name = taskresource";
結果
node | readfromoutputbuffertime.alltime.count | readfromoutputbuffertime.alltime.max | readfromoutputbuffertime.alltime.maxer --------------------------------------+---------------------------------------+--------------------------------------+--------------------------------------- ffffffff-ffff-ffff-ffff-ffffffffffff | 92.0 | 1.009106149 |
Apache Presto - HIVE 聯結器
Hive 聯結器允許查詢儲存在 Hive 資料倉庫中的資料。
先決條件
- Hadoop
- Hive
希望您已在您的機器上安裝了 Hadoop 和 Hive。在一個新終端中依次啟動所有服務。然後,使用以下命令啟動 hive metastore,
hive --service metastore
Presto 使用 Hive metastore 服務獲取 hive 表的詳細資訊。
配置設定
在“etc/catalog”目錄下建立一個名為“hive.properties”的檔案。使用以下命令。
$ cd etc $ cd catalog $ vi hive.properties connector.name = hive-cdh4 hive.metastore.uri = thrift://:9083
完成所有更改後,儲存檔案並退出終端。
建立資料庫
使用以下查詢在 Hive 中建立資料庫:
查詢
hive> CREATE SCHEMA tutorials;
建立資料庫後,可以使用“show databases”命令進行驗證。
建立表
Create Table 語句用於在 Hive 中建立表。例如,使用以下查詢。
hive> create table author(auth_id int, auth_name varchar(50), topic varchar(100) STORED AS SEQUENCEFILE;
插入表
以下查詢用於將記錄插入 Hive 的表中。
hive> insert into table author values (1,’ Doug Cutting’,Hadoop), (2,’ James Gosling’,java),(3,’ Dennis Ritchie’,C);
啟動 Presto CLI
可以使用以下命令啟動 Presto CLI 以連線 Hive 儲存外掛。
$ ./presto --server localhost:8080 --catalog hive —schema tutorials;
您將收到以下響應。
presto:tutorials >
列出模式
要列出 Hive 聯結器中的所有模式,請鍵入以下命令。
查詢
presto:tutorials > show schemas from hive;
結果
default tutorials
列出表
要列出“tutorials”模式中的所有表,請使用以下查詢。
查詢
presto:tutorials > show tables from hive.tutorials;
結果
author
獲取表
以下查詢用於獲取 Hive 表中的所有記錄。
查詢
presto:tutorials > select * from hive.tutorials.author;
結果
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Apache Presto - KAFKA 聯結器
Presto 的 Kafka 聯結器允許使用 Presto 訪問 Apache Kafka 中的資料。
先決條件
下載並安裝以下 Apache 專案的最新版本。
- Apache ZooKeeper
- Apache Kafka
啟動 ZooKeeper
使用以下命令啟動 ZooKeeper 伺服器。
$ bin/zookeeper-server-start.sh config/zookeeper.properties
現在,ZooKeeper 在 2181 埠上啟動。
啟動 Kafka
在另一個終端中使用以下命令啟動 Kafka。
$ bin/kafka-server-start.sh config/server.properties
Kafka 啟動後,它使用埠號 9092。
TPCH 資料
下載 tpch-kafka
$ curl -o kafka-tpch https://repo1.maven.org/maven2/de/softwareforge/kafka_tpch_0811/1.0/kafka_tpch_ 0811-1.0.sh
現在,您已使用上述命令從 Maven 中央下載了載入程式。您將收到類似以下的響應。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
5 21.6M 5 1279k 0 0 83898 0 0:04:30 0:00:15 0:04:15 129k
6 21.6M 6 1407k 0 0 86656 0 0:04:21 0:00:16 0:04:05 131k
24 21.6M 24 5439k 0 0 124k 0 0:02:57 0:00:43 0:02:14 175k
24 21.6M 24 5439k 0 0 124k 0 0:02:58 0:00:43 0:02:15 160k
25 21.6M 25 5736k 0 0 128k 0 0:02:52 0:00:44 0:02:08 181k
………………………..
然後,使用以下命令使其可執行,
$ chmod 755 kafka-tpch
執行 tpch-kafka
使用以下命令執行 kafka-tpch 程式,以使用 tpch 資料預載入多個主題。
查詢
$ ./kafka-tpch load --brokers localhost:9092 --prefix tpch. --tpch-type tiny
結果
2016-07-13T16:15:52.083+0530 INFO main io.airlift.log.Logging Logging to stderr 2016-07-13T16:15:52.124+0530 INFO main de.softwareforge.kafka.LoadCommand Processing tables: [customer, orders, lineitem, part, partsupp, supplier, nation, region] 2016-07-13T16:15:52.834+0530 INFO pool-1-thread-1 de.softwareforge.kafka.LoadCommand Loading table 'customer' into topic 'tpch.customer'... 2016-07-13T16:15:52.834+0530 INFO pool-1-thread-2 de.softwareforge.kafka.LoadCommand Loading table 'orders' into topic 'tpch.orders'... 2016-07-13T16:15:52.834+0530 INFO pool-1-thread-3 de.softwareforge.kafka.LoadCommand Loading table 'lineitem' into topic 'tpch.lineitem'... 2016-07-13T16:15:52.834+0530 INFO pool-1-thread-4 de.softwareforge.kafka.LoadCommand Loading table 'part' into topic 'tpch.part'... ……………………… ……………………….
現在,Kafka 表 customers、orders、supplier 等使用 tpch 載入。
新增配置設定
讓我們在 Presto 伺服器上新增以下 Kafka 聯結器配置設定。
connector.name = kafka kafka.nodes = localhost:9092 kafka.table-names = tpch.customer,tpch.orders,tpch.lineitem,tpch.part,tpch.partsupp, tpch.supplier,tpch.nation,tpch.region kafka.hide-internal-columns = false
在上述配置中,Kafka 表使用 Kafka-tpch 程式載入。
啟動 Presto CLI
使用以下命令啟動 Presto CLI,
$ ./presto --server localhost:8080 --catalog kafka —schema tpch;
這裡“tpch”是 Kafka 聯結器的模式,您將收到以下響應。
presto:tpch>
列出表
以下查詢列出“tpch”模式中的所有表。
查詢
presto:tpch> show tables;
結果
Table ---------- customer lineitem nation orders part partsupp region supplier
描述 Customer 表
以下查詢描述“customer”表。
查詢
presto:tpch> describe customer;
結果
Column | Type | Comment -------------------+---------+--------------------------------------------- _partition_id | bigint | Partition Id _partition_offset | bigint | Offset for the message within the partition _segment_start | bigint | Segment start offset _segment_end | bigint | Segment end offset _segment_count | bigint | Running message count per segment _key | varchar | Key text _key_corrupt | boolean | Key data is corrupt _key_length | bigint | Total number of key bytes _message | varchar | Message text _message_corrupt | boolean | Message data is corrupt _message_length | bigint | Total number of message bytes
Apache Presto - JDBC 介面
Presto 的 JDBC 介面用於訪問 Java 應用程式。
先決條件
安裝 presto-jdbc-0.150.jar
您可以透過訪問以下連結下載 JDBC jar 檔案,
https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.150/
下載 jar 檔案後,將其新增到 Java 應用程式的類路徑中。
建立一個簡單的應用程式
讓我們使用 JDBC 介面建立一個簡單的 Java 應用程式。
編碼 - PrestoJdbcSample.java
import java.sql.*;
import com.facebook.presto.jdbc.PrestoDriver;
//import presto jdbc driver packages here.
public class PrestoJdbcSample {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("com.facebook.presto.jdbc.PrestoDriver");
connection = DriverManager.getConnection(
"jdbc:presto://:8080/mysql/tutorials", "tutorials", “");
//connect mysql server tutorials database here
statement = connection.createStatement();
String sql;
sql = "select auth_id, auth_name from mysql.tutorials.author”;
//select mysql table author table two columns
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
int id = resultSet.getInt("auth_id");
String name = resultSet.getString(“auth_name");
System.out.print("ID: " + id + ";\nName: " + name + "\n");
}
resultSet.close();
statement.close();
connection.close();
}catch(SQLException sqlException){
sqlException.printStackTrace();
}catch(Exception exception){
exception.printStackTrace();
}
}
}
儲存檔案並退出應用程式。現在,在一個終端中啟動 Presto 伺服器,並開啟一個新終端來編譯和執行結果。以下是步驟:
編譯
~/Workspace/presto/presto-jdbc $ javac -cp presto-jdbc-0.149.jar PrestoJdbcSample.java
執行
~/Workspace/presto/presto-jdbc $ java -cp .:presto-jdbc-0.149.jar PrestoJdbcSample
輸出
INFO: Logging initialized @146ms ID: 1; Name: Doug Cutting ID: 2; Name: James Gosling ID: 3; Name: Dennis Ritchie
Apache Presto - 自定義函式應用程式
建立一個 Maven 專案來開發 Presto 自定義函式。
SimpleFunctionsFactory.java
建立 SimpleFunctionsFactory 類以實現 FunctionFactory 介面。
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.metadata.FunctionListBuilder;
import com.facebook.presto.metadata.SqlFunction;
import com.facebook.presto.spi.type.TypeManager;
import java.util.List;
public class SimpleFunctionFactory implements FunctionFactory {
private final TypeManager typeManager;
public SimpleFunctionFactory(TypeManager typeManager) {
this.typeManager = typeManager;
}
@Override
public List<SqlFunction> listFunctions() {
return new FunctionListBuilder(typeManager)
.scalar(SimpleFunctions.class)
.getFunctions();
}
}
SimpleFunctionsPlugin.java
建立一個 SimpleFunctionsPlugin 類以實現 Plugin 介面。
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.spi.Plugin;
import com.facebook.presto.spi.type.TypeManager;
import com.google.common.collect.ImmutableList;
import javax.inject.Inject;
import java.util.List;
import static java.util.Objects.requireNonNull;
public class SimpleFunctionsPlugin implements Plugin {
private TypeManager typeManager;
@Inject
public void setTypeManager(TypeManager typeManager) {
this.typeManager = requireNonNull(typeManager, "typeManager is null”);
//Inject TypeManager class here
}
@Override
public <T> List<T> getServices(Class<T> type){
if (type == FunctionFactory.class) {
return ImmutableList.of(type.cast(new SimpleFunctionFactory(typeManager)));
}
return ImmutableList.of();
}
}
新增資原始檔
建立一個在實現包中指定的資原始檔。
(com.tutorialspoint.simple.functions.SimpleFunctionsPlugin)
現在移動到資原始檔位置 @ /path/to/resource/
然後新增更改,
com.facebook.presto.spi.Plugin
pom.xml
將以下依賴項新增到 pom.xml 檔案中。
<?xml version = "1.0"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint.simple.functions</groupId>
<artifactId>presto-simple-functions</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>presto-simple-functions</name>
<description>Simple test functions for Presto</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-spi</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-main</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencies>
<build>
<finalName>presto-simple-functions</finalName>
<plugins>
<!-- Make this jar executable -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>
</project>
SimpleFunctions.java
使用 Presto 屬性建立 SimpleFunctions 類。
package com.tutorialspoint.simple.functions;
import com.facebook.presto.operator.Description;
import com.facebook.presto.operator.scalar.ScalarFunction;
import com.facebook.presto.operator.scalar.StringFunctions;
import com.facebook.presto.spi.type.StandardTypes;
import com.facebook.presto.type.LiteralParameters;
import com.facebook.presto.type.SqlType;
public final class SimpleFunctions {
private SimpleFunctions() {
}
@Description("Returns summation of two numbers")
@ScalarFunction(“mysum")
//function name
@SqlType(StandardTypes.BIGINT)
public static long sum(@SqlType(StandardTypes.BIGINT) long num1,
@SqlType(StandardTypes.BIGINT) long num2) {
return num1 + num2;
}
}
建立應用程式後,編譯並執行應用程式。它將生成 JAR 檔案。複製檔案並將 JAR 檔案移動到目標 Presto 伺服器外掛目錄中。
編譯
mvn compile
執行
mvn package
現在重新啟動 Presto 伺服器並連線 Presto 客戶端。然後,按如下所述執行自定義函式應用程式:
$ ./presto --catalog mysql --schema default
查詢
presto:default> select mysum(10,10);
結果
_col0 ------- 20