把quotes表的最后一个字段Time的类型STRING改成TIME,建议第一个字段代码的类型从STRING改成SYMBOL。然后把mytransform改成如下即可:
def mytransform(mutable t){
t[`DateMy]=date(t[`col1])
t[`Time]=time(t[`col1])
return t
}
请教大家在用loadTextEx 建立分区表时使用transform 建立两新列并对列做数据转换遇到的问题:
loadTextEx 需要读入的csv 文件 有以下几列: 代码, 时间 (格式 2024-01-29T09:31:00),开,高,低,收, 想转写到一个分布式数据库, 在原来csv 文件列 的基础上新增加2 列 MyDate 和 Time, 就是把时间列拆分成 MyDate 部分 2024.01.29 和Time部分 09:31:00. “代码”和“MyDate” 为分区表的 Combo 键值列。 MyDate 列是 Date 类型。 下面的代码持续收到server 的 报错 :
The column [MyDate] expects type of DATE, but the actual type is STRING.'
我的代码如下:
dateDomain = database("", VALUE, date(2018.05.01..2024.07.01)) symDomain = database("", RANGE, string('A'..'Z') join `ZZZZZ) stockDB = database("dfs://stockDB", COMPO, [dateDomain, symDomain]) quoteSchema = table(10:0, `代码`时间`开盘价`最高价`最低价`收盘价`成交量手`成交额元`复权系数`DateMy`Time, [STRING,DATETIME,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DATE,STRING]) stockDB.createPartitionedTable(quoteSchema, "quotes", `DateMy`代码) def mytransform(mutable t){ t.rename!("col0", "代码"); t.rename!("col1", "时间"); t.rename!("col2", "开盘价"); t.rename!("col3", "最高价"); t.rename!("col4", "最低价"); t.rename!("col5", "收盘价"); t.rename!("col6", "成交量手"); t.rename!("col7", "成交额元"); t.rename!("col8", "复权系数"); t.update!(`Time, <[substr(string(t.时间),11,19)]>); ccc=date(t.时间) t[`DateMy] = <[ccc]>; return t } tmpTB=loadTextEx(dbHandle=stockDB,tableName=`quotes,partitionColumns=`DateMy`代码,filename='D:/SH600000.CSV',transform=mytransform,skipRows=1);
其中csv列名不是 UTF-8编码,所以我跳过第一行列名。