【发布时间】:2021-11-04 12:56:17
【问题描述】:
我想插入不重复的数据。这些字段的三元组应该是唯一的ticker, kline_type, dateTime
发现我应该使用 ReplacingMergeTree https://clickhouse.com/docs/ru/engines/table-engines/mergetree-family/replacingmergetree/
我正在努力
import clickhouse_driver
def prepare_table():
client = clickhouse_driver.Client.from_url(f'clickhouse://default:{os.getenv("CLICK_PASSWORD")}@localhost:9000/crypto_exchange')
# field names from binance API
client.execute('''
CREATE TABLE IF NOT EXISTS historical_data_binance
(
dateTime DateTime,
closeTime Int64,
open Float64,
high Float64,
low Float64,
close Float64,
volume Float64,
kline_type String,
ticker String
) ENGINE = ReplacingMergeTree
ORDER BY (ticker, kline_type, dateTime)
''')
return client
prepare_table()
但我认为我的解决方案不起作用,因为我看到重复:
2021-11-04 11:00:00 │ 1636027199999 │ 61894.82 │ 62188.78 │ 60866.46 │ 61444.74 │ 20.158382 │ 1h │ BTCUSDT │
│ 2021-11-04 12:00:00 │ 1636030799999 │ 61420.86 │ 61698.74 │ 58754.41 │ 61621.01 │ 15.721483 │ 1h │ BTCUSDT │
└─────────────────────┴───────────────┴──────────┴───────────┴──────────┴──────────┴───────────┴────────────┴─────────┘
┌────────────dateTime─┬─────closeTime─┬─────open─┬─────high─┬──────low─┬────close─┬────volume─┬─kline_type─┬─ticker──┐
│ 2021-11-04 11:00:00 │ 1636027199999 │ 61894.82 │ 62188.78 │ 60866.46 │ 61444.74 │ 20.158382 │ 1h │ BTCUSDT
插入数据的正确方法是什么?
【问题讨论】:
-
clickhouse.com/docs/en/engines/table-engines/mergetree-family/… 因此,ReplacingMergeTree 适合在后台清除重复数据以节省空间,但不保证没有重复。加上重复数据删除是最终的,因为它是合并的副产品
-
@DennyCrane 您能否详细说明您的答案。不明白如何接收唯一值
-
插入的代码在哪里?我建议在您的
CREATE TABLE中添加一个UNIQUE约束。
标签: python clickhouse