【问题标题】:clickhouse dateTime with milliseconds以毫秒为单位的 clickhouse dateTime
【发布时间】:2019-08-08 20:20:03
【问题描述】:

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 中删除毫秒?

感谢您的帮助!

【问题讨论】:

  • 我猜你的意思是multiply by 1000

标签: clickhouse


【解决方案1】:

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

长话短说:使用 DateTime 和秒进动。如果你想存储毫秒,你可以采用两种方式:

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

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      相关资源
      最近更新 更多