Databend v1.2 版本发布!Data + AI

news2024/11/15 19:47:41

各位社区小伙伴们,Databend 于 2023 年 6 月 29 日迎来了 v1.2.0 版本的正式发布!相较于 v1.1.0 版本,开发者们一共新增了 600 次 commit,涉及 3083 个文件变更,约 17 万 行代码修改。感谢各位社区伙伴的参与,以及每一个让 Databend 变得更好的你!

在 v1.2.0 版本中,Databend 新增了 BITMAP 数据类型 、 使用列号直接查询 CSV/TSV/NDJSON 文件 、AI Functions 等特性,设计并实现全新哈希表 大幅提升 Join 的性能。这个版本的发布使得 Databend 更接近实现 LakeHouse 的愿景,能够直接读取和分析储存在对象存储上的 CSV/TSV/NDJSON/Parquet 等格式文件,你也可以在 Databend 内部对这些文件进行 ETL 操作,从而做一些更高性能的 OLAP 分析。

同时,Databend 也设计并实现了 计算列 、VACUUM TABLE 和 Serverless Background Service 等企业级特性,感兴趣的小伙伴可以联系 Databend 团队 了解升级信息,或者访问 Databend Cloud 即时体验。

Databend x 内核

Databend 重要新特性速览,遇到更贴近你心意的 Databend 。

数据类型:BITMAP

Databend 新增对 BITMAP 数据类型的支持并实现了一系列相关函数。

BITMAP 是一种压缩数据结构,可以高效地存储和操作布尔值集合。它提供了快速的集合运算和聚合能力,在数据分析和查询方面应用广泛。常见的使用场景包括:去重计数、过滤选择和压缩存储。 Databend 中的 BITMAP 数据类型实现采用 RoaringTreemap 。与其他位图实现相比,使用这种数据结构可以提高性能并减少内存使用。

SELECT user_id, bitmap_count(page_visits) AS total_visits
FROM user_visits

+--------+------------+
|user_id |total_visits|
+--------+------------+
|       1|           4|
|       2|           3|
|       3|           4|
+--------+------------+

如果你想要了解更多信息,请查看下面列出的资源。

  • Docs | Data Types - BITMAP
  • Docs | SQL Functions - Bitmap Functions
  • Paper | Consistently faster and smaller compressed bitmaps with Roaring

使用列号直接查询 CSV/TSV/NDJSON 文件

要想查询 CSV/TSV/NDJSON 这类没有 schema 的文件,以前需要将其加载到表中再进行查询。但是有时候用户事先并不了解文件的具体情况(例如 CSV 文件有多少列),或者只是想做临时的查询。

为此,Databend 引入了列号(column position), 使用 $N 语法来表示第 N 列。CSV/TSV 文件所有列都视作 String 类型,如果某行的列数少于使用到的列号,则会用空字符串进行补齐。NDJSON 文件只有一列 $1 , 类型是 Variant 。

将这一能力与 COPY 语句结合使用,可以实现按需加载部分列,并在加载同时使用函数进行数据转换。

SELECT $1 FROM @my_stage (FILE_FORMAT=>'ndjson')

COPY INTO my_table FROM (SELECT TRIM($2) SELECT @my_stage t) FILE_FORMAT = (type = CSV)

如果你想要了解更多信息,请查看下面列出的资源。

  • Docs | SELECT - Column Position

设计并实现全新哈希表以提高 Hash Join 性能

在过去,Databend 的哈希表是为了满足聚合算子的需求而专门设计的,为了进一步提高 Hash Join 的性能,我们着手设计并实现了一种专为 Hash Join 优化的全新哈希表,通过并行化的设计,使 Databend 能够充分利用计算资源,同时在内存控制方面也变得更为精准,避免了不必要的内存开销,显著提高了 Hash Join 的性能。

商业智能分析师 Mimoune Djouallah 评论称:Databend 性能出色,在 8 核和 32GB 内存的条件下,运行 TPCH-SF10 只需要 25 秒。他甚至撰写了一篇题为《Databend and the rise of Data warehouse as a code》的博客文章。

如果你想要了解更多信息,请查看下面列出的资源。

  • Data Infra #12 | Databend's New Hash Table for Hash Join
  • PR #11140 | feat(query): new hash table and parallel finalize for hash join

AI Functions

Databend 在 v1.2.0 版本引入了强大的 AI 功能,实现了 Data 与 AI 的无缝融合,我们可以通过 SQL 来实现:

  1. 自然语言生成 SQL
  2. Embedding 向量化并存储
  3. 相似度计算
  4. 文本生成

自然语言生成 SQL

比如,如果你在一个 nginx log 的数据库中提问:"What are the top 5 IP addresses making the most requests",运用 Databend 的 AI_TO_SQL 函数,你将直接得到相应的 SQL 语句,使用非常便捷。

