DolphinDB导入csv文件时如何解决列名中文乱码和时间列数据类型不匹配的问题

JasonTang
  • 3.9k

我现在想把一份csv数据文件导入DolphinDB分区数据库中,用记事本格式打开,内容如下:
image
我首先用ploadText()函数加载到内存中,验证DolphinDB是不是能识别原始数据中的格式,执行如下语句:

filePath ="F:/Data/test.csv"
t=ploadText(filePath)

返回结果如下:
image
发现有两个问题:
1.中文列名时间乱码
2.时间中的一些数据由于格式问题没有导入

这些格式有问题的数据如下:
image
表示小时的数据没有补全。
应该如何解决上述的问题?

回复
阅读 1.1k
1 个回答
✓ 已被采纳

1.由于DolphinDB的字符串采用UTF-8编码,若加载的文件不是UTF-8编码,需在导入后进行转化。DolphinDB提供了convertEncodefromUTF8toUTF8函数,用于导入数据后对字符串编码进行转换。
例如,使用convertEncode函数转换表tmpTB中的exchange列的编码:

filePath ="F:/Data/test.csv"
schemaTB = extractTextSchema(filePath)
update schemaTB set name=convertEncode(name,"gbk","utf-8") 

2.对于日期列或时间列的数据,如果自动识别的数据类型不符合预期,不仅需要在schema的type列指定数据类型,还需要在format列中指定格式(用字符串表示),如"MM/dd/yyyy"。如何表示日期和时间格式请参考日期和时间的调整及格式
上述的实际场景可以这么转换:

schemaTB["format"]=["yyyy/MM/dd HH:mm:ss.SSS",]

所以,上述的csv数据文件用ploadText或loadText函数导入内存表可以使用以下代码实现:

filePath ="F:/Data/test.csv"
schemaTB = extractTextSchema(filePath)
update schemaTB set name=convertEncode(name,"gbk","utf-8") 
schemaTB["format"]=["yyyy/MM/dd HH:mm:ss.SSS",]//注意["yyyy/MM/dd HH:mm:ss.SSS",]的长度和schemaTB的行数相等
t=ploadText(filePath,,schemaTB)

上述的csv数据文件用loadTextEx函数导入数据库表可以使用以下代码实现:

login("admin","123456")
if(existsDatabase("dfs://test")){
    dropDatabase("dfs://test")
}
db=database("dfs://testRongcheng",VALUE,2020.01.01..2021.01.01)  
filePath = "F:/Data/test.csv"
schemaTB = extractTextSchema(filePath)
update schemaTB set name=convertEncode(name,"gbk","utf-8") 
schemaTB["format"]=["yyyy/MM/dd HH:mm:ss.SSS",]
loadTextEx(db, "tableTest", "时间", filePath,,schemaTB,)
tb = database("dfs://test").loadTable("tableTest")
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进