--- title: Databend 开源周报第 122 期 description: slug: databend-weekly-122 date: 2023-12-03 tags: [weekly] cover_url: databend-weekly.svg image: databend-weekly.png contributors: - name: andylokandy - name: ariesdevil - name: b41sh - name: BohuTang - name: Chasen-Zhang - name: dantengsky - name: Dousir9 - name: drmingdrmer - name: everpcpc - name: flaneur2020 - name: JackTan25 - name: leiysky - name: lichuang - name: PsiACE - name: RinChanNOWWW - name: soyeric128 - name: sundy-li - name: TCeason - name: xudong963 - name: youngsofun - name: zhang2014 - name: zhyass authors: - databendlabs --- ![img_v3_025j_c7ff5c66-5e49-4d9e-bbef-faf4efc67ecg](https://hackmd.io/_uploads/rygsihcrp.png) > 英文版移步:https://databend.rs/blog/2023-12-03-databend-weekly > > [Databend](https://github.com/datafuselabs/databend) 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:[https://app.databend.cn](https://app.databend.cn) 。 ## What's On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 ### 支持链式函数调用 Databend 现在提供实验性的 SQL 方言,以支持链式函数调用。 如果想要尝试这一特性,请执行下面 SQL 语句: ```SQL set sql_dialect = 'experimental'; ``` 对应的语法如下: ```sql 🐳 :) with t(f) as (select '11|open|22|ai|33|is nothing without sam'.split('|') .array_filter(x -> try_cast(x as int) is not null ).array_apply(x -> x::int ).array_apply(x -> x::int64 )) select f.array_reduce('sum'), f.array_reduce('max'), f.array_reduce('min') from t; ┌──────────────────────────────────────────────────────────────────────────┐ │ array_reduce(f, 'sum') │ array_reduce(f, 'max') │ array_reduce(f, 'min') │ │ Nullable(Int64) │ Nullable(Int64) │ Nullable(Int64) │ ├────────────────────────┼────────────────────────┼────────────────────────┤ │ 66 │ 33 │ 11 │ └──────────────────────────────────────────────────────────────────────────┘ ``` 如果您想了解更多信息,欢迎联系 [Databend 团队](https://databend.cn/contact-us/),或查看下面列出的资源。 - [PR #13799 | feat(query): add chain function support](https://github.com/datafuselabs/databend/pull/13799) ## Code Corner 一起来探索 Databend 和周边生态中的代码片段或项目。 ### 使用 Query ID 和 Nginx 进行负载均衡 Databend JDBC 在每次发起请求都会携带一个名为 `X-DATABEND-QUERY-ID` 的 HTTP Header,如果想要实现同一客户端,多个请求分散打到不同后端实例的效果,可以基于该 HTTP Header 来做 Nginx 的 Hash Key,以达到负载均衡的效果。 下面的 Nginx 配置文件展示了如何为端口分别位于 8000 和 8009 的两个 databend-query 实例实现基于 Query ID 的负载均衡: ```config #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { log_format main '$http_x_databend_query_id "$time_local" $host "$request_method $request_uri $server_protocol" $status $bytes_sent "$http_referer" "$http_user_agent" $remote_port $upstream_addr $scheme $gzip_ratio $request_length $request_time $ssl_protocol "$upstream_response_time"'; access_log /opt/homebrew/var/log/nginx/access.log main; map $http_x_query_id $backend { default backend1; } upstream backend1 { hash $http_x_databend_query_id consistent; server localhost:8000; server localhost:8009; } server { listen 8085; location / { proxy_pass http://$backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-DATABEND-QUERY-ID $http_x_databend_query_id; } } } ``` ## Highlights 以下是一些值得注意的事件,也许您可以找到感兴趣的内容。 - 支持 `QUALIFY` 子句 。 - `CONNECTION` 支持载入指定 `role_arn` 的访问凭据。 - MERGE INTO 分离 **matched-only** 和 **insert-only** Pipeline 。 - 阅读文档 [Docs | Stream](https://databend.rs/sql/sql-commands/ddl/stream/) 了解 Databend 的最新企业级特性。 ## What's Up Next 我们始终对前沿技术和创新理念持开放态度,欢迎您加入社区,为 Databend 注入活力。 ### 支持使用贪心算法计算 JOIN ORDER 目前 Databend 使用动态规划完成 JOIN ORDER 计算。如果 DPhpy 在这一过程中花费太多时间,有必要从动态规划算法切换到贪婪算法以最小化整体查询时间。 [Issue #13884 | Feature: Support join order greedy algorithm](https://github.com/datafuselabs/databend/issues/13884) 如果你对这个主题感兴趣,可以尝试解决其中的部分问题或者参与讨论和 PR review 。或者,你可以点击 https://link.databend.rs/i-m-feeling-lucky 来挑选一个随机问题,祝好运! ## Changelog 前往查看 Databend 每日构建的变更日志,以了解开发的最新动态。 地址:https://github.com/datafuselabs/databend/releases ## Contributors 非常感谢贡献者们在本周的卓越工作。 ![图片](https://hackmd.io/_uploads/SJKg4QjBa.png) ## Connect With Us Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。 - [Databend Website](https://databend.rs) - [GitHub Discussions](https://github.com/datafuselabs/databend/discussions) - [Twitter](https://twitter.com/Datafuse_Labs) - [Slack Channel](https://link.databend.rs/join-slack)