云服务器内容精选

  • JSON函数 NULL到JSON的转换并不能简单地实现。从独立的NULL进行转换将产生一个SQLNULL,而不是JSON 'null'。不过,在从包含NULL的数组或Map进行转换时,生成的JSON将包含NULL。 在从ROW转换为JSON时,结果是一个JSON数组,而不是一个JSON对象。这是因为对于SQL中的行,位置比名称更重要。 支持从BOOLEAN、TINYINT、SMALLINT、INTEGER、BIGINT、REAL、DOUBLE或VARCHAR进行转换。当数组的元素类型为支持的类型之一、Map的键类型是VARCHAR且Map的值类型是支持的类型之一或行的每个字段类型是支持的类型之一时支持从ARRAY、MAP或ROW进行转换。下面通过示例展示了转换的行为: SELECT CAST(NULL AS JSON);-- NULL SELECT CAST(1 AS JSON);-- JSON '1' SELECT CAST(9223372036854775807 AS JSON);-- JSON '9223372036854775807' SELECT CAST('abc' AS JSON);-- JSON '"abc"' SELECT CAST(true AS JSON);-- JSON 'true' SELECT CAST(1.234 AS JSON);-- JSON '1.234' SELECT CAST(ARRAY[1, 23, 456] AS JSON);-- JSON '[1,23,456]' SELECT CAST(ARRAY[1, NULL, 456] AS JSON);-- JSON '[1,null,456]' SELECT CAST(ARRAY[ARRAY[1, 23], ARRAY[456]] AS JSON);-- JSON '[[1,23],[456]]' SELECT CAST(MAP(ARRAY['k1', 'k2', 'k3'], ARRAY[1, 23, 456]) AS JSON);-- JSON '{"k1":1,"k2":23,"k3":456}' SELECT CAST(CAST(ROW(123, 'abc', true) AS ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN)) AS JSON);-- JSON '[123,"abc",true]'
  • JSON 转其他类型 SELECT CAST(JSON 'null' AS VARCHAR);-- NULL SELECT CAST(JSON '1' AS INTEGER);-- 1 SELECT CAST(JSON '9223372036854775807' AS BIGINT);-- 9223372036854775807 SELECT CAST(JSON '"abc"' AS VARCHAR);-- abc SELECT CAST(JSON 'true' AS BOOLEAN);-- true SELECT CAST(JSON '1.234' AS DOUBLE);-- 1.234 SELECT CAST(JSON '[1,23,456]' AS ARRAY(INTEGER));-- [1, 23, 456] SELECT CAST(JSON '[1,null,456]' AS ARRAY(INTEGER));-- [1, NULL, 456] SELECT CAST(JSON '[[1,23],[456]]' AS ARRAY(ARRAY(INTEGER)));-- [[1, 23], [456]] SELECT CAST(JSON '{"k1":1, "k2":23, "k3":456}' AS MAP(VARCHAR, INTEGER));-- {k1=1, k2=23, k3=456} SELECT CAST(JSON '{"v1":123, "v2":"abc","v3":true}' AS ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN));-- {v1=123, v2=abc, v3=true} SELECT CAST(JSON '[123, "abc",true]' AS ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN));-- {value1=123, value2=abc, value3=true} SELECT CAST(JSON'[[1, 23], 456]'AS ARRAY(JSON));-- [JSON '[1,23]', JSON '456'] SELECT CAST(JSON'{"k1": [1, 23], "k2": 456}'AS MAP(VARCHAR,JSON));-- {k1 = JSON '[1,23]', k2 = JSON '456'} SELECT CAST(JSON'[null]'AS ARRAY(JSON));-- [JSON 'null']
  • Color 函数 bar(x, width) 描述:使用默认的低频红色和高频绿色渲染ANSI条形图中的单个条形。例如,如果将25%的x和40的宽度传递给此函数。将绘制一个10个字符的红色条形,后跟30个空格,以创建一个40个字符的条形。 bar(x, width, low_color, high_color) 描述:在ANSI条形图中以指定宽度绘制一条直线。参数x是0到1之间的一个双精度值。x的值超出[0,1]范围将被截断为0或1值。low_color和high_color捕获用于水平条形图任一端的颜色。例如,如果x为0.5,宽度为80,low_color为0xFF0000,high_color为0x00FF00,则此函数将返回一个40个字符的条形,该条形由红色(0xFF0000)和黄色(0xFFFF00)组成,其余80个字符条为用空格填充。 select bar(0.75,80,rgb(255,0,0),rgb(0,255,0)); render(b) 描述:根据布尔值返回对错符号。 select render(true),render(false); 父主题: HetuEngine SQL函数和操作符说明
  • Data Size parse_presto_data_size函数支持以下单位: 单位 描述 值 B Bytes 1 kB Kilobytes 1024 MB Megabytes 10242 GB Gigabytes 10243 TB Terabytes 10244 PB Petabytes 10245 EB Exabytes 10246 ZB Zettabytes 10247 YB Yottabytes 10248 parse_presto_data_size(string) → decimal(38) 将带单位的格式化的值转为数字,值可以是小数,如下所示: SELECT parse_presto_data_size('1B'); -- 1 SELECT parse_presto_data_size('1kB'); -- 1024 SELECT parse_presto_data_size('1MB'); -- 1048576 SELECT parse_presto_data_size('2.3MB'); -- 2411724
  • Format format(format, args...) → varchar 描述:对一个字符串,按照格式字符串指定的方式进行格式化,并返回。 SELECT format('%s%%',123);-- '123%' SELECT format('%.5f',pi());-- '3.14159' SELECT format('%03d',8);-- '008' SELECT format('%,.2f',1234567.89);-- '1,234,567.89' SELECT format('%-7s,%7s','hello','world');-- 'hello , world' SELECT format('%2$s %3$s %1$s','a','b','c');-- 'b c a' SELECT format('%1$tA, %1$tB %1$te, %1$tY',date'2006-07-04');-- 'Tuesday, July 4, 2006
  • cast转换函数 HetuEngine会将数字和字符值隐式转换成正确的类型。HetuEngine不会把字符和数字类型相互转换。例如,一个查询期望得到一个varchar类型的值,HetuEngine不会自动将bigint类型的值转换为varchar类型。 如果有必要,可以将值显式转换为指定类型。 cast(value AS type) → type 显式转换一个值的类型。可以将varchar类型的值转为数字类型,反过来转换也可以。 select cast('186' as int ); select cast(186 as varchar); try_cast(value AS type) → type 与cast()相似,区别是转换失败返回null。 select try_cast(1860 as tinyint); _col0 ------- NULL (1 row) 当出现数字溢出,null值转换等情况,会返回NULL,但无法转换的情况,还是会报错。 例如:select try_cast(186 as date); Cannot cast integer to date
  • 三角函数 所有三角函数的参数都是以弧度表示。参考单位转换函数degrees()和radians()。 acos(x) → double 求反余弦值。 SELECT acos(-1);-- 3.14159265358979 asin(x) → double 求反正弦值。 SELECT asin(0.5);-- 0.5235987755982989 atan(x) → double 求x的反正切值。 SELECT atan(1);-- 0.7853981633974483 atan2(y, x) → double 返回y/x的反正切值。 SELECT atan2(2,1);-- 1.1071487177940904 cos(x) → double 返回x的余弦值。 SELECT cos(-3.1415927);-- -0.9999999999999989 cosh(x) → double 返回x的双曲余弦值。 SELECT cosh(3.1415967);-- 11.592000006553231 sin(x) → double 求x的正弦值。 SELECT sin(1.57079);-- 0.9999999999799858 tan(x) → double 求x的正切值。 SELECT tan(20);-- 2.23716094422474 tanh(x) → double 求x双曲正切值。 select tanh(3.1415927);-- 0.9962720765661324
  • 浮点函数 infinity() → double 返回表示正无穷大的常数。 select infinity();-- Infinity is_finite(x) → boolean 判断x是否有限值。 select is_finite(infinity());-- false select is_finite(50000);--true is_infinite(x) → boolean 判断x是否无穷大。 select is_infinite(infinity());-- true select is_infinite(50000);--false is_nan(x) → boolean 判断x是否非数字。 --输入的值必须为double类型 select is_nan(null); -- NULL select is_nan(nan()); -- true select is_nan(45);-- false nan() → double 返回表示非数字的常数。 select nan(); -- NaN
  • max函数 用于查询x中最大的值。 查询x中最大的值。 语法:max(x) 查询x中最大的n个值,结果返回为数组。 语法: max(x, n) 表21 参数说明 参数名称 描述 类型 是否必选 x 原始字段。 任意数据 是 n 返回最大值的个数 正整数 否 返回值类型:与参数值的数据类型一致。 示例1:查询x中的最大值 表22 查询分析结果 类型 场景 查询语句 SELECT max(x) 返回结果 99.0 示例2:查询x中的最大的2个值 表23 查询分析结果 类型 场景 查询语句 SELECT max(x, 2) 返回结果 [99.0, 99.0]
  • count函数 用于计数。 统计所有的日志条数。 语法:COUNT(*) 统计所有的日志条数。等同于count(*)。 语法:COUNT(1) 统计x中值不为NULL的日志条数。 语法:COUNT(x) 表19 参数说明 参数名称 描述 类型 是否必选 x 原始字段。 任意 是 返回值类型:int 示例:select COUNT(*) 表20 查询分析结果 类型 场景 查询语句 COUNT(*) 返回结果 1
  • min函数 用于查询x中最小值。 查询x中最小的值。 语法:min(x) 查询x中最小的n个值,结果返回为数组。 语法: min(x, n) 表24 参数说明 参数名称 描述 类型 是否必选 x 原始字段。 任意数据 是 n 返回最小值的个数 正整数 否 返回值类型:与参数值的数据类型一致。 示例1:查询x中的最小值 表25 查询分析结果 类型 场景 查询语句 SELECT min(x) 返回结果 10.0 示例2:查询x中的最小的2个值 表26 查询分析结果 类型 场景 查询语句 SELECT min(x, 2) 返回结果 [10.0, 10.0]
  • min_by函数 查询y为最小值时对应的x值,或查询最小的n个y值对应的x值。 查询y为最小值时对应的x值。 语法:max_by(x, y) 查询最小的n个y值对应的x值。 语法:max_by(x, y, n) 表16 参数说明 参数名称 描述 类型 是否必选 x 原始字段。 任意数据类型 是 y 原始字段。 任意数据类型 是 n 大于0的整数。 int 否 返回值类型:与参数值的数据类型一致 示例1:统计请求时长最小时对应的请求方法。 表17 查询分析结果 类型 场景 查询语句 SELECT min_by(request_method, request_time) 返回结果 POST 示例2:统计请求时长最小的3个请求对应的请求方法。 表18 查询分析结果 类型 场景 查询语句 SELECT min_by(request_method, request_time, 3) 返回结果 ["POST","POST","POST"]
  • max_by函数 查询y为最大值时对应的x值,或查询最大的n个y值对应的x值。 查询y为最大值时对应的x值。 语法:max_by(x, y) 查询最大的n个y值对应的x值。 语法:max_by(x, y, n) 表13 参数说明 参数名称 描述 类型 是否必选 x 原始字段。 任意数据类型 是 y 原始字段。 任意数据类型 是 n 大于0的整数。 int 否 返回值类型:与参数值的数据类型一致。 示例1:统计请求时长最大时对应的请求方法。 表14 查询分析结果 类型 场景 查询语句 SELECT max_by(request_method, request_time) 返回结果 GET 示例2:统计请求时长最大的3个请求对应的请求方法。 表15 查询分析结果 类型 场景 查询语句 SELECT max_by(request_method, request_time, 3) 返回结果 ["GET","GET","GET"]
  • approx_percentile函数 用于对x进行正序排列,返回处于percentage位置的数值。 对于x进行正序排列,返回处于percentage位置的x,返回结果为double类型。 语法:approx_percentile(x, percentage) 对x进行正序排列,返回处于percentage01、percentage02位置的x,返回结果为array(double,double)类型。 语法:approx_percentile(x, array[percentage01, percentage02)] 对x和权重的乘积进行正序排列,返回大约处于percentage位置的x,返回结果为double类型。 语法:approx_percentile(x, weight, percentage) 对x和权重的乘积进行正序排列,返回处于percentage01、percentage02位置的x,返回结果为array(double,double)类型。 语法:approx_percentile(x, weight, array[percentage01, percentage02...]) 对x和权重的乘积进行正序排列,返回大约处于percentage位置的x,返回结果为double类型。支持设置返回结果的准确度。 语法:approx_percentile(x, weight, percentage, accuracy) 表5 参数说明 参数名称 描述 类型 是否必选 x 原始字段 double 是 percentage 百分比值,取值范围为[0,1]。 double 是 weight 权重,大于1的整数。 设置权重后,系统根据x与权重的乘积进行排序。 int 否 accuracy 准确度,取值范围为(0,1)。 double 否 返回值类型:double类型或array(double,...,double)类型 示例1:对request_time列进行排序后,返回大约处于50%位置的request_time字段的值。 表6 查询分析结果 类型 场景 查询语句 SELECT approx_percentile(request_time, 0.5) 返回结果 45.0 示例2:对request_time列进行排序后,返回处于10%、20%及70%位置的request_time字段的值。 表7 查询分析结果 类型 场景 查询语句 SELECT approx_percentile(request_time,array[0.1,0.2,0.7]) 返回结果 [17.0, 24.0, 59.0] 示例3:根据request_time与权重的乘积对request_time列进行排序后,返回大约处于50%位置的request_time字段的值, 权重值为60。 表8 查询分析结果 类型 场景 查询语句 SELECT approx_percentile(request_time, 60, 0.5) 返回结果 45.0 示例4:根据request_time与权重的乘积对request_time列进行排序后,返回大约处于80%和90%位置的request_time字段的值,权重值为60。 表9 查询分析结果 类型 场景 查询语句 SELECT approx_percentile(request_time, 60, array[0.8, 0.9]) 返回结果 [66.0,73.0] 示例5:根据request_time与权重的乘积对request_time列进行排序后,返回大约处于50%位置的request_time字段的值,权重值为60,准确度为0.2。 表10 查询分析结果 类型 场景 查询语句 SELECT approx_percentile(request_time, 60, 0.5, 0.2) 返回结果 45.0
  • approx_distinct函数 用于估算x中不重复值的个数。 估算x中不重复值的个数,默认存在2.3%的标准误差 语法:approx_distinct(x) 估算x中不重复值的个数,支持自定义标准误差 语法:approx_distinct(x, e) 表2 参数说明 参数名称 描述 类型 是否必选 x 原始字段 任意 是 e 自定义标准误差 double类型,取值为[0.0115, 0.26] 否 返回值类型:bigint类型 示例1:使用approx_distinct函数估算不重复的clientIp字段值,标准误差为2.3%。 表3 查询分析结果 类型 场景 查询语句 SELECT approx_distinct(clientIp) 返回结果 1 示例2:使用approx_distinct函数估算不重复的clientIp字段值, 自定义标准误差为10%。 表4 查询分析结果 类型 场景 查询语句 SELECT approx_distinct(clientIp, 0.1) 返回结果 1