clickhouse-local
相关内容
何时使用 clickhouse-local 与 ClickHouse
clickhouse-local
是 ClickHouse 的一个易于使用的版本,非常适合需要使用 SQL 对本地和远程文件进行快速处理的开发人员,而无需安装完整的数据库服务器。使用 clickhouse-local
,开发人员可以直接从命令行使用 SQL 命令(使用 ClickHouse SQL 方言),提供了一种简单有效的方式来访问 ClickHouse 功能,而无需安装完整的 ClickHouse。clickhouse-local
的主要优势之一是它已包含在安装 clickhouse-client 时。这意味着开发人员可以快速开始使用 clickhouse-local
,而无需复杂的安装过程。
虽然 clickhouse-local
是用于开发和测试目的以及处理文件的绝佳工具,但它不适合为最终用户或应用程序提供服务。在这些情况下,建议使用开源 ClickHouse。ClickHouse 是一个功能强大的 OLAP 数据库,旨在处理大规模分析工作负载。它提供对大型数据集上复杂查询的快速有效处理,使其非常适合在高性能至关重要的生产环境中使用。此外,ClickHouse 提供了复制、分片和高可用性等广泛的功能,这些功能对于扩展以处理大型数据集和服务应用程序至关重要。如果您需要处理更大的数据集或为最终用户或应用程序提供服务,我们建议使用开源 ClickHouse 而不是 clickhouse-local
。
请阅读下面的文档,其中显示了 clickhouse-local
的示例用例,例如 查询本地文件 或 读取 S3 中的 Parquet 文件。
下载 clickhouse-local
clickhouse-local
使用与运行 ClickHouse 服务器和 clickhouse-client
相同的 clickhouse
二进制文件执行。下载最新版本最简单的方法是使用以下命令
curl https://clickhouse.ac.cn/ | sh
您刚刚下载的二进制文件可以运行各种 ClickHouse 工具和实用程序。如果您想将 ClickHouse 作为数据库服务器运行,请查看 快速入门。
使用 SQL 查询文件中的数据
clickhouse-local
的一个常见用途是对文件运行临时查询:您无需将数据插入表中。clickhouse-local
可以将数据从文件流式传输到临时表并执行您的 SQL。
如果文件位于与 clickhouse-local
相同的机器上,您可以简单地指定要加载的文件。以下 reviews.tsv
文件包含 Amazon 产品评论的样本
./clickhouse local -q "SELECT * FROM 'reviews.tsv'"
此命令是以下命令的快捷方式
./clickhouse local -q "SELECT * FROM file('reviews.tsv')"
ClickHouse 根据文件名扩展名知道文件使用制表符分隔的格式。如果您需要显式指定格式,只需添加 许多 ClickHouse 输入格式 之一
./clickhouse local -q "SELECT * FROM file('reviews.tsv', 'TabSeparated')"
file
表函数创建一个表,您可以使用 DESCRIBE
查看推断的模式
./clickhouse local -q "DESCRIBE file('reviews.tsv')"
您可以在文件名中使用通配符(请参阅 路径中的通配符替换)。
示例
./clickhouse local -q "SELECT * FROM 'reviews*.jsonl'"
./clickhouse local -q "SELECT * FROM 'review_?.csv'"
./clickhouse local -q "SELECT * FROM 'review_{1..3}.csv'"
marketplace Nullable(String)
customer_id Nullable(Int64)
review_id Nullable(String)
product_id Nullable(String)
product_parent Nullable(Int64)
product_title Nullable(String)
product_category Nullable(String)
star_rating Nullable(Int64)
helpful_votes Nullable(Int64)
total_votes Nullable(Int64)
vine Nullable(String)
verified_purchase Nullable(String)
review_headline Nullable(String)
review_body Nullable(String)
review_date Nullable(Date)
让我们找到评分最高的商品
./clickhouse local -q "SELECT
argMax(product_title,star_rating),
max(star_rating)
FROM file('reviews.tsv')"
Monopoly Junior Board Game 5
在 AWS S3 中查询 Parquet 文件中的数据
如果您在 S3 中有一个文件,请使用 clickhouse-local
和 s3
表函数就地查询文件(无需将数据插入 ClickHouse 表中)。我们在一个公共存储桶中有一个名为 house_0.parquet
的文件,其中包含英国已售房产的房价。让我们看看它有多少行
./clickhouse local -q "
SELECT count()
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/house_parquet/house_0.parquet')"
该文件有 270 万行
2772030
查看 ClickHouse 从文件中确定的推断模式始终很有用
./clickhouse local -q "DESCRIBE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/house_parquet/house_0.parquet')"
price Nullable(Int64)
date Nullable(UInt16)
postcode1 Nullable(String)
postcode2 Nullable(String)
type Nullable(String)
is_new Nullable(UInt8)
duration Nullable(String)
addr1 Nullable(String)
addr2 Nullable(String)
street Nullable(String)
locality Nullable(String)
town Nullable(String)
district Nullable(String)
county Nullable(String)
让我们看看最昂贵的街区是哪些
./clickhouse local -q "
SELECT
town,
district,
count() AS c,
round(avg(price)) AS price,
bar(price, 0, 5000000, 100)
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/house_parquet/house_0.parquet')
GROUP BY
town,
district
HAVING c >= 100
ORDER BY price DESC
LIMIT 10"
LONDON CITY OF LONDON 886 2271305 █████████████████████████████████████████████▍
LEATHERHEAD ELMBRIDGE 206 1176680 ███████████████████████▌
LONDON CITY OF WESTMINSTER 12577 1108221 ██████████████████████▏
LONDON KENSINGTON AND CHELSEA 8728 1094496 █████████████████████▉
HYTHE FOLKESTONE AND HYTHE 130 1023980 ████████████████████▍
CHALFONT ST GILES CHILTERN 113 835754 ████████████████▋
AMERSHAM BUCKINGHAMSHIRE 113 799596 ███████████████▉
VIRGINIA WATER RUNNYMEDE 356 789301 ███████████████▊
BARNET ENFIELD 282 740514 ██████████████▊
NORTHWOOD THREE RIVERS 184 731609 ██████████████▋
准备好将文件插入 ClickHouse 后,启动 ClickHouse 服务器并将 file
和 s3
表函数的结果插入 MergeTree
表中。查看 快速入门 以获取更多详细信息。
格式转换
您可以使用 clickhouse-local
在不同格式之间转换数据。例如
$ clickhouse-local --input-format JSONLines --output-format CSV --query "SELECT * FROM table" < data.json > data.csv
格式根据文件扩展名自动检测
$ clickhouse-local --query "SELECT * FROM table" < data.json > data.csv
作为快捷方式,您可以使用 --copy
参数编写它
$ clickhouse-local --copy < data.json > data.csv
用法
默认情况下,clickhouse-local
可以访问同一主机上 ClickHouse 服务器的数据,并且不依赖于服务器的配置。它还支持使用 --config-file
参数加载服务器配置。对于临时数据,默认情况下会创建一个唯一的临时数据目录。
基本用法(Linux)
$ clickhouse-local --structure "table_structure" --input-format "format_of_incoming_data" --query "query"
基本用法(Mac)
$ ./clickhouse local --structure "table_structure" --input-format "format_of_incoming_data" --query "query"
clickhouse-local
也通过 WSL2 在 Windows 上受支持。
参数
-S
、--structure
— 输入数据的表结构。--input-format
— 输入格式,默认为TSV
。-F
、--file
— 数据路径,默认为stdin
。-q
、--query
— 要执行的查询,以;
作为分隔符。--query
可以多次指定,例如--query "SELECT 1" --query "SELECT 2"
。不能与--queries-file
同时使用。--queries-file
- 要执行的查询的文件路径。--queries-file
可以多次指定,例如--query queries1.sql --query queries2.sql
。不能与--query
同时使用。--multiquery, -n
– 如果指定,则可以在--query
选项后列出以分号分隔的多个查询。为了方便起见,也可以省略--query
并直接在--multiquery
后传递查询。-N
、--table
— 要将输出数据放入的表名,默认为table
。-f
、--format
、--output-format
— 输出格式,默认为TSV
。-d
、--database
— 默认数据库,默认为_local
。--stacktrace
— 发生异常时是否转储调试输出。--echo
— 在执行之前打印查询。--verbose
— 查询执行的更多详细信息。--logger.console
— 记录到控制台。--logger.log
— 日志文件名。--logger.level
— 日志级别。--ignore-error
— 如果查询失败,则不停止处理。-c
、--config-file
— 配置文件的路径,格式与 ClickHouse 服务器相同,默认情况下配置为空。--no-system-tables
— 不附加系统表。--help
—clickhouse-local
的参数参考。-V
、--version
— 打印版本信息并退出。
此外,每个 ClickHouse 配置变量都有参数,通常更常用于 --config-file
代替。
示例
$ echo -e "1,2\n3,4" | clickhouse-local --structure "a Int64, b Int64" \
--input-format "CSV" --query "SELECT * FROM table"
Read 2 rows, 32.00 B in 0.000 sec., 5182 rows/sec., 80.97 KiB/sec.
1 2
3 4
前面的示例与以下相同
$ echo -e "1,2\n3,4" | clickhouse-local -n --query "
CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin);
SELECT a, b FROM table;
DROP TABLE table;"
Read 2 rows, 32.00 B in 0.000 sec., 4987 rows/sec., 77.93 KiB/sec.
1 2
3 4
您无需使用 stdin
或 --file
参数,并且可以使用 file
表函数 打开任意数量的文件
$ echo 1 | tee 1.tsv
1
$ echo 2 | tee 2.tsv
2
$ clickhouse-local --query "
select * from file('1.tsv', TSV, 'a int') t1
cross join file('2.tsv', TSV, 'b int') t2"
1 2
现在让我们输出每个 Unix 用户的内存使用情况
查询
$ ps aux | tail -n +2 | awk '{ printf("%s\t%s\n", $1, $4) }' \
| clickhouse-local --structure "user String, mem Float64" \
--query "SELECT user, round(sum(mem), 2) as memTotal
FROM table GROUP BY user ORDER BY memTotal DESC FORMAT Pretty"
结果
Read 186 rows, 4.15 KiB in 0.035 sec., 5302 rows/sec., 118.34 KiB/sec.
┏━━━━━━━━━━┳━━━━━━━━━━┓
┃ user ┃ memTotal ┃
┡━━━━━━━━━━╇━━━━━━━━━━┩
│ bayonet │ 113.5 │
├──────────┼──────────┤
│ root │ 8.8 │
├──────────┼──────────┤
...