Skip to main content

One post tagged with "weekly"

View All Tags

Alt text

英文版移步:https://databend.rs/blog/2023-09-03-databend-weekly

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

What's On In Databend

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

利用 Cluster Key 优化查询性能

通过定义 Cluster Key ,可以引导 Databend 对表进行聚类来提高查询性能,此时数据将会根据 Cluster Key 来组织和分组,而不仅仅依赖数据摄入的顺序。从而优化大型表的数据读取逻辑,加速查询。

一旦表设定了 Cluster Key ,在使用 COPY INTOREPLACE INTO 这两种方式写入数据时,会自动执行 compact 和 recluster 操作。

由于执行聚类和重聚类操作需要消耗一定的时间,所以我们建议主要为查询性能较慢的大型表定义集群键。

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

Code Corner

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

Databend Local 模式

Databend 的 local 模式旨在提供一个简易的 Databend 环境,用户无需部署 Databend 服务就可以用 SQL 进行交互,从而方便开发者们使用 Databend 进行简单的数据处理。

Local 模式 将启动一个临时的 databend-query 进程,并且提供客户端和服务端的融合支持。其存储位于临时目录中,生命周期跟随进程,进程离开后资源也将销毁,你可以在一个服务器中启动多个 local 进程,他们的资源是相互隔离的。

❯ alias databend-local="databend-query local"
❯ echo " select sum(a) from range(1, 100000) as t(a)" | databend-local
4999950000

❯ databend-local

databend-local:) select number %3 n, number %4 m, sum(number) from numbers(1000000000) group by n,m limit 3 ;

┌───────────────────────────────────┐
│ n │ m │ sum(number) │
│ UInt8 │ UInt8 │ UInt64 NULL │
├───────┼───────┼───────────────────┤
│ 0 │ 0 │ 41666666833333332 │
│ 1 │ 0 │ 41666666166666668 │
│ 2 │ 0 │ 41666666500000000 │
└───────────────────────────────────┘
0 row result in 1.669 sec. Processed 1 billion rows, 953.67 MiB (599.02 million rows/s, 4.46 GiB/s)

如果你需要在生产环境使用 Databend,我们建议按官方文档部署 Databend 服务或使用 Databend Cloud,但如果你是开发人员或测试工程师,则可以使用 local 模式来体验 Databend 。

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

Highlights

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

  • 初步支持 MERGE INTO
  • 实现 SQLsmith 测试框架,以支持更精确的模糊测试。
  • 阅读文档 Docs | Setting Environment Variables 了解如何通过环境变量变更 Databend 配置。
  • 实现json_strip_nullsjson_typeof 函数,你也可以阅读 Docs | Semi-Structured Functions 了解 Databend 为半结构化数据处理设计和实现的函数。

What's Up Next

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

优化 MERGE INTO 实现

PR #12350 | feat: support Merge-Into V1 中,Databend 初步支持了 MERGE INTO 语法。

在这个基础上,还有很多值得关注的优化可以实施,比如:提供并行和分布式的实现,减少 IO 并简化数据块拆分等。

Issue #12595 | Feature: Merge Into Optimizations

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-08-27-databend-weekly

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

What's On In Databend

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

What's On In Databend

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

多源数据目录

在 Databend 中,Catalog 是数据组织的最高一级抽象,可以帮助用户高效管理和访问数据源。

Databend 具备多源数据目录(Multiple Catalog)能力,目前已经支持 Apache Iceberg 和 Apache Hive 两类外部 Catalog 。

通过挂载外部 Catalog ,无需将数据加载到 Databend 中,就可以进行高效查询。

-- Create a Hive catalog
CREATE CATALOG hive_ctl
TYPE = HIVE
CONNECTION =(
METASTORE_ADDRESS = '127.0.0.1:9083'
URL = 's3://databend-toronto/'
AWS_KEY_ID = '<your_key_id>'
AWS_SECRET_KEY = '<your_secret_key>'
);

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

Code Corner

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

利用 cargo-pgo 实现 PGO

Profile-guided optimization (PGO) 是一种常见的编译优化技术,可以利用程序运行时采集到的 profiling 信息来引导编译器进行针对性的优化,生成更高质量的代码,从而提高程序的性能。

根据测试,利用 PGO ,Databend 在某些场景下可以取得大约 10% 的性能提高。PGO 的具体表现取决于实际的工作负载,你可以尝试应用 PGO 技术来优化 Databend 集群的性能。

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

Highlights

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

What's Up Next

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

利用 SQLsmith 实施模糊测试

SQLsmith 专注于生成随机的、类型感知和列感知的 SQL 查询,通常能够通过语义检查,从而进一步测试数据库的执行逻辑。

过去,Databend 已经支持 SQLancer 以及随机生成输入的传统模糊测试。Databend 团队计划引入 SQLsmith 来实现域感知模糊测试,提供更全面、更具针对性的测试结果,提高发现漏洞的可能。

Issue #12576 | Feature: Using sqlsmith to support sql fuzzy testing

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-08-20-databend-weekly

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

What's On In Databend

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

理解连接参数

连接参数 是建立与 Databend 支持的外部存储服务(如Amazon S3)的连接时所需的一组身份验证和配置信息。这些参数被括号包围、由一组用逗号或空格分隔的键值对组成。在创建 Stage 、COPY INTO 和查询外部文件时都会用到。

下面的 SQL 语句展示了如何利用连接参数创建用 S3 作为底层存储的 Stage 。

CREATE STAGE my_s3_stage
URL = 's3://load/files/'
CONNECTION = (
ACCESS_KEY_ID = '<your-access-key-id>',
SECRET_ACCESS_KEY = '<your-secret-access-key>'
);

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

Hive Catalog 支持配置存储参数

在刚刚过去的一周中,Databend 为 Hive Catalog 引入了存储参数选项,允许为其配置特定的存储服务,不再依赖 Default Catalog 自身的存储后端。

下面的例子展示了如何创建以 MinIO 作为底层存储服务的 Hive Catalog :

CREATE CATALOG hive_ctl 
TYPE = HIVE
CONNECTION =(
ADDRESS = '127.0.0.1:9083'
URL = 's3://warehouse/'
AWS_KEY_ID = 'admin'
AWS_SECRET_KEY = 'password'
ENDPOINT_URL = 'http://localhost:9000/'
)

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

Code Corner

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

使用 gitoxide 加速 Git 依赖下载

gitoxide 是一个用 Rust 编写的高性能、现代化的 Git 实现。利用 cargogitoxide 特性(Unstable),可以使用 gitoxide crate 替代 git2 执行各种 git 操作,从而在下载 crates-index 和 git 依赖时获得数倍的性能提高。

Databend 最近在 CI 中为 cargo {build | clippy | test} 启用了这一特性,你也可以在本地开发时尝试添加 -Zgitoxide 选项来加速构建过程:

cargo -Zgitoxide=fetch,shallow-index,shallow-deps build

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

Highlights

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

  • 不与 SELECT 共用也可以单独使用 VALUES 子句。
  • 变更列时支持修改默认值。
  • 为 Parquet 格式的表添加虚拟列支持
  • 支持在执行写入操作(COPY INTOREPLACE INTO)后对表进行自动重聚类

What's Up Next

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

增强 infer_schema 能力以支持文件路径

当前,Databend 既支持查询由文件路径指向的文件也支持查询位于 Stage 中的文件,例如:

select * from 'fs:///home/...';
select * from 's3://bucket/...';
select * from @stage;

然而,目前 infer_schema 只支持处理位于 Stage 中的文件:

select * from infer_schema(location=>'@stage/...');

如果需要对位于其它路径下的文件进行推断,就会导致报错:

select * from infer_schema(location =>'fs:///home/...'); -- this will panic.

我们希望可以统一 infer_schema 函数的行为,允许其对所有位置的文件进行推断,使之具有更好的可用性。

Issue #12458 | Feature: infer_schema support normal file path

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-08-13-databend-weekly

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

What's On In Databend

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

数据脱敏

Databend 新增数据脱敏能力。通过设定脱敏策略(Masking Policy),可以控制敏感数据的显示或访问方式,从而在允许授权用户与数据交互的同时保护机密性。

-- Create a masking policy
CREATE MASKING POLICY email_mask
AS
(val string)
RETURNS string ->
CASE
WHEN current_role() IN ('MANAGERS') THEN
val
ELSE
'*********'
END
COMMENT = 'hide_email';

-- Associate the masking policy with the 'email' column
ALTER TABLE user_info MODIFY COLUMN email SET MASKING POLICY email_mask;

数据脱敏 需要升级至 企业版 。如需了解升级信息,请联系 Databend 团队

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

Code Corner

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

为 Python Binding 支持 show() 方法

在 PySpark 、DuckDB、DataFusion 的 Python 绑定/包中均支持了 show() 方法,用于输出前 n 行结果。

Databend 最近也通过 PyO3 为 Python Binding 实现了相应的支持,代码片段如下。

    #[pyo3(signature = (num=20))]
fn show(&self, py: Python, num: usize) -> PyResult<()> {
let blocks = self.collect(py)?;
let bs = self.get_box();
let result = blocks.box_render(num, bs.bs_max_width, bs.bs_max_width);

// Note that println! does not print to the Python debug console and is not visible in notebooks for instance
let print = py.import("builtins")?.getattr("print")?;
print.call1((result,))?;
Ok(())
}

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

Highlights

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

  • 支持分布式 REPLACE INTO
  • 支持用于计算向量 2 范数(欧几里得范数)的算符 <->
  • 新增地理位置函数:h3_to_center_child / h3_exact_edge_length_m / h3_exact_edge_length_km / h3_exact_edge_length_rads / h3_num_hexagons / h3_line / h3_distance / h3_hex_ring h3_get_unidirectional_edge
  • 阅读文档 Docs | ALTER TABLE COLUMN 了解如何利用添加、转换、重命名、更改或删除列等操作修改表。

What's Up Next

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

为 Hive Catalog 添加存储后端支持

此前 Databend 的 Hive Catalog 实现缺反自己的存储后端配置,只能回滚到 Default Catalog 对应的存储后端。导致当 Hive MetaStore 指向的存储服务与 Default Catalog 配置不一致时无法读取数据。

现在计划为 Hive Catalog 引入 CONNECTION 选项,允许对存储后端进行配置,解决异构存储下的 Hive 加速问题。

CREATE CATALOG hive_ctl
TYPE=HIVE
HMS_ADDRESS='127.0.0.1:9083'
CONNECTION=(
URL='s3://warehouse/'
AWS_KEY_ID='admin'
AWS_SECRET_KEY='password'
ENDPOINT_URL='http://localhost:9000'
);

Issue #12407 | Feature: Add storage support for Hive catalog

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-08-06-databend-weekly

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

What's On In Databend

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

Databend 轻量级 CDC 解决方案

Debezium 是一组用于捕获数据库更改的分布式服务。Databend 在 Debezium Engine 的基础上开发了 debezium-server-databend 轻量级 CDC 工具。

不依赖 Flink、 Kafka 或 Spark 等大型数据基础设施,就可以轻松监控并捕获数据库中的更改,并完成数据的同步。

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

Code Corner

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

使用 Databend 分析 Iceberg 表格式数据

Apache Iceberg 是一种高性能的开放表格式,专为大规模分析工作负载而设计,简单而又可靠。

得益于 Databend 的多源数据目录能力和 IceLake 所提供的 Iceberg Rust 实现,Databend 现在支持以 Catalog 形式挂载并分析以 Iceberg 表格式存储的数据。

CREATE CATALOG iceberg_ctl
TYPE=ICEBERG
CONNECTION=(
URL='s3://warehouse/path/to/db'
AWS_KEY_ID='admin'
AWS_SECRET_KEY='password'
ENDPOINT_URL='your-endpoint-url'
);

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

Highlights

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

  • 为 MySQL handler 添加 tls 支持。
  • 新增地理位置函数:h3_to_string / string_to_h3 / h3_is_res_class_iii / h3_is_pentagon / h3_get_faces / h3_cell_area_m2 / h3_cell_area_rads2
  • 阅读文档 Docs | Network Policy 了解 Databend 中网络策略的相关内容。

What's Up Next

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

在 Trait 中使用原生 async fn

Rust 中原生的 async-fn-in-trait 自 2022 年 11 月推出 MVP 以来,就已经可以在 Rust nightly 版本中进行尝鲜体验了,也许是时候评估这一特性的状态,并尝试使用它来代替 async_trait

#![feature(async_fn_in_trait)]

trait Database {
async fn fetch_data(&self) -> String;
}

impl Database for MyDb {
async fn fetch_data(&self) -> String { ... }
}

Issue #12201 | Refactor: use native async fn in trait syntax

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-07-30-databend-weekly

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

What's On In Databend

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

从 Kafka 载入数据

Apache Kafka 是一款开源的高性能、分布式消息队列,为处理实时数据提供了一个统一、高吞吐量、低时延的平台。

Databend 设计并实现了高性能的数据摄入工具 bend-ingest-kafka ,专门用于将来自 Kafka 的数据载入到 Databend 中,可以简化数据摄取工作流程。

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

从 dbt 载入数据

dbt 是一种数据转换工作流,可以帮助你完成更多数据处理工作,同时产生更高质量的结果。

dbt-databend-cloud 是由 Databend 开发的 dbt 插件。通过使用此插件,你可以轻松使用 dbt 执行数据建模、转换和清洗任务,并方便地将输出结果载入到 Databend 中。

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

Code Corner

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

使用 Node.js 连接 Databend

Databend 为 Databend Driver 提供了 Node.js 绑定,现在你可以使用 Node.js 轻松构建与 Databend 集成的应用程序。

const { Client } = require('databend-driver');

const dsn = process.env.DATABEND_DSN
? process.env.DATABEND_DSN
: "databend://user1:abc123@localhost:8000/default?sslmode=disable";

async function create_conn() {
this.client = new Client(dsn);
this.conn = await this.client.getConn();
console.log('Connected to Databend Server!');
}

