乐趣区

关于数据分析:StarRocks-版本新增功能介绍v117v118

StarRocks 近期公布了 v1.17 / v1.18 两个大版本,上面介绍一下新增的外围性能:

Lateral Join & Unnest

一行转多行是 ETL 处理过程中的常见操作,借助两头表的解决形式往往不够优雅。StarRocks 在 v1.18 版中实现了 Lateral join+unnest table function,能够轻松地使 unnest table function 援用左表的属性,从而不便进一步的数据分析。
通过 Lateral join+unnest,咱们能够实现以下性能:

  • Array 开展成多行。
  • 配合 split 函数,可能将逗号分隔的字符串开展成多行。
  • 配合 bitmap_to_array 函数,可能将 Bitmap 类型转成多行 ID。一方面晋升 Bitmap 转化 ID 的效率,一方面不便对 ID 进行进一步剖析。

例如:咱们有一张名为 user 的原始表。user_id 列为用户 id,label 列为该用户根本信息的 array。如下表所示:


SELECT * FROM user;

+---------+-----------------------+
| user_id | label                 |
+---------+-----------------------+
|       1 | ['male','student']    |
|       2 | ['male','employee']   |
|       3 | ['female','employee'] |
|       4 | ['male','student']    |
+---------+-----------------------+

通过 Lateral join 和 unnest 的配合,咱们能够疾速将 label 进行拆解,并依照标签进行剖析,例如计算出每一标签下的用户数:


# 个别写法
SELECT unnest, COUNT(unnest)
FROM user
CROSS JOIN LATERAL UNNEST(label)
GROUP BY unnest;

# 简略写法
SELECT unnest, COUNT(unnest)
FROM user, UNNEST(label)
GROUP BY unnest;

# 两种写法均可失去同样的后果
+----------+-----------------+
| unnest   | COUNT('unnest') |
+----------+-----------------+
| female   | 1               |
| male     | 3               |
| employee | 2               |
| student  | 2               |
+----------+-----------------+

# 其中,lateral join+unnest 失去的行转列两头后果示意:+---------+----------+
| user_id | unnest   |
+---------+----------+
|       1 | male     |
|       1 | student  |
|       2 | male     |
|       2 | employee |
|       3 | female   |
|       3 | employee | 
|       4 | male     |
|       4 | student  |
+---------+----------+

参考文档:https://docs.starrocks.com/zh…

Fast Decimal

数据库中,Decimal 用于存储准确的浮点数,例如金融零碎中多应用 Decimal 存储交易数据。StarRocks 在 v1.18 版中降级至 Fast Decimal,反对了更高精度并晋升了算术运算性能,次要优化有:

  • 反对示意更宽的 Decimal 数据类型,有效数字可达 38 位。
  • 外部反对多种宽度的整数示意 Decimal。Decimal(M<=18, D)应用 64bit 整数,相比于原来对立采纳的 128bit 整数,在算数运算和转换运算上将应用更少的指令数量,因而性能有大幅晋升。
  • 在原有根底上做了极致的算法优化,尤其是乘法运算,相较原来性能有 4 倍左右,测试后果如下:

Bitmap 优化

Bitmap 在高基数的数据分析、准确去重等场景中具备显著劣势。利用 Bitmap 在工夫和空间上的计算劣势,用户能够对数据进行疾速的定位和筛选,以服务于用户画像、人群圈选、留存率计算等业务场景。近期,StarRocks 对 Bitmap 函数进行了进一步欠缺,蕴含 bitmap_andnot,bitmap_xor,bitmap_remove,同时提供差集,异或和删除的操作。

  • bitmap_andnot(BITMAP lhs, BITMAP rhs):返回在 lhs 中但不在 rhs 中的汇合(差集)。参考文档:https://docs.starrocks.com/zh…
  • bitmap_xor(BITMAP lhs, BITMAP rhs):返回 lhs 独有或者 rhs 独有的元素所形成的汇合(并集 - 交加)。参考文档:https://docs.starrocks.com/zh…
  • bitmap_remove(BITMAP lhs, BIGINT input):从 lhs 中删除 input 作为后果汇合返回参考文档:https://docs.starrocks.com/zh…

在性能方面,通过对 Bitmap 的存储构造和 SIMD 指令 优化,取得了 2-10 倍性能晋升。

其余优化

  • 导入优化

    • Broker load 新增反对 ZSTD 格局 压缩文件
    • 大规模数据导入稳定性晋升,能够实现 1000 列、10TB 规模的单表稳固导入
  • 存储优化

    • Bitmap 存储格局优化,对 bitmap_union,bitmap_union_count 有 10 倍左右的性能晋升
    • 列名反对空格和中文字符等特殊字符
  • 算子优化

    • Delete 语法加强,反对 in 表达式,反对不指定分区删除
    • TopN 排序性能晋升,针对 order by col1 limit n 这类查问,当 n 在十万到数百万规模时,有 50% ~ 150% 的性能晋升
    • HyperLogLog 相干函数晋升至原有性能的 3~5 倍
  • 生态丰盛

    • Tableau 兼容性晋升:TBVT 兼容性晋升到 95%,ODBC5 connector 兼容性能够到 98%
    • Hive 表面反对 ViewFs

更多详情能够参考论坛的 Release Notes(v1.18 版:https://forum.starrocks.com/t…;v1.17 版:https://forum.starrocks.com/t…),欢送大家提出宝贵意见,如有更多期待性能请退出交换群通知咱们。

退出移动版