You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Palantir中通过TypeScript函数合并两个ObjectSet并返回目标对象集

可行实现方案

以下是三种常用的实现方式,可根据你使用的ObjectSet所属框架能力选择:

  • 方案1:框架内置跨ObjectSet关联聚合(性能最优,优先选择)
    如果你的ObjectSet来自支持跨对象关联查询的框架(比如数据中台、低代码开发平台的对象模型),可以先给objecta和objectb配置关联关系,关联键为year/yr、截取第一位的code,之后直接关联两个ObjectSet生成联合集合,再在联合集合上执行分组聚合操作,聚合结果可以直接调用框架内置的asObjectSet()方法直接转为objectc类型的ObjectSet,代码示例如下:
public async test(p1: ObjectSet<objecta>,c1: ObjectSet<objectb>): Promise<ObjectSet<objectc>> {
  // 关联两个ObjectSet
  return p1
    .join(c1, (a, b) => a.year.eq(b.yr) && a.code.byFixedWidth(1).eq(b.code.byFixedWidth(1)))
    // 联合集合上直接做聚合
    .groupBy(joinRes => [joinRes.a.year.topValues(), joinRes.a.code.byFixedWidth(1).topValues()])
    .sum(joinRes => ({
      amt: joinRes.a.amt,
      fullAmt: joinRes.b.FullAmt
    }))
    // 直接转换为目标ObjectSet
    .asObjectSet<objectc>();
}
  • 方案2:手动聚合后转换为ObjectSet
    如果框架不支持跨ObjectSet关联,就用你当前的思路先分别聚合,做全外连接补全数据后,调用框架提供的数组转ObjectSet方法完成转换,需要注意你现有代码只做了左连接,会丢失仅在c1中存在的分组,优化后的代码示例如下:
public async test(p1: ObjectSet<objecta>,c1: ObjectSet<objectb>): Promise<ObjectSet<objectc>> {
  const [results1, results2]= await Promise.all([
    p1
      .groupBy(a1 => a1.year.topValues())
      .segmentBy(a1 => a1.code.byFixedWidth(1))
      .sum(a1=>a1.amt),
    c1
      .groupBy(a1=>a1.yr.topValues())
      .segmentBy(a1 => a1.code.byFixedWidth(1))
      .sum(a1 => a1.FullAmt),
  ]);

  // 做全外连接补全所有分组,避免数据丢失
  const groupMap = new Map<string, objectc>();
  results1.forEach(item => {
    const groupKey = `${item.year}-${item.code}`;
    groupMap.set(groupKey, {
      year: item.year,
      code: item.code,
      amt: item.amt,
      fullAmt: 0
    } as objectc);
  });

  results2.forEach(item => {
    const groupKey = `${item.yr}-${item.code}`;
    if (groupMap.has(groupKey)) {
      groupMap.get(groupKey)!.fullAmt = item.FullAmt;
    } else {
      groupMap.set(groupKey, {
        year: item.yr,
        code: item.code,
        amt: 0,
        fullAmt: item.FullAmt
      } as objectc);
    }
  });

  const mergedResult = Array.from(groupMap.values());
  // 调用框架提供的数组转ObjectSet方法,不同框架方法名可能略有差异,常见为fromArray、wrapObjects等
  return ObjectSet.createFromArray<objectc>(mergedResult, "objectc的类型唯一标识");
}
  • 方案3:临时对象类型中转
    如果需要频繁使用该透视表结果,可在所属平台的对象模型中创建和聚合结果字段完全匹配的objectc实体类型,将合并后的聚合结果批量写入该实体的存储中,之后直接查询该实体的ObjectSet即可,适合对查询性能要求高的场景。

注意:ObjectSet不是原生JS/TS的内置类型,是你所用框架提供的带查询能力的集合包装类,必须调用框架提供的对应转换方法才能将普通数组转为ObjectSet实例,具体方法名可以参考对应框架的API文档确认。

内容的提问来源于stack exchange,提问作者Monica Gaddipati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:45:02