async function select_books() {
var sql = "CREATE TABLE IF NOT EXISTS books(title VARCHAR, author VARCHAR, date VARCHAR)";
await this.conn.exec(sql);
console.log("Table created");

var sql = "INSERT INTO books VALUES('Readings in Database Systems', 'Michael Stonebraker', '2004')";
await this.conn.exec(sql);
console.log("1 record inserted");

var sql = "SELECT * FROM books";
const rows = await this.conn.queryIter(sql);
const ret = [];
let row = await rows.next();
while (row) {
ret.push(row.values());
row = await rows.next();
}
console.log(ret);
}

create_conn().then(conn => {
select_books()
});

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

Highlights

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

  • 支持 GROUP BY ALL 语法。
  • 利用物化加速 CTE 。
  • 新增地理位置函数:h3_to_geoh3_to_geo_boundaryh3_k_ringh3_is_validh3_get_resolutionh3_edge_length_m 以及 h3_edge_length_km
  • 新增数组 lambda 函数:array_transformarray_apply 以及 array_filter

What's Up Next

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

支持 Stage 间的文件复制

Databend 现在能够为十多种不同的存储服务提供数据分析能力。我们可以基于此进一步提供数据管理和迁移功能,比如支持将文件从一个 Stage 复制到另一个 Stage。

copy files from @mystage1/path/ to @mystage2;
copy files from @mystage1/path/f1.csv to @mystage2/archive/[f1.csv];

Issue #12200 | Feature: support copy files from one stage to other stage

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-07-23-databend-weekly

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

What's On In Databend

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

创建网络策略

网络策略(Network Policies) 是一组用于管理 Databend 服务网络配置的选项。你可以使用网络策略来限制访问帐户的用户 IP 地址。

要创建一组网络策略,可以使用以下 SQL:

CREATE NETWORK POLICY <policy-name> ALLOWED_IP_LIST=(<allowed-ip>) BLOCKED_IP_LIST=(<blocked-ip>) COMMENT=<policy-comment>

要为指定用户分配或更改网络策略,可以使用以下 SQL:

CREATE USER <user-name> IDENTIFIED BY <user-password> WITH SET NETWORK POLICY=<policy-name>

--- OR ---

ALTER USER <user-name> WITH SET NETWORK POLICY=<policy-name>

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

Code Corner

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

剖析表扫描时间

Databend 现在支持用于剖析表扫描时间的 wait_time 。该特性可以帮助洞察从存储中读取数据所花费的时间,帮助确定查询是 I/O 绑定还是 CPU 绑定。

Alt text

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

Highlights

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

What's Up Next

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

将 TSV 文件格式重命名为 TEXT

Databend 现在支持 TSV 文件格式, 但这种命名可能会误导用户,以为这种格式只是和 CSV 的字段分隔符不同。

事实上,误命名为 TSV 的文件格式对应的是 MySQL/Hive/PostgreSQL 中的 TEXT 格式,并使用转义字符而不是引号来处理分隔符(MySQL 的 TEXT 格式支持引号但没有在默认情况下启用)。ClickHouse 也使用这种格式来完成与 MySQL 之间的数据传输。

因此,我们建议将 TSV 重命名为 Text 的别名。

Issue #11987 | Rename TSV file format to Text

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-07-16-databend-weekly

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

What's On In Databend

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

为指定列创建 Bloom Index

创建 bloom index 将会消耗大量 CPU 资源。对于仅有少数列涉及点查或者对数据摄入性能比较看重的宽表来说,为所有列都创建 bloom index 可能不是什么好选择。

Databend Fuse Engine 新增对 bloom_index_columns 选项的支持,这意味着你可以按需为指定列创建 bloom index ,从而达到查询性能和数据摄入性能之间的平衡。

创建带有 bloom index 的表:

CREATE TABLE table_name (
column_name1 column_type1,
column_name2 column_type2,
...
) ... bloom_index_columns='columnName1[, ...]'.

为现存的表创建或修改 bloom index :

现有的 bloom index 选项将被新选项替换,另外,不会为现有数据创建 bloom filter 。
ALTER TABLE <db.table_name> SET OPTIONS(bloom_index_columns='columnName1[, ...]');

禁用 bloom index :

ALTER TABLE <db.table_name> SET OPTIONS(bloom_index_columns='');

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

理解 SQL 一致性

Databend 的设计目标之一是符合 SQL 标准,特别是支持 ISO/IEC 9075:2011 ,也称为 SQL:2011 。虽然目前不是完全百分百符合,但 Databend 已经包含许多 SQL 标准所要求的特性,只是在语法或函数上存在一些轻微差异。

我们最近在文档中添加了一篇摘要,介绍了 Databend 符合 SQL:2011 标准的程度,希望它能帮助你进一步了解 Databend 的 SQL 语法。

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

Code Corner

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

了解 Databend 重聚类 Pipeline

经过良好聚类的表在某些存储块中仍然可能会变得混乱,从而对查询性能产生负面影响。例如,该表会继续进行 DML 操作(INSERT / UPDATE / DELETE)。

重聚类操作并不是从头开始对表再次聚类,而是基于聚类算法的计算来选择并重新组织现存最混乱的存储块。

重聚类的 pipeline 如下图所示:

┌──────────┐     ┌───────────────┐     ┌─────────┐
│FuseSource├────►│CompoundBlockOp├────►│SortMerge├────┐
└──────────┘ └───────────────┘ └─────────┘ │
┌──────────┐ ┌───────────────┐ ┌─────────┐ │ ┌──────────────┐ ┌─────────┐
│FuseSource├────►│CompoundBlockOp├────►│SortMerge├────┤────►│MultiSortMerge├────►│Resize(N)├───┐
└──────────┘ └───────────────┘ └─────────┘ │ └──────────────┘ └─────────┘ │
┌──────────┐ ┌───────────────┐ ┌─────────┐ │ │
│FuseSource├────►│CompoundBlockOp├────►│SortMerge├────┘ │
└──────────┘ └───────────────┘ └─────────┘ │
┌──────────────────────────────────────────────────────────────────────────────────────────────┘
│ ┌──────────────┐
│ ┌───►│SerializeBlock├───┐
│ │ └──────────────┘ │
│ │ ┌──────────────┐ │ ┌─────────┐ ┌────────────────┐ ┌─────────────────┐ ┌──────────┐
└───►│───►│SerializeBlock├───┤───►│Resize(1)├───►│SerializeSegment├────►│TableMutationAggr├────►│CommitSink│
│ └──────────────┘ │ └─────────┘ └────────────────┘ └─────────────────┘ └──────────┘
│ ┌──────────────┐ │
└───►│SerializeBlock├───┘

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

Highlights

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

What's Up Next

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

用物化加速 CTE

内联公共表表达式(Common Table Expression,CTE)能够满足大多数情况,但是如果 CTE 像 TPCH Q15 那样比较重,那么完成查询的代价可能会非常高。在这类情况下,最好引入物化来加速 CTE 。

--- TPCH Q15
WITH revenue AS
(SELECT l_suppkey AS supplier_no,
sum(l_extendedprice * (1 - l_discount)) AS total_revenue
FROM lineitem
WHERE l_shipdate >= TO_DATE ('1996-01-01')
AND l_shipdate < TO_DATE ('1996-04-01')
GROUP BY l_suppkey)
SELECT s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
FROM supplier,
revenue
WHERE s_suppkey = supplier_no
AND total_revenue =
(SELECT max(total_revenue)
FROM revenue)
ORDER BY s_suppkey;

Issue #12067 | Feature: speed up CTE by materialization

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-07-09-databend-weekly

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

What's On In Databend

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

教程 | 使用 AWS IAM 用户创建 External Stage

AWS Identity and Access Management (IAM) 允许你通过指定授权用户或实体来控制对 AWS 服务和资源的访问。另外,IAM 还支持集中管理精细权限,以及分析整个 AWS 平台上的访问模式以优化权限。

Databend 支持使用 AWS IAM 用户创建 External Stage,从而使对 AWS S3 对象存储的访问更加安全可靠。

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

教程 | 在 Cloudflare R2 上创建 External Stage

Cloudflare R2 让你可以自由地使用 S3 兼容对象存储构建多云架构。

你可以使用 Databend 创建基于 Cloudflare R2 的创建 External Stage,并进一步高效挖掘数据价值。

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

Code Corner

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

新系统表:system.backtrace

async-backtrace 为异步函数提供高效且逻辑清晰的 “栈” 追踪。

Databend 已将 async-backtrace 的能力集成到系统表中。开发人员可以通过查询 system.backtrace 系统表来获取追踪信息。此外,集群模式下,在任何节点执行对 system.backtrace 的查询都将给出整个集群的调用栈。这将大幅简化开发人员进行调试和错误排查的流程。

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

亮点

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

  • 新增 bitmap_not_countbitmap_unionbitmap_intersect 聚合函数。
  • 新增 cume_dist 窗口函数。
  • 新支持 ATTACH TABLE 语句。
  • 新增 system.metrics 表以及用于 spill 和 transform 操作的统计指标。
  • 新支持将 stored 类型的计算列转化成普通列。
  • Serverless Background Service 实现任务建议能力。

What's Up Next

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

为随机引擎支持随机种子

Databend 此前实现了随机引擎,以使用随机数据生成随机表。为了获得更具确定性和可复现的测试结果,我们期望为随机引擎支持随机种子。

CREATE table(t int, time timestamp) ENGINE=RANDOM(1000)

Issue #11863 | Feature: Support to add random seed on random engine

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-07-02-databend-weekly

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

What's On In Databend

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

Databend v1.2 正式发布

Databend v1.2.0 已于 2023 年 6 月 29 日正式发布!感谢各位社区伙伴的参与,以及每一个让 Databend 变得更好的你!

新版本有许多新功能,包括:

  • BITMAP 数据类型
  • 使用列号直接查询 CSV/TSV/NDJSON 文件
  • 设计并实现全新哈希表大幅提升 Join 的性能
  • AI Functions
  • 计算列
  • VACUUM TABLE
  • Serverless Background Service
  • 开箱即用的 Databend Python 绑定
  • BendSQL - Databend 原生命令行工具
  • 与 Apache DolphinScheduler、Apache Flink CDC 以及 Tableau 等数据集成/商业智能工具的无缝集成

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

Code Corner

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

Databend 长期运行测试

Databend 新近引入长期运行测试方案,旨在验证系统在重负载和高并发下的性能和正确性。这些测试包括并发大规模数据摄取、表维护(优化、重聚类和清理)以及查询。

测试将运行一系列 SQL 和验证命令以验证结果。整个测试从执行预测试脚本(_before.sh)开始,然后重复运行并发测试脚本,最后执行后测试脚本(_after.sh)。所有事件日志都将存储在 Databend 中,以供进一步分析。

                      +-------------------+
| Long Run |
+-------------------+
|
|
v
+-----------------------+
| Before Test Scripts |
+-----------------------+
|
|
v
+----------------------------------+
| Concurrent Test Scripts |
+----------------------------------+
| | |
| | |
v v v
+----------------+ +----------------+ +----------------+
| Test Script 1 | | Test Script 2 | | Test Script 3 |
+----------------+ +----------------+ +----------------+
|
|
v
+-----------------------+
| After Test Scripts |
+-----------------------+

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

亮点

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

What's Up Next

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

发布提案:Nightly v1.3

Databend v1.3 计划于 8 月 1 日发布,主要关注稳定性提高。预期包括以下功能:

TaskStatus
(Query) JSON indexing#6994IN PROGRESS
(Query+Storage) Create index featureIN PROGRESS
(Query+Storage)Distributed COPY#8594IN PROGRESS
(Query+Storage) Distributed REPLACEPLAN
COPY returns more statusPLAN
(Query+Storage) Query apache/icebergIN PROGRESS
(Processor) OrderBy SpillIN PROGRESS
(Stability) Fast update/delete with fuse engineIN PROGRESS
(Stability) Query profilingIN PROGRESS
(Test) Longrun framework:BendRunIN PROGRESS

发布计划可能会根据开发进度有一些调整。欢迎参与讨论并提供反馈。

Issue #11868 | Release proposal: Nightly v1.3

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-06-25-databend-weekly

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

What's On In Databend

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

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

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

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

Code Corner

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

Databend 的 Python 绑定支持注册外部表

Databend 的 Python 绑定 现在支持注册外部表。你可以使用以下函数在 Python 绑定中注册外部表:

  • register_parquet
  • register_ndjson
  • register_csv
  • register_tsv

下面的例子展示了如何使用 register_parquet 函数在 Python 绑定中注册名为 ontime 的外部表:

from databend import SessionContext

ctx = SessionContext()

ctx.register_parquet("ontime", "./ontime/", pattern = ".*.parquet")

df = ctx.sql("select * from ontime limit 10").collect()

print(df)

这段代码将位于 ./ontime/ 目录中且符合模式 .*.parquet 的 Parquet 文件注册成名为 ontime 的外部表。你可以在 SQL 查询中使用已注册的表名 ontime 访问数据。

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

亮点

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

  • 支持使用 ALTER TABLE [ IF EXISTS ] <name> RENAME COLUMN <col_name> TO <new_col_name> 变更列名。
  • 为 TSV 格式实现列位置支持。
  • 新增 system.background_jobssystem.background_tasks 系统表。
  • 通过 X-DATABEND-DEDUPLICATE-LABEL 标头实现为 HTTP API 支持去重。
  • 支持分布式删除。

What's Up Next

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

为 Databend 集群实现只读模式

Databend 正在计划为集群实现一个名为 “只读模式” 的新功能,这将改善用户的访问控制和资源分配。

一旦实现这一新功能,用户将能够为读取和写入操作分别创建单独的集群。只读模式有助于防止集群中存在可能会导致数据丢失或损坏的意外写入。同时,由于减少了写入操作,可能会提高只读模式下的集群性能。

Issue #11836 | feat: read-only mode for Databend clusters

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-06-18-databend-weekly

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

