何时使用 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 二进制文件执行。下载最新版本最简单的方法是使用以下命令:
你刚下载的二进制文件可以运行各种 ClickHouse 工具和实用工具。如果你想将 ClickHouse 作为数据库服务器运行,请参阅快速入门。
使用 SQL 查询文件中的数据
clickhouse-local 的一个常见用途是对文件执行临时查询:无需先将数据插入表中。clickhouse-local 可以将文件中的数据流式导入临时表,并执行你的 SQL。
如果文件与 clickhouse-local 位于同一台机器上,只需指定要加载的文件即可。下面的 reviews.tsv 文件包含部分 Amazon 产品评论样本:
file 表函数 会创建一个表,你可以使用 DESCRIBE 查看推断出的 schema:
查询 AWS S3 中 Parquet 文件的数据
clickhouse-local 和 s3 表函数直接在原位置查询该文件 (无需先将数据插入 ClickHouse 表中) 。我们在一个公共 bucket 中有一个名为 house_0.parquet 的文件,其中包含英国已售房产的价格数据。让我们来看看它有多少行:
格式转换
clickhouse-local 在不同格式之间进行数据转换。示例:
--copy 参数这样写:
用法
clickhouse-local 可以访问同一主机上 ClickHouse 服务器的数据,且不依赖服务器配置。它还支持通过 --config-file 参数加载服务器配置。对于临时数据,默认会创建一个唯一的临时数据目录。
基本用法 (Linux) :
也可通过 WSL2 在 Windows 上使用
clickhouse-local。-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 [ <bool> ]— 在执行前打印每个查询。接受可选的布尔值。在交互模式中默认启用,在批次模式中默认禁用。注意:由于--echo现在接受可选值,紧跟在单独的--echo后面的查询位置参数会被当作它的值;请改用--echo --query "..."、--echo -q "..."、--echo=false,或通过管道传入stdin。--echo-formatted [ <bool> ]— 格式化回显的查询。接受可选的布尔值。在交互模式中默认启用,在批次模式中默认禁用。--echo-query-id [ <bool> ]— 在执行前打印query_id。接受可选的布尔值。在交互模式中默认启用,在批次模式中默认禁用。--echo-query-separator <string>— 在格式化回显的查询前打印此分隔符 (需要--echo-formatted) ,这样更容易区分输入的查询与其重新格式化后的回显。默认为空 (禁用) 。--highlight,--hilite<bool>— 切换命令提示符和回显查询的语法高亮。默认启用。仅在输出到终端时应用高亮。--hints <bool>— 当光标位于输入末尾时,显示输入时自动补全提示 (内联 “ghost” 文本) ,给出最佳匹配建议。可使用 Up/Down (或 Ctrl-Up/Ctrl-Down) 浏览提示;使用 Tab 或 Right 接受内联提示;Enter仅在已显式选中某个提示后才会接受该提示,否则会运行查询;Tab还会打开经典补全列表。需要启用--highlight(提示需要颜色) 以及建议机制 (因此--disable_suggestion也会将其关闭) 。默认启用。--verbose— 输出更多查询执行细节。--logger.console— 输出到控制台。--logger.log— 日志文件名。--logger.level— 日志级别。--ignore-error— 查询失败时不中止处理。-c,--config-file— 配置文件路径,其格式与 ClickHouse 服务器 相同;默认配置为空。--no-system-tables— 不加载系统表。--help—clickhouse-local的参数参考。-V,--version— 打印版本信息并退出。
--config-file 更常用。
命令
LS 命令
Query
Response
-q 参数将其作为查询执行:
Response
CLEAR 命令
clear 命令,或许多终端中的 Ctrl+L) 。这是一个客户端侧操作:不会发送到 SQL 引擎。
在 clickhouse-local 中,该元命令会在 交互式 模式以及 -q 和 --queries-file 输入中被识别 (与 -q 走相同的客户端路径,思路上类似 ls) ,因此单独输入 clear 不会产生 UNKNOWN_IDENTIFIER 错误。远程 clickhouse-client --queries-file 的行为保持不变:文件内容仍然只会作为 SQL 执行 (不支持文本级元命令) 。
在 clickhouse-client 中,它仅在 交互式 模式下可被识别。使用 -q 或查询文件时,clear 仍会按 SQL 解析,因此自动化场景会保持之前的报错行为,而不会让拼写错误变成无提示的空操作。
支持的形式:clear、CLEAR、/clear (可选的末尾 ; 会被忽略) 。如果标准输出不是终端 (例如通过管道传递输出时) ,该元命令在可识别的情况下仍会被接受,但不会输出控制序列。
对于 clickhouse-local 和 -q:
示例
Query
Query
stdin 或 --file 参数,也可以通过 file 表函数 打开任意多个文件:
Query
Query
Response
启动 TCP 和 HTTP 监听器
clickhouse-local 可以转换为一个轻量级服务器,用于接受 TCP (native protocol) 和 HTTP 连接。当你希望让其他 ClickHouse 工具或应用程序访问正在运行的 clickhouse-local 实例中的数据库和表时,这会很有用。请注意,每个传入连接都会获得各自独立的会话:交互式 clickhouse-local 会话中的临时表和会话级设置对外部连接不可见。
使用 SYSTEM START LISTEN 打开监听器,使用 SYSTEM STOP LISTEN 关闭它:
--listen_host、--tcp_port 和 --http_port 选项用于配置绑定地址和端口。默认端口为:TCP 使用 9000,HTTP 使用 8123。