欢迎阅读我们的三月新闻通讯,每月为您汇总最新的 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 邮政编码。
阅读角
我们一直在阅读
- 我们如何扩展 ClickHouse 集群,由我们在 Contentsquare 的朋友撰写。他们有一个巧妙的“ClickHouse resharding-cooker”,结合了
clickhouse-backup
和clickhouse-copier
。如果您正在运行 ClickHouse 集群,非常值得一读! - Opensee:使用 ClickHouse 每天分析数 TB 的金融数据,由我们的金融分析公司 Opensee 的朋友撰写。多年来,他们一直使用 ClickHouse 分析金融机构的风险概况。
- ClickHouse 22.2 版本发布博客文章 – 阅读有关最新 ClickHouse 版本和令人兴奋的新功能的信息,包括已准备好投入生产的投影、自定义去重和灵活的内存限制。
新增 ClickHouse 采用者:欢迎 Gigasheet。也把自己添加进去吧!
感谢阅读。我们下个月再见!
ClickHouse 团队
照片由 Fernando Venzano 拍摄,来自 Unsplash