关于 downloading-batch-export-files
面向 PostHog 单次数据导出的工作流技能。它指导用户选择导出配置、通过 MCP 启动并监控任务,再通过 REST 下载端点保存文件。
主要功能
- 01配置模型、日期范围和文件格式
- 02通过 MCP 启动并轮询导出任务
- 03通过 REST 端点下载文件
- 04处理拆分文件和任务状态
- 05将大型或二进制结果保存为文件
适用场景
- 01导出 events、persons 或 sessions 供分析
- 02将 HogQL 查询作为批量导出运行
- 03为后续处理选择文件格式和压缩方式
MCP 相关
使用 MCP 工具创建并监控批量导出任务。文件通过 PostHog REST 下载端点获取,因为下载路由会重定向。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ posthog/ skills --skill downloading-batch-export-files安装后在 Claude Code 中输入/downloading-batch-export-files确认已加载。
详细介绍
下载批量导出文件
当用户需要一次性下载 PostHog 数据导出文件时,使用此技能。 通过 MCP 启动并监控导出,但最终文件下载需直接使用现有的 REST 端点。
可用的 MCP 工具
| 工具 | 用途 |
|---|---|
posthog:file-download-batch-exports-create | 启动按需导出并返回运行 ID |
posthog:file-download-batch-exports-retrieve | 轮询运行状态,并在完成后返回文件 ID |
不要依赖为 /download/ 端点生成的 MCP 工具。
该端点会重定向到文件下载,因此在 MCP 明确支持重定向之前,原始 HTTP/下载处理才是正确的接口。
工作流
1. 选择导出格式
如果用户未指定必要输入,请提出一个简短的澄清问题:
model:以下之一:events、persons、sessions或hogqldata_interval_start和data_interval_end:ISO 8601 日期时间。任何提供的时间边界都不能是未来时间。如果同时提供两个边界,它们必须按时间顺序排列,且间隔最多为一周events、persons和sessions必须提供。 对于hogql,仅当查询引用了占位符时才需要提供。如果只引用了一个占位符,可以省略另一个时间边界,且不受一周间隔的限制。file.format:Parquet或JSONLines;紧凑型分析数据导出优先使用Parquet,按行处理文本则优先使用JSONLinesfile.compression:可选,以下之一:zstd、gzip、brotli、lz4或snappy。如果选择的格式是JSONLines,则仅支持gzip和brotli。file.max_size_mb:分片大小,单位为 MiB,默认为 1024。分片大小可能略微超出此值。 用户需要更小的分片时调低该值,需要更少且更大的分片时调高该值,或设为null以写入一个不限大小的文件。
对于 events,include 和 exclude 是可选的事件名称筛选条件。
只有在用户要求指定事件或排除指定事件时才使用。
对于 hogql,将查询作为 hogql_query 传入,并省略 include 和 exclude。
你可以建议用户在 HogQL 查询中加入 WHERE 子句来导出部分数据,例如通过限制 events 表的 timestamp 来限定结果。
始终优先将导出数据限制在解决用户请求所需的最小范围内。
SELECT 子句中的每一列都必须是字段或带有别名。
此模型目前处于封闭 Beta 阶段,按团队启用。
hogql 查询可以引用 {data_interval_start} 和 {data_interval_end} 占位符。
导出时会将其替换为 data_interval_start 和 data_interval_end 的值,因此一个查询就可以导出任意时间区间。
为查询引用的每个占位符提供相应的时间边界;缺少边界会导致请求失败。
这些边界只会替换占位符,本身不会筛选任何数据,因此即使提供了时间边界,不含占位符的查询仍会原样运行。
当用户需要指定时间范围,或使用同一查询导出多个连续时间范围时,优先使用占位符而不是字面日期。
使用 >= {data_interval_start} 和 < {data_interval_end} 进行比较,确保连续时间范围不会重复导出同一行。
2. 启动导出
使用选定的格式调用 posthog:file-download-batch-exports-create。
响应中包含导出运行的 id。
请求示例:
{
"model": "events",
"file": {
"format": "JSONLines",
"compression": "gzip"
},
"include": ["$pageview"],
"data_interval_start": "2026-05-25T00:00:00Z",
"data_interval_end": "2026-05-26T00:00:00Z"
}
hogql 模型的请求示例:
{
"model": "hogql",
"file": {
"format": "Parquet"
},
"hogql_query": "SELECT event, timestamp, properties.$current_url AS url FROM events WHERE timestamp >= {data_interval_start} AND timestamp < {data_interval_end}",
"data_interval_start": "2026-05-25T00:00:00Z",
"data_interval_end": "2026-05-26T00:00:00Z"
}
3. 轮询直至完成
使用返回的 id 调用 posthog:file-download-batch-exports-retrieve。
状态处理:
| 状态 | 操作 |
|---|---|
Starting 或 Running | 短暂等待后再次轮询 |
Completed | 读取 files 数组并下载每个文件 |
Cancelled | 停止并报告运行已取消 |
Failed、FailedRetryable、FailedBilling、Terminated 或 TimedOut | 停止并报告 error 字段 |
当状态为 Completed 时,files 数组包含文件 UUID。
单文件导出通常包含一个 UUID。
对于拆分导出,除非用户指定了特定部分,否则下载所有 UUID。
Completed 响应还包含 records_completed,即本次运行导出的行数。
请将其告知用户,因为只有逐个打开文件才能查看该数量。
4. 可选:取消正在运行的导出
如果用户有需要,可以使用返回的 id 调用 posthog:file-download-batch-exports-cancel-create,取消正在运行的导出。
已经完成或失败的导出可能无法取消。
取消导出后,可能无法再使用该 id,必须从头开始重新导出。不过,仍可使用该 id 查询导出状态(状态始终为 Cancelled)。
5. 通过 REST 下载文件
向现有端点发送直接的身份验证 HTTP 请求:
GET /api/projects/{project_id}/file_download_batch_exports/{run_id}/download/{part}/
part 可以是以下任一项:
file-download-batch-exports-retrieve返回的files数组中的文件 UUID- 按键排序的从零开始的文件索引
如果只有一个文件,也可以不指定 part:
GET /api/projects/{project_id}/file_download_batch_exports/{run_id}/download/
让 HTTP 客户端跟随重定向;如果需要临时签名 URL,也可以检查 Location 标头。
使用与其他 API 调用相同的 PostHog 身份验证上下文。
6. 保存文件,不要打印内容
将结果视为文件下载,而非聊天回复。 Parquet 是二进制格式,必须以字节形式写入。 JSONLines 文件也可能很大;请将其保存到文件中,不要粘贴内容,除非用户明确要求查看少量样例。
尽可能使用包含模型、运行 ID 和部分标识符的文件名,例如:
posthog-events-<run_id>-<part>.jsonl.gz
posthog-persons-<run_id>-<part>.parquet
重要说明
- 导出的最长时间范围为一周。请将更长的用户请求拆分为多个单独的导出任务,或询问用户要导出哪一周。
hogql模型处于封闭测试阶段,需按团队启用。如果出现提示未启用 HogQL 批量导出的权限错误,说明该团队尚未获得测试资格。请报告这一情况,不要尝试更换查询,并告知用户可以联系 PostHog 支持团队申请访问权限。hogql模型的资源限制比其他模型更严格,因为用户查询的可预测性较低。如果导出因内存、执行时间或读取字节数限制而失败,请建议使用 WHERE 子句缩小查询范围,而不是原样重试。hogql模型接受可选的hogql_modifiers对象。对象中的每个修饰符都会在本次导出中覆盖项目中同名的 HogQL 修饰符;项目修饰符则适用于其他所有情况。除非项目设置了convertToProjectTimezone修饰符,否则timestamp列会以 UTC 时区显示;如果用户希望使用项目时区,请传入{"convertToProjectTimezone": true}。向posthog:file-download-batch-exports-count-rows-create传入相同的hogql_modifiers,以确保行数与导出内容相符。- 创建文件记录期间,运行任务在完成后可能会短暂显示为
Running。请再次轮询,不要立即判定失败。 - 下载 URL 是临时的。如果 URL 过期,请再次调用 REST 下载端点以获取新的重定向。
- 除非用户明确要求,否则不要将签名 URL 发送给无关服务;该 URL 授予对导出文件的临时访问权限。
- 如果用户需要拆分导出的所有部分,请遍历
files中的每个 UUID;不要假设第0部分就足够。 - 大型批量导出可能需要几分钟甚至更长时间才能完成。请建议用户仅包含特定事件或缩小日期范围,以加快下载速度。