暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

实测:Vertica 与 WutongDB 函数对比测试之_算数函数篇

原创 千钧 2024-10-16
265

测试环境:

  • Vertica:Vertica Analytic Database v11.1.1-22

  • WutongDB:V5.4.10.0

1. abs

  • 功能说明:

    abs(expression) 函数返回表达式的绝对值。常用于去除负号,确保值为非负数。

  • 测试语句:

    select '20240601' ,--统计日期 case when b.real_fee_c_dtal<>0 and b.real_fee_c_dtal_last<>0 then (b.real_fee_c_dtal-b.real_fee_c_dtal_last)/abs(b.real_fee_c_dtal_last)*100 when b.real_fee_c_dtal=0 and b.real_fee_c_dtal_last<0 then 100 when b.real_fee_c_dtal_last=0 and b.real_fee_c_dtal>0 then 100 else 0 end --C侧月累计收入同比增幅 from gs_test.tb_bds_cfg_dim_grid_info_day a left join gs_test.tb_ado_index_base_income_day b on a.grid_code=b.grid_code and b.statis_day='20240601' where a.grid_code like '1%' limit 20;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下图所示:

    abs_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:(与Vertica精度不同)

    abs_wutongdb_out.png

2. acos

  • 功能说明:

    acos(expression) 函数返回表达式的反余弦值,输入应在[-1, 1]范围内,结果为弧度。

  • 测试语句:

    select acos(0.5) as acos_result;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:(与Vertica精度不同)

    1.0471975511966
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    1.0471975511965979
    

3. asin

  • 功能说明:

    asin(expression) 函数返回表达式的反正弦值,输入应在[-1, 1]范围内,结果为弧度。

  • 测试语句:

    select asin(0.5) as asin_result;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:(与Vertica精度不同)

    0.523598775598299
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    0.5235987755982989
    

4. atan

  • 功能说明:

    atan(expression) 函数返回表达式的反正切值,结果为弧度。

  • 测试语句:

    select atan(0.5) as atan_result;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

     0.463647609000806
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:(与Vertica精度不同)

    0.4636476090008061
    

5. atan2

  • 功能说明:

    atan2(y, x) 函数返回两个参数的反正切值,考虑到象限的值,结果为弧度。

  • 测试语句:

    select atan2(2,2) as atan2_result;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    0.785398163397448
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:(与Vertica精度不同)

    0.7853981633974483
    

6. cbrt

  • 功能说明:

    cbrt(expression) 函数返回表达式的立方根。适用于计算数值的立方根。

  • 测试语句:

    select cbrt(8) as cbrt_result;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    2
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    2
    

7. ceiling

  • 功能说明:

    ceiling(expression) 函数返回大于或等于表达式的最小整数。即向上取整。

  • 测试语句:

    select ceiling(6.4) as a ,ceiling(6.9) as b;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    7,7
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    7,7
    

8. cos

  • 功能说明:

    cos(expression) 函数返回表达式的余弦值,结果为弧度。

  • 测试语句:

    select cos(0);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    1
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    1
    

