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 的架構。

Presto Architecture

上圖包含不同的元件。下表詳細描述了每個元件。

序號 元件和描述
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/

Web Interface

輸出將類似於以上螢幕。

這裡,主頁列出了查詢,以及唯一查詢 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)

對兩個位xy執行按位 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 
廣告

© . All rights reserved.