
本文字数:4331;估计阅读时间:11 分钟
作者:ClickHouse Team
本文在公众号【ClickHouseInc】首发

简述
为进一步简化大数据集查询,我们很高兴宣布 sql.clickhouse.com 正式上线!这个全新的 SQL playground 提供了超过 35 个数据集和 220 个示例查询供您尝试。我们还添加了简单的图表功能(并计划进一步改进),并支持保存和分享查询!快来试试,并在社交平台或 GitHub 仓库分享您喜欢的查询,供他人使用!

背景
作为 ClickHouse 用户,我们对数据集充满热情,甚至有一个内部名为“data lovers”的 Slack 频道,用于分享有趣的数据集进行实验和特性测试!过去,我们记录了这些数据集并提供了一些示例查询供用户入门。我们还将其中许多数据集公开在 ClickHouse 的公共实例中,并在文档中引用,这使用了 ClickHouse 自带的经典 Play 界面。

这个 Play 界面设计简单,非常适合入门:它无需依赖,只是一个 HTML 文件。
然而,这并未提供理想的用户体验。我们希望 playground 能支持用户导航和保存查询,并提供语法高亮、自动补全、查询参数、结果导出、基础图表功能和丰富的分享功能,让用户能够更好地探索数据集,从而更轻松地上手 ClickHouse 并分享需求。
幸运的是,我们最近为 CryptoHouse 演示项目构建了一个 UI,用户可以免费查询 100TB 的区块链数据,包括 Solana、Ethereum 和 Polymarket。此 UI 在设计时考虑了可复用性,结合了 ClickHouse Cloud SQL 控制台中的一些经验和代码。经过一些优化后,我们快速地将该 UI 适用于新的 playground,并重新组织和分类了已有的演示数据集。现在 playground 已包含 35 个以上的数据集,总量达 60 TB(并持续增加),并从文档和博客中加载了所有 220 个示例查询,帮助用户快速上手。

未来,我们的文档和博客将更多地引用该环境,最新的 MTA 博客已从这个全新 playground 中受益。
偏好使用 clickhouse-client 或希望集成该服务的用户,可以直接连接到 ClickHouse 实例 sql-clickhouse.clickhouse.com,例如:clickhouse client --host sql-clickhouse.clickhouse.com --secure --user demo --password ''。
简化 ClickHouse UI 构建
demo-ui 是一个使用 NextJS 和 React 构建的单页应用,所有请求均由客户端发出。正如我们在单页应用博客中详细介绍的,ClickHouse 的一些关键特性让这一切成为可能:
-
HTTP 接口与 REST API ——通过 JavaScript 使用 SQL 查询 ClickHouse 变得非常简单。默认情况下,ClickHouse 监听 8123 端口,使用 SSL 时则监听 8443 端口,后者在 ClickHouse Cloud 中开放。该接口支持 HTTP 压缩和会话。
-
输出格式 ——支持 70 多种输出数据格式,包括 20 种 JSON 子格式,便于 JavaScript 解析。
-
查询参数 ——支持模板化查询,增强对 SQL 注入的防护能力。
-
基于角色的访问控制 (RBAC) ——允许管理员限制对特定表和行的访问。
-
查询复杂度限制 ——用户具有只读权限,查询的复杂性和资源使用也受到限制。Playground 中的每次查询最多读取 100 亿行,返回 1000 行结果。
-
配额 ——限制来自每个客户端(基于 IP 地址)的查询次数,以防止恶意客户端使数据库过载。在 Playground 中,用户每小时最多可查询 60 次。
最后三项尤为关键,使我们能够将 demo 背后的 ClickHouse Cloud 实例公开至互联网,并安全地提供只读凭据。具体配置请参见此处。
UI 开发过程中还大量使用了我们自有的组件库 click-ui。该库提供了一组符合品牌的 React 组件,加速开发并确保一致的交互体验,让我们避免在细节调整上花费大量时间,尤其适合快速搭建 demo!
此外,我们还采用了 Apache Echarts 图表库。这款库易于集成且文档丰富,使我们能够快速实现图表功能。

高效运行 demo playground
demo playground 是任何 OSS 数据库的重要组成部分,但我们也必须控制服务成本。配额设置是其中的一部分,以确保公平使用,避免资源被单一用户过度占用。此外,ClickHouse Cloud 提供了存储与计算分离的架构,数据存储在对象存储中,从而大幅降低数据存储成本,并使我们在增加 demo 数据集时能够实现无限扩展。