9. cosh

  • 功能说明:

    cosh(expression) 函数返回表达式的双曲余弦值。

  • 测试语句:

    select cosh(1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

     1.54308063481524
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    1.5430806348152437
    

10. cot

  • 功能说明:

    cot(expression) 函数返回表达式的余切值。

  • 测试语句:

    select cot(1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    0.642092615934331
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    0.6420926159343306
    

11. degrees

  • 功能说明:

    degrees(expression) 函数将弧度转换为角度。适用于需要将弧度结果转换为角度表示的场合。

  • 测试语句:

    select degrees(1,2,3),degrees(1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    1.03416666666667 57.2957795130823
    
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:

    参数异常,57.29577951308232
    

12. distance

  • 功能说明:

    distance(latitude1, longitude1, latitude2, longitude2) 函数计算两组地理坐标之间的距离,结果通常为米或其他单位。

  • 测试语句:

    select distance(45,0,45,1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    78.6262959272162
    
  • WutongDB 输出结果:

    在梧桐数据库输出错误,找不到该函数,如下所示:

    function distance(integer, integer) does not exist
    
  • Wutong DB 替代方案:

    Wutong DB 5.4 和 Wutong DB 6 版本中没有内置的 distance 函数,但您可以通过扩展如 PostGIS 来计算地理距离。

    首先,确保已安装 PostGIS 扩展:

    CREATE EXTENSION postgis;

    使用 ST_Distance_SphereST_Distance 计算地球上两点的距离:

    SELECT ST_Distance_Sphere( ST_MakePoint(45, 0), ST_MakePoint(45, 1) ) AS distance;

13. distancev

  • 功能说明:

    distancev(latitude1, longitude1, latitude2, longitude2) 函数计算两组地理坐标之间的矢量距离。

  • 测试语句:

    select distancev(45,0,45,1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    78.8463347095916
    
  • WutongDB 输出结果:

    在梧桐数据库输出错误,找不到该函数,如下所示:

    function distancev() does not exist
    
  • Wutong DB 替代方案:

    distance 一样,您可以使用 PostGIS 扩展中的 ST_DistanceST_Distance_Sphere 函数来替代。

    SELECT ST_Distance( ST_MakePoint(45, 0), ST_MakePoint(45, 1) ) AS distancev;

14. exp

  • 功能说明:

    exp(expression) 函数返回自然常数e的指定次方。

  • 测试语句:

    select exp(0),exp(1),exp(2);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    1.0 
    2.71828182845905 
    7.38905609893065
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    1
    2.718281828459045
    7.38905609893065
    

15. floor

  • 功能说明:

    floor(expression) 函数返回小于或等于表达式的最大整数。即向下取整。

  • 测试语句:

    select user_id ,--用户编码 channel_id ,--渠道编码 join_date --入网日期 from gs_test.tb_mk_library_middle_user_add_day where floor(join_date/100)= '202302' limit 20;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下图所示:

    floor_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:(与Vertica精度不同)

    floor_wutongdb_out.png

16. hash

  • 功能说明:

    hash(expression) 函数返回表达式的哈希值。用于数据分布、分区或校验。

  • 测试语句:

    select hash(1) as one,hash(0) as zero;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    5783548743464686114
    1350854927184241431
    
  • WutongDB 输出结果:

    在梧桐数据库输出错误,找不到该函数,结果如下所示:

     function hash(unknown) does not exist
    
  • Wutong DB 替代方案:

    Wutong DB 5.4 和 Wutong DB 6 没有内置的 hash() 函数,可以使用 pgcrypto 扩展中的哈希函数,如 digest(),生成 MD5、SHA1 或其他哈希值。

    SELECT digest('1', 'sha256');

17. ln

  • 功能说明:

    ln(expression) 函数返回表达式的自然对数(以e为底)。

  • 测试语句:

    select ln(1),ln(2);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    0.0
    0.6931471805599453
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    0.0
    0.6931471805599453
    

18. log

  • 功能说明:

    log(base, expression) 函数返回指定底数的对数值。用于计算表达式的对数值。

  • 测试语句:

    select log(10);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    1
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    1
    

19. log10

  • 功能说明:

    log10(expression) 函数返回表达式的以10为底的对数值。

  • 测试语句:

    select log10(100);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    2
    
  • WutongDB 输出结果:

    在梧桐数据库输出错误,找不到该函数,结果如下所示:

    function log10(integer) does not exist
    
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    Wutong DB 中,log10 可以使用 log() 函数,并指定底数为 10:

    SELECT log(10, 100);

20. mod

  • 功能说明:

    mod(expression1, expression2) 函数返回两个数相除的余数,常用于循环或周期性计算。

  • 测试语句:

    select status, count(1) as cnt FROM ( select case when user_rh_flag_1 like '完美%' then user_rh_flag_1 when mod(user_flag_2, 100000) = '11111' then '完美融合' when user_rh_flag_1 like '大%' then user_rh_flag_1 when mod(user_flag_2, 10000) = '1111' then '大融合' when user_rh_flag_1 like '小%' then user_rh_flag_1 when mod(user_flag_2, 1000) = '111' then '小融合' else '未融合' end as status from gs_test.tb_ads_fusion_stimulate_order_list_day_tmp05 ) t1 group by status order by cnt;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下图所示:

    mod_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:(与Vertica精度不同)

    mod_wutongdb_out.png

21. pi

  • 功能说明:

    pi() 函数返回圆周率π的值。

  • 测试语句:

    select pi();
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    3.14159265358979323846264338327950288419716939937510
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    3.141592653589793
    

22. power

  • 功能说明:

    power(expression1, expression2) 函数返回第一个表达式的第二个表达式次方。用于指数运算。

  • 测试语句:

    select power(2,3);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    8
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    8
    

23. radians

  • 功能说明:

    radians(expression) 函数将角度转换为弧度。

  • 测试语句:

    select RADIANS(1,2,3),radians(1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    0.018049613347708,0.0174532925199433
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    参数错误,0.0174532925199433
    

24. random

  • 功能说明:

    random() 函数返回一个介于0和1之间的随机数。

  • 测试语句:

    select case when nvl(b.user_cnt, 0) = 0 then 45 + random() * 10 else nvl(b.total_fee, 0) / b.user_cnt end as nums from gs_test.tb_mk_iop_93056_marketing_effect_mon_tmp05 a left join ( select activity_id, max(user_cnt) as user_cnt, max(total_fee) as total_fee from gs_test.tb_mk_iop_93055_marketing_effect_mon_pre group by activity_id ) b on a.activity_id = b.activity_id order by nums;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    有数据
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    有数据
    

25. randomint

  • 功能说明:

    randomint(max_value) 函数返回一个介于0和max_value之间的随机整数。

  • 测试语句:

    select randomint(10);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    一个随机整数
    
  • WutongDB 输出结果:

    在梧桐数据库输出错误,找不到该函数,结果如下所示:

    randomint(integer) does not exist
    
  • Wutong DB 5.4 替代方案:

    Wutong DB 5.4 不支持加密安全的随机数生成,可以使用 floor(random() * n) 生成随机整数:

    SELECT floor(random() * 10) AS randomint;
  • Wutong DB 6 替代方案:

    Wutong DB 6 版本中可以使用 pgcrypto 扩展的 gen_random_uuidgen_random_bytes 来生成加密安全的随机数。

    安装 pgcrypto 扩展:

    CREATE EXTENSION pgcrypto;

    使用 gen_random_bytes 生成随机整数:

    SELECT mod(gen_random_bytes(4)::int, 10) AS randomint_crypto;

26. randomint_crypto

  • 功能说明:

    randomint_crypto(max_value) 函数返回一个介于0和max_value之间的加密安全的随机整数。

  • 测试语句:

    select randomint_crypto(10);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    一个随机整数[0,10)
    
  • WutongDB 输出结果:

    在梧桐数据库输出错误,找不到该函数,结果如下所示:

    randomint_crypto(integer) does not exist
    
  • Wutong DB 替代方案:

    参照 randomint 的解决替代方案。

27. round

  • 功能说明:

    round(expression, decimal_places) 函数将表达式四舍五入到指定的小数位。

  • 测试语句:

    select case when b.xxbll <> 0 then round(a.xxbll / b.xxbll -1, 2) else 0 end as jqrts from ( select * from gs_test.tb_test_qycpfz_day where statis_day = '20210617' ) a, ( select * from gs_test.tb_test_qycpfz_day_tmp01 ) b where a.grid_code = b.grid_code limit 20;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下图所示:

    round_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:(与Vertica精度不同)

    round_wutongdb_out.png

28. sign

  • 功能说明:

    sign(expression) 函数返回表达式的符号,1表示正数,0表示零,-1表示负数。

  • 测试语句:

    select sign(1),sign(0),sign(-1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    1
    0
    -1
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    1
    0
    -1
    

29. sin

  • 功能说明:

    sin(expression) 函数返回表达式的正弦值,输入为弧度。

  • 测试语句:

    select sin(1),sin(0),sin(-1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    0.841470984807897 
    0.0 
    -0.841470984807897
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    0.8414709848078965
    0
    -0.8414709848078965
    

30. sinh

  • 功能说明:

    sinh(expression) 函数返回表达式的双曲正弦值。

  • 测试语句:

    select sinh(1),sinh(0),sinh(-1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    1.1752011936438 
    0.0 
    -1.1752011936438
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    1.1752011936438014
    0
    -1.1752011936438014
    

31. sqrt

  • 功能说明:

    sqrt(expression) 函数返回表达式的平方根。

  • 测试语句:

    select sqrt(4),sqrt(9);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    2.0 3.0
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    2.0 3.0
    

32. tan

  • 功能说明:

    tan(expression) 函数返回表达式的正切值,输入为弧度。

  • 测试语句:

    select tan(1),tan(0),TAN(-1) ;
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    1.5574077246549
    0.0
    -1.5574077246549
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    1.5574077246549023
    0
    -1.5574077246549023
    

33. tanh

  • 功能说明:

    tanh(expression) 函数返回表达式的双曲正切值。

  • 测试语句:

    select tanh(1),tanh(0),tanh(-1);
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下所示:

    0.761594155955765 
    0.0
    -0.761594155955765
    
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    0.7615941559557649
    0
    -0.7615941559557649
    

34. trunc

  • 功能说明:

    trunc(expression, decimal_places) 函数将表达式截断到指定的小数位,而不是四舍五入。这个函数常用于精度控制,特别是在金融计算中。

  • 测试语句:

    select nvl(case when up_area_code in ('930','931','932','933','934','935','936','937', '938','939', '941','943','945','947') then up_area_code else '931' end ,'999'), --地市编码 sum(case when call_count>0 then 1 else 0 end) , -- 通话客户 trunc(sum(case when call_count>0 then total_fee else 0 end)/100.00,2) , --""通话客户收入---求ARPU sum(case when gprs_use_b>0 then 1 else 0 end) , --流量客户 trunc(sum(case when gprs_use_b>0 then gprs_use_b else 0 end)/1024.00/1024/1024,2) , --上网流量---求DOU sum(case when call_count>0 then 1 else 0 end) , --通话客户 sum(case when call_count>0 then call_fee_duration else 0 end) --通话客户时长---求MOU from gs_test.tb_mk_bicloud_area_customer_consumption_mon_tmp01_1 group by rollup(case when up_area_code in ('930','931','932','933','934','935','936','937','938','939', '941','943','945','947') then up_area_code else '931' end )
  • Vertica 输出结果:

    vertica可以直接使用该函数,输出结果如下图所示:

    trunc_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:(与Vertica精度不同)

    trunc_wutongdb_out.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论