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

如何通过Palantir Foundry API为数据集添加行标识符?

问题

我正在使用Palantir Foundry的Read dataset as table API读取数据集,选择了Arrow格式而非CSV。当读取大尺寸数据集时,遇到了内存限制问题。作为临时解决方案,我通过API的columns参数将数据集拆分为列子集分别拉取,目标是用pa.concat_tables([table1, table2])合并这些Arrow表,但发现该API返回的行顺序是非确定性的,无法直接合并。

我需要给Foundry数据集添加行标识符,虽然可以通过Foundry网页界面的代码仓库实现,但希望完全通过API调用完成。查阅文档后未找到通过API执行数据转换的相关内容,请问是否可以通过API编程方式添加行标识符?

附:我用来生成Apache Arrow表的示例代码:

def foundry_arrow_exporter(
    dataset_rid,
    token,
    base_url,
    column_list=None):
    
    headers = {
    "authorization": "Bearer {}".format(token)
    }

    # 注意:该端点处于预览阶段,可能随时修改或移除。使用时需在请求参数中添加preview=true,且目前不支持视图(由其他数据集组成的虚拟数据集)。
    if column_list:
        columns = ','.join(column_list)
        response = requests.get(f'{base_url}/api/v1/datasets/{dataset_rid}/readTable?format=ARROW&columns={columns}&preview=True', headers=headers)
    else:
        response = requests.get(f'{base_url}/api/v1/datasets/{dataset_rid}/readTable?format=ARROW&preview=True', headers=headers)

    response.raise_for_status()
    buffer = pa.py_buffer(response.content)
    table = pa.ipc.open_stream(buffer).read_all()
    return table

arrow_table = foundry_arrow_exporter(
    dataset_rid=dataset_rid,
    token=foundry_token, 
    base_url=foundry_base_url,
    column_list = column_chunk)

解决方案

方案1:利用现有唯一键对齐行(无需修改原数据集)

如果数据集本身存在天然的唯一标识符(如业务主键、UUID列),这是最简便的方案:

  • 每次拉取列子集时,都将这个唯一键列包含在column_list中
  • 拉取所有列子集后,通过唯一键列将各个表执行join操作而非直接concat,以此对齐行数据。示例代码如下:
# 1. 拉取唯一键列
id_table = foundry_arrow_exporter(dataset_rid, foundry_token, foundry_base_url, column_list=["unique_id"])

# 2. 拉取列子集(均包含唯一键)
table1 = foundry_arrow_exporter(dataset_rid, foundry_token, foundry_base_url, column_list=["unique_id", "col1", "col2"])
table2 = foundry_arrow_exporter(dataset_rid, foundry_token, foundry_base_url, column_list=["unique_id", "col3", "col4"])

# 3. 通过唯一键合并表
merged_table = id_table.join(table1, on="unique_id").join(table2, on="unique_id")

方案2:通过API生成带行ID的新数据集

如果数据集没有天然唯一键,你可以通过Foundry的Dataset Writer API结合分批读取,生成一个带自增行ID的新数据集:

  1. 分批读取原数据集的所有行(可通过API的limit和offset参数实现分页,注意:分页拉取的行顺序仍可能非确定,需结合排序字段)
  2. 为每一行分配自增的行ID(如row_id)
  3. 使用Writer API将带行ID的数据写入新的Foundry数据集

需注意:若原数据集是分布式存储的,分页拉取的行顺序可能仍有波动,建议先按某个可排序字段(如时间戳)排序后再分配ID,确保ID与行的对应关系稳定。

方案3:通过Code Repositories API提交转换任务(替代网页操作)

如果希望完全通过API实现类似网页代码仓库的转换逻辑,可以使用Foundry的Code Repositories API:

  • 通过API创建代码仓库,提交包含添加行ID逻辑的Spark/Python代码(如用monotonic_id()生成自增ID)
  • 触发该代码的执行,生成带行ID的输出数据集

该方案需要熟悉Foundry代码仓库的变换逻辑,且API调用步骤较多,可参考Foundry官方的Code Repositories API文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:53:14