FAQ > 金融建模 > 效率优化 > 数据处理效率优化

Q:如何将一个表中的某列值根据指定列拼接到指定表中(哈希表-高效)    

  • A:将两个表中的数据合并有多种方式,如sql语句中套用子语句进行where查找,或join进行表连接。这两种方式都能实现,也是常用的一些基本方法。
    本章节中提供哈希表处理方式,针对数据集较大,追求效率时非常有效

    哈希表在实现多数据表按字段匹配查找拼接时,一般处理步骤:
    第一步:通过reindexcopy将被查找的表按关键匹配列构造成哈希表。
    第二步:合并目标表中通过匹配列的值快速访问哈希表的行并获取指定列的值,生成新列,完成数据的合并。

    示例实现:在rt表中增加当前股票对应的行业数据,数据来源为dd表
     //--构造demo数据
      stocks:=getbk("上证50");
      //表一
      rt:=select ["StockID"],["StockName"],["amount"] from Markettable datekey 20250901T to 20250901T of stocks end;
      //表二
      dd:=select thisrow as "代码",spec(base(10029),thisrow) as "行业" from stocks end;

    //将dd表中代码对应的行业信息补充到表一中---哈希表方式效率高
      //第一步:生成哈希表
      dd_:=reindexcopy(dd,dd[:,"代码"]);
      //第二步:对rt进行遍历同时通过StockID列的值快速获取到dd_表中下标为StockID值的行,同时找到指定列的值作为目标数据
      rt:=select *,dd_[["StockID"]]["行业"] as "股票行业" from rt end;
      return rt;

    其中:
    1、通过reindexcopy将被查找表构造成哈希表,即行下标为代码的数组,return dd_;数据展示如下:

    2、select *,dd_[["StockID"]]["行业"] 中["StockID"]表示当前select对象表中StockID字段,而第二层dd_[]表示指定dd_第一维下标,因此组合后即写法为dd_[["StockID"]]

    程序运行结果展示: