Skip to Content
This documentation is provided with the HEAT environment and is relevant for this HEAT instance only.
InternalBulk analytics Core API (internal)

Bulk analytics Core API (internal)

Engineering-only HTTP surface on Core API for scripts, IDE extensions, and operators. Same trust boundary as tools/agentic-cli: cluster network access and HEAT_API_TOKEN / HEAT_API_KEY Bearer auth when enabled.

This is not published on the v2 public API.

Base path

/api/bulk-analytics

Primary handle

Bulk writer nodeInstanceId for a system-bulk-tabular-writer node. Database name: bulk_ni_{nodeInstanceId}.

Discovery

MethodPathDescription
GET/writers?sessionId={guid}List bulk writers in a session
GET/writers/{nodeInstanceId}Writer summary, database size, table count, optional ingest catalog

Inspect (no SQL body)

MethodPathDescription
GET/writers/{nodeInstanceId}/catalogheatBulkWriterCatalogV1 from writer current output
GET/writers/{nodeInstanceId}/tablesLive tables with n_live_tup and pg_total_relation_size
GET/writers/{nodeInstanceId}/tables/{tableName}Column metadata (information_schema + catalog valueKind when available)
GET/writers/{nodeInstanceId}/tables/{tableName}/preview?limit=100SELECT * … LIMIT n (JSON default; Accept: text/csv for CSV)

Query

POST /writers/{nodeInstanceId}/query

{ "sql": "EXPLAIN ANALYZE SELECT COUNT(*) FROM \"csv_abc\"", "maxRows": 10000, "outputFormat": "auto", "commandTimeoutSeconds": 60 }
FieldNotes
sqlRequired. Read-only policy below.
maxRowsDefault 10000, max 100000
outputFormatauto, json, or csv (single result set only for CSV)
commandTimeoutSecondsDefault 60, max 120

Response: JSON BulkAnalyticsTabularOutputV1 envelope (tables.result) or text/csv when outputFormat is csv/auto with one result set, or Accept: text/csv.

SQL policy (API)

Broader than the system-bulk-analytics-query runner node (which allows only SELECT / WITH):

AllowedExamples
SELECT, WITH … SELECTSELECT * FROM "csv_abc" LIMIT 10
EXPLAIN, EXPLAIN ANALYZEQuery planning
SHOWSHOW search_path
Catalog introspectionSELECT … FROM information_schema.columns
Blocked
DML/DDL (INSERT, UPDATE, DELETE, DROP, CREATE, ALTER, …)
SET, RESET, COPY, CALL, DO, …
Multiple statements (; in body)
SELECT … INTO

No psql backslash commands; use HTTP inspect endpoints instead.

Errors

StatusMeaning
400Invalid SQL, table name, or request body
404Unknown writer, missing database, missing catalog/output
503Analytics Postgres or DataSource HEAT Bulk Analytics DB unavailable

Example flow

export CORE_API="https://core-api.example" export TOKEN="$HEAT_API_TOKEN" # List writers in a session curl -sS -H "Authorization: Bearer $TOKEN" \ "$CORE_API/api/bulk-analytics/writers?sessionId=SESSION_GUID" # Writer summary curl -sS -H "Authorization: Bearer $TOKEN" \ "$CORE_API/api/bulk-analytics/writers/42" # Tables and column describe curl -sS -H "Authorization: Bearer $TOKEN" \ "$CORE_API/api/bulk-analytics/writers/42/tables" curl -sS -H "Authorization: Bearer $TOKEN" \ "$CORE_API/api/bulk-analytics/writers/42/tables/csv_abc" # Ad-hoc query (JSON) curl -sS -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{"sql":"SELECT COUNT(*) FROM \"csv_abc\""}' \ "$CORE_API/api/bulk-analytics/writers/42/query" # CSV download curl -sS -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -H "Accept: text/csv" \ -d '{"sql":"SELECT * FROM \"csv_abc\" LIMIT 100","outputFormat":"csv"}' \ "$CORE_API/api/bulk-analytics/writers/42/query" -o preview.csv

Implementation

  • Validator: BulkAnalyticsApiSqlValidator (API only)
  • Service: BulkAnalyticsApiService
  • Controller: BulkAnalyticsController
  • Postgres: IBulkAnalyticsPostgresClient introspection and TryExecuteAdHocSqlAsync