You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CnosDB中从含纳秒时间戳的CSV创建外部表?

在CnosDB中处理含纳秒/数字时间戳的CSV外部表

问题背景

使用CnosDB读取CSV时序数据时,CSV中的数字型时间戳(如1688101200000000)无法被自动解析为timestamp类型,触发解析错误;但将时间改为RFC-3339格式则可正常查询。

解决方案

CnosDB默认仅识别RFC-3339格式的时间字符串,针对数字时间戳,可通过以下两种方式处理:

方式1:创建外部表时指定时间戳单位

在创建表的SQL中,通过timestamp format参数明确指定时间戳的epoch单位(纳秒用epoch_nano,微秒用epoch_micro,毫秒用epoch_milli,秒用epoch_second):

CREATE EXTERNAL TABLE simple_data_ext (
    time TIMESTAMP,
    ta STRING,
    tb STRING,
    tc STRING,
    fa DOUBLE,
    fb DOUBLE,
    fc DOUBLE
) STORED AS CSV 
WITH HEADER ROW 
TIMESTAMP FORMAT 'epoch_nano'  -- 根据你的时间戳实际单位调整
LOCATION 'D:\tmp\csv\simple_data.csv';

方式2:先按数值类型读取,查询时转换

若无法在表定义阶段指定格式,可先将时间列定义为BIGINT,查询时通过TO_TIMESTAMP函数转换为timestamp类型:

  1. 创建外部表:
CREATE EXTERNAL TABLE simple_data_ext (
    time BIGINT,
    ta STRING,
    tb STRING,
    tc STRING,
    fa DOUBLE,
    fb DOUBLE,
    fc DOUBLE
) STORED AS CSV WITH HEADER ROW LOCATION 'D:\tmp\csv\simple_data.csv';
  1. 查询转换:
SELECT TO_TIMESTAMP(time, 'epoch_nano') AS time, ta, tb, tc, fa, fb, fc
FROM simple_data_ext;

说明

  • 需确认时间戳实际单位:示例中的1688101200000000是微秒级(对应epoch_micro),若为纳秒则是9位后缀(如1688101200000000000),需对应使用epoch_nano。
  • 使用方式1创建表后,直接查询即可得到解析后的timestamp类型数据,无需额外转换。

内容的提问来源于stack exchange,提问作者Darts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:47:06