我在Clickhouse中创建了一个表:
CREATE TABLE stock
(
plant Int32,
code Int32,
service_level Float32,
qty Int32
) ENGINE = Log
Run Code Online (Sandbox Code Playgroud)
有一个数据文件
:~$ head -n 10 /var/rs_mail/IN/qv_stock_20160620035119.csv
2010,646,1.00,13
2010,2486,1.00,19
2010,8178,1.00,10
2010,15707,1.00,4
2010,15708,1.00,10
2010,15718,1.00,4
2010,16951,1.00,8
2010,17615,1.00,13
2010,17616,1.00,4
2010,17617,1.00,8
Run Code Online (Sandbox Code Playgroud)
我正在尝试加载数据:
:~$ cat /var/rs_mail/IN/qv_stock_20160620035119.csv | clickhouse-client --query="INSERT INTO stock FORMAT CSV";
Run Code Online (Sandbox Code Playgroud)
我得到一个错误
\n2010: 7615,1.00,13ion: Cannot parse input: expected , before: 2010,646,1.00,13
Row 1:
Column 0, name: plant, type: Int32, ERROR: text "2010,64" is not like Int32
: (at row 1)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
文件: https: //yadi.sk/d/ijJlmnBjsjBVc
我已经按照此处的说明安装了 clickhouse https://github.com/Altinity/clickhouse-rpm-install。
我还在 /etc/clickhouse-server/config.xml 中启用了::。
一开始很好,如下所示:
sudo /etc/init.d/clickhouse-server restart 启动 clickhouse-server 服务: /etc/clickhouse-server/config.xml 中数据目录的路径: /var/lib/clickhouse/ DONE
但是,当我启动客户端时,它失败如下:
sudo clickhouse-client ClickHouse 客户端版本 1.1.54383。连接到本地主机:9000。代码:102. DB::NetException:来自服务器 localhost:9000, ::1 的意外数据包(预期的 Hello 或异常,收到未知数据包)
我看到 clickhouse 为每个分区键(在每个节点中)创建了多个目录。文档说目录名称格式是:分区 ID_minimum block number_maximum block number_level。知道这里是什么水平吗?一个节点上的 347 个不同的分区键(对于一张表)创建了 1358 个目录。(自定义分区)
文档建议不要有超过 1000 个分区。我们应该记住分区键的数量还是目录的数量?
另外,是否有关于如何控制这个目录数量的配置?
在 clickhouse 表中,我有多个行_id。我想要的是为每个_id列_status_set_at有最大值的地方只得到一行。这就是我目前的状态:
SELECT _id, max(_status_set_at), count(_id)
FROM pikta.candidates_states
GROUP BY _id
Run Code Online (Sandbox Code Playgroud)
因为我不能使用max()函数 atWHERE子句,如何解决这个问题?
count(_id)显示每个有多少行_id,如果查询正确,它应该显示 1。另外,就我而言,ONClickhouse 数据库中没有子句。
UPD:ONClickhouse 中有条款
我的要求是当我使用 docker-compose 启动 Clickhouse 时在其中创建数据库和表。如果是mysql,我这样做:
mysql_1:
image: mysql:5.7.16
environment:
MYSQL_DATABASE: "one"
MYSQL_USER: "one_user"
MYSQL_PASSWORD: "one_user_pass"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
- ./data/one:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
Run Code Online (Sandbox Code Playgroud)
有什么方法可以为 Clickhouse 实例实现相同的效果吗?
Clickhouse 是否可以将包含一对数组的结果转换为列?
\n\n形成这个结果:
\n\n\xe2\x94\x8c\xe2\x94\x80f1\xe2\x94\x80\xe2\x94\x80\xe2\x94\xacf2\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xacf3\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 \'a\' \xe2\x94\x82 [1,2,3] \xe2\x94\x82 [\'x\',\'y\',\'z\'] \xe2\x94\x82\n\xe2\x94\x82 \'b\' \xe2\x94\x82 [4,5,6] \xe2\x94\x82 [\'x\',\'y\',\'z\'] \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\nRun Code Online (Sandbox Code Playgroud)\n\n到 :
\n\n\xe2\x94\x8c\xe2\x94\x80f1\xe2\x94\x80\xe2\x94\x80\xe2\x94\xacx\xe2\x94\x80\xe2\x94\x80\xe2\x94\xacy\xe2\x94\x80\xe2\x94\x80\xe2\x94\xacz\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 \'a\' \xe2\x94\x82 1 \xe2\x94\x82 2 \xe2\x94\x82 3 \xe2\x94\x82\n\xe2\x94\x82 \'b\' \xe2\x94\x82 4 \xe2\x94\x82 5 \xe2\x94\x82 6 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\nRun Code Online (Sandbox Code Playgroud)\n\n这个想法是不必为每行重复标题值。
\n\n就我而言,“标头”数组 f3 通过查询唯一并连接到 f1、f2。
\n我正在尝试将 Pandas 数据框插入 Clickhouse。
这是我的代码
import pandas
import sqlalchemy as sa
uri = 'clickhouse://default:@localhost/default'
ch_db = sa.create_engine(uri)
pdf = pandas.DataFrame.from_records([
{'year': 1994, 'first_name': 'Vova'},
{'year': 1995, 'first_name': 'Anja'},
{'year': 1996, 'first_name': 'Vasja'},
{'year': 1997, 'first_name': 'Petja'},
])
pdf.to_sql('test_humans', ch_db, if_exists='append', index=False)
Run Code Online (Sandbox Code Playgroud)
这就是我收到的错误。这是否与缺少有关引擎的额外参数有关?我怎样才能解决这个问题?
异常:代码:62,e.displayText() = DB::Exception:语法错误:在位置 65 处失败(第 7 行,第 2 列):FORMAT TabSeparatedWithNamesAndTypes。预期之一:引擎,存储定义(版本 19.15.2.2(官方版本))
记录
信息:sqlalchemy.engine.base.Engine:存在表 test_ humans 信息:sqlalchemy.engine.base.Engine:{} 信息:sqlalchemy.engine.base.Engine:创建表 test_ humans (名字 TEXT,年份 BIGINT )
信息:sqlalchemy.engine.base.Engine:{} 信息:sqlalchemy.engine.base.Engine:ROLLBACK
有谁知道在创建 clickhouse 表时如何使用 mysql 中的 current_timestamp 这样的默认值?now() udf是动态的,而不是插入行的时间,它始终是当前时间,当select时它会改变。
这是我的桌子:
CREATE TABLE default.test2 (
`num` UInt32,
`dt` String,
`__inserted_time` DateTime DEFAULT now()
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test2', '{replica}')
PARTITION BY dt
ORDER BY dt
SETTINGS index_granularity = 8192
Run Code Online (Sandbox Code Playgroud)
我希望自动生成 __inserted_time 列值,因此我不必在insert into test2 (num,dt) values (1,'20191010')
我的错误,DEFAULT now() 实际上有效
当 Clickhouse 查询内存不足时,我该怎么办?你不能只是调高内存,对吧?内存也有限制,硬盘怎么配置?
SELECT
UserID,
Title
FROM
(
SELECT
L.UserID,
L.Title
FROM tutorial.hits_v1 AS L
INNER JOIN tutorial.hits_v2 AS R ON L.UserID = R.UserID
) AS T
ORDER BY UserID ASC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
#user.d/abc.xml
<?xml version="1.0"?>
<yandex>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<!-- Maximum memory usage for processing single query, in bytes. -->
<max_memory_usage>350000000</max_memory_usage>
<max_memory_usage_for_user>350000000</max_memory_usage_for_user>
<max_bytes_before_external_group_by>100000000</max_bytes_before_external_group_by>
<max_bytes_before_external_sort>100000000</max_bytes_before_external_sort>
</default>
</profiles>
</yandex>
Run Code Online (Sandbox Code Playgroud) 我们有一个中等规模的 clickhouse 集群,大约有 30 个节点,并且想要收集其使用情况统计数据。我们希望使用针对系统表的计划查询来做到这一点,但使用普通查询只能获取您恰好连接到的一个节点的信息,并且创建分布式表仅适用于 *log 系统表。我们可以循环节点,但不想这样做。有没有一种方法可以在一个查询中获取系统表的所有实例,例如 system.parts?