数据库操作

对 SQLite、PostgreSQL 和 ClickHouse 进行插入、更新插入、查询和同步

插入数据

来自标准输入

# Single profile → database
anysite api /api/linkedin/user user=satyanadella -q --format jsonl | \
  anysite db insert mydb --table profiles --stdin --auto-create

# Batch results → database
anysite api /api/linkedin/user --from-file users.txt --input-key user \
  --parallel 5 -q --format jsonl | \
  anysite db insert mydb --table profiles --stdin --auto-create

来自文件

anysite db insert mydb --table profiles --file results.jsonl --auto-create

自动创建表

加上 --auto-create 后,CLI 会根据 JSON 数据推断出模式,并在表不存在时创建它 — 列类型是根据数据值 推断出来的。--pk <column> 用于在创建表时设置主键。

--auto-create 可以安全地重复使用 — 它只在第一次运行时创建表,之后的运行会插入到已存在的表中。

如果只想创建表而不插入数据,可以直接使用 db create-table(--stdin 读取一份 JSON 样本来推断模式, --dry-run 只打印 CREATE TABLE SQL 而不执行):

echo '{"id":1,"name":"test"}' | anysite db create-table mydb --table users --pk id --dry-run

更新插入(Upsert,插入或更新)

db insert 和 db upsert 共用同一套底层逻辑。db upsert 是 db insert --on-conflict update 的简写:

# db upsert: conflict columns are required, always updates on conflict
cat updates.jsonl | \
  anysite db upsert mydb --table profiles --conflict-columns id --stdin

# Equivalent via db insert, with explicit --on-conflict
cat updates.jsonl | \
  anysite db insert mydb --table profiles --stdin --auto-create \
  --on-conflict update --conflict-columns id

db insert 的 --on-conflict 接受 error(默认)、ignore、replace 或 update。--batch-size (默认 100)控制每批插入发送的行数。

检查模式

# List tables
anysite db schema mydb

# Show columns of one table
anysite db schema mydb --table profiles

查询数据

# Query with table output (default format for db query)
anysite db query mydb --sql "SELECT name, headline FROM profiles LIMIT 10" --format table

# Export query results to CSV
anysite db query mydb --sql "SELECT * FROM profiles WHERE industry = 'Technology'" \
  --format csv --output tech_profiles.csv

# Count records
anysite db query mydb --sql "SELECT COUNT(*) FROM profiles"

# Query from a .sql file instead of --sql
anysite db query mydb --file queries/report.sql --format json

--format 接受 json、jsonl、csv、table(默认)或 parquet(需配合 --output)。

数据集加载

将数据集管道采集到的数据直接加载到数据库:

# Load all sources into database (creates tables per source)
anysite dataset load-db dataset.yaml -c mydb

# Drop existing tables and reload
anysite dataset load-db dataset.yaml -c mydb --drop-existing

# Load a specific snapshot date
anysite dataset load-db dataset.yaml -c mydb --snapshot 2026-01-15

# Auto-load during collection
anysite dataset collect dataset.yaml --load-db mydb

管道中的每个数据源都会成为一张单独的表,以数据源 ID 命名。单个数据源的 db_load.key 和 db_load.sync(full — 默认,删除已不存在的行;或 append — 不执行删除)用于控制增量行为, 以及父数据源与依赖数据源之间的外键关联 — 见 Per-Source Transform & Export。

比较两次采集快照

dataset diff 用于比较管道针对同一数据源采集的两份带日期的 Parquet 快照 — 它会报告两次采集运行 之间发生的变化,不会与数据库进行比较,也不会写入数据库:

anysite dataset diff dataset.yaml --source profiles --key urn.value

# Compare specific dates instead of the two most recent snapshots
anysite dataset diff dataset.yaml --source profiles --key urn.value --from 2026-01-01 --to 2026-01-08

# Diff only specific fields
anysite dataset diff dataset.yaml --source profiles --key urn.value --fields "name,headline"

结果包括:

要将变化真正同步到实时数据库,请使用上面的 dataset load-db。

完整的管道到数据库示例

# Step 1: Collect data
anysite dataset collect dataset.yaml

# Step 2: Load into PostgreSQL
anysite dataset load-db dataset.yaml -c pg

# Step 3: Query the results
anysite db query pg --sql "
  SELECT p.name, p.headline, e.company_name
  FROM profiles p
  JOIN employees e ON p.urn_value = e.urn_value
  LIMIT 20
" --format table

# Or do it all in one command:
anysite dataset collect dataset.yaml --load-db pg

操作参考

命令 描述
anysite db insert <conn> --table <name> --stdin 从标准输入插入数据
anysite db insert <conn> --table <name> --file <path> 从文件插入数据
anysite db insert <conn> ... --auto-create --pk <col> 根据数据自动创建表
anysite db insert <conn> ... --on-conflict update --conflict-columns <cols> 冲突时更新插入
anysite db upsert <conn> --table <name> --conflict-columns <cols> 更新插入,上一行的简写形式
anysite db create-table <conn> --table <name> --stdin 根据推断的模式创建表,不插入数据
anysite db schema <conn> / --table <name> 列出所有表,或查看某张表的列
anysite db query <conn> --sql "..." 运行 SQL 查询
anysite dataset load-db <yaml> -c <conn> 将数据集加载到数据库
anysite dataset load-db <yaml> -c <conn> --drop-existing 重新加载并使用全新的表
anysite dataset load-db <yaml> -c <conn> --snapshot <date> 加载指定的快照
anysite dataset diff <yaml> --source <id> --key <field> 比较某个数据源的两次采集快照

后续步骤

LLM Analysis

使用 AI 驱动的分类和摘要来增强您的数据

SQL Querying

使用 DuckDB SQL 查询采集到的数据集