clickhouse-client 交互式执行
使用方法,直接运行 clickhouse-client 命令
导入数据范例:
cat /tmp/test_fetch.tsv | clickhouse-client --query "INSERT INTO test_fetch FORMAT TSV"
导出数据范例:
clickhouse-client --query "SELECT * FROM test_fetch" > /tmp/test_fetch.tsv
通过交互式 clickhouse-client 运行的SQL语句,会被记录到如下文件:
~/.clickhouse-client-history
clickhouse-client 非交互式执行
默认情况下,clickhouse-client 命令一次只能运行一条SQL语句
如果要运行多条语句,使用 --multiquery 参数,范例如下
clickhouse-client -h 127.0.0.1 --multiquery --query="SELECT 1;SELECT 2;SELECT 3"
clickhouse-client 常用参数
--host/-h 服务端地址,默认值为 localhost 。可修改 config.xm 中的 listen_host 改变默认值。
--port 服务端TCP端口,默认值为 9000。可修改 config.xm 中的 tcp_port 改变默认值。
--user/-u 登录的用户名,默认值为 default 。
--password 登录的密码,默认值为空。
--database/-d 登录的数据库,默认值为 default 。
--query/-q 只能在非交互式查询使用,用于指定SQL语句。
--multiquery/-n 在非交互式执行时,允许一次执行多条SQL语句。
--time/-t 在非交互式执行,会打印每条SQL的执行时间。
clickhouse-local
clickhouse-local 是非交互式运行的,只能够使用File引擎。每次执行都需要指定数据来源,直接读取本地的文件或者借助操作系统命令进行查询,不用部署clickhouse-server。
范例:直接读取本地的文件进行查询
[root@testdb62 ~]# cat test.txt
"ZheJiang","HangZhou"
"JiangSu","NanJIng"
"GuangDong","GuangZhou"
[root@testdb62 ~]# clickhouse-local -N test_table --file='test.txt' --input-format=CSV -S "province String, city String" -q "SELECT * from test_table FORMAT Pretty"
┏━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ province ┃ city ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━┩
│ ZheJiang │ HangZhou │
├───────────┼───────────┤
│ JiangSu │ NanJIng │
├───────────┼───────────┤
│ GuangDong │ GuangZhou │
└───────────┴───────────┘
范例:通过操作系统命令,实现对系统用户内存用量的查询
[root@testdb62 ~]# 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 mem_total FROM table GROUP BY user ORDER BY mem_total DESC FORMAT PrettyCompact"
┌─user─────┬─mem_total─┐
│ mysql │ 8.7 │
│ clickho+ │ 5.1 │
│ root │ 0.5 │
│ dbus │ 0 │
│ postfix │ 0 │
│ polkitd │ 0 │
│ chrony │ 0 │
└──────────┴───────────┘
clickhouse-local 常用参数说明
-S/--structure 表结构的简写方式,例如下面两种方式是相同的
使用-S简写
clickhouse-local -S "id Int64"
使用DDL
clickhouse-local -q "CREATE TABLE test_table (id Int64) ENGINE=File(CSV,stdin)"
-N/--table 表名称,默认值是table
范例: clickhouse-local -S "id Int64" -N "test_table" -q "SELECT id FROM test_table"
-if/--input-format 输入数据的格式,默认值是TSV
范例: echo -e "1\n2\n3" | clickhouse-local -S "id Int64" -if "CSV" -N "test_table"
-f/--file 输入数据的地址,默认值是stdin标准输入
-q/--query 待执行的SQL语句,多条语句直接以分号间隔