What's On In Databend

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

后台服务

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

先前的实现需要使用不同的驱动,增加了基础设施的复杂性。而且必须部署和维护其他服务来触发驱动事件。为简化这一过程,我们实现了一个后台服务,允许 Databend 执行后台单次作业或以守护进程模式运行 cron 作业。这些作业可以根据条件触发自动压缩/清理/重聚类等表维护任务,而无需其他服务介入。

此实现包括:

  1. 完整的 metasrv 模式定义,以及后台作业与后台任务的设计实现。
  2. 用于在元服务上更新和维护后台作业与后台任务状态的 API 。
  3. 支持 one_shotintervalcron 等不同作业类型的作业调度器实现。

后台服务 需要升级至 企业版 。如需了解升级信息,请联系 Databend 团队

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

Code Corner

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

IceLake - Iceberg 的纯 Rust 实现

Iceberg 是为分析数据集设计的开放表格式标准。然而,目前 Rust 生态中缺乏成熟的 Iceberg 绑定,使其难以与像 Databend 这样的数据库系统集成。

IceLake 旨在填补这一空白,其致力于建立一个开放生态系统:

  • 用户可以从 任何 存储服务(如 s3、gcs、azblob、hdfs 等)读写 Iceberg 表。
  • 任何 数据库都可以集成 icelake,以支持读写 Iceberg 表。
  • 提供原生的 arrow 格式互转换的能力。
  • 提供多种语言绑定,使其他语言可以享有 Rust 核心带来的 Iceberg 生态支持。

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

Highlights

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

  • 新增对 MERGE JOIN 的支持。
  • 为 CSV 格式实现列位置支持。
  • 阅读 Docs | Computed Columns 以了解如何使用计算列,以及在选择使用何种类型计算列时的一些考量。
  • 阅读 Docs | Subquery-Based Deletions 以理解如何使用子查询和比较运算实现删除。

What's Up Next

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

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.rs/i-m-feeling-lucky 来挑选一个随机问题,祝好运!

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-06-11-databend-weekly

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

What's On In Databend

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

列位置

Databend 现在支持 $N 这一语法,用来表示列位置,例如:$2 意味着匹配第 2 列。Databend 也支持在 SQL 语句中将列位置和列名结合使用。下面是一个简单的例子:

CREATE TABLE IF NOT EXISTS t1(a int, b varchar);
INSERT INTO t1 values (1, 'a'), (2, 'b');
select $1, $2, a, b from t1;

┌─────────────────────────────────┐
│ $1 │ $2 │ a │ b │
│ Int32 │ String │ Int32 │ String │
├───────┼────────┼───────┼────────┤
│ 1 │ a │ 1 │ a │
│ 2 │ b │ 2 │ b │
└─────────────────────────────────┘

我们正在为 SELECT FROM @stage 添加列位置支持。目前,你可以在 NDJSON 格式上尝试这一新特性。其他格式的支持还在进行中。

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

COPY INTO my_table FROM (SELECT $1 SELECT @my_stage t) FILE_FORMAT = (type = NDJSON)

需要注意的是,在 Databend 中使用 SELECT 语句处理 NDJSON 格式文件时,只允许使用 $1 表示整行数据,并且其数据类型为 Variant 。

-- Select the entire row using column position:
SELECT $1 FROM @my_stage (FILE_FORMAT=>'ndjson')

--Select a specific field named "a" using column position:
SELECT $1:a FROM @my_stage (FILE_FORMAT=>'ndjson')

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

Code Corner

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

了解 Databend 的持续集成工作流 - 拼写检查

Databend 现在有一组非常复杂的持续集成工作流,用于代码审计、测试、benchmark 和发布。拼写检查无疑是其中最简单的部分。

与其他工作流一样,我们使用 actions/checkout 检出代码。

- uses: actions/checkout@v4
with:
clean: "true"

typos-cli 是一个用 Rust 编写的拼写检查工具,快速、准确,适用于像 Databend 这样的大型单一代码库,并且非常适用于针对 PR 的检查。

- uses: baptiste0928/cargo-install@v1
with:
crate: typos-cli
args: --locked
cache-key: typos-check

使用 baptiste0928/cargo-install 可以轻松安装依赖,它几乎和 cargo install 保持一致,只是需要遵循 GitHub actions 的风格。另外,它还提供自动缓存支持,能够加速后续构建。

- name: do typos check with typos-cli
run: typos

需要注意的是,虽然 crate 的名字是 typos-cli ,但是对应二进制可执行程序的名字是 typos

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

亮点

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

What's Up Next

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

在 REST API 中添加去重标签字段

为了确保数据摄取是幂等操作,Databend 使用去重标签来支持 DML 的去重。你可以在 Docs | Setting Commands - SET_VAR 中找到关于此功能的更多信息。

为了方便跨语言驱动程序集成,我们可以在 REST API 中添加去重标签字段。

Issue #11710 | Feature: support to bring deduplication label on stage attachment api

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-06-04-databend-weekly

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

What's On In Databend

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

虚拟列

查询 JSON 内部字段的优化方法之一是使用虚拟列。

首先,使用 CREATE VIRTUAL COLUMN 为这些字段创建虚拟列。创建虚拟列后,可以使用 GENERATE VIRTUAL COLUMN 函数生成虚拟列。完成这些步骤后,就可以通过相应的虚拟列直接访问 JSON 内部字段中的数据。

Databend 现在支持用于创建、删除、生成和修改虚拟列的一系列 SQL 语法。下面是一个简单的例子:

create table test (id int, val json);
insert into test values(1, '{"a":33,"b":44}'),(2, '{"a":55,"b":66}');
create virtual columns (val['a'], val['b']) for test;
generate virtual columns for test;
select val['a'], val['b'] from test;
+----------+----------+
| val['a'] | val['b'] |
+----------+----------+
| 33 | 44 |
| 55 | 66 |
+----------+----------+

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

Code Corner

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

由 AskBend 驱动的交互式文档

你还记得 AskBend 吗?AskBend 是使用 Rust 编写的知识库问答系统,由 Databend 和 OpenAI 强力驱动,可以根据 Markdown 文件创建基于 SQL 的知识库。

现在,我们已经将其集成到 Databend 官方网站中,为文档查询提供了交互式体验。

Alt text Alt text

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

亮点

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

What's Up Next

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

使用败者树优化排序算法

目前,Databend 的排序算法使用基于堆的归并排序。

多路合并有三种主要算法:堆排序、胜者树和败者树。在这三个算法中,每次对堆进行调整都需要与左右子节点进行比较。比较次数为2logN,而胜者树和败者树调整的比较次数为 logN 。

它们之间的区别在于,胜者树需要与兄弟节点进行比较并更新父节点,而败者树只需要与父节点进行比较,从而减少了内存访问次数。

Issue #11604 | Feature: Update sort algorithm using Loser Tree

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/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.indexesshow indexes 命令。
  • 新增对 Azure OpenAI API 的支持。
  • 新增位图相关函数:bitmap_and_countbitmap_or_countbitmap_xor_countsub_bitmapbitmap_subset_limit bitmap_subset_in_range
  • 新增窗口函数:lagleadfirst_valuelast_valuenth_value

What's Up Next

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

支持自定义字符集

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

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

Issue #11567 | Feature: Support custom character sets

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-05-21-databend-weekly

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

What's On In Databend

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

计算列

计算列(Computed Columns)使用其他列的标量表达式计算得来。有两种类型的计算列:存储计算列和虚拟计算列。

存储计算列在按行插入数据时计算并存储结果值。可以使用以下 SQL 语法创建存储计算列:

column_name <type> AS (<expr>) STORED

虚拟计算列在查询时进行计算,不会存储结果值。可以使用以下 SQL 语法创建虚拟计算列:

column_name <type> AS (<expr>) VIRTUAL

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

VACUUM TABLE

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

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

VACUUM TABLE 需要升级至 企业版 。如需了解升级信息,请联系 Databend 团队

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

Code Corner

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

为 Python 绑定启用缓存

Databend 支持数据缓存和查询结果缓存,可以有效加速查询。Databend 的 Python 绑定也支持这些特性,尽管有一些细微的差别。

对于查询结果缓存,可以使用 SQL 语句进行设置,非常方便。

>>> from databend import SessionContext 
>>> ctx = SessionContext()
>>> ctx.sql("set enable_query_result_cache = 1")

对于数据缓存,则可以通过环境变量来启用。

>>> import os 
>>> os.environ["CACHE_DATA_CACHE_STORAGE"] = "disk"
>>> from databend import SessionContext
>>> ctx = SessionContext()
>>> ctx.sql("select * from system.configs where name like '%data_cache%'")
┌────────────────────────────────────────────────────────────────────────────┐
│ group │ name │ value │ description │
│ String │ String │ String │ String │
├─────────┼──────────────────────────────────────────┼─────────┼─────────────┤
'cache''data_cache_storage''disk'''
'cache''table_data_cache_population_queue_size''65536'''
└────────────────────────────────────────────────────────────────────────────┘

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

亮点

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

  • 阅读 Docs | Date & Time - Formatting Date and Time 以了解如何精确控制时间和日期的格式。
  • 从 URI 加载数据时支持数据转换。
  • 为通过 HTTP API 执行 REPLACE INTO 语句支持 stage_attachment 字段。
  • 新增位图相关函数:bitmap_containsbitmap_has_allbitmap_has_anybitmap_or, bitmap_and, bitmap_xor等。
  • 支持整数除法运算符 //

What's Up Next

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

从 Meta 请求中删除 if_not_exists 字段

CreateIndexReq / CreateTableReq 这类 Meta 请求中,我们使用 if_not_exists 字段来表示索引/表是否已经存在。

pub struct CreateIndexReq {
pub if_not_exists: bool,
pub name_ident: IndexNameIdent,
pub meta: IndexMeta,
}

但是 if_not_exists 字段仅影响呈现给用户的结果,并不改变 Meta Services 的行为。

因此,对于 SchemaApi ,一个更好的设计方案可能是:提供 CreatedExist 状态代码以允许调用者确定是否需要生成错误消息。

Issue #11456 | Moving if_not_exists out of meta request body

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

New Contributors

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

  • @silver-ymz 为 Databend 新增了 5 个 bitmap 相关的标量函数,#11487
  • @Jake-00 帮忙修改 SOUNDS LIKE 语法的重复测试用例,#11503
  • @gitccl 为 Databend 新增了 5 个 bitmap 逻辑运算函数,并且修复了对空位图调用部分函数时的崩溃问题,#11507

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-05-14-databend-weekly

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

What's On In Databend

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

改进 Databend 的 Segment Cache 内存使用率

本周 Databend 的 Segment Cache 得到了显著升级,其内存使用量降低到测试场景中先前使用量的 1.5/1000 。

本次升级引入名为 CompactSegmentInfo 的 Segment 表示形式,主要由两个组件组成:

  • 解码后的 min / max 索引和其他统计信息。
  • 未解码(且压缩)的 RawBlockMeta 。

在对 Segment 剪枝时,如果要将某些 Segment 剪去,则无需解码其对应的 RawBlockMeta 。而对于没有剪去的 Segment ,它们对应的 RawBlockMeta 会即时解码并用于 Block 剪枝和扫描(在不再需要时删除)。

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

Code Corner

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

databend 的 Python 绑定

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

pip install databend

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

from databend import SessionContext
ctx = SessionContext()

接着就可以调用 sql() 方法来执行 SQL 查询了:

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 集成到你的数据科学工作流中。

亮点

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

  • 阅读 Transform Data During Load 中新增的两篇教程,了解如何在加载过程中执行算术运算以及将数据加载到带有冗余列的表中。
  • 阅读 Working with Stages 系列文档以深入了解 Stage 并学习如何有效地管理和使用 Stage 。
  • 新增函数:date_formatstr_to_datestr_to_timestamp

What's Up Next

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

将 open-sharing 二进制文件添加到 Databend 镜像中

Open Sharing 是由 Databend 团队设计的一种用于多云环境的、廉价且安全的数据共享协议。Databend 提供了租户级别的 sharing endpoint 实现,名为 open-sharing 。 阅读 databend | sharing-endpoint - README.md 以获取更多信息。

为了方便使用 K8s 或 Docker 部署 open-sharing 实例,建议将其添加到 Databend 的 docker 镜像中。

Issue #11182 | Feature: added open-sharing binary in the databend-query image

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-05-07-databend-weekly

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

What's On In Databend

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

WHERE 子句中使用列别名

列别名提供了一种为结果集创建清晰、更具描述性的标题的方法。

Databend 现在支持在 WHERE 子句中使用列别名。

> select number * 2 as number from numbers(3) where (number + 1) % 3 = 0;
┌────────┐
│ number │
│ UInt64 │
├────────┤
4
└────────┘

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

databend-metactl 现已随 Databend 发布

databend-metactl 是一个命令行工具,可以辅助用户管理 Databend Meta Service 集群。它可以用于备份和恢复元数据。

现在,databend-metactl 将与 Databend 一起发布,无需手动构建。

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

Code Corner

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

解决 databend-meta 连接问题和 Invalid semver 错误

在编译和运行 Databend 时,可能会遇到与 databend-meta 的连接问题,并收到包含 “Invalid semver” 的错误消息。由于 Databend 使用语义版本控制进行协议兼容性检查,在 git tags 不匹配时将会产生错误。

可以使用命令 git fetch https://github.com/datafuselabs/databend.git --tags 从官方 Databend 存储库中获取最新的 tag ,以确保使用最新版本的 databend-meta 并通过版本检查。

亮点

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

  • 优化器现已支持常量折叠,查看 PR #11216 了解更多信息。
  • 阅读文档 Transform Data During Load 中的三个简短教程,了解如何在数据导入过程中进行转换。
  • 新增 bitmap 函数:bitmap_countbuild_bitmap

What's Up Next

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

引入超时机制以控制查询优化时间

