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 支持可插拔连接器来为查询提供元数据和数据。
  • 流水线执行 - 避免不必要的 I/O 延迟开销。
  • 用户定义的函数 - 分析师可以创建自定义的用户定义的函数以轻松迁移。
  • 矢量化柱状处理。

Presto - 好处

以下是 Apache Presto 提供的优势列表 -

  • 专门的 SQL 操作
  • 易于安装和调试
  • 简单的存储抽象
  • 以低延迟快速扩展 PB 级数据

Presto - 应用程序

Presto 支持当今大多数最好的工业应用程序。让我们看一下一些值得注意的应用程序。

  • Facebook - Facebook 为数据分析需求构建了 Presto。Presto 可以轻松扩展高速数据。

  • Teradata - Teradata 提供大数据分析和数据仓库的端到端解决方案。Teradata 对 Presto 的贡献使更多公司能够更轻松地满足所有分析需求。

  • Airbnb - Presto 是 Airbnb 数据基础设施的一个组成部分。每天都有数百名员工使用该技术进行查询。

为什么是急板?

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 操作系统
  • 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目录,用于存储日志、元数据等,以便在升级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是上面创建的数据目录的位置路径。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 = http://localhost:8080

这里,

  • 协调器- 主节点。

  • 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 - 发现服务器的 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 = http://localhost: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 = http://localhost: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,

$ bin/launcher start 

然后你会看到类似这样的响应,

Started as 840

快跑

要启动 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”将安装在您的计算机上。

运行命令行界面

下载 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 服务器 -

$ bin/launcher stop 

Apache Presto - 配置设置

本章将讨论 Presto 的配置设置。

急速验证器

Presto Verifier 可用于针对另一个数据库(例如 MySQL)测试 Presto,或针对彼此测试两个 Presto 集群。

在 MySQL 中创建数据库

打开 MySQL 服务器并使用以下命令创建数据库。

create database 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://localhost:3306/tutorials?user=root&password=pwd 
control.gateway = jdbc:presto://localhost:8080 
test.gateway = jdbc:presto://localhost:8080 
thread-count = 1 

在这里,在查询数据库字段中,输入以下详细信息 - 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连接器了。

在这里,两个相同的选择查询相互测试以查看性能。同样,您可以运行其他查询来测试性能结果。您还可以连接两个Presto集群来检查性能结果。

Apache Presto - 管理工具

在本章中,我们将讨论 Presto 中使用的管理工具。让我们从 Presto 的 Web 界面开始。

网页界面

Presto 提供了一个用于监控和管理查询的 Web 界面。可以从协调器配置属性中指定的端口号访问它。

启动 Presto 服务器和 Presto CLI。然后您可以从以下网址访问 Web 界面 - http://localhost:8080/

网页界面

输出将类似于上面的屏幕。

在这里,主页有一个查询列表以及诸如唯一查询 ID、查询文本、查询状态、完成百分比、用户名和该查询的来源等信息。首先运行最新的查询,然后在底部显示已完成或未完成的查询。

调整 Presto 的性能

如果 Presto 集群存在任何与性能相关的问题,请将默认配置设置更改为以下设置。

配置属性

  • 任务。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.

双倍的

64 位浮点双精度值

4.

十进制

固定精度的十进制数。例如 DECIMAL(10,3) - 10 是精度,即位数,3 是表示为小数点的刻度值。比例是可选的,默认值为 0

5.

布尔值

布尔值 true 和 false

6.

二进制

可变长度二进制数据

7.

JSON

JSON数据

8.

日期

日期数据类型表示为年月日

9.

时间、时间戳、带时区的时间戳

TIME - 一天中的时间(小时-分钟-秒-毫秒)

TIMESTAMP - 日期和时间

TIMESTAMP with TIME ZONE - 值中带有时区的日期和时间

10.

间隔

拉伸或扩展日期和时间数据类型

11.

大批

给定组件类型的数组。例如,数组[5,7]

12.

地图

给定组件类型之间的映射。例如,MAP(ARRAY['一','二'],ARRAY[5,7])

13.

由命名字段组成的行结构

Presto - 操作员

下表列出了 Presto 运算符。