虽然 ClickHouse Cloud 支持自动扩展,但当前集群配置为 3 个节点,每个节点 30 个虚拟 CPU——主要是因为我们预计用户的查询负载相对稳定。我们监控资源消耗并设置告警,并根据需求审查资源,以便必要时进行垂直或水平扩展。
最后,尽管当前数据集是静态的,接下来的工作将重点放在确保尽可能多的数据集保持更新。我们计划利用 ClickHouse Cloud 的两个核心特性:
-
ClickPipes ——一个托管集成平台,使数据导入 ClickHouse 更简单。虽然需要确保数据集变化定期在 Kafka 或对象存储中可用,但这将显著简化数据加载过程。
-
计算-计算分离 ——目前在预览阶段,它允许灵活创建多个计算节点组,每组拥有独立端点,共享相同的对象存储。此架构可以将不同的工作负载隔离,支持更精细的资源分配。对于 playground,这意味着我们可以为写入操作分配独立的计算资源,既不影响用户查询性能,又可以独立扩展,实现更优的成本效益。
技术亮点概述
尽管 demo UI 较为简洁,但有一项功能的实现细节值得分享。ClickHouse 的新用户经常提到,clickhouse-client 中的查询反馈是他们首次运行查询时的亮点之一。

随着用户编写更复杂的查询,这种反馈变得愈加重要,不仅用于估算查询耗时,还可用于评估性能和资源消耗。我们希望 playground 能提供类似的体验,并在查询超出复杂度限制(如扫描超 100 亿行)且可能无法完成时支持用户取消查询。
虽然 ClickHouse 的 HTTP 接口在查询执行时会发送响应头,但这些不被浏览器的 fetch API 支持且较难读取。尽管有替代方案,例如使用 JSONEachRowWithProgress 格式在响应流中返回进度,但这些方法会增加开销且效果不理想。因此,我们为每个查询分配唯一的查询 ID,并通过每隔 100 毫秒执行一次的独立查询,检查 system.processes 表的进度:
SELECT
sum(read_rows) AS read_rows,
sum(total_rows_approx) AS total_rows,
sum(read_bytes) AS read_bytes,
read_rows / max(elapsed) AS rps,
read_bytes / max(elapsed) AS bps,
formatReadableQuantity(read_rows) AS formatted_rows,
formatReadableQuantity(total_rows) AS formatted_total_rows,
formatReadableSize(read_bytes) AS formatted_bytes,
formatReadableQuantity(rps) AS formatted_rps,
formatReadableSize(bps) AS formatted_bps
FROM clusterAllReplicas(default, system.processes)
WHERE (initial_user = 'demo') AND startsWith(query_id, {uuid:String})
此查询在 monitor 用户下运行,该用户的行读取复杂度限制较低,但每小时查询配额较高,从而可以在查询运行时提供详细的进度信息。

如何贡献查询和数据集
playground 支持用户在本地保存查询(及配置的图表)。这些数据仅保存在浏览器存储中,但查询和图表可通过链接分享。如果您认为某个查询值得记录并向更广泛的社区分享为官方示例,欢迎在示例查询文件的源代码库中提交问题或 PR。我们也会确保文档中新增的示例查询和数据集在 playground 中可用。
正如我们提到的,我们希望简化示例查询的提交流程,以提升用户体验。
展望未来
我们将继续优化 SQL playground,主要关注以下三个方面:
-
实时数据集 ——确保数据集在新数据发布时得到及时更新。尽管部分数据集不会变化,但其他数据集(如 GitHub 事件)可以实现实时更新。我们预计这将是一个渐进的过程。
-
共享小部件 ——我们已在文档和博客中链接了所有示例查询至新 playground,但理想情况下,用户可以直接在页面中运行查询。为此,我们计划提供查询小部件,可嵌入各页面上,直接呈现结果和图表。同样,该小部件也可用于论坛或讨论场景,以增强社区协作。
-
简化分享流程 ——当前共享新数据集和示例查询的流程有些繁琐,我们正在探索更便捷的方法。
敬请关注未来的更新!
总结
全新的 ClickHouse SQL Playground 为社区和数据爱好者提供了一个平台,使他们能够使用真实数据集进行探索、实验和分享见解,同时学习 ClickHouse。我们希望用户能充分利用该 playground,并鼓励您分享反馈(以及您最喜爱的查询)!
征稿启示
面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

联系我们
手机号:13910395701
邮箱:Tracy.Wang@clickhouse.com
满足您所有的在线分析列式数据库管理需求
1369

被折叠的 条评论
为什么被折叠?



