ClickHouse/docs/zh/operations/utilities/clickhouse-local.md
Azat Khuzhin cc9afe6f6e Replace --no-system-tables with loading virtual tables of system database lazily
First of all the problem is that that simple 'SELECT 1' cannot be runned
without system.one, which makes --no-system-tables almost useless:

    $ ./clickhouse-debug local --no-system-tables -q "select 1"
    Code: 81. DB::Exception: Database system does not exist. (UNKNOWN_DATABASE)

Secondly there are just too much flags, and this one
(--no-system-tables) is too damn specific.

This patch should improve startup time of the clickhouse-local almost
3x in debug builds.

Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2023-12-09 23:08:29 +01:00

3.9 KiB
Raw Blame History

slug sidebar_position sidebar_label
/zh/operations/utilities/clickhouse-local 60 clickhouse-local

clickhouse-local

clickhouse-local模式可以使您能够对本地文件执行快速处理而无需部署和配置ClickHouse服务器。

接受表示表格tables的数据并使用ClickHouse SQL方言查询它们。

clickhouse-local使用与ClickHouse Server相同的核心因此它支持大多数功能以及相同的格式和表引擎。

默认情况下clickhouse-local不能访问同一主机上的数据,但它支持使用--config-file方式加载服务器配置。

!!! warning "警告" 不建议将生产服务器配置加载到clickhouse-local因为数据可以在人为错误的情况下被损坏。

对于临时数据,默认情况下会创建一个唯一的临时数据目录。

用途

基本用法:

clickhouse-local --structure "table_structure" --input-format "format_of_incoming_data" -q "query"

参数:

  • -S, --structure — 输入数据的表结构。
  • --input-format — 输入格式化类型, 默认是TSV
  • -f, --file — 数据路径, 默认是stdin
  • -q, --query — 要查询的SQL语句使用;做分隔符。您必须指定queryqueries-file选项。
  • --queries-file - 包含执行查询的文件路径。您必须指定queryqueries-file选项。
  • -N, --table — 数据输出的表名,默认是table
  • --format, --output-format — 输出格式化类型, 默认是TSV
  • -d, --database — 默认数据库名,默认是_local
  • --stacktrace — 是否在出现异常时输出栈信息。
  • --echo — 执行前打印查询。
  • --verbose — debug显示查询的详细信息。
  • --logger.console — 日志显示到控制台。
  • --logger.log — 日志文件名。
  • --logger.level — 日志级别。
  • --ignore-error — 当查询失败时,不停止处理。
  • -c, --config-file — 与ClickHouse服务器格式相同配置文件的路径默认情况下配置为空。
  • --helpclickhouse-local使用帮助信息。
  • -V, --version — 打印版本信息并退出。

对于每个ClickHouse配置的参数也可以单独使用可以不使用--config-file指定。

示例

echo -e "1,2\n3,4" | clickhouse-local -S "a Int64, b Int64" --input-format "CSV" -q "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 -q "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 table function:

$ 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 -S "user String, mem Float64" -q "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 │
├──────────┼──────────┤
...