博客

Databend 开源周报第 84 期

Databend Labs3月 13, 2023

英文版移步:https://www.databend.com/blog/2023-03-10-databend-weekly

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn

What's On In Databend

探索 Databend 本周新进展,遇到更贴近你心意的 Databend。

SQL:
REPLACE INTO

Databend 现在支持使用

REPLACE INTO
语句插入或更新数据。该语句允许你指定一个冲突键(
conflict key
),用于判断是应该插入一行新数据,还是更新一行已有数据。

如果表中已经存在与冲突键相同的行,Databend 会用新数据更新这一行。否则,新数据会作为一行新记录添加到表中。你可以使用这个语句来轻松地同步不同来源的数据或处理重复记录。

#> CREATE TABLE employees(id INT, name VARCHAR, salary INT);
#> REPLACE INTO employees (id, name, salary) ON (id) VALUES (1, 'John Doe', 50000);
#> SELECT * FROM Employees;
+------+----------+--------+
| id | name | salary |
+------+----------+--------+
| 1 | John Doe | 50000 |
+------+----------+--------+

如果你想要了解关于

REPLACE INTO
语句的更多细节,可以参阅下方列出的材料:

RFCs: Add Incremental Update for COPY INTO

Databend 目前可以将 Stage 中的数据转换并插入到表中。例如,你可以运行这样的 SQL 语句:

insert into table1 from (select c1, c2 from @stage1/path/to/dir);

COPY INTO
语句也需要实现类似功能,以支持从 Stage 增量载入数据。

如果你对这个特性感兴趣,可以阅读下面列出的两篇 RFC:

Code Corner

一起来探索 Databend 和周边生态中的代码片段或项目。

Rust Toolchain: 🦀 v1.70.0-nightly (03-10)

Databend 的工具链已经升级至

nightly-2023-03-10
,在拉取最新的代码后别忘记运行
cargo clean
清理哦。

在更新过程中我们修复了一些 clippy 警告。现在代码中使用

#[default]
来标注
enum
中的默认值,示例如下:

#[derive(Debug, Default)]
pub enum RecordDelimiter {
#[default]
Crlf,
Any(u8),
}

如果你对这一 Rust 技巧感兴趣,可以参阅这个 RFC: derive_default_enum.

Announcing OpenDAL v0.30

OpenDAL 在最近发布的 0.30 中带来了一些重要的新特性,包括移除

Object
抽象和提供对 JavaScript 与 Python 语言的绑定。

Removing Object Abstraction

在很多领域都有用到术语

Object
,很难为
opendal::Object
提供一个简洁的定义。现在,OpenDAL 消除了
Object
的中间 API,所以用户可以直接使用
Operator
操作数据,例如:

# get metadata of a path
- op.object("path").stat().await;
+ op.stat("path").await;

Bindings for JavaScript and Python

OpenDAL 也在同一时间发布了适用于 JavaScript 和 Python 的绑定,感谢 @suyanhanx, @messense, @Xuanwo, 和其他参与的贡献者。现在,使用这两种语言的用户可以使用 OpenDAL 来访问来自不同服务的数据。我们希望数据科学家和数据分析师能够从中获益,使用 OpenDAL 可以节省掉学习其他 SDK 的成本。

下面是一段 Python 示例:

>>> import opendal
>>> op = opendal.Operator('memory')
>>> op.write("test", b"Hello, World!")
>>> op.read("test")
b'Hello, World!'

What's Up Next

我们始终对前沿技术和创新理念持开放态度,欢迎您加入社区,为 Databend 注入活力。

Support More Mathematical Operators like PostgreSQL

为了支持在 SQL 中执行复杂的数学运算,Databend 计划支持更多的数学运算符,这里主要参考 PostgreSQL 的设计。以帮助用户减少对其他语言或额外工具的依赖。

OperatorDescriptionExampleResult
^exponentiation2.0 ^ 3.08
|/square root|/ 25.05
||/cube root||/ 27.03
!factorial5 !120
@absolute value@ -5.05
&bitwise AND91 & 1511
|bitwise OR32 | 335
#bitwise XOR17 # 520
~bitwise NOT~1-2
<<bitwise shift left1 << 416
>>bitwise shift right8 >> 22

@jun0315 目前正在致力于解决这一问题,如果你对如何实现这些运算感兴趣,不妨关注一下。

Issue 10233: Feature: support more pg functions

如果你对这个主题感兴趣,可以尝试解决其中的部分问题或者参与讨论和 PR review。或者,你可以点击 https://link.databend.com/i-m-feeling-lucky 来挑选一个随机问题,祝好运!

New Contributors

一起认识社区中的新伙伴,Databend 因你们而变得更加美好

  • @jun0315 实现了
    caret
    运算符来支持幂运算,例如 2^3 表示 2 的 3 次方,等于 8,#10347
  • @quaxquax 帮忙修复了 typo,#10465

Changelog

前往查看 Databend 每日构建的变更日志,以了解开发的最新动态。

地址:https://github.com/datafuselabs/databend/releases

分享本篇文章

订阅我们的新闻简报

及时了解功能发布、产品规划、支持服务和云服务的最新信息!