csv格式的tick行情数据导入分布式表时时间类型怎么转换

DolphinDB数据库建表建库代码如下:

dbDate = database("", VALUE2020.01.01..2020.12.31)
dbSymbol=database("", HASH, [SYMBOL, 10])
db = database("dfs://level2", COMPO, [dbDate, dbSymbol])
schemaTable=table( 
 array(SYMBOL,0as  symbol,
 array(SYMBOL,0as  market,
 array(DATE,0as  date,
 array(TIME,0as  time,
 array(DOUBLE,0as  preClose,
 array(DOUBLE,0as  open,
 array(DOUBLE,0as  high,
 array(DOUBLE,0as  low,
 array(DOUBLE,0as  last,
 array(INT,0as  numTrades,
 array(INT,0as  curNumTrades,
 array(INT,0as  volume,
 array(INT,0as  curVol,
 array(DOUBLE,0as  turnover
 )
db.createPartitionedTable(schemaTable,`quotes,`date`symbol)

csv文件样本数据如下:

attachments-2021-05-aHN5p3Tm60a5cc4142099.pngpython 代码如下:

import dolphindb as ddb
import numpy as np
import pandas as pd

csv_file="D:/data/stock/Level2text/20200602e.csv"
csv_data=pd.read_csv(csv_file,dtype={'symbol':str})
csv_df=pd.DataFrame(csv_data)

s = ddb.session()
s.connect("127.0.0.1", 8848,"admin","123456")
s.run("tableInsert{{loadTable('{db}', `{tb})}}".format(db="dfs://level2",tb="quotes"), csv_df)

运行时报错:

Traceback (most recent call last):
  File "D:/data/import.py", line 40, in <module>
    s.run("tableInsert{{loadTable('{db}', `{tb})}}".format(db="dfs://level2",tb="quotes"), csv_df)
  File "C:\Users\tester\AppData\Local\Programs\Python\Python37\lib\site-packages\dolphindb\session.py", line 67, in run
    return self.cpp.run(script, *args)
RuntimeError: <Server Exception> in call: The column [date] expects type of DATE, but the actual t
请先 登录 后评论

1 个回答

Juntao Wang

这个需要进行类型转换。比如可以在 read_csv() 方法中,通过 parse_dates 参数直接将某些列转换成 datetime64 类型:

csv_data=pd.read_csv(csv_file,dtype={'symbol':str},parse_dates=['date','time'])


请先 登录 后评论