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
AsyncDatabendDriver
databend-driver
/// `AsyncDatabendDriver` is the entry for all public async API
#[pyclass(module = "databend_driver")]
pub struct AsyncDatabendDriver(Connector);
接下来就要为
AsyncDatabendDriver
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
#[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