序列号 运算符及描述
1. 算术运算符

Presto 支持 +、-、*、/、% 等算术运算符

2. 关系运算符

<,>,<=,>=,=,<>

3. 逻辑运算符

与、或、非

4. 范围运算符

范围运算符用于测试特定范围内的值。Presto 支持 BETWEEN、IS NULL、IS NOT NULL、GREATEST 和 LEAST

5. 小数运算符

二元算术十进制运算符对小数类型执行二元算术运算 一元十进制运算符 − -运算符执行求反

6. 字符串运算符

' ||' 运算符执行字符串连接

7. 日期和时间运算符

对日期和时间数据类型执行算术加法和减法运算

8. 数组运算符

下标运算符[] - 访问数组的元素

连接运算符|| - 将数组与数组或相同类型的元素连接起来

9. 地图操作员

映射下标运算符 [] - 从映射中检索与给定键对应的值

Apache Presto - SQL 函数

截至目前,我们正在讨论在 Presto 上运行一些简单的基本查询。本章将讨论重要的 SQL 函数。

数学函数

数学函数对数学公式进行运算。下表详细描述了函数列表。

编号 功能说明
1. 绝对值(x)

返回x的绝对值

2. CBRT(x)

返回x的立方根

3. 上限(x)

返回x值向上舍入到最接近的整数

4.

上限(x)

天花板的别名(x)

5. 度(x)

返回x的度值

6. 前任)

返回欧拉数的双精度值

7.

指数 (x)

返回欧拉数的指数值

8. 楼层(x)

返回x向下舍入到最接近的整数

9.

from_base(字符串,基数)

返回解释为基数的字符串值

10.

ln(x)

返回x的自然对数

11. log2(x)

返回x以 2 为底的对数

12.

log10(x)

返回x以 10 为底的对数

13.

日志(x,y)

返回x以y为底的对数

14. 模(n,m)

返回n除以m的模(余数)

15.

圆周率()

返回 pi 值。结果将以双精度值形式返回

16. 幂(x,p)

返回值'p'x值幂

17.

战俘(x,p)

power(x,p) 的别名

18. 弧度(x)

将角度x转换为度弧度

19.

兰特()

弧度的别名()

20. 随机的()

返回伪随机值

21.

兰特(n)

random() 的别名

22. 轮(x)

返回 x 的舍入值

23.

圆(x,d)

x值四舍五入为“d”位小数

24.

符号(x)

返回 x 的正负号函数,即

如果参数为 0,则为 0

如果参数大于 0,则为 1

如果参数小于 0,则为 -1

对于双参数,该函数还返回 -

NaN 如果参数为 NaN

如果参数为 +Infinity,则为 1

如果参数为 -Infinity,则为 -1

25. 开方(x)

返回x的平方根

26. to_base(x,基数)

返回类型是弓箭手。结果作为x 的基数返回

27. 截断(x)

截断x的值

28. width_bucket(x, 边界1, 边界2, n)

返回x指定的bound1和bound2边界的bin号以及n个桶

29. width_bucket(x,垃圾箱)

根据数组bins指定的bins返回x的bin号

三角函数

三角函数参数表示为 radians()。下表列出了功能。

序列号 功能及说明
1. acos(x)

返回反余弦值(x)

2.

阿信(x)

返回反正弦值(x)

3.

阿坦(x)

返回反正切值(x)

4. atan2(y,x)

返回反正切值(y/x)

5.

余弦(x)

返回余弦值(x)

6. 余弦(x)

返回双曲余弦值(x)

7. 正弦(x)

返回正弦值(x)

8.

tan(x)

返回正切值(x)

9.

tanh(x)

返回双曲正切值(x)

按位函数

下表列出了按位函数。

序列号 功能及说明
1. 位计数(x,位)

计算位数

2. 按位与(x,y)

对xy两位执行按位 AND 运算

3. 按位或(x,y)

两个位x, y之间的按位或运算

4. 按位非(x)

位x的按位非运算

5. 按位异或(x,y)

位x、y的异或运算

字符串函数

下表列出了字符串函数。

序列号 功能及说明
1. 连接(字符串1,...,字符串N)

