clickhouse dateTime(以毫秒为单位)

时间:2019-03-18 12:49:20

标签: clickhouse

ClickHouse目前尚不支持以毫秒为单位的DateTime。

我看到了有关2019-03-17T14:00:32.296Z

这样的字段的两个可能的建议
  1. multiply by 100 an store it in UInt32/64。如何使用乘以100并存储为UInt32?

  2. to store milliseconds separately。有没有办法从2019-03-17T14:00:32.296Z => 2019-03-17 14:00:32中删除毫秒?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在我看来,ClickHouse为什么不支持DateTime中的毫秒数的主要思想是更糟糕的压缩。

长话短说:使用DateTime和进动几秒钟。如果要存储毫秒,可以采用两种方法进行操作:

  1. 分别存储毫秒,因此您将拥有一个带有日期的DateTime,可以在所有可能的DateTime函数以及主键中使用该日期。并将毫秒部分放在类型为UInt16的单独列中。在存储之前,您必须单独准备数据。取决于在存储之前对数据进行预处理所使用的语言,这可能是不同的处理方式。在golang中可以做到:

    time.Now().UnixNano() / 1e6 % 1e3
    
  2. 另一种方法是将整体存储为时间戳。这意味着您应该自行将日期转换为以毫秒为单位的unix时间戳,并将其作为Uint64放入ClickHouse。它还取决于您使用什么来准备刀片。对于golang,它可能会:

    time.Now().UnixNano() / 1e6