标签: clickhouse-client

Clickhouse:通过pandas dataframe插入数据且单元格值为null时如何取列的默认值

我正在尝试将 Pandas 数据框插入 Clickhouse,但遇到了一些问题。\n以下是表架构:

\n
CREATE TABLE IF NOT EXISTS test_table\n(\n    name String,\n    day DateTime64(3) DEFAULT \'2020-07-01 00:00:00\',\n)\nengine = MergeTree\nORDER BY (name, day);\n
Run Code Online (Sandbox Code Playgroud)\n

pandas dataframe 中的数据如下:

\n
   name   day\n0  \'a\'    NaT\n1  \'b\'    NaT\n2  \'c\'   \'2019-08-31 00:00:00\'\n
Run Code Online (Sandbox Code Playgroud)\n

插入的python代码是:

\n
from clickhouse_driver import Client\nwith Client(host="", port="", password="",\n            user="", settings={"use_numpy": True}) as client:\n    client.insert_dataframe(\n        \'INSERT INTO test_table VALUES\',\n        df)\n
Run Code Online (Sandbox Code Playgroud)\n

clickhouse中的结果是

\n
SELECT *\nFROM test_table\n\n\xe2\x94\x8c\xe2\x94\x80name\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80day\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\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 a    \xe2\x94\x82 1970-01-01 00:00:00.000\xe2\x94\x82\n\xe2\x94\x82 b    \xe2\x94\x82 1970-01-01 00:00:00.000\xe2\x94\x82\n\xe2\x94\x82 c    \xe2\x94\x82 2019-08-31 00:00:00.000\xe2\x94\x82\n\xe2\x94\x94\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\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\n
Run Code Online (Sandbox Code Playgroud)\n

但我真正想要的是它是默认值,意味着 \'1970-01-01 00:00:00.000\' …

database dataframe pandas clickhouse clickhouse-client

5
推荐指数
1
解决办法
2603
查看次数

Clickhouse内存问题

我有一个包含大约 20 亿行的表,我尝试从中查询 max(id)。Id 不是表的排序键,并且该表使用表引擎mergeTree

无论我尝试什么,我都会遇到内存错误。这并不仅仅限于这一个查询。一旦我尝试完全(垂直)查询任何表以查找数据,我的 12 GB 内存就不够了。现在我知道我可以添加更多,但这不是重点。Clickhouse 在内存不足时会抛出错误,这是否是设计使然?是否有一个设置告诉 clickhouse 使用磁盘?

SQL错误[241]:ClickHouse异常,代码:241,主机:XXXXXX,端口:8123;代码:241,e.displayText() = DB::Exception:超出内存限制(用于查询):将使用 9.32 GiB(尝试分配 9440624 字节的块),最大值:9.31 GiB(版本 21.4.6.55(官方版本)) )

clickhouse clickhouse-client

3
推荐指数
1
解决办法
8364
查看次数