如何使用Palantir Foundry REST API获取目录数据集列表及排查404错误
解决Palantir Foundry REST API获取目录数据集列表的404问题及后续功能实现
一、修复404错误:正确的目录数据集列表API调用
你的404错误核心原因是API端点使用错误,Palantir Foundry获取指定目录下数据集的正确接口并非directories路径,而是用folders相关端点。以下是修正后的代码:
修正后的获取目录数据集列表代码
import requests def list_datasets_in_foundry_directory( token, base_url, parent_folder_rid): headers = { "Authorization": "Bearer {}".format(token) } # 调用v1版本folders接口获取目录子资源,过滤出数据集类型 response = requests.get(f'{base_url}/api/v1/folders/{parent_folder_rid}/children', headers=headers) response.raise_for_status() # 主动抛出HTTP错误,方便调试问题 # 从返回结果中筛选出类型为DATASET的条目 children = response.json() datasets = [item for item in children if item['type'] == 'DATASET'] return datasets
404错误的必查点
- 确认
parent_folder_rid是目录(Folder)的RID,别用数据集或其他资源的RID凑数 - 检查
base_url格式:必须是https://<你的Foundry实例域名>.palantirfoundry.com,末尾别加斜杠 - 验证token权限:用该token对应的账号在Foundry UI手动访问目标目录,确认能正常打开
- 若偏好v2 API,可改用端点
/api/v2/directories/{directory_rid}/contents,但返回结构需对应调整过滤逻辑
二、实现数据集存在性检查与RID获取
基于上面的修正函数,写个检查指定表名数据集是否存在的逻辑:
def get_dataset_rid_if_exists(token, base_url, parent_folder_rid, dataset_name): datasets = list_datasets_in_foundry_directory(token, base_url, parent_folder_rid) # 匹配数据集名称(可根据实际需求调整大小写敏感规则) for dataset in datasets: if dataset['name'].lower() == dataset_name.lower(): return dataset['rid'] return None
三、实现不存在时的数据集创建流程
创建数据集需要调用Foundry的数据集创建API,以下是基础实现(可根据需求调整数据集类型、分支等参数):
def create_foundry_dataset(token, base_url, parent_folder_rid, dataset_name): headers = { "Authorization": "Bearer {}".format(token), "Content-Type": "application/json" } payload = { "name": dataset_name, "folderRid": parent_folder_rid, "datasetType": "TABULAR" # 可选值:TABULAR/OBJECT_FILES等,按需选择 } response = requests.post(f'{base_url}/api/v1/datasets', headers=headers, json=payload) response.raise_for_status() created_dataset = response.json() return created_dataset['rid']
四、整合完整业务流程
把上面的函数串起来,实现从检查到创建的完整逻辑:
def process_dataset(token, base_url, parent_folder_rid, dataset_name): dataset_rid = get_dataset_rid_if_exists(token, base_url, parent_folder_rid, dataset_name) if dataset_rid: print(f"数据集 {dataset_name} 已存在,RID: {dataset_rid}") return dataset_rid else: print(f"数据集 {dataset_name} 不存在,开始创建...") new_dataset_rid = create_foundry_dataset(token, base_url, parent_folder_rid, dataset_name) print(f"数据集创建完成,RID: {new_dataset_rid}") return new_dataset_rid
内容的提问来源于stack exchange,提问作者baobobs
相关产品推荐
相关产品推荐

