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...
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...
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$,即最小值为...
Presto | 保留关键字
Presto 保留了一些关键词。如果你想将这些关键词直接用作字段名,请使用双引号 " 将其包裹。 例如: 12"VALUES""GROUP" 以下是 Presto...
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...
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; --...
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...
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...
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...
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...
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...