用loadTextEx 导入分区表时增加2列报错

请教大家在用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编码,所以我跳过第一行列名。

请先 登录 后评论

1 个回答

wale

把quotes表的最后一个字段Time的类型STRING改成TIME,建议第一个字段代码的类型从STRING改成SYMBOL。然后把mytransform改成如下即可:

def mytransform(mutable t){
   t[`DateMy]=date(t[`col1])
   t[`Time]=time(t[`col1])
   return t  
}
请先 登录 后评论