Presto | 数学运算符和函数
数学运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除(整数除法执行截断运算) % 取模(求余) 数学函数abs(x) → [返回类型与 x 相同]返回 x 的绝对值。 cbrt(x) → double返回 x 的立方根。 ceil(x) → [返回类型与 x 相同]ceiling() 函数的别名。 cosine_similarity(x, y) → double返回稀疏向量 x 和 y 之间的余弦相似度: 1SELECT cosine_similarity(MAP(ARRAY['a'], ARRAY[1.0]), MAP(ARRAY['a'], ARRAY[2.0])); -- 1.0 degrees(x) → double将以弧度为单位的角度 x 转换为度。 e() → double返回欧拉数 e。 常数 e,作为数学常数,是自然对数函数的底数,亦称自然常数、自然底数,或是欧拉数(Euler’s number),以瑞士数学家欧拉命名;还有个较少见的名字纳皮尔常数,用来纪念苏格兰数学家约翰...
Presto | JSON 函数
is_json_scalar(json) → boolean判断 json 是否为标量(即 JSON 数字、JSON 字符串、true、false 或 null)。 示例 1 1SELECT is_json_scalar(JSON '"aaa"'); 1234 _col0------- true(1 row) 示例 2 1SELECT is_json_scalar(JSON '{"x": 1, "y": 2}'); 1234 _col0------- false(1 row) json_array_contains(json, value) → boolean判断 value 是否存在于 json(一个包含 JSON 数组的字符串)中。 示例 1 判断整数 1 是否包含在 JSON 整数数组 [1, 2, 3] 中: 1SELECT json_array_contains(JSON '[1, 2, 3]', 1); 1234 _col0---...
Presto | JSON 与支持的数据类型之间相互转换
Presto 支持的各种数据类型的值如何转换为 JSON 格式?Presto 支持将如下基本数据类型的值转换为 JSON 格式: BOOLEAN、TINYINT、SMALLINT、INTEGER、BIGINT、REAL、DOUBLE、VARCHAR。 此外,Presto 同样支持将满足以下条件的数组(ARRAY)、映射(MAP)或行(ROW)转换为 JSON 格式: 数组的元素类型须为上述某一受支持的数据类型; 映射的键类型是 VARCHAR 且值类型须为上述某一受支持的数据类型; 行的每个字段类型均须为上述某一受支持的数据类型。 示例 例 1 NULL 将换为 JSON: 1SELECT CAST(NULL AS JSON); 1234 _col0------- NULL(1 row) 例 2 INTEGER 将换为 JSON: 1SELECT CAST(1 AS JSON); 1234 _col0------- 1(1 row) 例 3 BIGINT 将换为 JSON: 1SELECT CAST(9223372036854775807 AS JSON); 1234 ...
Presto | 三角函数
Presto 提供了一组三角函数,它们的参数类型为弧度,函数的返回类型都是 DOUBLE。如果想在弧度和度之间进行转换,可以使用 radians(x) 和 degrees(x) 这两个转换函数。 具体的三角函数如下表: 函数 说明 sin(x) x 的正弦 cos(x) x 的余弦 tan(x) x 的正切 asin(x) x 的反正弦 acos(x) x 的反余弦 atan(x) x 的反正切 atan2(y, x) y/x 的反正切 cosh(x) x 的双曲余弦 tanh(x) x 的双曲正切 弧度制是指用弧长与半径之比度量对应圆心角角度的方式。用符号 rad 表示,读作弧度。 用比较通俗的说法,弧度是度的另一种表达方式。一整圆等于 2π 弧度,也就是 360 度。弧度制采用弧长对半径的比率来表达角度的大小,这使得许多与圆和角有关的计算更加简便。比如,设半径为 1 的圆,角 AOB 的大小为 60 度。这相当于圆周的 1/6,也就是 π/3 弧度。因为圆的周长是 2πr,这里 r=1,所以周长是 2π。60 度对应的...
Presto | 数据类型
Presto 有一套内置的数据类型,如下所述。其他类型可以由插件提供。 注意:连接器不需要支持所有类型。有关支持类型的详细信息,请参阅连接器文档。 Boolean 布尔型BOOLEAN 此类型表示布尔值 true 和 false。 Integer 整数TINYINT 存储空间为 8 位的有符号整数,可以存储的值的范围从 $-2^{(8-1)}$ 到 $2^{(8-1)}-1$,即最小值为 -128,最大值为 127。 SMALLINT 存储空间为 16 位的有符号整数,可以存储的值的范围从 $-2^{(16-1)}$ 到 $2^{(16-1)}-1$,即最小值为 -32768,最大值为 32767。 INTEGER 存储空间为 32 位的有符号整数,可以存储的值的范围从 $-2^{(32-1)}$ 到 $2^{(32-1)}-1$,即最小值为 -2147483648,最大值为2147483647。 INT 名称也可用于此类型。 BIGINT 存储空间为 64 位的有符号整数,可以存储的值的范围从 $-2^{(64-1)}$ 到 $2^{(64-1)}-1$,即最小值为 -92...
Presto | 保留关键字
Presto 保留了一些关键词。如果你想将这些关键词直接用作字段名,请使用双引号 " 将其包裹。 例如: 12"VALUES""GROUP" 以下是 Presto 保留关键词完整列表: AALTER AND AS BBETWEEN BY CCASE CAST CONSTRAINT CREATE CROSS CUBE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER DDEALLOCATE DELETE DESCRIBE DISTINCT DROP EELSE END ESCAPE EXCEPT EXECUTE EXISTS EXTRACT FFALSE FOR FROM FULL GGROUP GROUPING HHAVING IIN INNER INSERT INTERSECT INTO IS JJOIN LLEFT LIKE LOCALTIME LOCALTIMESTAMP NNATURAL NORMALIZE NOT NULL OON OR ORDER OUTE...
Presto | 概述
Presto 是一个分布式 SQL 查询引擎,专为查询大数据而设计。它可以在一个或多个异构的数据源上查询大数据集。 别误解,Presto 不是数据库尽管 Presto 被许多社区成员称为数据库,但我们必须明确 Presto 的定位。 Presto 理解 SQL,但并不提供标准数据库的全部功能。 Presto 不是通用的关系型数据库,也不是 MySQL、PostgreSQL 或 Oracle 等数据库的替代品。 Presto 的设计目的也不是在线事务处理(OLTP)。这一点也适用于许多其他为数据仓库或分析优化的数据库。 简而言之,Presto 的重点在于使用大数据环境提供快速的交互式数据分析和报告。如果你需要事务支持、持久化存储或 OLTP 工作负载的支持,Presto 可能不满足你的需求。 Presto 角色Presto 提供一种分布式查询方式来高效查询和分析大数据。它专注于低延迟的交互式分析查询而非事务处理。 Presto 是一款利用分布式查询高效查询大数据的工具。如果你处理 TB 级或 PB 级的数据,您很可能使用与 Hadoop 和 HDFS 交互的工具。Presto ...
Python 编程指南 | 如何判断字典中是否存在某个键
为确认字典中是否存在指定键,可以利用 in 关键字进行检查: 123456789101112131415#!/usr/bin/env python3# -*- coding: utf-8 -*-info_dict = { "tag_id": "wweFrrBgAAxQzRImZoVcxBqc9YEqkEsg", "user_id": "etvFrrBgAAKNCEAA4cEGXQFeo_vGyI2Q", "year": 2023}if "tag_id" in info_dict: print("键 'tag_id' 存在于 info_dict 字典中。")else: print("字典 info_dict 中不存在键 'tag_id'。")# 输出结果:# 键 'tag_id' 存在于 info_dict 字典中。...
Presto | 转换函数
Presto 可以隐式地将数字和字符值转换为适当的数据类型,前提是这种转换是可行的。然而,Presto 不会在字符类型和数字类型间隐式转换。例如,一个期望获得 varchar 类型结果的查询不会自动将 bigint 类型的值转换为对应的 varchar 类型。 如果有需要,值可以通过显式转换来变换为特定的数据类型。 转换函数cast(value AS type) → type 可以通过显式转换将一个值变换为特定的数据类型。这可以用于将 varchar 类型的值转换为数字类型,反之也可以。 try_cast(value AS type) → type 与 cast() 函数相似,不同之处在于如果转换失败,它会返回 null 值。 数据大小parse_presto_data_size(string) 可以将格式为 value unit 的字符串解析为一个数字,其中: value 为小数,表示 unit 值的数值部分; unit 为数据大小的单位,如B、KB、MB、GB等。 parse_presto_data_size 函数支持以下数据大小单位: 单位 描述 值 B B...
Presto | 比较运算符和函数
比较运算符 运算符 描述 < 小于 > 大于 <= 小于等于 >= 大于等于 = 等于 <> 不等于 != 不等于(非标准但常用的语法) 范围运算符:BETWEENBETWEEN 运算符用于判断一个值是否在指定范围内。它使用如下语法: 1value BETWEEN min AND max 例如: 1SELECT 3 BETWEEN 2 AND 6; -- true 以上的语句等效于: 1SELECT 3 >= 2 AND 3 <= 6; -- true 要判断一个值是否不在指定范围内,则使用 NOT BETWEEN: 1SELECT 3 NOT BETWEEN 2 AND 6; -- false 上述语句与以下语句等效: 1SELECT 3 < 2 OR 3 > 6; -- false 在 BETWEEN 或 NOT BETWEEN 语句中出现 NULL 将导致语句计算结果为 NULL: 123SELECT NULL BETWEEN 2 AND 4; -- nullS...
Presto | 逻辑运算符
逻辑运算符 运算符 描述 示例 AND 当运算符 AND 两边的表达式的结果都为 true 时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 false。 a AND b OR 当运算符 OR 两边的表达式的结果只要有一个为 true 时,整个运算结果为 true;两边的表达式的结果均为 false,则结果为 false。 a OR b NOT 如果布尔值为 false 返回 true;如果布尔值为 true 返回 false。 NOT a NULL 值对逻辑运算符的影响如果表达式的一边或两边是 NULL,那么 AND 运算符的结果可能是 NULL。如果 AND 运算符至少有一边是 FALSE,那么表达式的结果为 FALSE: 12345SELECT CAST(null AS boolean) AND true; -- nullSELECT CAST(null AS boolean) AND false; -- falseSELECT CAST(null AS boolean) AND CAST(null AS boolean...
Presto | TRY 函数
语法try(expression) 在计算表达式 expression 时,如果发生某些类型的错误,则返回 NULL 而不是抛出异常。 作用TRY 函数的作用是在计算一个表达式,如果在计算过程中发生错误,则返回空值 NULL。这在以下两种场景下非常有用: 查询结果中含有非法或无效数据,但你希望返回空值而不是报错。 为表达式指定一个默认值,在计算失败时返回这个默认值。 为实现第二个目的,可以将 TRY 函数与 COALESCE 函数结合使用。COALESCE 函数的作用是返回一系列值中的第一个非空值。所以通过以下方式可以为 TRY 函数指定默认值: 1COALESCE(TRY(expr1), default_value) 如果 TRY 函数成功计算 expr1 并返回一个值(非 NULL),COALESCE 函数会返回该值。但如果TRY 函数返回空值 NULL,COALESCE 函数就会返回我们指定的 default_value 默认值。 TRY 函数可以处理以下错误: 除数为 0 无效的类型转换参数或无效的函数参数 数值超出范围 例如: 12SELECT TRY(5/0)...
Presto | 条件表达式
CASE标准 SQL 的 CASE 表达式有两种形式。 “简单” CASE 表达式的语法如下: 12345CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ]END 它会从左到右逐个检查每个值表达式 value,直到找到与条件表达式 expression 相等的表达式为止。然后返回相应的 result 表达式。如果未找到匹配的表达式,则返回 ELSE 子句中的 result 表达式(如果有的话),否则返回 null。 例如: 123456SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'many' END “搜索”形式的 CASE 表达式允许使用任意布尔条件判断结果表达式。其语法如下: 12345CASE WHEN condition THEN result [...
Presto | IP 地址函数
ip_prefix(ip_address, prefix_bits) → ipprefix使用子网掩码长度 prefix_bits,返回 IP 地址 ip_address 的 IP 前缀。ip_address 可以是 VARCHAR 类型或者 IPADDRESS 类型。 示例 12345SELECT ip_prefix(CAST('192.168.255.255' AS IPADDRESS), 9);SELECT ip_prefix('192.168.255.255', 9);-- 以上两条语句的输出结果均为:-- 192.128.0.0/9 ip_subnet_min(ip_prefix) → ip_address返回子网网段 ip_prefix 指定的最小 IP 地址。 示例 12345SELECT ip_subnet_min(IPPREFIX '192.168.255.255/9');-- 输出结果为 192.128.0.0SELECT ip_subnet_min(IPPREFIX '2001:0db8:...
Presto | 字符串运算符和函数
字符串运算符|| 运算符,字符串连接运算符,将运算符左右两边的字符串进行连接,作用同函数 concat(string1, ..., stringN)。 示例 1select 'Here I am, ' || 'here I am How do you do?' 输出 1Here I am, here I am How do you do? 字符串函数需要注意的是,以下这些函数假设输入的字符串所包含的都是有效的 UTF-8 编码的 Unicode 码点。函数并没有对 UTF-8 的有效性进行明确的检查。如果输入了无效的 UTF-8,这些函数可能会返回错误的结果。无效的 UTF-8 数据可以使用 from_utf8() 函数进行修正。 此外,这些函数操作的都是 Unicode 码点,而不是用户可见的字符或字母。某些语言会将多个码点组合成单个用户感知的字符,即一种语言书写系统的基本单位。但这些函数会将每个码点视为独立的单位。 lower() 和 upper() 函数无法执行立陶宛语、土耳其语和阿塞拜疆语等某些语言所需的区域敏感、上下文敏感或一对多...
Presto | Lambda 表达式
Lambda 表达式使用 -> 来表示: 12345678x -> x + 1(x, y) -> x + yx -> regexp_like(x, 'a+')x -> x[1] / x[2]x -> IF(x > 0, x, -x)x -> COALESCE(x, 0)x -> CAST(x AS JSON)x -> x + TRY(1 / 0) 大多数 SQL 表达式都可以在 Lambda 主体中使用,但有几个例外: 不支持子查询。如 x -> 2 + (SELECT 3) 不支持聚合。如 x -> max(y) 示例 以下示例演示了使用 split_to_map() 函数对字符串进行层层分割,并返回一个映射(Map)。 首先,将字符串按 ; 划分为多个键值对。 其次,进一步将每对键值对按 : 划分为键和对应的值。 如果存在键重复的情况,则调用 Lambda 表达式 (k, v1, v2) -> concat(v1, v2) 来确定映射中的值,这里是将重复键的值拼接起来作为一个...
Presto | URL 相关函数
提取相关函数URL 提取功能可以从 HTTP URLs(或任何符合 RFC 2396 的有效 URI)中提取各组成部分。支持以下语法: 1[protocol:][//host[:port]][path][?query][#fragment] 所提取的组成部分不包含 URI 语法分隔符,例如:: 或 ? 。 url_extract_fragment(url) → varchar该函数用以返回 url 地址所包含的,用以指示不同文档片段的片段标识符。 即上文提到的 [#fragment] 组成部分,指的是 # 字符之后的内容,不包含 # 符号本身。 url_extract_host(url) → varchar该函数用以解析 url 中包含的地址,并返回其主机名部分。 url_extract_parameter(url, name) → varchar该函数用以解析 url 中的查询字符串,并返回第一个名为 name 的参数的值。参数提取遵循 RFC 1866 中规定的方式。 url_extract_path(url) → varchar该函数用于解析 url 中包含的地址,并返回其...
Presto | UUID 函数
uuid() → uuid返回一个伪随机生成的 UUID(第四版本)。 示例 123select uuid();-- 输出结果为 694af1d4-c900-4950-9daf-59f0756df0d1 (END)
Ubuntu 20.04 安装 Python3.7
对于 Ubuntu 用户来说,安装 Python 3.7 的最简单方法是使用 deadsnakes PPA。它提供了对 Python 的最新更新和任何其他所需软件包的访问。 安装 Python3.7添加 PPA 源: 1sudo add-apt-repository ppa:deadsnakes/ppa -y 添加完 PPA 源后,需要运行 apt 更新: 1sudo apt update 安装 Python3.7: 1sudo apt install python3.7 验证 Python 版本: 1python3.7 --version 至此,就已经成功安装了 Python 3.7。 如果还想为 Python 3.7 安装额外的工具,例如调试模块、开发者模块、虚拟环境模块、Distutils 模块、lib2to3 工具模块、DBM.GNU 模块和 Tkinter 模块,可以运行以下命令: 1sudo apt install python3.7-dbg python3.7-dev python3.7-venv python3.7-distutils python3.7-lib2...
Ubuntu 20.04 apt upgrade Error: Could not read response to hello message from hook
当我运行 sudo apt upgrade 命令以更新 Ubuntu 子系统(WSL)中的软件包时,出现了以下错误: 123456789101112131415161718$ sudo apt upgradeReading package lists... DoneBuilding dependency treeReading state information... DoneCalculating upgrade... DoneThe following packages were automatically installed and are no longer required: ant ant-optional gdisk gir1.2-packagekitglib-1.0 jruby-openssl junit4 libappstream4 libasm-java libatasmart4 libbcpkix-java libbcprov-java libblockdev-crypto2 libblockdev-fs2 libblockdev-loop2 libbl...