连接给定的字符串

2. 长度(字符串)

返回给定字符串的长度

3. 较低(字符串)

返回字符串的小写格式

4. 上部(字符串)

返回给定字符串的大写格式

5. lpad(字符串,大小,填充字符串)

给定字符串的左填充

6. ltrim(字符串)

从字符串中删除前导空格

7. 替换(字符串、搜索、替换)

替换字符串值

8. 反转(字符串)

反转对字符串执行的操作

9. rpad(字符串,大小,填充字符串)

给定字符串的右填充

10. rtrim(字符串)

从字符串中删除尾随空格

11. split(字符串,分隔符)

按分隔符分割字符串并返回最大大小的数组

12. split_part(字符串、分隔符、索引)

按分隔符拆分字符串并返回字段索引

13. strpos(字符串,子字符串)

返回子字符串在字符串中的起始位置

14. substr(字符串,开始)

返回给定字符串的子字符串

15. substr(字符串,开始,长度)

返回给定字符串的特定长度的子字符串

16. 修剪(字符串)

从字符串中删除前导和尾随空格

日期和时间函数

下表列出了日期和时间函数。

序列号 功能及说明
1. 当前日期

返回当前日期

2. 当前时间

返回当前时间

3. 当前时间戳

返回当前时间戳

4. 当前时区()

返回当前时区

5. 现在()

返回当前日期、时间戳和时区

6. 当地时间

返回当地时间

7. 本地时间戳

返回本地时间戳

正则表达式函数

下表列出了正则表达式函数。

序列号 功能及说明
1. regexp_extract_all(字符串,模式)

返回与模式的正则表达式匹配的字符串

2. regexp_extract_all(字符串、模式、组)

返回与模式和组的正则表达式匹配的字符串

3. regexp_extract(字符串,模式)

返回与模式的正则表达式匹配的第一个子字符串

4. regexp_extract(字符串、模式、组)

返回与模式和组的正则表达式匹配的第一个子字符串

5. regexp_like(字符串,模式)

返回模式的字符串匹配项。如果返回字符串,则值为 true,否则为 false

6. regexp_replace(字符串,模式)

用模式替换与表达式匹配的字符串实例

7. regexp_replace(字符串、模式、替换)

将与表达式匹配的字符串实例替换为模式和替换

8. regexp_split(字符串,模式)

分割给定模式的正则表达式

JSON 函数

下表列出了 JSON 函数。

序列号 功能及说明
1. json_array_contains(json, 值)

检查 json 数组中是否存在该值。如果该值存在则返回 true,否则返回 false

2. json_array_get(json_array, 索引)

获取json数组中索引的元素

3. json_array_length(json)

返回 json 数组的长度

4. json_格式(json)

返回json结构格式

5. json_parse(字符串)

将字符串解析为 json

6. json_size(json, json_path)

返回值的大小

网址函数

下表列出了 URL 函数。

序列号 功能及说明
1. url_extract_host(网址)

返回 URL 的主机

2. url_extract_path(网址)

返回 URL 的路径

3. url_extract_port(网址)

返回 URL 的端口

4. url_extract_protocol(网址)

返回 URL 的协议

5. url_extract_query(网址)

返回 URL 的查询字符串

聚合函数

下表列出了聚合函数。

序列号 功能及说明
1.

平均值(x)

返回给定值的平均值

2. 最小值(x,n)

返回两个值中的最小值

3. 最大值(x,n)

返回两个值中的最大值

4. 总和(x)

返回值的总和

5. 数数(*)

返回输入行数

6. 计数(x)

返回输入值的计数

7. 校验和(x)

返回x的校验和

8. 任意(x)

返回x的任意值

颜色功能

下表列出了颜色函数。

序列号 功能及说明
1. 条形(x,宽度)

使用 rgb low_color 和 high_color 渲染单个条

2. 条形图(x,宽度,低颜色,高颜色)

渲染指定宽度的单个条形

3. 颜色(字符串)

返回输入字符串的颜色值

4. 渲染(x,颜色)

使用 ANSI 颜色代码使用特定颜色渲染值 x

5. 渲染(b)

