Databend 开源周报第112期
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.rs/i-m-feeling-lucky 来挑选一个随机问题,祝好运!
Changelog
前往查看 Databend 每日构建的变更日志,以了解开发的最新动态。
地址:https://github.com/datafuselabs/databend/releases
Contributors
非常感谢贡献者们在本周的卓越工作。
Connect With Us
Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
全网最细 - 深度解析 Istio Ambient Mesh 流量路径
前言 Istio Ambient Mesh 是 Istio 社区的推出的将 Sidecar 的能力抽离至 ztunnel 和 waypoint 的全新架构,同时基于 iptables 和策略路由实现了该架构下的流量规则,目前网络上已经有些资料对这部分的实现进行了一定程度的剖析(比如http://Solo.io推出的三篇系列文章),但仍然有很多细节尚没有任何文章提及。本文旨在对 Istio Ambient Mesh 的流量路径进行详细解读,力求尽可能清晰地呈现细节,以帮助读者完全理解 Istio Ambient Mesh 中最为关键的部分。阅读本文需要读者具备基本的 TCP/IP 协议知识和操作系统网络知识,包括 iptables 和路由等。鉴于篇幅限制,本文不会详细介绍这些基础概念,对于感兴趣的读者,建议自行查阅相关资料以深入了解。 环境 我们使用一个最简化的场景来说明 Ambient Mesh 流量路径:从一个运行在 Node-A 上的 sleep Pod 中通过 curl 发起一个 HTTP 请求,请求的对象是集群中名为 httpbin 的服务。在该服务下有一个位于 Node-B ...
- 下一篇
超越内存限制:深入探索内存池的工作原理与实现
本文分享自华为云社区《超越内存限制:深入探索内存池的工作原理与实现》,作者:Lion Long。 一、引言 为什么需要内存池? 在系统应用层面,程序开发使用的都是虚拟内存。物理内存是底层的,只有底层程序(比如驱动、固件等)可以接触到。 程序通常能管理的内存主要是堆和共享内存(mmap)。应用层所谓的内存管理,主要是对堆上的内存池进行管理。 程序使用内存时,需要申请内存,通过调用malloc() / callol();使用完之后需要释放内存,调用free()。程序运行时会不断的申请内存、释放内存,会发现内存到后面可能出现不可控制的状态,比如还有总可用内存,但是无法分配下来了,这就是内存碎片,内存有很多的小窗口存在。 因此,需要内存管理,从而有内存池存在。通过内存管理避免内存碎片以及避免频繁的申请、释放内存。 new和malloc/callol关系:new是关键字,内部调用的是malloc/callol,delete和free一样,是对内存释放。 二、内存管理方式 分配内存的时候,分配的大小以及何时分配何时释放都是不确定的。因此,针对不同的常见有不同的内存管理方式。 (1)不管需要的内存大...
相关文章
文章评论
共有0条评论来说两句吧...