在本教程中,您将探索如何使用 ClickHouse 对海量数据运行分析查询。
此外,您还将学习如何使用字典扩充数据,以及如何编写连接查询。
前置条件
完成本教程需要准备:- 一个 ClickHouse Cloud 账户 (注册即可获赠 300 美元免费额度)
- 一个 ClickHouse Cloud 服务
创建表
本教程使用的数据集是纽约市出租车数据集,其中包含数百万次出租车行程的详细信息,涵盖小费金额、通行费、支付方式等列。
- 在左侧菜单中选择 SQL 控制台
- 点击主页图标旁的 + 选项卡,新建一个查询
- 在 SQL 编辑器中输入以下查询,然后点击 运行:
Expandable
插入数据
创建好表之后,接下来从 S3 中的 CSV 文件导入纽约市出租车数据。以下命令会从 S3 中的两个文件 等待数据插入完成,此过程大约会下载 150MB 数据。
数据插入完成后,查看 您应该会得到 1,999,657 行结果
trips_1.tsv.gz 和 trips_2.tsv.gz 向 trips 表插入约 2,000,000 行数据:Expandable
trips 表中的行数:分析数据
数据加载完成后,即可运行一些查询来分析数据。
-
计算平均小费金额:
-
按乘客人数计算平均费用:
-
计算每个社区每天的上车次数:
-
计算每次行程的时长 (以分钟计) ,然后按行程时长对结果分组:
-
按小时细分显示每个社区在一天中各时段的上车次数:
创建字典
接下来,您将创建一个名为 验证操作是否成功。以下查询应返回 265 行,即每个社区一行:
taxi_zone_dictionary 的字典 (即存储在内存中的键值对映射) ,用于建立位置 ID 与纽约市行政区名称之间的映射关系,其数据来源于一个包含纽约市所有社区的 CSV 文件。
这些位置 ID 对应 trips 表中的 pickup_nyct2010_gid 和 dropoff_nyct2010_gid 列。下表摘录了您将使用的 CSV 文件的部分内容。文件中的 LocationID 列对应 trips 表中的 pickup_nyct2010_gid 和 dropoff_nyct2010_gid 列:运行以下 SQL 命令,创建名为
taxi_zone_dictionary 的字典,并使用 S3 中的 CSV 文件填充该字典。该文件的 URL 为 https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv。将
LIFETIME 设置为 0 会禁用自动更新,以避免向我们的 S3 桶发送不必要的请求流量。在其他场景下,您可以按需进行不同的配置。详情请参见 使用 LIFETIME 刷新字典数据。使用字典执行查询
你可以使用 JFK 位于 Queens (皇后区) 。请注意,检索该值所用的时间几乎为 0:使用 以下查询返回 0,因为字典中的 在查询中使用 此查询按行政区统计了终点为 LaGuardia 或 JFK 机场的出租车行程数。结果如下所示,可以看到有相当多行程的上车社区是未知的:
dictGet 函数 (或其变体) 从字典中获取值。
只需传入字典名称、要获取的值以及键 (在本示例中为 taxi_zone_dictionary 的 LocationID 列) ,即可得到对应的值。
例如,以下查询返回 LocationID 为 132 (即 JFK 机场) 的 Borough:dictHas 函数可以检查字典中是否存在某个键。例如,以下查询会返回 1 (在 ClickHouse 中表示 “true”) :LocationID 不包含值 4567:dictGet 函数获取行政区的名称。例如:执行连接
最后,编写一些查询,将 返回的结果与 此查询返回小费金额最高的 1000 条行程记录,然后将每一行与该字典进行内连接:
taxi_zone_dictionary 与你的 trips 表进行连接。先从一个简单的 JOIN 开始,其作用与上文的机场查询类似:dictGet 查询的结果完全相同:请注意,上述
JOIN 查询的输出与前面使用 dictGetOrDefault 的查询结果相同 (只是不包含 Unknown 值) 。
实际上,ClickHouse 在底层是对 taxi_zone_dictionary 字典调用 dictGet 函数,只不过 SQL 开发人员对 JOIN 语法更为熟悉。后续步骤
如需进一步了解 ClickHouse,请参阅以下文档:- ClickHouse 主索引简介:了解 ClickHouse 如何在查询时利用稀疏主索引高效定位相关数据。
- 集成外部数据源:了解各类数据源集成方案,包括文件、Kafka、PostgreSQL、数据管道等。
- 在 ClickHouse 中可视化数据:将您常用的 UI/BI 工具连接到 ClickHouse。
- SQL 参考:浏览 ClickHouse 中可用于转换、处理和分析数据的 SQL 函数。