高级教程
概述
学习如何使用纽约市出租车示例数据集将数据导入并查询 ClickHouse。
先决条件
您需要访问正在运行的 ClickHouse 服务才能完成本教程。有关说明,请参阅 快速入门 指南。
创建新表
纽约市出租车数据集包含有关数百万次出租车行程的详细信息,列包括小费金额、通行费、付款类型等。创建一个表来存储此数据。
-
连接到 SQL 控制台
- 对于 ClickHouse Cloud,从下拉菜单中选择一个服务,然后从左侧导航菜单中选择 SQL 控制台。
- 对于自托管 ClickHouse,请连接到 SQL 控制台,地址为
https://_hostname_:8443/play。请咨询您的 ClickHouse 管理员以获取详细信息。
-
在
default数据库中创建以下trips表
添加数据集
现在您已经创建了一个表,请从 S3 中的 CSV 文件中添加纽约市出租车数据。
-
以下命令将 ~2,000,000 行插入到您的
trips表中,来自 S3 中的两个不同文件:trips_1.tsv.gz和trips_2.tsv.gz -
等待
INSERT完成。下载 150 MB 的数据可能需要一些时间。 -
插入完成后,验证是否成功
此查询应返回 1,999,657 行。
分析数据
运行一些查询来分析数据。探索以下示例或尝试您自己的 SQL 查询。
-
计算平均小费金额
预期输出
-
根据乘客数量计算平均成本
预期输出
passenger_count的范围是 0 到 9 -
计算每个社区每天的接客数量
预期输出
-
计算每个行程的持续时间(分钟),然后按行程持续时间对结果进行分组
预期输出
-
显示每个社区每天的接客数量
预期输出
-
检索前往拉瓜迪亚或肯尼迪机场的行程
预期输出
创建字典
字典是存储在内存中的键值对映射。有关详细信息,请参阅 字典
创建与 ClickHouse 服务中的表关联的字典。该表和字典基于一个 CSV 文件,其中包含纽约市每个社区的一行。
这些社区映射到纽约市五个行政区的名称(布朗克斯、布鲁克林、曼哈顿、皇后区和斯塔滕岛),以及纽瓦克机场 (EWR)。
以下是您在表格格式中使用的 CSV 文件的摘录。文件中的 LocationID 列映射到 trips 表中的 pickup_nyct2010_gid 和 dropoff_nyct2010_gid 列
| LocationID | Borough | Zone | service_zone |
|---|---|---|---|
| 1 | EWR | Newark Airport | EWR |
| 2 | Queens | Jamaica Bay | Boro Zone |
| 3 | Bronx | Allerton/Pelham Gardens | Boro Zone |
| 4 | Manhattan | Alphabet City | Yellow Zone |
| 5 | Staten Island | Arden Heights | Boro Zone |
- 运行以下 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 刷新字典数据。
-
验证是否成功。以下内容应返回 265 行,或每个社区一行
-
使用
dictGet函数(或其变体)从字典中检索一个值。您传入字典的名称、您想要的值以及键(在我们的示例中是taxi_zone_dictionary的LocationID列)。例如,以下查询返回
LocationID为 132 的Borough,它对应于肯尼迪机场)肯尼迪机场位于皇后区。请注意,检索值的时间基本上为 0
-
使用
dictHas函数查看字典中是否存在某个键。例如,以下查询返回1(在 ClickHouse 中为“true”) -
以下查询返回 0,因为 4567 不是字典中
LocationID的值 -
使用
dictGet函数在查询中检索行政区名称。例如此查询汇总了以拉瓜迪亚或肯尼迪机场结束的出租车行程数量。结果如下所示,请注意,有相当多的行程的接客社区未知
执行联接
编写一些将 taxi_zone_dictionary 与您的 trips 表联接的查询。
-
从一个简单的
JOIN开始,其行为类似于上面的机场查询响应与之前的
dictGet查询相同注意请注意,上述
JOIN查询的输出与之前使用dictGetOrDefault的查询相同(除了未包含Unknown值)。在幕后,ClickHouse 实际上正在调用taxi_zone_dictionary字典的dictGet函数,但JOIN语法对 SQL 开发人员来说更熟悉。 -
此查询返回小费金额最高的 1000 个行程的行,然后将每行与字典进行内部联接
注意通常,我们避免在 ClickHouse 中经常使用
SELECT *。您应该只检索实际需要的列。
后续步骤
通过以下文档了解有关 ClickHouse 的更多信息
- ClickHouse 中的主索引简介:了解 ClickHouse 如何使用稀疏主索引在查询期间有效地找到相关数据。
- 集成外部数据源:查看数据源集成选项,包括文件、Kafka、PostgreSQL、数据管道等。
- 在 ClickHouse 中可视化数据:将您最喜欢的 UI/BI 工具连接到 ClickHouse。
- SQL 参考:浏览 ClickHouse 中用于转换、处理和分析数据的 SQL 函数。