博客

Databend 开源周报第 95 期

Databend Labs5月 29, 2023

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

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

What's On In Databend

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

腾讯云 COS 原生支持

Databend 现在提供 COS 原生支持!相比于 COS 提供的 S3 兼容,我们的原生支持有如下优势:

  • 更优良的支持:通过支持 COS 的原生签名算法,修复了一些边界 case 下签名错误的问题。
  • 更完善的功能:未来我们会在 COS 的基础上提供 append 等 s3 不支持的功能。
  • 更安全的服务:通过 COS 的原生支持,我们能够与腾讯云的 RAM,STS 等服务整合,提供不需要静态密钥的认证能力。

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

IEJoin 支持

Databend 最近推出了对 IEJoin(不等式连接)的支持,该方法通常用于各种应用程序中基于不等式条件连接关系表。

IEJoin 是一种专门设计用于不等式连接的快速算法。该方法将需要连接的列排序到一个数组中,并使用排列数组来指示一个已排序数组中元组相对于另一个数组的位置。与排序合并连接不同,IEJoin 利用空间高效的位数组,允许添加像布隆过滤器索引这样的优化来更快地计算连接结果。

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

Code Corner

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

Databend Rust Driver 的 Python 绑定

PyO3 不仅提供了 Rust 与 Python 的绑定功能,还提供了一个名为 maturin 的开箱即用的脚手架工具。通过 maturin,我们可以方便地创建基于 Rust 开发的 Python 扩展模块。这样一来,我们可以重新组织代码,使用 Rust 编写性能更好的部分,而其余部分仍然可以使用原始的 Python 代码。

基于 Pyo3,我们可以比较方便地专注于 Rust 实现逻辑本身,无需关注太多 FFI(Foreign Function Interface)和转换细节就可以将 Rust 低成本地转换成 Python 模块,后期也只需要维护一套代码,极大地降低了维护成本。Databend 正在为 rust driver 实现 Python binding,并期望能够最终替换掉现在的 databend-py。

以下是一些代码片段,可能会有助于了解如何使用 PyO3 创建 Python binding。

asyncio.rs
中,我们可以定义一个 Struct
AsyncDatabendDriver
并将其暴露为 python class,然后定义 python module 为
databend-driver
:

/// `AsyncDatabendDriver` is the entry for all public async API
#[pyclass(module = "databend_driver")]
pub struct AsyncDatabendDriver(Connector);

接下来就要为

AsyncDatabendDriver
实现相应的方法,而底层调用的就是 rust 中实现的 Trait 中的方法(这里以
exec
为例):

#[pymethods]
impl AsyncDatabendDriver {
#[new]
#[pyo3(signature = (dsn))]
pub fn new(dsn: &str) -> PyResult<Self> {
Ok(AsyncDatabendDriver(build_connector(dsn)?))
}

/// exec
pub fn exec<'p>(&'p self, py: Python<'p>, sql: String) -> PyResult<&'p PyAny> {
let this = self.0.clone();
future_into_py(py, async move {
let res = this.connector.exec(&sql).await.unwrap();
Ok(res)
})
}
}

最后在

lib.rs
中将
AsyncDatabendDriver
添加为 python class:

#[pymodule]
fn _databend_driver(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_class::<AsyncDatabendDriver>()?;
Ok(())
}

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

亮点

以下是一些值得注意的事件,也许您可以找到感兴趣的内容。

  • 为压缩添加了表锁。
  • 新增
    system.indexes
    show indexes
    命令。
  • 新增对 Azure OpenAI API 的支持。
  • 新增位图相关函数:
    bitmap_and_count
    bitmap_or_count
    bitmap_xor_count
    sub_bitmap
    bitmap_subset_limit 
    bitmap_subset_in_range
  • 新增窗口函数:
    lag
    lead
    first_value
    last_value
    nth_value

What's Up Next

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

支持自定义字符集

字符集是一组定义字符表示方式的规则,而字符序决定了在字符集内部的字符顺序。字符集用于存储数据,其中可以包含多个字符序。

支持类似 MySQL 自定义字符集的功能可能会比较有用,例如 IBM z/OS 默认使用 EBCDIC 编码。

Issue #11567 | Feature: Support custom character sets

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

New Contributors

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

Changelog

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

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

分享本篇文章

订阅我们的新闻简报

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