优化具有大量 Join 的复杂查询可能是一个耗时的任务。为了避免对整个查询计划空间进行详尽搜索,可以为优化设置超时。

超时可以基于逻辑时间,例如应用的转换规则数量,而不是基于实际时间。一旦到达阈值,可以执行贪心搜索,而不是生成新的转换规则。

Issue #11133 | Introduce timeout mechanism to control the query optimization time

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-04-30-databend-weekly

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

What's On In Databend

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

新数据类型:BITMAP

Databend 新增对 BITMAP 数据类型的支持。

BITMAP 是一种压缩数据结构,可用于高效地存储和操作布尔值集合,常用于加速去重计数。

> CREATE TABLE IF NOT EXISTS t1(id Int, v Bitmap) Engine = Fuse;
> INSERT INTO t1 (id, v) VALUES(1, to_bitmap('0, 1')),(2, to_bitmap('1, 2')),(3, to_bitmap('3, 4'));
> SELECT id, to_string(v) FROM t1;

┌──────────────────────┐
│ id │ to_string(v) │
│ Int32 │ String │
├───────┼──────────────┤
│ 1 │ 0,1 │
│ 2 │ 1,2 │
│ 3 │ 3,4 │
└──────────────────────┘

Databend 中的 BITMAP 数据类型实现使用 RoaringTreemap 。与其他位图实现相比,使用这种数据结构可以提高性能并减少内存使用。

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

设计并实现新的哈希表以改善 Hash Join 性能

此前 Databend 为聚合函数优化了哈希表实现,但这一实现并不适用于 Hash Join 。为了进一步提高 Hash Join 的性能,团队设计并实现了一个专门为此优化的哈希表。

哈希表的大小会根据构建阶段的行数进行分配,值类型也会替换为支持 CAS 操作的指针,从而确保内存控制而无需进行 Vec 增长。

新的实现显著提高了性能。查看下面的资源以获取更多信息:

Code Corner

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

Rust 编译挑战和解决方案 - 编译时间篇

在复杂的项目依赖和样板代码堆积之下,对于 Databend 这样的中大型 Rust 程序而言,编译实在算不上是一件轻松的事情。

为了解决编译时间上面临的一些挑战,Databend 团队从可观测性、编译工具链与配置和代码重构等方面入手,进行了一系列针对性的优化。

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

亮点

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

What's Up Next

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

寻找函数开发贡献者

Databend 现在正在积极推进函数的实现和改进工作,我们期待你的帮助!

目前计划补全的函数共有 4 类,非常适合对数据库设计和实现感兴趣的同学:

如果你对编写函数感兴趣,但不知如何下手,可以参阅下面的两篇文档了解如何编写标量函数和聚合函数:

期待能够与你共同协作,推动函数的进一步完善。

Issue #11220 | Tracking: functions

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-04-22-databend-weekly

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

What's On In Databend

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

元数据优化

最近,Databend 的元数据文件版本更新至 v3 ,序列化/反序列化效率进一步提高,同时降低了存储空间消耗。新元数据文件的体积可减少为原来的 1/20 ,并且性能提高 2 倍!

通过使用 Bincode ,新的元数据格式能够以紧凑高效的方式序列化数据。这可以大大改善读取速度,并减少存储文件的大小。此外,通过使用 Zstd 压缩,能够进一步减少文件大小,同时保持较快的解压速度。

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

Code Corner

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

自定义链接器脚本进行静态链接

静态链接在需要部署到具有依赖限制的系统中时会显得非常有用。

参照 @dl00@bossmc 的建议,创建自定义链接器脚本可以解决一些非预期行为。

#!/bin/bash

args=()

for arg in "$@"; do
if [[ $arg = *"Bdynamic"* ]]; then
args+=() # we do not want this arg
elif [[ $arg = *"crti.o"* ]]; then
args+=("$arg" "-Bstatic")
elif [[ $arg = *"crtn.o"* ]]; then
args+=("-lgcc" "-lgcc_eh" "-lc" "/usr/local/lib/gcc/${MUSL_TARGET}/9.4.0/crtendS.o" "$arg")
else
args+=("$arg")
fi
done

echo "RUNNING WITH ARGS: ${args[@]}"
/usr/local/bin/${MUSL_TARGET}-g++ "${args[@]}"

这个 bash 脚本根据静态链接的需要对参数进行了调整。虽然这个解决方案可能不是完美的,但可能对解决跨平台应用分发问题有一些帮助。

亮点

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

  • 阅读文档 Deploying Databend on Docker 了解如何用 Docker 部署具备 MinIO 存储后端的 Databend 。
  • REPLACE INTO 语句现在支持带集群键的表。
  • 新增窗口函数 percent_rank
  • 新增 JSON path 函数: jsonb_path_query_first,jsonb_path_query,jsonb_path_query_array.
  • 为字符串比较新增 SOUNDS LIKE 语法。
  • Meta Service 拆分日志存储和状态机存储。
  • 根据虚拟列 _row_id 进行惰性物化(Lazy Materialize)。

What's Up Next

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

聚合索引

数据仓库中的近似查询可以重用缓存的数据以减少 IO 开销,但缓存在容量和实时性方面存在限制,并且无法解决增量计算问题。

为了解决这些挑战,OLAP 中的预聚合技术是减少数据冗余的有效方法。通常会使用物化视图来实现预聚合。Databend 计划引入聚合索引,以二级索引的方式实现物化视图。

Issue #11183 | Tracking: aggregating index feature

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-04-15-databend-weekly

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

What's On In Databend

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

Databend v1.1 正式发布

Databend v1.1.0 已于 2023 年 4 月 14 日正式发布!这次发布标志着 Databend 自 1.0 版本以来的首次重大更新。

新版本有许多新功能,包括:

  • COPY INTO 现在具备 ETL 能力
  • 支持全部 TPC-DS 查询
  • REPLACE INTO
  • 窗口函数
  • 可视化工具集成:包括 Metabase , Redash 和 Grafana
  • Rust 驱动程序
  • AI 函数
  • AskBend - 知识库问答系统

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

新增 AI 相关配置

Databend 添加了新的 AI 相关配置,允许使用不同的端点和模型。

这意味着它可以与其他服务轻松集成,包括 Azure OpenAI API 。此外,可以根据需要灵活配置对应的模型以平衡表现和成本。

| "query"   | "openai_api_base_url"                      | "https://api.openai.com/v1/"     | ""       |
| "query" | "openai_api_completion_model" | "text-embedding-ada-002" | "" |
| "query" | "openai_api_embedding_model" | "gpt-3.5-turbo" | "" |

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

Code Corner

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

bendsql - Databend 原生命令行工具

以前我们已经介绍过 bendsql ,是一款用 Go 语言编写的 Databend 原生客户端。现在它正在用 Rust 语言重写,目前处于实验性阶段。

Rust 版本不仅支持 REST API,还支持 Flight SQL 。

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 的更新!欢迎试用并给我们反馈。如果你想要了解更多信息,请查看下面列出的资源。

亮点

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

  • Databend 利用 RBAC 模型来保护您的数据。阅读 文档 | 访问控制权限 ,了解 Databend 中的全局权限和对象特定权限。
  • 添加 array_aggregate 函数并支持更多数组聚合函数,包括 stddev_sampstddev_popstddevstdmedianapprox_count_distinctkurtosisskewness
  • 添加系统表 system.caches 来描述 Databend 中的缓存状态。
  • Databend 最近引入了 z3.rs 来解决约束问题。Z3 是微软研究院开源的定理证明器,通常用于解决 SMT 问题。

What's Up Next

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

发布提案:Nightly v1.2

Databend v1.2 计划于 5 月 15 日发布,预期包括以下功能:

TaskStatusComments
(Query) JSON indexing#6994IN PROGRESShigh-priority
(Query) Fulltext index#3915IN PROGRESShigh-priority
(Query+Storage) Merge Into#10174PLANhigh-priority
(Query)Window function#10810IN PROGRESS
(Query)Distributed COPY#8594PLAN
(Query)Lambda function and high-order functionsPLAN
(Storage) Fuse engine re-clusteringPLANhigh-priority
(Storage) Fuse engine segment treeIN PROGRESShigh-priority
(Storage) Fuse engine orphan data cleanupIN PROGRESShigh-priority
(Storage) Compress Fuse meta data#10265IN PROGRESShigh-priority
Embedding Model #10689IN PROGRESShigh-priority
Search optimization SQL framworkIN PROGRESS
Distributed group by with dictonaryIN PROGRESS
Add Column-Level dynamic data masking supportPLAN

发布计划可能会根据开发进度有一些调整。欢迎参与讨论并提供反馈。

Issue #11073 | Release proposal: Nightly v1.2

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-04-08-databend-weekly

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

What's On In Databend

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

Support Eager Aggregation

Eager Aggregation 是一种查询优化技术,它可以部分地将 Group By 推到 Join 之前,减少了 Join 的输入行数,因此可能会生成更好的整体计划。

Databend 最近添加了对 Eager Aggregation 的支持。以下是它的一个示例:

Input:
expression
|
aggregate: SUM(x), SUM(y)
|
join
| \
| (y)
|
(x)
(1) Eager Groupby-Count:
expression
|
final aggregate: SUM(eager SUM(x)), SUM(y * cnt)
|
join
| \
| (y)
|
eager group-by: eager SUM(x), eager count: cnt
(2) Eager Split:
expression
|
final aggregate: SUM(eager SUM(x) * cnt2), SUM(eager SUM(y) * cnt1)
|
join
| \
| eager group-by: eager SUM(y), eager count: cnt2
|
eager group-by: eager SUM(x), eager count: cnt1

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

Support All TPC-DS Queries

Databend 现已支持所有 TPC-DS 查询!

TPC-DS 是一个面向决策支持系统的包含多维度常规应用模型的决策支持基准,它对决策支持系统的几个普遍适用方面进行建模,包括查询和数据维护。TPC 基准测试的目的是为行业用户提供相关、客观的性能数据。

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

Code Corner

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

databend-driver - A driver for Databend in Rust

Databend 社区目前为 Databend 开发了 Rust Driver。现在,你可以使用 Rust 来轻松连接 Databend 并执行 SQL 查询。

下面是一个使用该驱动程序的例子:

use databend_driver::new_connection;

let dsn = "databend://root:@localhost:8000/default?sslmode=disable";
let conn = new_connection(dsn).unwrap();

let sql_create = "CREATE TABLE books (
title VARCHAR,
author VARCHAR,
date Date
);";
conn.exec(sql_create).await.unwrap();
let sql_insert = "INSERT INTO books VALUES ('The Little Prince', 'Antoine de Saint-Exupéry', '1943-04-06');";
conn.exec(sql_insert).await.unwrap();

欢迎尝试并给我们一些反馈。如果你想要了解更多信息,请查看下面列出的资源。

AskBend - SQL-based Knowledge Base Search and Completion

AskBend 是使用 Rust 编写的知识库问答系统,由 Databend 和 OpenAI 强力驱动,可以根据 Markdown 文件创建基于 SQL 的知识库。

AskBend 能够自动根据内容生成 embeddings,可以帮助你轻松检索与问题最相关的信息。

下面是它的工作原理:

  1. 从目录中读取并解析 Markdown 文件。
  2. 将内容存储到 askbend.doc 表中。
  3. 使用 Databend Cloud 内置的 AI 能力为内容计算 embeddings。
  4. 当用户提问时,使用 ai_embedding_vector SQL 函数为之生成查询 embedding。
  5. 使用 cosine_distance SQL 函数找出最相关的文档内容。
  6. 利用 ai_text_completion SQL 函数,调用 OpenAI 的补全能力,生成合适的结果。
  7. 以 Markdown 格式输出最终结果。

如果您想了解有关 AskBend 的更多信息或尝试现有的实时演示,请参阅下面列出的资源:

亮点

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

  • 新增聚合函数:QUANTILE_DISCKURTOSISSKEWNESS
  • 阅读文档 Docs - AI Functions 了解关于 Databend 中 AI 函数的一切。

What's Up Next

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

为 Databend 增加针对可为空表结构的测试

目前,Databend 表结构默认情况下不可为空。因此,几乎所有测试表结构都不可为空。

我们需要在 Databend 中添加一些新的测试用例,以覆盖表结构可为空的情况。

Issue #10969 | test: add some tests which table schemas are nullable

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-04-01-databend-weekly

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

What's On In Databend

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

聚合窗口函数

聚合窗口函数是指将聚合函数应用于窗口中的每一行数据的函数。OVER 子句指定如何将结果集中的行分区。当与GROUP BY一起使用时,聚合窗口函数不会折叠行,而是返回结果集中的所有行。

-- use aggrerate window function
SELECT date, AVG(amount) over (partition by date)
FROM BookSold

June 21|544.0
June 21|544.0
June 22|454.5
June 22|454.5
June 23|643.0
June 23|643.0

Databend 所支持的所有聚合函数都可以作为聚合窗口函数。

在拼写错误时建议函数名称

Databend 近期新增一项用于提高使用体验的智能提示功能,当输入不正确的函数名称时,可以自动提示最接近匹配项。

#> select base64(1);
ERROR 1105 (HY000) at line 1: Code: 1008, displayText = error:
--> SQL:1:8
|
1 | select base64(1)
| ^^^^^^^^^ no function matches the given name: 'base64', do you mean 'to_base64'?

Code Corner

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

转储运行中的异步任务栈

Databend 现在支持转储正在运行的异步任务栈。只需访问 http://<admin_api_address>/debug/async_tasks/dump 即可在浏览器中捕获它。

Dump Running Async Task Stack

