DoubleCloud 即将停止运营。利用限时免费迁移服务迁移到 ClickHouse。立即联系我们 ->->

博客 / 产品

ClickHouse 2022年3月新闻通讯:窗口函数来帮忙!

author avatar
Christoph Wurm
2022年3月7日

欢迎阅读我们的 3 月份新闻通讯,这份通讯每月都会总结 ClickHouse 的最新动态。在下面,您将找到我们发布的新功能、最近的聚会和网络研讨会的录音、一些使用窗口函数的简洁查询以及一些推荐读物。

ClickHouse v22.2

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

  • 投影已进入生产就绪阶段,并默认启用。它们允许您将表的某一部分存储在原始表的子目录中,通常使用不同的排序键或聚合原始数据——类似于物化视图,但没有所有开销。它们的使用非常简单:查询将被自动分析并重定向到投影,如果在那里读取的数据更少,则可以产生相同的结果。几乎就像魔法!
  • 插入时的自定义去重——一个新设置 [insert_deduplication_token]允许您指定一个自定义令牌(任何字符串),用于确定块是否已被插入。如果已插入,则任何后续具有相同令牌的块都将被丢弃。任何插入语句都会创建一个块,但大型插入会被分成大约 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 代理 (Chproxy) 项目以及 Alexey 在 2021 年和 2022 年最喜欢的 ClickHouse 功能。亮点:在1:20:12处收听我们关于新 JSON 数据类型的计划。
  • v22.02 版本网络研讨会中了解我们发布的新功能,包括在42:05处介绍的用于在 S3 之上运行 ClickHouse 的即将到来的性能改进(如果我们这么说的话,性能数据非常令人印象深刻!)。
  • 旧金山湾区聚会邀请了来自Materialize 和 FastNetMon 的嘉宾演讲者。

即将举行的网络研讨会

ClickHouse v22.3 版本网络研讨会

本月查询:窗口函数来帮忙!

您知道 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 重新分片工具”,结合了clickhouse-backupclickhouse-copier。如果您正在运行 ClickHouse 集群,那么非常值得一读!
  2. Opensee:使用 ClickHouse 每天分析数 TB 的金融数据,由我们的朋友金融分析公司 Opensee 撰写。他们多年来一直在使用 ClickHouse 分析金融机构的风险概况。
  3. ClickHouse 22.2 版本博文——了解最新 ClickHouse 版本和令人兴奋的新功能,包括生产就绪的投影、自定义去重和灵活的内存限制。

新的 ClickHouse 用户:欢迎Gigasheet。加入我们吧!

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

ClickHouse 团队

照片由Fernando VenzanoUnsplash上拍摄

分享此帖子

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云产品信息!
正在加载表单…
关注我们
Twitter imageSlack imageGitHub image
Telegram imageMeetup imageRss image