博客 / 产品

ClickHouse 2022 年 3 月新闻通讯:窗口函数助您一臂之力!

author avatar
Christoph Wurm
2022 年 3 月 7 日 - 分钟阅读

欢迎阅读我们的三月新闻通讯,每月为您汇总最新的 ClickHouse 资讯。您将在下面找到我们发布的新功能、近期线上交流会和网络研讨会的录音、一些使用窗口函数的巧妙查询以及一些推荐阅读。

ClickHouse v22.2

我们发布了 ClickHouse 22.2,这是您最喜欢的数据库的最新版本。亮点包括

  • 投影已准备好投入生产并默认启用。它们允许您将表的一部分存储在原始表的子目录中,通常使用不同的排序键或聚合原始数据——类似于物化视图,但没有所有开销。它们的用法非常简单:查询将被自动分析并重定向到投影,如果必须在那里读取更少的数据才能产生相同的结果。几乎像魔法一样!
  • 插入时的自定义去重新设置 [insert_deduplication_token] 允许您指定一个自定义令牌(任何字符串),该令牌用于确定是否已插入块。如果已插入,则任何后续具有相同令牌的块都将被丢弃。任何 insert 语句都会创建一个块,但大型插入会被分成大约 100 万行的多个块(由 max_insert_block_size 控制)。这使得在 ClickHouse 中实现精确一次语义变得更加容易。注意:默认情况下,ClickHouse 已经会对相同的已插入数据块(由相同顺序的相同行组成)进行去重。如果您需要,此新设置可为您提供更多控制。
  • 默认表引擎 – 您现在可以设置默认表引擎,这样在创建表时就不必再指定引擎。例如
SET default_table_engine = 'MergeTree'
CREATE TABLE table1 (x int PRIMAY KEY (x))

  • 临时列可在插入时用于计算其他列,但本身不存储。
  • 文本分类 – 用于检测语言、字符集、语调和编程语言的实验性函数已添加。例如
SET allow_experimental_nlp_functions = 1
SELECT detectLanguage('Ich bin ein Berliner')
// returns 'de'

  • dictGet* 函数中的隐式转换,现在您可以简化查询了!例如,当您有一个以 UInt32 作为主键的字典时,您可以使用以下任何一种方式访问它
dictGetOrNull(dict, attr, 1)
dictGetOrNull(dict, attr, '1')
dictGetOrNull(dict, attr, 1.0)
dictGetOrNull(dict, attr, toUInt8(1))
dictGetOrNull(dict, attr, toInt256(1))

有关更多详细信息,请访问发布博客文章更新日志

线上交流会和网络研讨会

过去几周,ClickHouse 领域举办了多次线上交流会和网络研讨会。查看录音(如果您愿意,可以 2 倍速观看,我们不会评判您)

  • 与 Contentsquare 的虚拟线上交流会,我们在会上了解了他们如何使用 ClickHouse 为其体验分析平台提供支持。这是一个令人印象深刻的历程,始于从 Elasticsearch 迁移到 ClickHouse,成本降低了 11 倍(数据量增加了 6 倍),速度提高了 10 倍!我们还听取了 ClickHouse Proxy (Chproxy) 项目以及 Alexey 最喜欢的 2021 年和 2022 年 ClickHouse 功能。亮点:在 1:20:12 处收听我们关于新的 JSON 数据类型的计划。
  • 了解我们在 v22.02 版本网络研讨会中发布的新功能,包括在 S3 之上运行 ClickHouse 的即将到来的性能改进,请访问 42:05 (如果可以这么说,性能数据非常令人印象深刻!)。
  • 旧金山湾区线上交流会邀请了来自 Materialize 和 FastNetMon 的嘉宾演讲者

即将举行的网络研讨会

ClickHouse v22.3 版本网络研讨会

  • 时间?3 月 17 日星期四上午 8 点(太平洋夏令时)/ 下午 4 点(格林威治标准时间)
    添加到您的日历

每月查询:窗口函数助您一臂之力!

您知道 ClickHouse 有窗口函数吗?这是一个相对较新的功能(2021 年初),但非常强大。让我们快速浏览一下以前更难实现的功能。注意:我们将使用英国房价支付数据集,其中包含过去几十年英国所有房产交易数据,因此请随时重现查询!

查询 1:与同类群组平均值比较

SELECT avg(price) OVER(PARTITION BY postcode1) AS postcode_avg, *
FROM uk_price_paid
WHERE type = 'flat'
ORDER BY price DESC

此查询将显示英国有史以来最昂贵的公寓/住宅,但此外还将第一列显示其邮政编码的平均价格。所以现在我们可以看看谁真的超额支付了!

查询 2:此房产之前是什么时候售出的?

SELECT
lagInFrame(date) OVER (PARTITION BY postcode1, postcode2, addr1, addr2 ORDER BY date ASC) AS previous_date,
lagInFrame(price) OVER (PARTITION BY postcode1, postcode2, addr1, addr2 ORDER BY date ASC) AS previous_price,
* FROM uk_price_paid

对于像这样的时间序列数据集,我们通常希望查看特定实体的上一个记录。我们可以使用 lagInFrame 来实现此目的。如果我们使用 first_value,我们将获得该房产首次售出的时间(数据集仅追溯到 1995 年)。

查询 3:使用窗口函数排序

您还可以按窗口函数排序。例如,此查询显示了最昂贵邮政编码中最昂贵的子邮政编码(在英国,邮政编码由两个部分组成)

SELECT DISTINCT
    postcode1,
    postcode2,
    avg(price) OVER (PARTITION BY postcode1, postcode2) AS avg_price
FROM uk_price_paid
WHERE type = 'flat'
ORDER BY
    avg(price) OVER (PARTITION BY postcode1) DESC,
    avg_price DESC

请注意 ORDER BY 子句中使用的两个窗口函数。对于那些熟悉伦敦的人来说,您不会感到惊讶,此查询得出的结果是位于梅菲尔和苏豪区边缘的 W1S 邮政编码。

阅读角

我们一直在阅读

  1. 我们如何扩展 ClickHouse 集群,由我们在 Contentsquare 的朋友撰写。他们有一个巧妙的“ClickHouse resharding-cooker”,结合了 clickhouse-backupclickhouse-copier。如果您正在运行 ClickHouse 集群,非常值得一读!
  2. Opensee:使用 ClickHouse 每天分析数 TB 的金融数据,由我们的金融分析公司 Opensee 的朋友撰写。多年来,他们一直使用 ClickHouse 分析金融机构的风险概况。
  3. ClickHouse 22.2 版本发布博客文章 – 阅读有关最新 ClickHouse 版本和令人兴奋的新功能的信息,包括已准备好投入生产的投影、自定义去重和灵活的内存限制。

新增 ClickHouse 采用者:欢迎 Gigasheet。也把自己添加进去吧!

感谢阅读。我们下个月再见!

ClickHouse 团队

照片由 Fernando Venzano 拍摄,来自 Unsplash

分享这篇文章

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云产品信息!
正在加载表单...
关注我们
X imageSlack imageGitHub image
Telegram imageMeetup imageRss image
©2025ClickHouse, Inc. 总部位于加利福尼亚州湾区和荷兰阿姆斯特丹。