ClickHouse目前尚不支持以毫秒为单位的DateTime。
我看到了有关2019-03-17T14:00:32.296Z
multiply by 100 an store it in UInt32/64
。如何使用乘以100并存储为UInt32?
to store milliseconds separately
。有没有办法从2019-03-17T14:00:32.296Z
=> 2019-03-17 14:00:32
中删除毫秒?
感谢您的帮助!
答案 0 :(得分:0)
在我看来,ClickHouse为什么不支持DateTime中的毫秒数的主要思想是更糟糕的压缩。
长话短说:使用DateTime和进动几秒钟。如果要存储毫秒,可以采用两种方法进行操作:
分别存储毫秒,因此您将拥有一个带有日期的DateTime,可以在所有可能的DateTime函数以及主键中使用该日期。并将毫秒部分放在类型为UInt16的单独列中。在存储之前,您必须单独准备数据。取决于在存储之前对数据进行预处理所使用的语言,这可能是不同的处理方式。在golang中可以做到:
time.Now().UnixNano() / 1e6 % 1e3
另一种方法是将整体存储为时间戳。这意味着您应该自行将日期转换为以毫秒为单位的unix时间戳,并将其作为Uint64放入ClickHouse。它还取决于您使用什么来准备刀片。对于golang,它可能会:
time.Now().UnixNano() / 1e6