接受布尔值 b 并使用 ANSI 颜色代码呈现绿色 true 或红色 false

6.

RGB(红、绿、蓝)

返回一个颜色值,捕获以 int 参数形式提供的三个分量颜色值的 RGB 值,范围从 0 到 255

数组函数

下表列出了数组函数。

序列号 功能及说明
1. 数组最大(x)

查找数组中的最大元素

2. 数组最小值(x)

查找数组中的最小元素

3. 数组排序(x)

对数组中的元素进行排序

4. array_remove(x,元素)

从数组中删除特定元素

5. 连接(x,y)

连接两个数组

6. 包含(x,元素)

查找数组中的给定元素。如果存在则返回 true,否则返回 false

7. 数组位置(x,元素)

查找给定元素在数组中的位置

8. 数组相交(x,y)

执行两个数组之间的交集

9. element_at(数组,索引)

返回数组元素位置

10. 切片(x,开始,长度)

以特定长度对数组元素进行切片

Teradata 功能

下表列出了 Teradata 函数。

序列号 功能及说明
1. 索引(字符串,子字符串)

返回具有给定子字符串的字符串的索引

2. 子串(字符串,开始)

返回给定字符串的子字符串。您可以在此处指定开始索引

3. 子串(字符串,开始,长度)

返回给定字符串的特定起始索引和字符串长度的子字符串

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://localhost:3306 
connection-user = root 
connection-password = pwd 

保存文件并退出终端。在上面的文件中,您必须在连接密码字段中输入 mysql 密码。

在MySQL服务器中创建数据库

打开 MySQL 服务器并使用以下命令创建数据库。

create database tutorials

现在您已经在服务器中创建了“tutorials”数据库。要启用数据库类型,请在查询窗口中使用命令“usetutorials”。

创建表

让我们在“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> 

这里的“教程”指的是mysql服务器中的模式。

列表模式

要列出 mysql 中的所有模式,请在 Presto 服务器中键入以下查询。

询问

presto:tutorials> show schemas from mysql;

结果

      Schema 
-------------------- 
 information_schema 
 performance_schema 
 sys 
 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连接器不支持创建表查询,但您可以使用as命令创建表。

询问

presto:tutorials> create table mysql.tutorials.sample as 
select * from mysql.tutorials.author; 

结果

CREATE TABLE: 3 rows

您无法直接插入行,因为此连接器有一些限制。它不能支持以下查询 -

  • 创造
  • 插入
  • 更新
  • 删除
  • 降低

要查看新创建的表中的记录,请键入以下查询。

询问

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”文件。现在连接 Perst CLI 以启用 JMX 插件。

快速 CLI

询问

$ ./presto --server localhost:8080 --catalog jmx --schema jmx 

结果

您将收到以下回复。

presto:jmx> 

JMX 架构

要列出“jmx”中的所有架构,请键入以下查询。

询问

presto:jmx> show schemas from jmx; 

结果

      Schema 
-------------------- 
 information_schema  
 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
  • 蜂巢

希望您已经在计算机上安装了 Hadoop 和 Hive。在新终端中一一启动所有服务。然后,使用以下命令启动 hive Metastore,

hive --service metastore

Presto 使用 Hive 元存储服务来获取 Hive 表的详细信息。

配置设置

在“etc/catalog”目录下创建文件“hive.properties”。使用以下命令。

$ cd etc 
$ cd catalog 
$ vi hive.properties  

connector.name = hive-cdh4 
hive.metastore.uri = thrift://localhost:9083

完成所有更改后,保存文件并退出终端。

创建数据库

使用以下查询在 Hive 中创建数据库 -

询问

hive> CREATE SCHEMA tutorials; 

创建数据库后,您可以使用“showdatabases”命令对其进行验证。

创建表

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 项目的最新版本。

  • 阿帕奇动物园管理员
  • 阿帕奇·卡夫卡

启动动物园管理员

使用以下命令启动 ZooKeeper 服务器。

$ bin/zookeeper-server-start.sh config/zookeeper.properties

现在,ZooKeeper 在 2181 上启动端口。

启动卡夫卡

使用以下命令在另一个终端中启动 Kafka。

$ bin/kafka-serve