You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 69ae8d6
Browse filesBrowse the repository at this point in the historyBrowse files
- Query results include a `result-id` in the table footer — use it to retrieve past results without re-running queries.
290
291
292
+
## Ingest
293
+
294
+
Pull data from external sources into managed databases. Two nouns: **connections** (onboarded, credentialed sources — schema discovered, no data loaded) and **imports** (managed databases materialized from a connection).
295
+
296
+
```bash
297
+
# Browse the connector catalog (SQL dialects, ~150 API services, buckets, Iceberg)
298
+
hotdata ingest connectors postgres
299
+
300
+
# Add a connection: validates credentials and discovers the schema (loads no data).
301
+
# Run bare for a guided wizard, or non-interactively with --service + --config
302
+
# (@file or @- keeps secrets out of argv):
303
+
hotdata ingest new-connection --service postgres --config @conn.json --schema public
Copy file name to clipboardExpand all lines: skills/hotdata/SKILL.md
+53-3Lines changed: 53 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
---
2
2
name: hotdata
3
-
description: Use this skill when the user wants to run core hotdata CLI commands — auth, workspaces, connections, managed databases, tables, basic SQL query, database context (context:DATAMODEL), jobs, and skill install. Activate for "run hotdata", "list workspaces", "list connections", "create a connection", "list databases", "managed database", "load parquet", "list tables", "execute a query", "database context", "context:DATAMODEL", or general Hotdata CLI usage. For full-text/vector search and retrieval indexes use hotdata-search; for OLAP analytics, query history, stored results, and Chain materializations use hotdata-analytics; for geospatial/GIS use hotdata-geospatial.
3
+
description: Use this skill when the user wants to run core hotdata CLI commands — auth, workspaces, connections, managed databases, tables, basic SQL query, database context (context:DATAMODEL), jobs, ingest (pull external data), and skill install. Activate for "run hotdata", "list workspaces", "list connections", "create a connection", "list databases", "managed database", "load parquet", "list tables", "execute a query", "database context", "context:DATAMODEL", "ingest", "import data from", "connect a data source", "connector", "pull data from postgres/mysql/an API/S3 buckets/Iceberg", or general Hotdata CLI usage. For full-text/vector search and retrieval indexes use hotdata-search; for OLAP analytics, query history, stored results, and Chain materializations use hotdata-analytics; for geospatial/GIS use hotdata-geospatial.
4
4
version: 0.12.0
5
5
---
6
6
@@ -20,7 +20,7 @@ Install all skills with **`hotdata skills install`**. Load specialized skills on
- Use `hotdata jobs <job_id>` to inspect a specific job's status, error, and result.
297
297
298
+
### Ingest external data (`ingest`)
299
+
300
+
Pull data from external sources (SQL databases, APIs, S3/GCS/Azure buckets, Iceberg catalogs) into managed databases. Two nouns: **connections** (onboarded, credentialed sources — schema discovered, no data loaded; each has its own id) and **imports** (managed databases materialized from a connection). A connection registers under the connector name you added (`postgres`, `buckets`, `iceberg`, a named API service) — that name is the `FROM` target for imports.
301
+
302
+
Enqueue commands (`new-connection`, `new-import`, `trigger-import`, `delete-connection`) **require a workspace API key** (`HOTDATA_API_KEY` / `--api-key`, `hd_...`) — a login session is not enough, because the ingest pipeline runs after a short-lived session token would expire.
# "warehouse": …, "token": …} or "credential" + "scope" for an OAuth exchange.
323
+
324
+
hotdata ingest list-connections # ids, statuses; --all includes superseded
325
+
hotdata ingest show-connection <id># status + discovered tables/columns
326
+
hotdata ingest delete-connection <id># registry + credentials + discovery DB
327
+
# (--keep-database keeps the DB)
328
+
329
+
# Imports return IMMEDIATELY (non-blocking). Track with `status`:
330
+
hotdata ingest new-import "SELECT * FROM postgres.orders LIMIT 1000"
331
+
hotdata ingest new-import --source postgres --all # everything, no LIMIT
332
+
hotdata ingest status <ingest-id># one-shot; exits 0 done / 1 failed / 2 in flight
333
+
hotdata ingest status <ingest-id> --wait # attach and poll to done/failed
334
+
335
+
hotdata ingest list-imports # the SQL behind each import + its database
336
+
hotdata ingest trigger-import <ingest-id># re-run: refresh the same DB from source
337
+
```
338
+
339
+
Agent tips:
340
+
- Import SQL is a **restricted grammar**: `SELECT <cols|*> FROM <connection>[.<resource>] [WHERE …] [LIMIT n]` — no joins/GROUP BY. Run real analytics with `hotdata query` against the imported database afterward.
341
+
- Prefer `-o json` + the `status` exit codes for scripting; poll one-shot `status` rather than holding `--wait` when doing other work in between.
342
+
- In-flight statuses stream through stages (`preparing`, `extracting`, `normalizing`, `loading`); treat **any non-terminal value as in-flight** — the set can grow. Terminal = `done` | `failed`.
- Once an import is `done`, its database is a regular managed DB: query it with `hotdata query --database <db-id> "SELECT … FROM public.<table>"`.
345
+
- Resources per family: `buckets` connections expose a single resource named `files` (`FROM buckets` or `FROM buckets.files`); iceberg resources are the onboarded tables — address one as `FROM iceberg.NAMESPACE_TABLE` (dots become underscores, same case as onboarded) or by its bare table name.
346
+
-`ingest` connections are independent of `hotdata connections` (the federated-query store) — ingest owns its own credentials.
0 commit comments