该文档Float32并没有真正解释 的行为Float64以及不鼓励它们的原因。
我问这个问题是因为在将这些与控制台 cli 请求或 Rest 请求一起使用时,我看到了奇怪的行为。无论精度如何,发送到 clickhouse 的浮点值在最后一位都会稍微修改。
示例:1258.021545成为1258.0215453.
每次插入这些值时,最后一位数字都会更改。我不认为问题来自太高的精度值,因为这些值来自 Java 双精度数。
遵循文档中的示例:https : //clickhouse.yandex/docs/en/table_engines/kafka/
我使用Kafka Engine和一个实例化视图创建了一个表,该视图将数据推送到MergeTree表。
这是我的表格结构:
CREATE TABLE games (
UserId UInt32,
ActivityType UInt8,
Amount Float32,
CurrencyId UInt8,
Date String
) ENGINE = Kafka('XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092', 'games', 'click-1', 'JSONEachRow', '3');
CREATE TABLE tests.games_transactions (
day Date,
UserId UInt32,
Amount Float32,
CurrencyId UInt8,
timevalue DateTime,
ActivityType UInt8
) ENGINE = MergeTree(day, (day, UserId), 8192);
CREATE MATERIALIZED VIEW tests.games_consumer TO tests.games_transactions
AS SELECT toDate(replaceRegexpOne(Date,'\\..*','')) as day, UserId, Amount, CurrencyId, toDateTime(replaceRegexpOne(Date,'\\..*','')) as timevalue, ActivityType
FROM default.games;
Run Code Online (Sandbox Code Playgroud)
在Kafka主题中,我每秒收到约150条消息。
一切都很好,部分原因是表中的数据更新有很大的延迟,这绝对不是实时的。
似乎只有当我到达65536个 …
我在 ClickHouse 中有现有的表。我想找出哪个字段是索引字段。我该怎么做?
在 ClickHouse 中按组查询前 N 行的正确方法是什么?
让我们以具有 id2、id4、v3 列且 N=2 的 tbl 为例。我尝试了以下方法
SELECT
id2,
id4,
v3 AS v3
FROM tbl
GROUP BY
id2,
id4
ORDER BY v3 DESC
LIMIT 2 BY
id2,
id4
Run Code Online (Sandbox Code Playgroud)
但出现错误
Received exception from server (version 19.3.4):
Code: 215. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception
: Column v3 is not under aggregate function and not in GROUP BY..
Run Code Online (Sandbox Code Playgroud)
我可以放入v3GROUP BY ,它似乎确实有效,但按指标分组效率不高。
有any聚合函数,但我们实际上想要all值(通过 LIMIT BY 子句限制为 2)而不是any值,所以这听起来不是正确的解决方案。
Received exception from …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过以下方式将 *.gz 文件加载到 Clickhouse:clickhouse-client --max_memory_usage=15323460608 --format_csv_delimiter="|" --query="插入 tmp1.my_test)表格式 CSV"
我收到错误: Code: 210. DB::NetException: Connection Reset by Peer, while写入套接字 (127.0.0.1:9000) 。
clickhouse-server.log 、 clickhouse-server.err.log 或 Zookeeper.log 中没有错误
当我运行插入命令时,我看到内存几乎达到了服务器的限制(32Gb),这就是为什么我尝试通过 max_memory_usage 限制它,同样的错误
有任何想法吗?提前致谢
我明白 clickhouse 最终是一致的。因此,一旦插入调用返回,并不意味着数据将出现在选择查询中。
基本上我没有找到关于这个主题的太多信息,所以也许我没有提出最好的问题。请随时启发我。
我正在尝试将 Pandas 数据框插入 Clickhouse,但遇到了一些问题。\n以下是表架构:
\nCREATE 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);\nRun Code Online (Sandbox Code Playgroud)\npandas dataframe 中的数据如下:
\n name day\n0 \'a\' NaT\n1 \'b\' NaT\n2 \'c\' \'2019-08-31 00:00:00\'\nRun Code Online (Sandbox Code Playgroud)\n插入的python代码是:
\nfrom 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)\nRun Code Online (Sandbox Code Playgroud)\nclickhouse中的结果是
\nSELECT *\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\nRun Code Online (Sandbox Code Playgroud)\n但我真正想要的是它是默认值,意味着 \'1970-01-01 00:00:00.000\' …
Clickhouse版本:(版本20.3.9.70(官方版本))\n(我知道不再支持此功能,我们有计划升级,但需要时间)
\n设置
\n我们正在运行三个查询节点(仅具有分布式表的节点),我们昨天启动了第三个。所有节点都指向相同的存储节点和表。
\n问题
\n该节点可以通过 TCP 和 HTTP 正常处理请求长达 11 小时。之后,clickhouse服务器开始关闭TCP连接。当这种情况发生时,HTTP 仍然可以正常工作。
\n额外信息/证据
\nsystem.metrics.tcp_connection随着时间的推移,新节点的数量稳步下降。netstat显示大量 ACTIVE_WAIT 连接netstat -ntp | tail -n+3 | awk \'{print $6}\' | sort | uniq -c | sort -n\n 2 LAST_ACK\n 380 CLOSE_WAIT\n 386 ESTABLISHED\n 29279 TIME_WAIT\nRun Code Online (Sandbox Code Playgroud)\n用于比较的普通节点:
\n1199 CLOSE_WAIT\n1292 ESTABLISHED\n186 TIME_WAIT\nRun Code Online (Sandbox Code Playgroud)\n无法打开 clickhouse_client
\nuser@server:~$ clickhouse-client \nClickHouse client version 20.3.9.70 (official build).\nConnecting to localhost:9000 as user …Run Code Online (Sandbox Code Playgroud) 当我们使用 DB API 2.0 获取数据时,cur.execute("select * from db.table")我们会得到一个游标,它看起来像元组列表的生成器对象。
而在 pymongo 中,当我们获取时,我们将其作为字典列表获取。我想实现这样的目标。
我不需要获取元组列表,而是想要字典列表或命名元组。
我相信从效率的角度来看这是有意义的,因为模式已经定义,所以不需要为每条记录发送它。
目前我正在使用的解决方法是:
cur.execute("select * from db.table")
columns = cur.columns_with_types
data = cur.fetchall()
df = pd.DataFrame(data,columns=[tuple[0] for tuple in columns])
data_reqd = df.to_dict('records')
Run Code Online (Sandbox Code Playgroud)
当查询返回大量数据时,此方法的公平性很差。
解决方法 1:使用fetchmany(size=block_size),但它似乎不是一种优雅的做事方式。
解决方法 2:这似乎是一种更好的处理方式。
cur.execute("select * from db.table")
columns = cur.columns_with_types
for tup in cur:
row = dict(zip(columns, tup))
# use row
Run Code Online (Sandbox Code Playgroud)
有什么好的办法处理这个问题吗?对问题的任何改进表示赞赏。
所以我使用 clickhouse 创建了一个表,但其中有重复项。
以下查询给出了表中的重复项
select *, count() AS cnt from my_table GROUP BY *
HAVING cnt > 1
Run Code Online (Sandbox Code Playgroud)
在 clickhouse 中,显然你需要通过更改表来做到这一点:https ://clickhouse.com/docs/en/sql-reference/statements/alter/delete/
所以,我尝试了以下方法:
ALTER TABLE my_table DELETE WHERE (select *, count() AS cnt from my_table GROUP BY *
HAVING cnt > 1 );
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Exception: The argument of function isZeroOrNull must have simple numeric type, possibly Nullable:
有人在使用 clickhouse 之前遇到过这个问题吗?
在此视频中,他们明确提到 clickhouse 并不是此类操作的最佳选择:https://www.youtube.com/watch?v= FsVrFbcyb84&t=1865s
但我想知道是否有人找到了解决方案
clickhouse ×10
database ×2
sql ×2
apache-kafka ×1
dataframe ×1
delete-row ×1
indexing ×1
netstat ×1
pandas ×1
python ×1
tcp ×1