Embedding 向量化

借助 Databend 的 AI_EMBEDDING_VECTOR 函数,我们可以实现数据的向量化,并将其保存在 Databend 的 ARRAY 类型中。这样一来,Databend 事实上变成了一个向量数据库。

相似度计算

在向量化表示下,可以计算两个词语、句子或文档的相似度。 例如,假设我们有 "dog" 和 "puppy" 两个词语(也可以是句子),我们首先将它们各自转化为向量 v1 和 v2,然后使用余弦相似度来计算它们的相似度。

cos_sim = dot(v1, v2) / (norm(v1) * norm(v2))

Databend 中的 COSINE_DISTANCE 函数就是对这个公式的实现。

文本生成

文本生成在很多场景下非常有用,现在你可以在 SQL 中使用 AI_TEXT_COMPLETION 函数来完成。

目前,我们已经利用以上 Data + AI 能力,对 https://databend.rs 的所有文档进行了 Embedding 处理,并将其存储到 Databend 中,构建了一个智能问答网站:https://ask.databend.rs 。 在这个网站上,你可以提问关于 Databend 的任何问题。

Databend 企业级特性

全新企业级特性上线啦!了解 Databend 如何推动更具价值的数据分析服务。

计算列

计算列(Computed Columns)是一种通过表达式从其他列计算生成数据的列,使用计算列可以将表达式的数据存储下来加快查询速度,同时可以简化一些复杂的查询的表达式。计算列包括存储(STORED)和虚拟(VIRTUAL)两种类型。

  • 存储计算列在每次插入或更新时生成数据并存储在磁盘,在查询时不需要重复计算,可以更快的读取数据。
  • 虚拟计算列不存储数据,不占用额外的空间,在每次查询时实时进行计算。

计算列对读取 JSON 内部字段的数据特别有用,通过将常用的内部字段定义为计算列可以大大减少每次查询过程中提取 JSON 数据的耗时操作。例如:

CREATE TABLE student (
    profile variant,
    id int64 null as (profile['id']::int64) stored,
    name string null as (profile['name']::string) stored
);

INSERT INTO student VALUES ('{"id":1, "name":"Jim", "age":20}'),('{"id":2, "name":"David", "age": 21}');

SELECT id, name FROM student;
+------+-------+
| id   | name  |
+------+-------+
|    1 | Jim   |
|    2 | David |
+------+-------+

如果你想要了解更多信息,请查看下面列出的资源。

  • Docs | CREATE TABLE - COMPUTED COLUMNS

VACUUM TABLE

VACUUM TABLE 命令通过从表中永久删除历史数据文件来释放存储空间,有助于优化系统性能。删除的文件包括:

  • 与表相关的快照及其关联的 segments 和 blocks 。
  • 孤立文件。在 Databend 中,孤立文件指不再与该表关联的快照、segments 和 blocks 。孤立文件可能由各种操作和错误生成,例如在数据备份和还原期间,并且随着时间的推移会占用宝贵的磁盘空间并降低系统性能。

如果你想要了解更多信息,请查看下面列出的资源。

  • Docs | VACUUM TABLE

Serverless Background Service

Databend 的内置存储引擎 FuseTable 是一种与 Apache Iceberg 类似的日志结构表,在数据持续写入的过程中,需要定期执行表压缩、重聚类和清理以合并小数据块。小数据块合并的过程会涉及按聚类键排序数据或清理不需要的分支等阶段。

为了自动化执行这一过程需要使用不同的驱动,增加了基础设施的复杂性。而且必须部署和维护其他服务来触发驱动事件。为简化这一过程,Databend 设计并实现了 Serverless Background Service ,能自动发现数据写入之后需要压缩、重排序、清理的表,无需其他服务,也无需用户手动操作,自动触发对应表的维护工作,降低了用户维护的负担,提升了表查询的性能,也降低了数据在对象存储中的成本。

Databend x 生态

Databend 的生态版图得到了进一步的完善。是时候将 Databend 引入你的数据洞见工作流啦!

databend 的 Python 绑定

Databend 现在提供 Python 绑定,为在 Python 中执行 SQL 查询提供了新选择。该绑定内置 Databend ,无需部署实例即可使用。

pip install databend

从 databend 导入 SessionContext 并创建会话上下文即可开始使用:

from databend import SessionContext
ctx = SessionContext()
df = ctx.sql("select number, number + 1, number::String as number_p_1 from numbers(8)")

结果 DataFrame 可以使用 to_py_arrow() 或 to_pandas() 转换为 PyArrow 或者 Pandas 格式:

df.to_pandas() # Or, df.to_py_arrow()

现在行动起来,将 Databend 集成到你的数据科学工作流中。

  • databend · PyPI

BendSQL - Databend 原生命令行工具

