Databend 开源周报第 112 期
Databend Labs9月 25, 2023
英文版移步:https://www.databend.com/blog/2023-09-24-databend-weekly
Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。
What's On In Databend
探索 Databend 本周新进展,遇到更贴近你心意的 Databend。
理解用户自定义函数(UDF)
用户自定义函数(User-Defined Function,UDF)允许你的自定义操作与 Databend 进行集成,从而更好地处理数据、执行任务,构造更合理的数据工作流。
Databend 目前支持两种形式的用户自定义函数:使用 SQL lambda 表达式编写或者用 Python 等编程语言实现 UDF 服务器注册。用户自定义函数可以作为 Databend 查询处理流程的一部分执行。
使用 UDFs 的优点包括:
- 自定义数据转换。
- 优化性能。
- 改善代码可重用性。
如果您想了解更多信息,请查看下面列出的资源。
Code Corner
一起来探索 Databend 和周边生态中的代码片段或项目。
使用 Prometheus 改善可观测性
metrics-rs 为不同的可观测性方案构建了一个通用的抽象层,支持包括 statsd、prometheus、new-relic 等在内的多种工具,但是 metrics-rs 无法很好地支持直方图统计之类的度量。
如今,Prometheus 已成为可观测性领域的事实标准,使用原始的 Prometheus 客户端,而不是将指标推送给其他工具,会带来一些显而易见的好处:
- 更好的性能:经过良好实现的观测指标的内存分配应该是 O(1) ,无需本地缓冲队列。
- 减少抽象层:我们可以减少关于指标的抽象层,使代码路径更易于理解。
- 更好的编码规范:目前我们在不同模块中有不同的度量标准实践,可以学习 Prometheus 社区的度量标准实践来统一我们的度量标准实践。
现在,Databend 的可观测性指标已经完全迁移到 Prometheus 实现,在保持原有指标几乎不变的情况下,带来了更全面、更可靠的可观测性体验。
如果您想了解更多信息,请查看下面列出的资源。
- PR #12787 | feat(observability): replace metrics-rs with prometheus-client
- Issue #12635 | Tracking: replace metrics-rs with prometheus-client-rs
- Issue #9422 | Feature: Refactoring Databend Metrics Component with Prometheus
Highlights
以下是一些值得注意的事件,也许您可以找到感兴趣的内容。
- 支持分布式执行。
COMPACT
- 新增 函数。
json_path_exists
- 新增 设置用于控制重聚类时的块大小。
recluster_block_size
- 支持 类型向
DECIMAL
类型的转换。INT
- 支持 inverted filter 以减少 filter 执行,部分场景下 4 倍性能提升。
- SQLSmith 测试支持生成表函数、窗口函数、子查询和 子句。
WITH
What's Up Next
我们始终对前沿技术和创新理念持开放态度,欢迎您加入社区,为 Databend 注入活力。
实现 GREATEST 函数
GREATEST 函数的输入是一个表达式列表,输 出是该表达式列表中的最大值。
语法:
GREATEST( <expr1> [ , <expr2> ... ] )
示例:
SELECT id, name, category, price, rating,
CASE
WHEN rating = 1 THEN 0.02
WHEN rating = 2 THEN 0.04
WHEN rating = 3 THEN 0.06
WHEN rating = 4 THEN 0.08
ELSE 0.1
END AS increase_percentage_based_on_rating,
rank() OVER (PARTITION BY category ORDER BY rating) AS rating_rank,
CASE
WHEN rating_rank = 1 THEN 0.2
WHEN rating_rank = 2 THEN 0.1
ELSE 0
END AS increase_percentage_based_on_rank,
GREATEST(increase_percentage_based_on_rating,
increase_percentage_based_on_rank) AS final_increase_percentage,
CAST(price * (1 + final_increase_percentage) AS DECIMAL(10, 2))
AS adjusted_price
FROM products
Issue #12944 | feat: GREATEST function
如果你对这个主题感兴趣,可以尝试解决其中的部分问题或者参与讨论和 PR review。或者,你可以点击 https://link.databend.com/i-m-feeling-lucky 来挑选一个随机问题,祝好运!
Changelog
前往查看 Databend 每日构建的变更日志,以了解开发的最新动态。
地址:https://github.com/databendlabs/databend/releases
订阅我们的新闻简报
及时了解功能发布、产品规划、支持服务和云服务的最新信息!