公式列表
下面各种公式列表,主要是运用在搜索功能模块的公式列添加、公式搜索以及在系统管理模块的公式编辑。
样例中,公式括号里的内容为属性列名、数值列名、数字、字符串等,字符串的输入需加英文引号。
聚合公式
公式 | 说明 | 样例 |
---|---|---|
average | 求度量的平均值 | average(销售数量) |
count | 返回指定列的行数 | count(产品名称) |
max | 求度量的最大值 | max (销售数量) |
min | 求度量的最小值 | min (销售数量) |
stddev | 求度量的标准差 | stddev (销售数量) |
sum | 对度量求和 | sum (销售数量) |
unique_count | 对属性或者度量进行非重复计数 | unique count (产品名称) |
variance | 求度量的方差 | variance(销售价格) |
sum_if | 按条件求和 | sum_if(进货价格>8,销售数量) |
average_if | 按条件求平均值 | average_if(进货价格>8,销售数量) |
variance_if | 按条件求均方差 | variance_if(进货价格>8,销售数量) |
stddev_if | 按条件求标准差 | stddev_if(进货价格>8,销售数量) |
max_if | 按条件求最大值 | max_if (进货价格>8,销售数量) |
min_if | 按条件求最小值 | min_if (进货价格>8,销售数量) |
count_if | 按条件计数 | count_if(进货价格>8,销售数量) |
unique_count_if | 按条件求非重复计数 | unique_count_if(进货价格>8,销售数量) |
表 12-1 聚合公式表
分析公式
公式 | 说明 | 样例 |
---|---|---|
cumulative_average | 输入一个度量和一个或多个属性。 求按指定属性排序后的各行累积平均值 | cumulative_average(销售数量,订单日期, 产品类别) 注:按订单日期排序后再按产品类别排序的累积平均销售数量。 |
cumulative_max | 输入一个度量和一个或多个属性,求按指定属性排序后的各行累积最大值 | cumulative_max(销售数量,订单日期, 产品类别) |
cumulative_min | 输入一个度量和一个或多个属性,求按指定属性排序后的各行累积最小值 | cumulative_min (销售数量,订单日期, 产品类别) |
cumulative_sum | 输入一个度量和一个或多个属性,求按指定属性排序后的各行累积总和 | cumulative_sum (销售数量,订单日期, 产品类别) |
cumulative_count | 输入一个度量和一个或多个属性求按指定属性排序后的各行累积行数 | cumulative_count (销售数量,订单日期, 产品类别) |
cumulative_stddev | 输入一个度量和一个或多个属性,求按指定属性排序后的各行累积标准差 | cumulative_stddev (销售数量,订单日期, 产品类别) |
cumulative_variance | 输入一个度量和一个或多个属性,求按指定属性排序后的各行累积方差 | cumulative_variance(销售数量,订单日期, 产品类别) |
group_average | 输入一个度量和多个属性,求按指定属性分组后度量的平均值 | group_average(销售数量,订单日期, 产品类别) 注:各订单日期内的各产品类别的平均销售数量。 |
group_max | 输入一个度量和多个属性,求按指定属性分组后度量的最大值 | group_max (销售数量,订单日期, 产品类别) |
group_min | 输入一个度量和多个属性,求按指定属性分组后度量的最小值 | group_min (销售数量,订单日期, 产品类别) |
group_sum | 输入一个度量和多个属性,求按指定属性分组后度量的和 | group_sum (销售数量,订单日期, 产品类别) |
group_count | 输入一个度量和多个属性,求按指定属性分组后度量的计数 | group_count(销售数量,订单日期, 产品类别) |
group_stddev | 输入一个度量和多个属性求按指定属性分组后度量的标准差 | group_stddev(销售数量,订单日期, 产品类别) |
group_variance | 输入一个度量和多个属性求按指定属性分组后度量的方差 | group_variance(销售数量,订单日期, 产品类别) |
moving_average | 移动平均值 输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的平均值 第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数 | moving_average(进货价格,7,6,订单日期) |
moving_max | 移动最大值 输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的最大值 第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数 | moving_max(进货价格,7,6,订单日期) |
moving_min | 移动最小值 输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的最小值 第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数 | moving_min(进货价格,7,6,订单日期) |
moving_sum | 移动求和 输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的和 第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数 | moving_sum(进货价格,7,6,订单日期) |
moving_count | 移动计数 输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的计数 第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数 | moving_count(进货价格,7,6,订单日期) |
moving_stddev | 移动求标准差 输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的标准差 第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数 | moving_stddev(进货价格,7,6,订单日期) |
moving_variance | 移动求方差 输入一个度量和一个或者多个属性,两个数字(定义窗口范围)分析度量的方差 第一个数字为当前位置向上移动的行数,第二个数字为向下移动的行数 | moving_variance(进货价格,7,6,订单日期) |
表 12-2 分析公式表
变换公式
公式 | 说明 | 样例 |
---|---|---|
to_bool | 转换对应的数字为boolean类型 | to_bool (9.37) |
to_date | 把指定的数字和字符串类型的日期值转换成日期格式(impala只支持'%Y-%m-%d %H:%M:%S' 格式的字符串转换) | to_date (10.07) |
to_double | 把指定的数字转换为double类型 | to_double (订单单号) |
to_integer | 把指定的数字转换为integer类型 | to_integer (订单单号) |
to_string | 把指定的输入转为字符串 | to_string (订单日期) |
表 12-3 转换公式表
日期公式
公式 | 说明 | 样例 |
---|---|---|
add_years | 为日期列增加年数 | add_years(订单日期, 8 ) |
add_months | 为日期列增加月数 | add_months(订单日期,8) |
add_weeks | 为日期列增加周数 | add_weeks(订单日期,8) |
add_days | 为日期列增加天数 | add_days (订单日期,8) |
add_hours | 为日期列增加小时数 | add_hours (订单日期,8) |
add_minutes | 为日期列增加分钟数 | add_minutes(订单日期,8) |
add_seconds | 为日期列增加秒数 | add_seconds (订单日期,8) |
date | 计算指定时间的日期部分 | date(订单日期) |
day | 计算指定时间是月内的哪一天(1~31) | day(订单日期) |
day_number_of_week | 计算指定时间是周内的哪一天(1~7对应周一到周日) | day_number_of_week (订单日期) |
day_number_of_quarter | 计算指定时间是季度内的哪一天 | day_number_of_quarter (订单日期) |
day_number_of_year | 计算指定时间是年内的哪一天(1~366) | day_number_of_year (订单日期) |
day_of_week | 计算指定时间是周几(Monday~Sunday) | day_of_week (订单日期) |
week_number_of_month | 计算指定时间是月内的哪一周(1~6) 注:按电子日历从周一至周日 | week_number_of_week (订单日期) |
week_number_of_quarter | 计算指定时间是季度内的哪一周(1~15) 注:按电子日历从周一至周日 | week_number_of_quarter (订单日期) |
week_number_of_year | 计算指定时间是年内的哪一周(1~53) 注:按电子日历从周一至周日 | week_number_of_year (订单日期) |
diff_days | 用前一个日期减后一个日期计算天数的差值,差值超过12小时算一天 | diff_days(签收日期,发货日期) |
diff_time | 用前一个日期减后一个日期计算秒数差值 | diff_time(发货日期,订单日期) |
hour_of_day | 计算时间是当天的几点(0~23) | hour_of_day(订单日期) |
is_weekend | 指定日期是否是周末 | is_weekend(订单日期) |
month | 计算指定月份(January~December) | month (订单日期) |
month_number | 计算指定日期是当年的第几个月(1~12) | month_number (订单日期) |
month_number_of_quarter | 计算指定日期是当年的第几个月 | month_number_of_quarter (订单日期) |
start_of_day | 计算指定日期所属日的开始日期 | start_of_day(订单日期) |
start_of_month | 计算指定日期所属月的开始日期 | start_of_month(订单日期) |
start_of_quarter | 计算指定日期所属季度的开始日期 | start_of_quarter (订单日期) |
start_of_week | 计算指定日期所属周的开始日期 | start_of_week (订单日期) |
start_of_year | 计算指定日期所属年的开始日期 | start_of_year (订单日期) |
time | 计算指定日期的时间部分 | time(订单日期) |
year | 计算指定日期年份 | year (订单日期) |
now | 获取当前时间 | now( ) |
表 12-4 日期公式表
关系函数
公式 | 说明 | 样例 |
---|---|---|
!= | 如果两值不等返回true否则返回false | 销售数量 != 10000 |
< | 如果前一个值小于后一个值返回true否则返回false | 销售数量 < 10000 |
<= | 如果前一个值小于等于后一个值返回true否则返回false | 销售数量 <= 10000 |
= | 如果两值相等返回true否则返回false | 销售数量 = 10000 |
> | 如果前一个值大于后一个值返回true否则返回false | 销售数量 > 10000 |
>= | 如果前一个值大于等于后一个值返回true否则返回false | 销售数量 >= 10000 |
greatest | 返回两值中较大的值 | greatest ( 进价 , 售价 ) |
least | 返回两值中较小的值 | least ( 进价 , 售价 ) |
表 12-5 关系函数表
数字函数
公式 | 说明 | 样例 |
---|---|---|
* | 求两值的乘积 | 2*6 |
+ | 求两值的和 | 1+5 |
- | 求两值的差 | 8-2 |
/ | 求两值的商 | 12/2 |
^ | 乘方 | 5^2=25 |
abs | 求绝对值 | abs(-5)=5 |
acos | 反余弦 | acos(0.5) |
asin | 反正弦 | asin(0.5) |
atan | 反正切 | atan(1) |
atan2 | 反正切 | atan2(1,2) |
cbrt | 立方根 | cbrt(27) = 3 |
ceil | 返回大于等于指定数字的最小整数 | ceil(5.9) = 6 |
cos | 余弦 | cos(0.5) |
cube | 立方 | cube(3) = 27 |
exp | 自然常数e的乘方 | exp(2) |
exp2 | 2的乘方 | exp2(3)=8 |
floor | 返回小于等于指定数字的最大整数 | floor(3.1)=3 |
ln | 自然对数 | ln(3) |
log10 | 以10为底的对数 | log10(3) |
log2 | 以2为底的对数 | log2(3) |
mod | 求模 | mod(8,3)=2 |
pow | 乘方 | pow(2,3)=8 |
random | 0~1之间的随机数 | random() |
round | 四舍五入 | round( 36.355 ,2)=36.36 |
sign | 如果数字大于零返回1小于零返回-1等于0返回0 | sign(-50) |
sin | 正弦 | sin(0.5) |
sq | 平方 | sq(8) |
sqrt | 开方 | sqrt(64) |
tan | 正切 | tan(0.5) |
safe_divide | 安全除法,防止除于0时报错的问题 | safe_divide(销售金额,销售数量) |
表 12-6 数字函数表
逻辑操作符
公式 | 说明 | 样例 |
---|---|---|
and | 并逻辑运算 | X=1 and X>3 |
if..then..else | 逻辑判断 | if X>3 then 'bigger' else 'not bigger' |
ifnull | 如果值1为null返回值2,否则返回值1 | ifnull(cost, 'unknown') |
isnull | 如果值为null返回true否则返回false | isnull(null) = true |
not | 非逻辑运算 | not (2>3) = true |
or | 或逻辑运算 | X=1 or X>3 |
表 12-7 逻辑操作符表
文本操作函数
- 公式中,列中值需加引号,不加引号的为源表中列名。
公式 | 说明 | 样例 |
---|---|---|
concat | 字符串链接操作 | concat("test" , "123" )=test123 concat(产品类别," 的" ,产品名称) |
contains | 如果字符串1包含字符串2返回true否则返回false | contains (“broomstick”, “room”) = true contains(姓名, "赵" , "钱" , "孙") |
not_contains | 如果字符串1不包含字符串2返回true否则返回false | not_contains (“broomstick”, “room”) = false not_contains ( 姓名, "赵" , "钱" , "孙" ) |
strlen | 字符串长度 | strlen (“smith”) = 5 |
strpos | 第二个字符串在第一个字符串中出现的位置 | strpos (“haystack_with_needles”, “needle”) = 14 |
substr | 获取字符串子串 | substr (“persnickety”, 4, 7) = snicket |
strupper | 把输入的字符串转为大写 | strupper(“example”)=EXAMPLE |
strlower | 把输入的字符串转为小写 | strlower("EXAMPLE" )=example |
begins_with | 如果字符串1以字符串2开头返回true否则返回false | begins_with("example","exa") = true begins_with ( 姓名, "赵" , "钱" , "孙" ) |
not_begins_with | 如果字符串1不以字符串2开头返回true否则返回false | not_begins_with("example","exa") = false not_begins_with ( 姓名, "赵" , "钱" , "孙" ) |
ends_with | 如果字符串1以字符串2结尾返回true否则返回false | ends_with("example","ple") = true ends_with ( 姓名, "赵" , "钱" , "孙" ) |
not_ends_with | 如果字符串1不以字符串2结尾返回true否则返回false | not_ends_with("example","ple") = false not_ends_with ( 姓名, "赵" , "钱" , "孙" ) |
表 12-8 文本操作函数表
JSON公式
表 12-8 JSON公式表
公式 | 说明 | 样例与结果 |
---|---|---|
json_format | 把json对象转换成json字符串 | json_format( "hello" ) json_format( 城市 ) |
json_parse | 把字符串(json格式)转换成json对象 | json_parse ( "focus" ) json_parse ( 序号 ) |
json_extract | 从json对象中提取指定路径下的json对象(返回值仍然是JSON类型),例:json_extract(json, json_path) json_path的规则: 1. $ - 查询的根节点 2. @ - 过滤器断言 3. * - 通配符 4. .. - 可以理解为递归搜索 5. . name 表示一个子节点6. [‘ name ’ (, ‘name ’)] - 表示一个子节点或多个子节点7. [‘ number ’ (, ‘number ’)] - 表示一个或多个数组下标8. [start:end] - 数组片段,区间为[start,end),不包含end 9. [?( expression )] - 过滤器表达式,表达式结果必须是boolean | json_extract ( json列 , '$' ) |
json_extract_scalar | 从json对象中提取指定路径下的标量json对象返回为字符串,如果提取路径下不是一个标量json对象则返回null,例:json_extract_scalar(json, json_path) json_path的规则: 1. $ - 查询的根节点 2. @ - 过滤器断言 3. * - 通配符 4. .. - 可以理解为递归搜索 5. . name 表示一个子节点6. [‘ name ’ (, ‘name ’)] - 表示一个子节点或多个子节点7. [‘ number ’ (, ‘number ’)] - 表示一个或多个数组下标8. [start:end] - 数组片段,区间为[start,end),不包含end 9. [?( expression )] - 过滤器表达式,表达式结果必须是boolean | json_extract_scalar ( json列 , '$' ) |
json_size | 获取json对象指定路径下json对象的长度,如果指定路径下是一个json对象或者json数组的话,长度是对象或者数组的成员个数,如果是一个标量类型的对象的话返回0,例:json_size(json, json_path) json_path的规则: 1. $ - 查询的根节点 2. @ - 过滤器断言 3. * - 通配符 4. .. - 可以理解为递归搜索 5. . name 表示一个子节点6. [‘ name ’ (, ‘name ’)] - 表示一个子节点或多个子节点7. [‘ number ’ (, ‘number ’)] - 表示一个或多个数组下标8. [start:end] - 数组片段,区间为[start,end),不包含end 9. [?( expression )] - 过滤器表达式,表达式结果必须是boolean | json_size ( json列 , '$' ) |