BendSQL 是一款专为 Databend 设计的原生命令行工具,现在已经用 Rust 语言重写,并且同时支持 REST API 和 Flight SQL 协议。

使用 BendSQL ,你可以轻松高效地管理 Databend 中的数据库、表和数据,并轻松执行各种查询和运算。

bendsql> select avg(number) from numbers(10);

SELECT
  avg(number)
FROM
  numbers(10);

┌───────────────────┐
│    avg(number)    │
│ Nullable(Float64) │
├───────────────────┤
│ 4.5               │
└───────────────────┘

1 row in 0.259 sec. Processed 10 rows, 10B (38.59 rows/s, 308B/s)

我们期待与你分享更多关于 BendSQL 的更新!欢迎试用并给我们反馈。

  • Docs | SQL Clients - BendSQL
  • Crates.io - bendsql
  • Github - datafuselabs/databend-client | Rust

数据集成和 BI 服务

Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式和可扩展的开源工作流协调平台,具有强大的DAG可视化界面。支持 30+ 的任务类型,包括像 Flink SQL、DataX、HiveCli 等。能够高并发、高吞吐量、低延迟和稳定地执行百万个量级任务,可以根据计划时间(特殊日期范围或特殊的日期列表)批量执行任务,而且在不影响工作流模板的情况下,工作流实例支持修改、回滚和重新运行。

DolphinScheduler 现已支持 Databend 数据源,可以使用 DolphinScheduler 管理 DataX 任务实现从 MySQL 到 Databend 异构数据库数据同步。

Apache Flink CDC(Change Data Capture)是指 Apache Flink 使用基于 SQL 的查询从各种来源捕获和处理实时数据更改的能力。CDC 允许监视和捕获数据库或流系统中发生的数据修改(插入、更新和删除),并对这些更改进行实时响应。

Databend 现在提供 Flink SQL Connector,可以将 Flink 的流处理能力与 Databend 集成。通过对连接器进行配置,可以以流的形式从各种数据库中捕获数据更改,并将其载入到 Databend 中以进行实时处理和分析。

如果你想要了解更多信息,请查看下面列出的资源。

  • Docs | Loading Data with Tools - Flink CDC

Tableau

Tableau 是一款流行的数据可视化和业务智能工具。它提供了直观、交互式的方式来探索、分析和呈现数据,帮助用户更好地理解数据的意义和洞察。

参考 Other Databases (JDBC),将 databend-jdbc 放置在 Tableau 驱动路径下,就可以使用 Tableau 分析 Databend 中的数据。

如果你想要了解更多信息,请查看下面列出的资源。

  • Blog | Databend x Tableau

下载使用

如果你对我们新版本功能感兴趣,欢迎访问 Release v1.2.0-nightly · datafuselabs/databend · GitHub 页面查看全部的 changelog 或者下载 release 体验。

如果你还在使用旧版本的 Databend,我们推荐升级到最新版本,升级过程请参考:

Upgrading Databend | Databend

意见反馈

如果您遇到任何使用上的问题,欢迎随时通过 GitHub issue 或社区用户群中提建议

GitHub: GitHub - datafuselabs/databend: A modern cloud data warehouse focusing on reducing cost and complexity for your massive-scale analytics needs. Open source alternative to Snowflake. Also available in the cloud: https://app.databend.com 🧠

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨境电商如何快速提升产品排名和转化率,打造爆款产品

中小卖家在跨境电商平台上经营时,经常会遇到提升销售瓶颈的问题。今天陈哥将分享一个快速打造爆款的方法,除了SEO优化(关键词分析、优化标题、图片、产品描述和定价)等方面的策略。同时,测评也是一个有效的手段&#x…

规则引擎是什么,常见的应用领域,你知道吗?

规则引擎是什么 规则引擎,规则引擎是企业数字化转型升级过程中非常必要的软件工具,是一种能够自动执行一定条件下的预设逻辑的技术,可以帮助企业在收到数据或事件时自动触发相关业务规则,其主要优势如下: 易于维护与…

2023年华中杯数学建模C题空气质量预测与预警解题全过程文档及程序

2023年华中杯数学建模 C题 空气质量预测与预警 原题再现 空气污染对人类健康、生态环境、社会经济造成危害,其污染水平受诸多因素的影响,如 PM2.5、PM10、CO、气温、风速、降水量等,探究 PM2.5 等污染物浓度的因素,更精准的预测…

山西电力市场日前价格预测【2023-07-04】

日前价格预测 预测明日(2023-07-04)山西电力市场全天平均日前电价为136.03元/MWh。其中,最高日前电价为280.29元/MWh,预计出现在00:15。最低日前电价为0.00元/MWh,预计出现在09:15-18:15。 以上预测仅供学习参考&…

速成!|量子粒子群优化算法及其实现(Matlab)

