如何在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类型:
- 创建外部表:
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';
- 查询转换:
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
相关产品推荐
相关产品推荐

