Databend 开源周报第 88 期
Databend Labs6月 19, 2023
英文版移步:https://www.databend.com/blog/2023-06-18-databend-weekly
Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。
What's On In Databend
探索 Databend 本周新进展,遇到更贴近你心意的 Databend。
后台服务
Databend 的内置存储引擎
FuseTable
先前的实现需要使用不同的驱动,增加了基础设施的复杂性。而且必须部署和维护其他服务来触发驱动事件。为简化这一过程,我们实现了一个后台服务,允许 Databend 执行后台单次作业或以守护进程模式运行 cron 作业。这些作业可以根据条件触发自动压缩/清理/重聚类等表维护任务,而无需其他服务介入。
此实现包括:
- 完整的 metasrv 模式定义,以及后台作业与后台任务的设计实现。
- 用于在元服务上更新和维护后台作业与 后台任务状态的 API。
- 支持 、
one_shot
、interval
等不同作业类型的作业调度器实现。cron
后台服务 需要升级至 企业版 。如需了解升级信息,请联系 Databend 团队 。
如果你想要了解更多信息,请查看下面列出的资源。
Code Corner
一起来探索 Databend 和周边生态中的代码片段或项目。
IceLake - Iceberg 的纯 Rust 实现
Iceberg 是为分析数据集设计的开放表格式标准。然而,目前 Rust 生态中缺乏成熟的 Iceberg 绑定,使其难以与像 Databend 这样的数据库系统集成 。
IceLake 旨在填补这一空白,其致力于建立一个开放生态系统:
- 用户可以从 任何 存储服务(如 s3、gcs、azblob、hdfs 等)读写 Iceberg 表。
- 任何 数据库都可以集成 ,以支持读写 Iceberg 表。
icelake
- 提供原生的 格式互转换的能力。
arrow
- 提供多种语言绑定,使其他语言可以享有 Rust 核心带来的 Iceberg 生态支持。
如果你想要了解更多信息,请查看下面列出的资源。
Highlights
以下是一些值得注意的事件,也许您可以找到感兴趣的内容。
- 新增对 MERGE JOIN 的支持。
- 为 CSV 格式实现列位置支持。
- 阅读 Docs | Computed Columns 以了解如何使用计算列,以及在选择使用何种类型计算列时的一些考量。
- 阅读 Docs | Subquery-Based Deletions 以理解如何使用子查询和比较运算实现删除。
What's Up Next
我们始终对前沿技术和创新理念持开放态度,欢迎您加入社区,为 Databend 注入活力。
为COPY INTO
支持 VALIDATION_MODE
COPY INTO
VALIDATION_MODE
我们希望为 Databend 的
COPY INTO
VALIDATION_MODE
- : 此模式验证数据并返回所有错误。
RETURN_ERRORS
- : 此模式验证
RETURN_<number>_ROWS
行数据。如果没有错误,就返回数据载入后应当产生的信息。否则,报告对应的错误信息。<number>
Issue #11582 | Feature: copy support VALIDATION_MODE
如果你对这个主题感兴趣,可以尝试解决其中的部分问题或者参与讨论和 PR review。或者,你可以点击 https://link.databend.com/i-m-feeling-lucky 来挑选一个随机问题,祝好运!
New Contributors
一起认识社区中的新伙伴,Databend 因你们而变得更加美好。
- @jonahgao 修复逻辑测试中 MySQLClient 的列类型,#11718 。
- @akoshchiy 更新 值以满足
MACOSX_DEPLOYMENT_TARGET
的需要,#11783 。z3-sys
Changelog
前往查看 Databend 每日构建的变更日志,以了解开发的最新动态。
地址:https://github.com/databendlabs/databend/releases
Convert the query result to a Pandas DataFrame
df = result.to_pandas()
Create a bar chart to visualize the data
df.plot.bar(x='date', y='count') plt.show()
![](https://databend.rs/assets/images/localhost_8888_notebooks_Untitled.ipynb-3992998c3577fa62ff83a36bcee494f8.png)
如果您想了解更多信息,请查看下面列出的资源。
- [Docs | Tutorial-3: Integrate with Jupyter Notebook with Python Binding Library](https://docs.databend.cn/doc/integrations/jupyter#tutorial-3-integrate-with-jupyter-notebook-with-python-binding-library)
## Highlights
以下是一些值得注意的事件,也许您可以找到感兴趣的内容。
- 实现对所有权模型的初步支持
- Hash Join 支持溢出(spill)
- Databend 中的列现在默认支持空值,阅读文档 [Docs | NULL Values and NOT NULL Constraint](https://docs.databend.cn/sql/sql-reference/data-types/#null-values-and-not-null-constraint) 了解详细情况。
- 阅读文档 [Docs | databend-local](https://docs.databend.cn/doc/sql-clients/databend-local) 掌握 Databend Local 模式。
## What's Up Next
我们始终对前沿技术和创新理念持开放态度,欢迎您加入社 区,为 Databend 注入活力。
### 支持使用 JavaScript 创建 UDF
[PR #12729 | feat: implement udf server in databend](https://github.com/databendlabs/databend/pull/12729) 预计会在本周进行合并。这意味着 Databend 即将支持使用 Python 创建用户自定义函数。
```SQL
CREATE FUNCTION [IF NOT EXISTS] <udf_name> (<arg_type>, ...) RETURNS <return_type> LANGUAGE <language> HANDLER=<handler> ADDRESS=<udf_server_address>
我们期望在这个 PR 的基础上提供对多种语言 UDF 的支持,JavaScript 可能是值得尝试的选项之一。
Issue #12746 | Feature: support javascript udf
如果你对这个主题感兴趣,可以尝试解决其中的部分问题或者参与讨论和 PR review。或者,你可以点击 https://link.databend.com/i-m-feeling-lucky 来挑选一个随机问题,祝好运!
Changelog
前往查看 Databend 每日构建的变更日志,以了解开发的最新动态。
地址:https://github.com/databendlabs/databend/releases
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 |
+------+-------+
如果你想要了解更多信息,请查看下面列出的资源。
VACUUM TABLE
VACUUM TABLE
- 与表相关的快照及其关联的 segments 和 blocks。
- 孤立文件。在 Databend 中,孤立文件指不再与该表关联的快照、segments 和 blocks。孤立文件可能由各种操作和错误生成,例如在数据备份和还原期间,并且随着时间的推移会占用宝贵的磁盘空间并降低系统性能。
如果你想要了解更多信息,请查看下面列出的资源。
Serverless Background Service
Databend 的内置存储引擎
FuseTable
为了自动化执行这一过程需要使用不同的驱动,增加了基础设施的复杂性。而且必须部署和维护其他服务来触发驱动事件。为简化这一过程,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()