调用 async_backtrace::taskdump_tree 函数可以获取异步任务树(由 #[async_backtrace::framed] 收集)的相关信息。

    let tree =
async_backtrace::taskdump_tree(req.map(|x| x.wait_for_running_tasks).unwrap_or(false));

任务分为常规任务和轮询任务(标记为 [POLLING])。记录每个任务的栈信息,并按栈深度排序输出到字符串。

    for mut tasks in [tasks, polling_tasks] {
tasks.sort_by(|l, r| Ord::cmp(&l.stack_frames.len(), &r.stack_frames.len()));

for item in tasks.into_iter().rev() {
for frame in item.stack_frames {
writeln!(output, "{}", frame).unwrap();
}

writeln!(output).unwrap();
}
}

如果你想要了解其工作原理,可以访问下面的链接:

与 Jupyter Notebook 集成的新方法

正如 Doc | Visualization Databend Data in Jupyter Notebook 所述,我们可以使用 Jupyter Notebook 探索 Databend 中的数据。

然而,通过 magic 技巧和 ipython-sql ,我们可以提供另一种交互方式。这种方式使得 SQL 查询看起来像是在 SQL cells 中运行,而不需要维护用于集成的 Python 样板代码。

安装依赖

pip install ipython-sql databend-sqlalchemy

与 Jupyter Notebook 协同

In [1]: %load_ext sql

In [2]: %%sql databend://{username}:{password}@{host_port_name}/{database_name}?secure=false
...: SHOW DATABASES;

In [3]: result = %%sql SELECT * FROM numbers(100);

In [4]: %matplotlib inline
...: df = result.DataFrame()
...: df.plot()

亮点

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

  • 通过选择预配置的 MySQL 驱动程序或添加 Databend JDBC 驱动程序,现在可以 使用 DBeaver 连接到 Databend
  • Databend 现已提供与 Redash 的集成,帮助你洞见数据。文档 | Integrations - Redash
  • 掌握如何显示给定表中的列信息。 文档 | SHOW COLUMNS
  • Databend 现在支持 generate_seriesrange 表函数。
  • Databend 现在支持 ai_embedding_vector 函数,该函数返回由 OpenAI Embeddings API 生成的 1536 维 f32 向量。
  • Databend 增加了对 DDL [CREATE | DROP | SHOW] SHARE ENDPOINT 的支持。

What's Up Next

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

收集来自 Sled 的度量信息

sled 是一种嵌入式数据库,启用 metrics 特性后可以导出度量信息。

Databend Meta Service 使用 sled 作为底层存储引擎。我们希望获取更多的度量信息来提高可观测性,并进一步优化。

Issue #7233 | make use of sled metrics feature for collect sled metrics

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-03-24-databend-weekly

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

What's On In Databend

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

FlightSQL 协议支持正在进行中

FlightSQL 是一种创新的开放式数据库协议,适用于现代架构。面向列设计,并提供对数据分区并行处理的无缝支持。

支持 FlightSQL 的好处包括减少不必要的序列化和反序列化,以及使用预定义的 *.proto 文件轻松支持不同语言的 SDK 实现。

Databend 正在积极开发对 FlightSQL 的支持。如果你对此感兴趣,请参考以下链接:

将自然语言转换为 SQL

通过与流行的 AI 服务集成,Databend 现在提供一个高效的内置解决方案 - AI_TO_SQL 函数。

该函数可以将自然语言编写的指令转换为与表模式对齐的 SQL 查询语句。只需进行少量修改(或可能根本不需要),即可投入生产。

SELECT * FROM ai_to_sql(
'List the total amount spent by users from the USA who are older than 30 years, grouped by their names, along with the number of orders they made in 2022',
'<openai-api-key>');
*************************** 1. row ***************************
database: openai
generated_sql: SELECT name, SUM(price) AS total_spent, COUNT(order_id) AS total_orders
FROM users
JOIN orders ON users.id = orders.user_id
WHERE country = 'USA' AND age > 30 AND order_date BETWEEN '2022-01-01' AND '2022-12-31'
GROUP BY name;

该函数现在可在 Databend 和 Databend Cloud 上使用。要了解其工作原理,请参阅以下链接:

Code Corner

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

向量相似度查询

Databend 最近新增 cosine_distance 函数。输入是两个类型为 f32 的 slice。

select cosine_distance([3.0, 45.0, 7.0, 2.0, 5.0, 20.0, 13.0, 12.0], [2.0, 54.0, 13.0, 15.0, 22.0, 34.0, 50.0, 1.0]) as sim
----
0.8735807

底层的 Rust 实现利用 ndarray crate 中的 ArrayView 类型高效地执行计算。

pub fn cosine_distance(from: &[f32], to: &[f32]) -> Result<f32> {
if from.len() != to.len() {
return Err(ErrorCode::InvalidArgument(format!(
"Vector length not equal: {:} != {:}",
from.len(),
to.len(),
)));
}

let a = ArrayView::from(from);
let b = ArrayView::from(to);
let aa_sum = (&a * &a).sum();
let bb_sum = (&b * &b).sum();

Ok((&a * &b).sum() / ((aa_sum).sqrt() * (bb_sum).sqrt()))
}

你还记得怎么将 scalar functions 集成到 Databend 中吗?可以查看 Doc | How to Write a Scalar FunctionPR | #10737 验证你的答案。

亮点

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

What's Up Next

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

启用 -Zgitoxide 以加速 Git 依赖下载

启用 -Zgitoxide 可以显著加快我们 Git 依赖的下载速度,比仅使用 Git 要快得多。

此特性可以将 cargogitoxide 集成,后者是一个纯 Rust 实现的 Git 版本控制系统,具有易用、精简、高效和安全等特点。

Issue #10466 | CI: Enable -Zgitoxide to speed our git deps download speed

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-03-17-databend-weekly

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

📢 Databend 不再依赖 max_storage_io_requests 设置进行 IO 预读,我们建议使用 v1.0.17-nightly 之后的版本用户,执行 unset max_storage_io_requests 以减少不必要的内存占用。

What's On In Databend

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

Data Type: MAP

MAP 数据结构使用嵌套的 Array(Tuple(key, value)) 来保存键值对。键必须指定为基本数据类型,并且不允许重复;而值可以是任何数据类型,包括嵌套数组或元组。Databend 还会为 MAP 创建布隆过滤器索引,搜索 MAP 中的值会更加快速。

select * from nginx_log where log['ip'] = '205.91.162.148';
+----+----------------------------------------+
| id | log |
+----+----------------------------------------+
| 1 | {'ip':'205.91.162.148','url':'test-1'} |
+----+----------------------------------------+

如果你想了解更多关于 MAP 数据类型的信息,请阅读以下材料:

Data Transformation During Loading Process

你还记得上周提到的两个 RFC 吗?现在,Databend 已经支持在加载数据到表的过程中进行数据转换。使用 COPY INTO <table> 命令即可实现基本的转换操作。

CREATE TABLE my_table(id int, name string, time date);

COPY INTO my_table
FROM (SELECT t.id, t.name, to_date(t.timestamp) FROM @mystage t)
FILE_FORMAT = (type = parquet) PATTERN='.*parquet';

该功能可以避免在临时表中存储预转换数据,并支持列重新排序、列省略和类型转换操作。此外,可以从 Stage 中的 Parquet 文件加载部分数据或者对其列进行重新排列。该功能简化和优化了 ETL 过程,使用户能够更加关注数据分析而不必考虑如何移动他们的数据。

如果你对这一特性感兴趣,可以查阅下面列出的材料:

Code Corner

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

Run Multiple Futures Parallel

你对并行运行多个 Future 感兴趣吗?Databend 利用这种方法极大地改善了在大量文件情况下的扫描性能。

下面这段不到 30 行的代码将会揭示如何实现这一技巧。

/// Run multiple futures parallel
/// using a semaphore to limit the parallelism number, and a specified thread pool to run the futures.
/// It waits for all futures to complete and returns their results.
pub async fn execute_futures_in_parallel<Fut>(
futures: impl IntoIterator<Item = Fut>,
thread_nums: usize,
permit_nums: usize,
thread_name: String,
) -> Result<Vec<Fut::Output>>
where
Fut: Future + Send + 'static,
Fut::Output: Send + 'static,
{
// 1. build the runtime.
let semaphore = Semaphore::new(permit_nums);
let runtime = Arc::new(Runtime::with_worker_threads(
thread_nums,
Some(thread_name),
)?);

// 2. spawn all the tasks to the runtime with semaphore.
let join_handlers = runtime.try_spawn_batch(semaphore, futures).await?;

// 3. get all the result.
future::try_join_all(join_handlers)
.await
.map_err(|e| ErrorCode::Internal(format!("try join all futures failure, {}", e)))
}

如果你对这个 Rust 技巧感兴趣,可以阅读这个 PR feat: improve the parquet get splits to parallel

How to Create a System Table

系统表用于提供 Databend 内部状态信息,例如表、函数和设置。

如果你对如何创建系统表感兴趣,可以查看我们最近发布的文档,使用 system.credits 表作为示例,展示如何实现、注册和测试系统表。

以下是部分代码片段:

let table_info = TableInfo {
desc: "'system'.'credits'".to_string(),
name: "credits".to_string(),
ident: TableIdent::new(table_id, 0),
meta: TableMeta {
schema,
engine: "SystemCredits".to_string(),
..Default::default()
},
..Default::default()
};

亮点

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

What's Up Next

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

Quantile 支持设置多个 Level

#10633 的实现中,已经支持传递多个 levels。但是 Issue 中提出的 kurtosis(x)skewness(x) 方法也可以视作为 Databend 贡献的一个好的开始。

在 PR #10474 合并后,Databend 开始支持 QUANTILE 聚合函数,但目前仅支持将单个浮点值设置为 level。如果它还可以支持传递多个参数,或传递列表作为参数,则可能有助于简化某些情况下的 SQL 编写。

SELECT QUANTILE([0.25, 0.5, 0.75])(number) FROM numbers(25);
+-------------------------------------+
| quantile([0.25, 0.5, 0.75])(number) |
+-------------------------------------+
| [6, 12, 18] |
+-------------------------------------+

Feature: quantile support list and add functions kurtosis() and skewness()

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/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.rs/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

Alt text

英文版移步:https://databend.rs/blog/2023-03-03-databend-weekly

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

What's New

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

Support for WebHDFS

HDFS 是大数据生态中流行的分布式文件系统,也是 Databend 支持的存储后端之一。但要在此前的实现中,如果要访问 HDFS 存储后端就不得不依赖 Java 环境和特定的 jar 包,不太方便。

WebHDFS 是一种 REST API,通过 HTTP 提供 HDFS 操作接口,Databend 现在支持使用 WebHDFS 作为存储后端,不再需要使用 Java 环境,使用起来会更加方便。

#> CREATE STAGE IF NOT EXISTS whdfs URL='webhdfs://127.0.0.1:9870/data-files/' CONNECTION=(HTTPS='false');
Query OK, 0 rows affected (0.020 sec)

#> CREATE TABLE IF NOT EXISTS books ( title VARCHAR, author VARCHAR, date VARCHAR );
Query OK, 0 rows affected (0.030 sec)

#> COPY INTO books FROM @whdfs FILES=('books.csv') file_format=(type=CSV field_delimiter=',' record_delimiter='\n' skip_header=0);
Query OK, 2 rows affected (0.615 sec)

#> SELECT * FROM books;
+------------------------------+---------------------+------+
| title | author | date |
+------------------------------+---------------------+------+
| Transaction Processing | Jim Gray | 1992 |
| Readings in Database Systems | Michael Stonebraker | 2004 |
+------------------------------+---------------------+------+
2 rows in set (0.044 sec)

如果你对 WebHDFS 的工作机制感兴趣,可以参阅下面列出的两个 Pull Requests:

Aggregation Spilling

大数据处理时需要解决的一个重要挑战是:如何高效、可靠地执行 Group By 和 Order By 操作。为了解决这个问题,Databend 社区正在开发一项新功能,它将会支持将中间结果溢出到像 AWS S3 这样的云对象存储。

这个功能落地后可以帮助 Databend 轻松处理涉及海量数据的 Group By 和 Order By 查询,而不会耗尽内存或影响性能。如果你对这个功能的原理和实现感兴趣,可以参阅这个 Pull Request:

Decimal Data Types

Databend 支持对多种数据类型的数据进行分析处理。近期的改进集中在 Decimal 类型上,该类型允许指定数值的精确度和计数方式。在财务计算等对高精度有依赖的场景,推荐使用 Decimal 类型。

-- Create a table with decimal data type.
create table decimal(value decimal(36, 18));

-- Insert two values.
insert into decimal values(0.152587668674722117), (0.017820781941443176);

select * from decimal;
+----------------------+
| value |
+----------------------+
| 0.152587668674722117 |
| 0.017820781941443176 |
+----------------------+

如果你对 Databend 的 Decimal 类型感兴趣,可以参阅这篇文档:

What's Up Next

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

编译时初始化 regex

federated_helper.rs 中使用了大量正则表达式来匹配查询。

use regex::bytes::RegexSet;

let regex_set = RegexSet::new(regex_rules).unwrap();
let matches = regex_set.matches(query.as_ref());

如果能在编译时初始化 regex ,可能会带来一些优化。

Issue 10286: Feature: make regexp initialized at compile time

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

New Contributors

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

Changelog

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

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

Alt text

英文版移步:https://databend.rs/blog/2023-02-22-databend-weekly

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

What's New

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

Features & Improvements ✨

AST

  • select from stage 支持带连接选项的 uri (#10066)

Catalog

  • 支持创建 Iceberg catalog (#9017)

Expression

  • decimal 类型支持聚合函数 min/max (#10085)
  • decimal 类型支持聚合函数 sum/avg (#10059)

Pipeline

  • 增强 pipelines processors 能力 (#10098)

Query

  • create stage, select stage, copy, infer_schema 支持具名文件类型 (#10084)
  • 查询结果缓存 (#10042)

Storage

  • 表数据缓存 (#9772)
  • drop all 中使用 drop_table_by_id API (#10054)
  • 原生存储格式支持嵌套数据类型 (#9798)

Code Refactoring 🎉

Meta

Cluster

Executor

  • 检查 processor graph 完成情况 (#10166)

Planner

  • 为物理计划构建器执行常量折叠 (#9889)

Query

  • 使用 AccumulatingTransform 实现单状态聚合器 (#10125)

Storage

  • 适配 OpenDAL 批删除支持 (#10150)
  • 适配 OpenDAL 基于查询的元数据缓存 (#10162)

Build/Testing/CI Infra Changes 🔌

Bug Fixes 🔧

Expression

  • 不再返回 Variant 作为公共超级类型 (#9961)
  • 允许从 string 和 variant 的自动类型转换 (#10111)

Cluster

  • 在集群模式下修复 limit 查询挂起 (#10006)

Storage

  • 修复包含 tuple 类型时的列统计错误 (#10068)
  • 增列后 compact 未按预期工作 (#10070)
  • 修复增列的 min/max 统计故障 (#10137)

What's On In Databend

请持续关注 Databend 的最新动态。

Query Result Cache

仅仅过去一周,Databend 现已支持查询结果缓存!

             ┌─────────┐ 1  ┌─────────┐ 1
│ ├───►│ ├───►Dummy───►Downstream
Upstream────►│Duplicate│ 2 │ │ 3
│ ├───►│ ├───►Dummy───►Downstream
└─────────┘ │ │
│ Shuffle │
┌─────────┐ 3 │ │ 2 ┌─────────┐
│ ├───►│ ├───►│ Write │
Upstream────►│Duplicate│ 4 │ │ 4 │ Result │
│ ├───►│ ├───►│ Cache │
└─────────┘ └─────────┘ └─────────┘

阅读下述材料以了解更多讯息

Table Data Cache

Databend 现在支持表数据缓存:

  • 磁盘缓存:DataBlock 的原始列(压缩)数据。
  • 内存缓存(实验性):DataBlock 的反序列化列对象。

对于缓存友好的工作负载,性能提升显着。

阅读下述材料以了解更多讯息

Deb Source & Systemd Support

Databend 现在提供官方的 Deb 软件源,并支持使用 systemd 管理服务。

对于 DEB822 源格式:

sudo curl -L -o /etc/apt/sources.list.d/datafuselabs.sources https://repo.databend.rs/deb/datafuselabs.sources
sudo apt update
sudo apt install databend
sudo systemctl start databend-meta
sudo systemctl start databend-query

阅读下述材料以了解更多讯息

What's Up Next

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

服务启动进度报告

启动 Query / Meta 节点时,有必要执行检查并将结果显式输出,以帮助用户诊断故障并确认节点 / 集群状态。

示例:

storage check succeed
meta check failed: timeout, no response. endpoints: xxxxxxxx .
status check failed: address already in use.

Issue 10193: Feature: output the necessary progress when starting a query/meta node

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

andylokandyariesdevilb41shBig-WuuBohuTANGcameronbraid
andylokandyariesdevilb41shBig-WuuBohuTANGcameronbraid
Chasen-ZhangClSlaiddantengskydrmingdrmereverpcpcjohnhaxx7
Chasen-ZhangClSlaiddantengskydrmingdrmereverpcpcjohnhaxx7
lichuangmergify[bot]PsiACERinChanNOWWWsoyeric128sundy-li
lichuangmergify[bot]PsiACERinChanNOWWWsoyeric128sundy-li
suyanhanxTCeasonXuanwoxudong963youngsofunzhang2014
suyanhanxTCeasonXuanwoxudong963youngsofunzhang2014
zhyass
zhyass

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2023-02-15-databend-weekly

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

What's New

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

Accepted RFCs 🛫

  • rfc: 查询结果缓存 (#10014)

Features & Improvements ✨

Planner

  • 支持 EXPLAIN ANALYZE 语句以剖析查询执行 (#10023)
  • 派生新过滤器并下推 (#10021)

Query

  • 变更表支持增删列 (#9851)
  • 新增表函数 infer_schema (#9936)
  • 为 select 增加权限检查 (#9924)
  • 改进带符号数值的键 (#9978)
  • 支持解析 jwt 元数据并添加多重身份颁发者配置 (#9971)
  • 支持创建文件格式 (#10009)

Storage

  • 适配 OpenDAL 的原生 scan 支持 (#9985)
  • 新增 drop_table_by_id API (#9990)

Expression

  • 新增 decimal 类型相关运算支持 (#9926)

Functions

  • 支持 array_any 函数 (#9953)
  • 支持 array_sort 函数 (#9941)

Sqllogictest

  • 为 alter table 增加 time travel 相关测试 (#9939)

Code Refactoring 🎉

Meta

  • 将应用层类型移动到 common-meta/app (#9944)
  • 修复 ErrorCode 滥用 (#10056)

Query

  • transform_sort_merge 使用 heap 来排序数据块 (#10047)

Storage

  • 引入 FieldIndex 和 ColumnId 类型以区分使用 (#10017)

Build/Testing/CI Infra Changes 🔌

  • 以 clickbench 结果格式返回基准测试结果 (#10019)
  • 在 s3 & fs 上均运行基准测试 (#10050)

Bug Fixes 🔧

Privilege

  • 为 PUBLIC 角色添加 SELECT 权限,以避免普通用户执行查询的权限问题 (#10040)

Catalog

  • 修复 parts 的不均匀分布 (#9951)

Planner

  • 修复子查询类型断言错误 (#9937)
  • 启用 outer join 到 inner join 优化 (#9943)
  • 修复 RulePushDownLimitOuterJoin (#10043)

Query

  • 修复增列更新错误 (#10037)

Storage

  • 修复:查询新增 tuple 列时,仅返回默认值 (#9973)
  • 在 bloom filter 中,索引绑定 Column Id (#10022)

What's On In Databend

请持续关注 Databend 的最新动态。

RFC: 查询结果缓存

对于不经常更新的数据,缓存其查询结果可以大大减少响应时间。一旦建立缓存,再次运行查询可以在短时间返回结果。

阅读下述材料以了解更多讯息

如何编写新的标量/聚合函数

创建自定义的标量或聚合函数可以增强 Databend 的可用性。尽管看上去有一些复杂,但并不困难。

下面列出的两篇文档有助于 Databend 用户和 Rust 开发者创建新的函数,包括如何创建并注册函数的分步说明,以及用于示例的代码片段,以帮助你更好了解这一过程。

阅读下述材料以了解更多讯息

Profile-Guided Optimization

Profile-guided optimization (PGO,有时会译作:概要分析指导的优化) 是一种编译器优化技术,可以在程序运行时收集执行数据,并针对冷/热代码路径进行优化。

这篇博客介绍了如何使用 PGO 技术优化 Databend 的二进制构建,并以 Databend 的 SQL 逻辑测试作为工作负载进行演示。

注意:PGO 总是要求使用在统计学上具有代表性的工作负载来生成 Perf 数据。然而,这种技术并不保证总能提高性能。是否使用这项技术需要取决于实际情况。

阅读下述材料以了解更多讯息

What's Up Next

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

重构函数相关文档

为了使文档更清晰、易于理解,我们计划重组与函数相关的文档,新的内容组织遵循与 DuckDB 文档样式。

目前这项任务已经按函数类别分解成了一系列易于完成的子任务,如果你对改进 Databend 的文档感兴趣,不妨参与进来。

Issue 10029: Tracking: re-org the functions doc

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

andylokandyb41shBig-WuuBohuTANGdantengskydependabot[bot]
andylokandyb41shBig-WuuBohuTANGdantengskydependabot[bot]
drmingdrmereverpcpcflaneur2020johnhaxx7leiyskylichuang
drmingdrmereverpcpcflaneur2020johnhaxx7leiyskylichuang
mergify[bot]PsiACERinChanNOWWWsoyeric128sundy-liTCeason
mergify[bot]PsiACERinChanNOWWWsoyeric128sundy-liTCeason
wubxXuanwoxudong963xxchanyoungsofunyufan022
wubxXuanwoxudong963xxchanyoungsofunyufan022
zhang2014ZhiHanZzhyass
zhang2014ZhiHanZzhyass

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2023-02-08-databend-weekly

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

What's New

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

Features & Improvements ✨

Meta

  • 新增 databend-meta 配置项 grpc_api_advertise_host (#9835)

AST

  • 支持在 select from stage 时选定文件或模式 (#9877)
  • 解析 decimal 类型 (#9894)

Expression

  • 新增 Decimal128Decimal256 类型 (#9856)

Functions

  • 支持 array_indexof (#9840)
  • 支持 array_uniquearray_distinct (#9875)
  • 支持数组相关聚合函数 (#9903)

Query

  • 在 TableSchema 中新增 column id; 并在读写数据时使用 column id 代替 index (#9623)
  • system.columns 中支持视图 (#9853)

Storage

  • ParquetTable 支持 topk 优化 (#9824)

Sqllogictest

  • 使用 sqllogictest 执行 TPCH 基准测试 (#9887)

Code Refactoring 🎉

Meta

  • 移除过时的 meta service API read_msg()write_msg() (#9891)
  • 引入 update_xx_with(id, f: FnOnce) 方法以简化 UserAPIRoleAPI (#9921)

Cluster

  • exchange source 拆分为 reader 和 deserializer (#9805)
  • 拆分并消除 exchange transform 和 sink 的状态 (#9910)

Functions

  • 重命名部分数组函数,添加 array_ 前缀 (#9886)

Query

  • TableArgs 保留必备参数和具名参数的信息 (#9917)

Storage

  • ParquetTable 列出 read_partition 中的文件 (#9871)

Build/Testing/CI Infra Changes 🔌

  • 支持为 PR 运行基准测试 (#9788)

Bug Fixes 🔧

Functions

  • 修复 Nullable 类型的 andor 的作用域计算 (#9928)

Planner

  • 修复 histogram_from_ndv 遇到错误回溯时导致 planner 过慢 (#9876)
  • 修复包含聚合函数的 order by (#9879)
  • 使用以子查询为条件的删除时防止 panic (#9902)

Query

  • 修复插入默认值的数据类型 (#9816)

What's On In Databend

请持续关注 Databend 的最新动态。

为什么你应该尝试 Sccache

Sccache 是一个由 Mozilla 团队发起、类似 ccache 的项目,提供对 C/CPP、Rust 和 其他语言的支持,能够将缓存存储到本地或云存储服务。社区在 Sccache 0.3.3 中新增对 Github Action Cache Service 的原生支持,近期发布的 v0.4.0-pre.6 中又进一步加强这一功能,现在已经可以在生产 CI 环境中使用。

现在,由 Datafuse Labs 开源的 opendal 充当 sccache 的数据访问层,以对接多种存储服务(s3、gcs、azlob 等)。

阅读下述材料以了解更多讯息

What's Up Next

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

尝试使用 build-info 重构 common-building 逻辑

使用 vergencargo-license 来获取关于 git 提交、构建选项以及上游依赖的信息。

build-info 可以收集 Rust crate 的构建信息。使用它来重构 common-building 中的相关逻辑可能会更好。

pub struct BuildInfo {
pub timestamp: DateTime<Utc>,
pub profile: String,
pub optimization_level: OptimizationLevel,
pub crate_info: CrateInfo,
pub compiler: CompilerInfo,
pub version_control: Option<VersionControl>,
}

Issue 9874: Refactor: Try using build-info

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

andylokandyariesdevilb41shBohuTANGdependabot[bot]drmingdrmer
andylokandyariesdevilb41shBohuTANGdependabot[bot]drmingdrmer
everpcpcflaneur2020johnhaxx7leiyskylichuangmergify[bot]
everpcpcflaneur2020johnhaxx7leiyskylichuangmergify[bot]
PsiACERinChanNOWWWsoyeric128sundy-liTCeasonXuanwo
PsiACERinChanNOWWWsoyeric128sundy-liTCeasonXuanwo
xudong963youngsofunzhang2014
xudong963youngsofunzhang2014

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2023-02-01-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

AST

  • 支持解析预签名内容类型 (#9771)

Format

  • 重新引入 TSV 文件格式支持 (#9732)

Functions

  • 支持数组函数 prepend 和 append (#9844)
  • 支持数组函数 concat (#9804)

Query

  • 在原生存储格式中支持 topN 运行时过滤 (#9738)
  • 允许 hashtable 状态从部分传递到最终 (#9809)

Storage

  • 在 EXPLAIN 添加 pruning 相关指标 (#9724)
  • 缓存 bloom index 对象 (#9712)

Code Refactoring 🎉

  • 'select from stage' 使用 ParquetTable (#9801)

Meta

  • 提取 "kvapi" 作为一组公共接口 (#9791)
  • 不允许移除集群中最后一个节点 (#9781)

AST/Expression/Planner

  • 统一 Span 和 Result (#9713)

Executor

  • 合并 simple pipe 和 resize pipe (#9782)

Bug Fixes 🔧

Base

  • 修复在非 linux 环境下,jemalloc 需要正确回滚到 std (#9786)

Config

  • 修复无法禁用 table_meta_cache 的问题 (#9767)

Meta

  • 将数据导入 meta-service 目录时,指定的 "id" 必须是 "initial_cluster" 之一 (#9755)

Query

  • 修复并重构 aggregator (#9748)
  • 修复 data port 的内存泄漏 (#9762)
  • 修复将 jsonb 转换到 string 时的 panic (#9813)

Storage

  • 修复 max_file_size 潜在的 oom (#9740)

What's On In Databend

请持续关注 Databend 的最新动态。

DML 命令 - UPDATE

用新值修改表中的某些行。

注意 Databend 保证数据完整性。在 Databend 中,Insert、Update 和 Delete 操作都是原子操作,这意味着操作中涉及的所有数据都必须全部成功,否则就会全部失败。

语法

UPDATE <table_name>
SET <col_name> = <value> [ , <col_name> = <value> , ... ]
[ FROM <table_name> ]
[ WHERE <condition> ]

阅读下述材料以了解更多相关讯息

What's Up Next

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

支持 Arrow Flight SQL 协议

目前 Databend 兼容 MySQL 协议和 Clickhouse HTTP 协议,如果 Databend 支持 Arrow Flight SQL 协议可能会更好。

通常情况下,Lakehouse 使用 MySQL 协议将数据存储到 Parquet 文件中。对 Databend 而言,存在额外的反序列化开销,从 Parquet 到 Arrow,然后再到返回的 MySQL 数据类型。同样,在调用方/终端用户使用 Data Frame 或 MySQL 结果迭代器的时候,同样需要对类型进行序列化。一旦支持 Arrow Flight SQL 协议,所有这些过程中的序列化/反序列化成本都可以避免。

Issue 9832: Feature: Support Arrow Flight SQL protocol

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

andylokandyariesdevilb41shBohuTANGdantengskydependabot[bot]
andylokandyariesdevilb41shBohuTANGdantengskydependabot[bot]
drmingdrmereverpcpcflaneur2020johnhaxx7leiyskymergify[bot]
drmingdrmereverpcpcflaneur2020johnhaxx7leiyskymergify[bot]
PsiACERinChanNOWWWsoyeric128sundy-liTCeasonXuanwo
PsiACERinChanNOWWWsoyeric128sundy-liTCeasonXuanwo
youngsofunyufan022zhang2014
youngsofunyufan022zhang2014

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2023-01-25-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

SQL

  • 消除多余的 group by 标量 (#9708)

Query

  • 支持对 insert/delete/optimize 行为进行权限检查 (#9664)
  • 启用空投影 (#9675)
  • 在最终聚合阶段增加聚合限制 (#9716)
  • create/alter view 语句中支持可选列名 (#9715)

Storage

  • 为原生存储格式增加 prewhere 支持 (#9600)

Code Refactoring 🎉

IO

  • 将 io 相关的常量移动到 common/io (#9700)
  • 重构 fuse/io/read (#9711)

Planner

  • Scalar 重命名为 ScalarExpr (#9665)

Storage

  • 重构缓存层 (#9672)
  • pruner.rs -> fuse_bloom_pruner.rs (#9710)
  • 将 pruner 从分层改成链式 (#9714)

Build/Testing/CI Infra Changes 🔌

  • 支持为 Docker 映像设置 minio 存储以及外置 s3 存储 (#9676)

Bug Fixes 🔧

Expression

  • 修复 simple_cast (#9671)

Query

  • 修复 efficiently_memory_final_aggregator 结果不稳定的问题 (#9685)
  • 修复 max_result_rows 只对输出结果数进行限制的问题 (#9661)
  • 修复 two level aggregator 可能会导致查询挂起的问题 (#9694)

Storage

  • 如果没有根据 output schema 排序,则可能获得错误的 datablocks (#9470)
  • bloom filter 使用了不正确的 cache key (#9706)

What's On In Databend

请持续关注 Databend 的最新动态。

Databend 多合一 Docker 映像

Databend Docker 映像现在支持设置 MinIO 存储和配置外置 AWS S3 存储。

现在你可以轻松使用该映像达成与 Databend 的初体验。

运行,使用 MinIO 存储后端

docker run \
-p 8000:8000 \
-p 9000:9000 \
-e MINIO_ENABLED=true \
datafuselabs/databend

运行,使用自定义配置

docker run \
-p 8000:8000 \
-e DATABEND_QUERY_CONFIG_FILE=/etc/databend/mine.toml \
-v query_config_file:/etc/databend/mine.toml \
datafuselabs/databend

阅读下述材料以了解更多讯息

What's Up Next

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

向量搜索

向量搜索(Vector Search)可以捕获非结构化数据的含义和上下文,通常用于文本和图像的处理,允许通过语义来检索相似结果,并且往往能够比传统的关键字检索取得更好的效果。

Databend 计划支持向量搜索,为用户提供更丰富和高效的查询手段,初步的解决方案可能包括集成 Faiss Index。

Issue 9699: feat: vector search (Faiss index)

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

andylokandyariesdevilb41shBohuTANGdantengskydependabot[bot]
andylokandyariesdevilb41shBohuTANGdantengskydependabot[bot]
everpcpcflaneur2020johnhaxx7leiyskymergify[bot]PsiACE
everpcpcflaneur2020johnhaxx7leiyskymergify[bot]PsiACE
RinChanNOWWWsandfleesundy-lixudong963zhang2014zhyass
RinChanNOWWWsandfleesundy-lixudong963zhang2014zhyass

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2023-01-18-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Meta

  • 使用 expressin::TableSchema 来替换过时的 datavalues::DataSchema (#9506)
  • iter() 迭代每棵树和每条记录 (#9621)

Expression

  • 实现其他地理函数 (#9588)

Optimizer

  • 基于直方图改进 JOIN 基数估计 (#9594)

Planner

  • 改进 JOIN 重排算法 (#9571)

Query

  • 支持带占位符的插入 (#9575)
  • 使用 set 设定设置时支持表达式 (#9574)
  • 为 sharding-jdbc 支持 information_schema (#9583)
  • 为表函数添加具名参数支持 (#9630)

Storage

  • read_parquet 页索引 (#9563)
  • 更新 interpreter 和 storage 支持 (#9261)

Code Refactoring 🎉

Meta

  • 移除无用的元数据类型和转换 (#9584)

Parser

  • 为 format_options 增加更严格的解析器 (#9635)

Expression

  • 重排 common_expression 和 common_function (#9585)

Build/Testing/CI Infra Changes 🔌

  • 使用预编译的二进制文件运行 sqllogictests (#9603)

Bug Fixes 🔧

Expression

  • 常量折叠应当反复运行直到稳定 (#9572)
  • 修复 check_date()to_string(boolean) 可能会 panic (#9561)

Planner

  • 修复应用 RuleFilterPushDownJoin 时的栈溢出 (#9645)

Storage

  • 修复带索引 range filter 的读统计 (#9619)

Sqllogictest

  • 修复 sqllogic test 在 cluster 模式 + clickhouse handler 的情况下可能会挂起的问题 (#9615)

What's On In Databend

请持续关注 Databend 的最新动态。

升级 Databend 集群到 v0.9

Databend Query v0.9 在元数据上引入了一些不兼容的变更,这些元数据需要以手动的方式进行迁移。

Databend 提供 databend-meta-upgrade-09 升级工具来完成这项工作,你可以在 release package 中找到预先构建好的二进制文件,也可以选择从源码完成构建。

升级

databend-meta-upgrade-09 --cmd upgrade --raft-dir "<./your/raft-dir/>"

阅读下述材料以了解更多讯息

Nightly v1.0 发布目标征集中

Databend v1.0 版本发布目标正在征集中。

目前计划的发布时间是 3 月份,主要会关注以下几个核心功能点:alter table, update, 和 group by spill

阅读下述材料以了解更多讯息

What's Up Next

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

为 Sqllogictest 实现类型检查机制

除了比对结果和检验是否查询成功,支持检查每一行中的每个元素的类型是否正确。

databend/tests/sqllogictests/src/client/mysql_client.rs

 // Todo: add types to compare 
Ok(DBOutput::Rows {
types,
rows: parsed_rows,

Issue 9647: Feature: Add type checker for sqllogictest

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

andylokandyariesdevilb41shBohuTANGdantengskydrmingdrmer
andylokandyariesdevilb41shBohuTANGdantengskydrmingdrmer
everpcpcleiyskymergify[bot]PsiACERinChanNOWWWsoyeric128
everpcpcleiyskymergify[bot]PsiACERinChanNOWWWsoyeric128
sundy-liTCeasonXuanwoxudong963youngsofunyufan022
sundy-liTCeasonXuanwoxudong963youngsofunyufan022
zhang2014zhyass
zhang2014zhyass

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2023-01-11-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Meta

  • 在 proto-conv 中新增 reader-min-msg-ver 和 msg-min-reader-ver (#9535)

Planner

  • 支持 tuple.1get(1)(tuple) (#9493)
  • 支持在 EXPLAIN 中显示行数估算 (#9528)

Query

  • 单机模式下更高效的两阶段聚合(Streaming Merge)(#9504)

Storage

  • read_parquet 中增加对嵌套类型的支持 (#9486)
  • 新增包含构建选项信息的系统表 (#9502)

Code Refactoring 🎉

  • 合并全新表达式框架 (#9411)
  • 删除无用的 crates 并对部分 crates 重命名 (#9481)
  • 工具链升级至 rust nightly-2022-12-15 (#9540)

Expression

  • 将反函数移动至 binder (#9484)
  • 使用 error_to_null() 来评估 try_cast (#9545)

Functions

  • 使用 h3o 替换 h3ron (#9553)

Format

  • 提取 AligningStateTextBased (#9472)
  • 丰富错误上下文 (#9534)

Query

  • 使用 EvalContext 存储函数计算错误 (#9501)
  • 重构 MapAccess 以支持读取元组内字段 (#9516)

Storage

  • 更新 opendal 以支持流式读 (#9503)
  • 重构 bloom index 以使用向量化 siphash 函数 (#9542)

Bug Fixes 🔧

HashTable

  • 修复 unsized_hashtable.rs 中潜在的内存泄漏 (#9551)

Storage

  • 修正行组统计信息的收集逻辑 (#9537)

What's On In Databend

请持续关注 Databend 的最新动态。

新的一年,全新表达式上线!

在经过大半年的开发和迁移后,全新表达式框架已经正式成为 Databend 的核心引擎。这套表达式框架具有形式化的类型系统,并且支持类型安全的向下转型,同时,也为函数的定义和实现提供了更简单和高效的方式。

阅读以下材料以了解更多讯息:

What's Up Next

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

UNNEST 函数

UNNEST 函数的参数是一个数组,返回一张表,表中每行包含数组中的一个元素。

语法

UNNEST(ARRAY) [WITH OFFSET]

如果你计划成为 Databend 的贡献者,参与 UNNEST 函数的设计与实现会是一个不错的机会。

Issue 9549: Feature: Support unnest

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

andylokandyariesdevilb41shBohuTANGClSlaiddantengsky
andylokandyariesdevilb41shBohuTANGClSlaiddantengsky
dependabot[bot]drmingdrmereverpcpcflaneur2020leiyskymergify[bot]
dependabot[bot]drmingdrmereverpcpcflaneur2020leiyskymergify[bot]
PsiACERinChanNOWWWsoyeric128sundy-liTCeasonwubx
PsiACERinChanNOWWWsoyeric128sundy-liTCeasonwubx
Xuanwoxudong963youngsofunzhang2014
Xuanwoxudong963youngsofunzhang2014

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2023-01-04-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Format

  • 实现 JSON 输出格式 (#9447)

Query

  • 检查连接参数 (#9437)
  • 新增 max_query_row_nums 设置 (#9406)

Storage

  • 为 hive catalog 实现 prewhere 支持 (#9427)
  • 为不同的 object reader 设计统一的 cache trait (#9436)
  • 为新 cache 增加更多观测指标 (#9445)

New Expression

  • 迁移 hash 函数到 functions-v2 (#9402)

Sqllogictest

  • 并行执行所有测试 (#9400)

Code Refactoring 🎉

Storage

  • CachedObject 实现 to_bytesfrom_bytes (#9439)
  • 重构 table-meta 和 parquet reader (#9434)
  • 将 fuse_snapshot 单元测试转化为 SQL 逻辑测试 (#9428)

Bug Fixes 🔧

Format

  • read_split 时使用 catch unwind 停止 panic 展开 (#9420)

User

  • 惰性加载 JWKS (#9446)

Planner

  • Stage URL 的路径应当以 / 结尾 (#9450)

What's On In Databend

请持续关注 Databend 的最新动态。

Databend 2022 年终总结

让我们回顾一下,看看 Databend 在 2022 年的表现。

  • 开源:新获得 2000 多颗 star,合并了超过 2400 多个 PR,解决 1900 余个问题。
  • 从 Data Warehouse 到 Lakehouse:全新设计,大量功能增强。
  • 更全面的测试:引入 SQL 逻辑测试,实现 SQLancer 全部三种方法,和 https://perf.databend.rs
  • 建立生态:更多的客户选择、信任并与 Databend 一起成长,包括快手科技和 SAP。
  • Databend Cloud:建立在 Databend 之上的下一代大数据分析平台,目前有两个可用区供大家试用。

祝大家新年快乐,并期待大家能够一起参与到 Databend 社区建设之中。

阅读以下材料以了解更多讯息:

Databend 2023 路线图

随着新一年的到来,Databend 团队也在积极规划 2023 年的路线图。

我们将继续打磨 Planner,并在数据缓存和查询结果缓存上下功夫。列表中还包括强化对 PB 级数据量的存储和查询的能力。

欢迎感兴趣的朋友试用一下 Databend 并加入对路线图的讨论。

阅读以下材料以了解更多讯息:

What's Up Next

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

Profile-Guided Optimization (PGO)

PGO 的基本概念是收集关于一个程序典型的执行数据(例如,它可能会执行的哪些分支)然后使用该数据来进行如内联,机器码布局,寄存器分配等告知优化。

rustc 支持 profile-guided optimization (PGO) 。Databend 团队期待可以使用这一技术来提供优化的构建。

Issue 9387: Feature: Add PGO Support

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

ariesdevilBohuTANGdantengskydependabot[bot]everpcpcflaneur2020
ariesdevilBohuTANGdantengskydependabot[bot]everpcpcflaneur2020
hantmacleiyskymergify[bot]PsiACEsandfleesoyeric128
hantmacleiyskymergify[bot]PsiACEsandfleesoyeric128
sundy-liTCeasonXuanwoxudong963youngsofunzhang2014
sundy-liTCeasonXuanwoxudong963youngsofunzhang2014

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2022-12-28-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Meta

  • watch client 被弃用时,也移除 stream (#9334)

Planner

  • 为 range 谓词实现选择率估计 (#9398)

Query

  • 支持 copy on error (#9312)

  • 实现 databend-local (#9282)

  • external storage 支持 location_prefix (#9381)

Storage

  • rangefilter 支持 in (#9330)

  • 尝试改进对象存储的读性能 (#9335)

  • 支持 table 压缩 (#9370)

Metrics

  • 为 fuse compact 和 block write 增加更多观测指标 (#9399)

Sqllogictest

  • 增加对 no-fail-fast 的支持 (#9391)

Code Refactoring 🎉

*

  • 完全适配 rustls,移除所有指向 native-tls 的依赖 (#9358)

Format

  • 移除 format_xxx 设置 (#9360)

  • 调整 FileFormatOptionsExt 接口 (#9395)

Planner

  • 移除 SyncTypeChecker (#9352)

Query

  • 将 fuse source 拆分为 read data 和 deserialize (#9353)

  • 在读取 parquet 文件时避免 io copy (#9365)

  • 为 parquet reader 实现非压缩缓冲区 (#9379)

Storage

  • 添加读写相关设置 (#9359)

Bug Fixes 🔧

Format

  • 修复 align_flush 的行为,以适应 CSV 文件中仅存在表头的情况 (#9327)

Settings

  • 使用逻辑 CPU 数量作为 num_cpus 默认值 (#9396)

Processors

  • 修复 union 两侧数据类型不匹配的问题 (#9361)

HTTP Handler

  • 修复关于查询不存在的错误警告 (#9380)

Sqllogictest

  • 重构 sqllogictest 的 http client (#9363)

What's On In Databend

请持续关注 Databend 的最新动态。

实现 databend-local

databend-local 受到 clickhouse-local 的启发,允许用户在不启动 Databend 集群的情况下对本地文件执行高效查询。

> export CONFIG_FILE=tests/local/config/databend-local.toml
> cargo run --bin=databend-local -- --sql="SELECT * FROM tbl1" \
--table=tbl1=/path/to/databend/docs/public/data/books.parquet
exec local query: SELECT * FROM tbl1
+------------------------------+---------------------+------+
| title | author | date |
+------------------------------+---------------------+------+
| Transaction Processing | Jim Gray | 1992 |
| Readings in Database Systems | Michael Stonebraker | 2004 |
| Transaction Processing | Jim Gray | 1992 |
| Readings in Database Systems | Michael Stonebraker | 2004 |
+------------------------------+---------------------+------+
4 rows in set. Query took 0.015 seconds.

阅读以下材料以了解更多讯息:

What's Up Next

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

压缩短字符串

当处理涉及到短字符串的查询时,Databend 可能会比 Snowflake 读取更多的数据。

SELECT SearchPhrase, MIN(URL), COUNT(*) AS c FROM hits \
WHERE URL LIKE '%google%' AND SearchPhrase <> '' \
GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;

如果能够对短字符串进行压缩,上面的查询可能会变得更加高效。

Issue 9001: performance: compressing for short strings

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2022-12-21-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Multiple Catalogs

  • 实现 show tables ( from | in catalog.database ) (#9153)

Planner

  • 在列统计中添加直方图 (#9310)

Query

  • 支持插入值时访问 stage (#9249)

  • 在 Fuse 表中新增对原生格式的支持 (#9279)

  • 新增 internal_enable_sandbox_tenant 配置,以及 sandbox_tenant (#9277)

Sqllogictest

  • 使用 Rust 重新实现 SQL 逻辑测试程序 (#9150)

Code Refactoring 🎉

*

  • 为 copy 和 insert 统一 apply_file_format_options (#9323)

IO

  • 移除无用代码 (#9266)

Meta

  • 为 watcher count 编写相应测试 (#9324)

Planner

  • 将 planner 中的 TableContext 替换为 PlannerContext (#9290)

Bug Fixes 🔧

Base

  • 尝试修复 catch unwind 时的 SIGABRT (#9269)

  • 使用 thread_local 宏替换 #[thread_local] (#9280)

Query

  • 修复查询时与当前数据库无关的未知数据库问题 (#9250)

  • 删除角色时,修复当前角色不正确的问题 (#9276)

What's On In Databend

请持续关注 Databend 的最新动态。

使用 Rust 重新实现 SQL 逻辑测试程序

SQL 逻辑测试通过与其他引擎对相同查询的结果进行比较,验证从 SQL 数据库引擎返回的结果。

在过去,Databend 使用 Python 编写的程序运行这类测试,并从其他流行数据库中迁移了大量的测试用例。在最近一段时间,我们使用 sqllogictest-rs 重写了这一程序。

阅读以下材料以了解更多讯息:

实验性:原生格式

PA 是基于 Apache Arrow 的一种原生存储格式。与 Arrow IPC 类似,PA 旨在优化存储层。

Databend 引入 PA 作为原生存储格式,并期望带来性能上的提升。当然,该实现仍然处于早期开发阶段。

create table tmp (a int) ENGINE=FUSE STORAGE_FORMAT='native';

阅读以下材料以了解更多讯息:

What's Up Next

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

在返回预签名 URL 之前检查文件是否存在

当对一个文件进行预签名时,Databend 现在的行为是根据文件名返回一个可能有效的 URL,但不会检查文件是否存在。因此,如果文件不存在,可能会在访问时遇到 404 错误。

Issue 8702: Before return presign url add file exist judgement

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2022-12-14-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Multiple Catalogs

  • 拓展 show databases SQL (#9152)

Stage

  • 支持 select from URI (#9247)

Streaming Load

  • 在 streaming load API 的 insert sql 中支持 file_format 语法 (#9063)

Planner

  • limit 下推至 union (#9210)

Query

  • 使用 analyze table 替代 optimize table statistic (#9143)

  • 快速解析插入值 (#9214)

Storage

  • 使用 xor 哈希函数辅助计算 distinct count (#9159)

  • read_parquet 在读数据之前先读取元信息 (#9154)

  • 将 filter 下推至 parquet reader (#9199)

  • 在读取前裁剪 row groups (#9228)

Open Sharing

  • 实现 open sharing 原型并添加 sharing stateful tests (#9177)

Code Refactoring 🎉

*

  • 化简全局数据注册逻辑 (#9187)

Storage

  • 重构删除逻辑 (#8824)

Build/Testing/CI Infra Changes 🔌

  • 发布 databend deb 和支持 hive 的 databend (#9138, #9241, etc.)

Bug Fixes 🔧

Format

  • 支持使用 ASCII 控制字符的 hex 表示作为格式字段分隔符 (#9160)

Planner

  • 如果 prewhere_column 为空,则 logic.prewhere_column 设置为 get.columns 中的最小列 (#9116)

  • 当合并子项为 Aggregate 时,不要将 topk 向下推到 Merge (#9183)

  • 修复可空列的内部列长度和有效性的不一致问题 (#9220)

Query

  • 解决 test_insert 导致单元测试挂起 (#9242)

Storage

  • 在压缩过程中,对读块的 IO 请求过多 (#9128)

  • 收集孤儿快照 (#9108)

What's On In Databend

请持续关注 Databend 的最新动态。

Breaking Change: 统一文件格式选项

为了简单起见,我们为 COPY INTO 命令、Streaming Load API 和所有其他用户需要描述其文件格式的情况提供了一组统一的文件格式选项:

[ FILE_FORMAT = ( TYPE = { CSV | TSV | NDJSON | PARQUET | XML} [ formatTypeOptions ] ) ]
  • 请注意,当前以 format_* 作为前缀的设置将会被弃用。

  • 出于兼容性考虑,... FORMAT CSV ... 将会保留,仅供 ClickHouse HTTP 接口使用。

  • 对用户自定义格式的支持也在计划内,将会考虑允许 CREATE FILE FORMAT ... 创建特定格式,使用时可以 ... FILE_FORMAT = (format_name = 'MyCustomCSV') ....

阅读以下材料以了解更多讯息:

Open Sharing

Open Sharing 是一款简单安全的数据共享协议,为运行在多云环境下的 Databend Query 节点设计。

  • 简单且自由:Open Sharing 完全开源,并且提供一个易用的 RESTful API 实现。

  • 安全:Open Sharing 验证传入请求者的身份和访问权限,并提供审计日志。

  • 多云:Open Sharing 支持多种公有云平台,包括 AWS、Azure、GCP 等。

阅读以下材料以了解更多讯息:

What's Up Next

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

重构 Stage 相关测试

在运行 Stage 相关测试时,我们应当使用 Streaming Load API 来移动文件到 Stage 中,而不是使用像下面的 AWS 命令:

aws --endpoint-url ${STORAGE_S3_ENDPOINT_URL} s3 cp s3://testbucket/admin/data/ontime_200.csv s3://testbucket/admin/stage/internal/s1/ontime_200.csv >/dev/null 2>&1

这是由于 Databend 用户不需要关心也不需要考虑 AWS 命令中所指定的 Stage 路径。

Issue 8528: refactor stage related tests

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2022-12-07-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Planner

  • 优化集群模式下的 TopK (#9092)

Query

  • 支持 select * exclude [column_name | (col_name, col_name,...)] (#9009)

  • 支持使用 alter table 还原表 (#8967)

  • 新增表函数 read_parquet ,可以读取 Parquet 文件作为表 (#9080)

  • 支持 select * from @stage (#9123)

Storage

  • 引入 CachePolicy ,允许定制缓存逻辑 (#9062)

  • 支持 Hive nullable partition (#9064)

Code Refactoring 🎉

Memory Tracker

  • 保持 Memory Tracker 状态一致 (#8973)

REST API

  • 查询结束后删除上下文 (#9091)

Bug Fixes 🔧

Configs

  • 为 Hive 配置加载增添更多测试 (#9074)

Planner

  • 尝试修复表名大小写敏感的问题 (#9055)

Functions

  • 修复 vector_const like 相关问题 (#9082)

Storage

  • 在清除时更新 last_snapshot_hint 文件 (#9060)

Cluster

  • 使用 ClosingClient 通知服务端关闭连接以修复 broken pipe 或 connect reset 错误 (#9104)

What's On In Databend

请持续关注 Databend 的最新动态。

RESTORE TABLE

只要在语句中指定快照 ID 或时间戳,Databend 就可以将表恢复到先前创建快照时的状态。可以使用 FUSE_SNAPSHOT 来检索表的快照 ID 和时间戳。

-- Restore with a snapshot ID
ALTER TABLE <table> FLASHBACK TO (SNAPSHOT => '<snapshot-id>');
-- Restore with a snapshot timestamp
ALTER TABLE <table> FLASHBACK TO (TIMESTAMP => '<timestamp>'::TIMESTAMP);

阅读以下材料以了解更多讯息:

What's Up Next

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

在错误报告中增加构建信息

目前 Databend 的错误报告是由错误代码和有关错误发生原因的一些信息组成的,如果能够在其中加入构建信息,可能有助于排查问题。

"Code: xx. Error: error msg... (version ...)"

Issue 9117: Add Build Information to the Error Report

如果你对这个主题感兴趣,可以尝试解决其中的部分问题或者参与讨论和 PR review。或者,你可以点击 performance: compressing for short strings · Issue #9001 来挑选一个随机问题,祝好运!

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

英文版移步:https://databend.rs/blog/2022-11-30-databend-weekly

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.cn

What's New

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

Features & Improvements ✨

Format

  • 更好地检查格式相关选项 (#8981)

  • 为 Parquet 文件提供基本的模式推断能力 (#9043)

Query

  • QualifiedName 支持 'db.table.''table.' (#8965)

  • 支持批量插入时关闭表达式解析 (#8966)

Storage

  • 为 fuse engine 增加 cache layer (#8830)

  • 新增 system 表 system.memory_statistics (#8945)

  • 新增 optimize table table_name statistic 支持,用于计算表统计信息 (#8891)

Code Refactoring 🎉

Base

  • 移除 common-macros (#8936)

Format

  • TypeDeserializer 中去除 FormatSetting (#8950)

Planner

  • 重构 ExtractOrPredicate ,合并到 RulePushDownFilterJoin(#8951)

Processors

  • 合并构建数据块来优化 join (#8961)

New Expression

Documentation 📔

  • 使用 Crowdin 提供 i18n 支持 (#8987, #8997, etc.)

Bug Fixes 🔧

Base

  • 修复 memory tracker 丢失的问题 (#8932)

Meta

  • 修复 share db 漏洞,如果需要则创建 DatabaseIdToName (#9006)

Mysql handler

  • 修复 MySQL 连接泄漏 (#8894)

Processors

  • 修复 update_list 中的内存泄漏 (#9023)

Storage

  • 压缩时并行读写数据块 (#8921)

What's On In Databend

请持续关注 Databend 的最新动态。

Infer Schema 前瞻

通常,在从 stage 或者其他位置载入数据时,我们需要先创建对应的表。但有些时候,我们无法预知文件模式或者需要创建的模式太复杂,使得无法轻松完成创建表的工作。

引入模式推断将会简化从文件载入数据的过程。甚至,可以直接使用 SELECT 语句查询 stage 中的数据,例如 select * from @my_stage

INFER 's3://mybucket/data.csv' FILE_FORMAT = ( TYPE = CSV );
+-------------+---------+----------+
| COLUMN_NAME | TYPE | NULLABLE |
|-------------+---------+----------|
| CONTINENT | TEXT | True |
| COUNTRY | VARIANT | True |
+-------------+---------+----------+

#9043 中,Databend 新增对 parquet 文件进行基本模式推断的接口,我们将会在这个基础上继续推动 #7211 的解决,以支持 select * from @stage

阅读以下材料以了解更多讯息:

What's Up Next

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

为 MySQL Handler 添加 TLS 支持

近期发布的 opensrv-mysql v0.3.0 引入了 TLS 支持,是时候为 Databend 的 MySQL Handler 实现它。

let (is_ssl, init_params) = opensrv_mysql::AsyncMysqlIntermediary::init_before_ssl(
&mut shim,
&mut r,
&mut w,
&Some(tls_config.clone()),
)
.await
.unwrap();

opensrv_mysql::secure_run_with_options(shim, w, ops, tls_config, init_params).await

Issue 8983: Feature: tls support for mysql handler

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

Changelogs

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

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

Contributors

非常感谢贡献者们在本周的卓越工作。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。