作者在前面的两篇文章中介绍了标准粒子群及其变体,**由于PSO算法需要设定的参数(惯性因子w,学习因子 c1,c2)太多,不利于找到待优化模型的最优参数,而且粒子位置变化缺少随机性,容易陷入局部最优。**针对这些…

花了 44 块钱,实现 Java 发送短信功能

个人项目:社交支付项目(小老板) 作者:三哥(https://j3cod3.cn) 本篇为从 0 到 1 的一个,用 Java 对接腾讯短信发送功能的一篇流程文章。而标题中的 44 大洋则是用来购买短信套餐,当然…

怎么用21zui工具为图片添加水印

有些小伙伴工作内容是推荐公司产品,在平台中发布产品图片的时候,应该为图片添加专属水印(文字水印或者logo水印),为什么要这么做呢?因为添加水印可以保护我们的图片不被盗用,同时也有助于推广我…

(24)目标检测算法之YOLOv6 (2)量化与部署详解

目标检测算法之YOLOv6 (2)量化与部署详解 详解量化训练方式 详解部署方法:onnx 、openvnio、 tensorrt YLOLOv6目前发布的模型:从模型大小方面来看,可分为微小型(Nano),小(Small),中(Medium),大模型(Larg…

【单周期CPU】LoongArch | 32位寄存器DR | 32位的程序计数器PC | 通用寄存器堆Registers | 32位RAM存储器

前言:本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中基本时序逻辑部件设计。 💻环境:一台内存4GB以上,装有64位Windows操作系统和Vivado 2017.…

黑马微信小程序登录弹窗问题与解决的说明

1.问题 1.1开发者工具报错 [getFuzzyLocation] is not authorized如何解决? 1.2弹窗问题 2.解决方法 2.1开发工具报错问题 首先登录微信公众平台,找到开发管理。如下图 然后开通wx.getFuzzyLocation 申请模版,通过速度很多,…

24小时不定时价格监测如何做到

在做电商平台的数据监测时,品牌需要对线上监测的数据进行不定时监测,这是因为品牌做价格监测的目的是为了管控渠道,如果对店铺只能在特定的时间进行监测,那对于其他时间段的低价行为将不被发现,这也会使品牌渠道管控的…

【Redis】配置

🎯Redis 配置 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。 1、查看配置 语法如下通过 config get 命令查看或设置配置项。 CONFIG GET 配置的名字 使用 * 号获取所有配置项 127.0.0.1:6379>…

Parsing error: Unexpected token :

如果你创建的是Vue3的项目还报这个错误的话,很可能就是.eslintrc.js配置的问题。 我为了省事把vue2项目的.eslintrc.js复制到vue3的项目了。。 .eslintrc.js module.exports {root: true,env: {node: true,},extends: [plugin:vue/vue3-essential,eslint:recomm…

【哈士奇赠书活动 - 29期】- 〖人工智能与ChatGPT〗

文章目录 ⭐️ 赠书 - 《人工智能与ChatGPT》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《人工智能与ChatGPT》 ⭐️ 内容简介 人们相信人工智能可以为这个时代的技术带来突破,而ChatGPT则使这种希望成为现实。现在&#xff0…

自定义View实战《弹幕》

自定义View实战《弹幕》 前言一、步骤讲解二、缓存优化三、弹幕框架DanmakuFlameMaster介绍DanmakuFlameMasterDanmakuFlameMaster的使用 四、初步实现的完整代码总结 前言 前面已经学习了自定义的View《渐变色的文字》是继承View的。现在我们在继承ViewGroup来实现我们的《弹…

C++【初识哈希】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 🌇前言🏙️正文1、哈希思想2、哈希函数2.1、哈希函数的设计原则2.2、常见的哈希函数 3、哈希…

曹操最有名的4首诗

在中国帝王级的人物中间,真正称得上诗人的,曹操必定是最杰出一个。 曹操简介: 曹操(155年-220年正月庚子),字孟德,一名吉利,小字阿瞒,沛国谯(今…

Redis实现用户签到

用户签到 现在许多的APP或者网上应用为了提高用户的活跃度,都会设置一个每日签到的活动,签到完成后会给予一定的奖励,从而达到其目的。 而记录用户的签到信息可以使用如下一张数据库表来进行记录。 在用户数量并不多的情况下,数…

排序算法--冒泡排序(Java语言)

冒泡排序(Bubble Sort)是啥? 冒泡排序是一种简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素…

Android:Lifecycle

整体架构 LifecycleOwner Lifecycle持有者 在ComponentActivity中new出来,所以Activity和Fragment自带 实现了LifecycleOwner接口的类 可以获得生命周期信息类Lifecycle Fragment和Activity都已经实现了该接口 Lifecycle Registry 生命周期注册器 可以提交生命周…