自 StarRocks 3.0 起,社区明确了以 Lakehouse 为核心的发展方向。Lakehouse 的价值在于融合数据湖与数据仓库的优势,能有效应对大数据量增长带来的存储成本压力,做到 single source of truth 的同时继续拥有极速的查询性能,同时也为 AI 时代的多样化数据需求提供可扩展的高效访问能力。
构建 Lakehouse 后,你将拥有开放统一的数据存储与基于一份数据,支持多样化的 workload,服务企业 AI、BI 的数据应用,进而实现“One Data, All Analytics” 的业务价值。
在之前的版本中,StarRocks 已对 Lakehouse 的性能与易用性进行了一年多的打磨;在 3.4 版本中,我们聚焦 AI 场景的扩展,推出了 Vector Index、Python UDF 支持,并实现了 Arrow Flight 协议,为数据分析和 AI 检索场景提供更强大的功能和性能支持,帮助用户更高效地实现业务目标。
Lakehouse 的优化也在此次版本中得到了进一步的提升:从数据文件管理、数据读取、统计辅助、查询优化到数据缓存等多个环节进行了深度优化,显著提升了系统性能。同时,湖生态对接能力也得到了持续完善,建表、数据导入和系统稳定性等方面的改进进一步增强了 StarRocks 的易用性和可靠性。
本文将深入解析 StarRocks 3.4 的新特性,带你全方位了解这款强大的湖仓分析引擎如何助力用户挖掘数据潜力,释放更多潜在价值!
更强的 AI 场景支持
Vector Index
向量数据库能够支持快速的高维向量相似性搜索,通过近似最近邻(ANN)算法,高效地找到与给定向量最相似的其他向量,这在推荐系统、自然语言处理、图像和文本检索等领域至关重要。
在 StarRocks 3.4 版本中,我们引入了 Vector Index,支持两种重要且常用的索引类型:IVFPQ(Inverted File Index with Product Quantization,倒排乘积量化)和HNSW(Hierarchical Navigable Small World,分层小世界图)。从而能够在大规模、高维向量数据中进行高效的近似最近邻搜索(ANNS),这一技术在机器学习中尤为重要。


使用方式也很简单,和普通的建表、导入、数据检索没有太大的区别。
-- Create an vector index based on an ARRAY field by using IVFQP (similar to HNSW)
CREATE TABLE test_ivfpq (
id BIGINT(20),
vector ARRAY<FLOAT>,
INDEX ivfpq_vector (vector) USING VECTOR (
"index_type" = "ivfpq", ... -- some specific parameters
)
);
-- Insert some data.
INSERT INTO test_ivfpq VALUES (1, [1,2,3,4,5]), (2, [4,5,6,7,8]);
-- Do vector index search with normal SQL filter: to find some nearest vectors
SELECT *
FROM (SELECT id, approx_l2_distance([1,1,1,1,1], vector) score
FROM test_ivfpq) a
WHERE id in (1, 2, 3) AND score < 40
ORDER BY score
LIMIT 3;
Python UDF [Experimental]
StarRocks 目前提供了数百个常用函数,同时支持 Java UDF,帮助用户实现更多业务需求中的特殊函数。然而,考虑到 AI 领域的用户更为熟悉 Python,StarRocks 3.4 版本新增了对 Python UDF 的支持。这一功能让用户可以灵活高效地定义自己的函数,便于对训练数据进行预处理、嵌入式模型推理或使用机器学习相关的 Python 库等。
使用起来也非常方便,只需通过 Python 代码就能轻松扩展功能,满足复杂的业务需求。
-- Create a python function with inline mode to clean a text
CREATE FUNCTION python_clear_text(STRING) RETURNS STRING
type = 'Python'
symbol = 'clear_text'
file = 'inline'
input = 'scalar' -- you can use arrow to improve the computation performance
AS
$$
import string
def clear_text(input_text):
translator = str.maketrans('', '', string.punctuation)
cleaned_text = input_text.translate(translator)
return cleaned_text.lower()
$$;
-- Do cleaning text like a normal function
SELECT id, python_clear_text(str_field)
FROM tbl; -- columns of tbl: id, str_field
目前只支持用户自定义标量函数(Scalar UDF)。
为了提升 Python UDF 的处理性能,也可以使用 vectorized input,使用上基本一样。
创建复杂的处理函数时,也可以使用打成 zip 包的 python 文件。
file指定 zip 包地址。
Arrow Flight [Experimental]
如果经常需要将数据库中的大量数据导出后做机器学习相关工作,V3.4 中提供的 Arrow Flight 就能比较好的满足这个需要。相对于 MySQL 协议,A

355

被折叠的 条评论
为什么被折叠?



