---
title: "On-demand compute for copy jobs, optimize_aggregation_in_order, and TypeScript SDK improvements"
seo_title: "On-Demand Compute and TypeScript SDK Updates"
excerpt: "Run copy jobs on on-demand compute with a single CLI flag, use `optimize_aggregation_in_order` in API queries, and a batch of TypeScript SDK and UI improvements."
date: "2026-03-27"
---

# On-demand compute for copy jobs

Copy jobs can now run on on-demand compute instances. If a Copy Pipe hits memory limits on your main compute (either shared or dedicated), you can offload it to a dedicated instance with a single flag.

In the CLI (4.4.0+):

```bash
tb copy run my_copy_pipe --on-demand-compute
```

Or via the API by passing `on_demand_compute=true` to the copy job endpoint.

This is available on all **paid** plans, like on-demand compute for populates. Previously gated behind a feature flag, on-demand compute for copies is now generally available.

**CLI 4.4.0** is required. Update with `tb update`.

## optimize_aggregation_in_order in API queries

You can now pass `optimize_aggregation_in_order` as a query setting in API requests. This ClickHouse® setting can speed up aggregation queries on tables where the Sorting Key matches the GROUP BY columns, by reading data in order and producing partial results without a full hash table.

Useful for time-series aggregations over large Data Sources with a matching Sorting Key.

## TypeScript SDK updates

Several improvements landed in the [TypeScript SDK](https://github.com/tinybirdco/tinybird-sdk-typescript) (v0.0.62–0.0.64):

- **`--last-partition` flag for branch creation.** When creating a branch with `tb build` or `tb dev`, you can now pass `--last-partition` to only copy the most recent partition into the branch, making branch creation faster for large Data Sources.
- **`ingestBatch` method on Data Source accessors.** Typed Data Source accessors now expose `ingestBatch` directly, so you don't need to call it through the client.
- **Better error messages.** Build and dev failures now show the actual error instead of `undefined`.
- **Multiline Connection parser fix.** Connection files with multiline values (like `KAFKA_SSL_CA_PEM` using `>` continuation syntax) now parse correctly during migration.
- **Nullable + LowCardinality fix.** Fixed a bug where nullable modifiers were incorrectly set when nullable was embedded inside a `LowCardinality` type string.

## Deployment validation improvements

Two new validations catch configuration errors before they reach ClickHouse®:

- **Sorting Key column validation.** Deployments now fail early if the Sorting Key references a column that doesn't exist in the Data Source schema.
- **TTL validation with `fromUnixTimestamp64` functions.** TTL expressions using `fromUnixTimestamp64Milli`, `fromUnixTimestamp64Micro`, or `fromUnixTimestamp64Nano` are now validated correctly during deployment.

## system.data_skipping_indices

You can now query `system.data_skipping_indices` System Table to inspect the data-skipping indices defined on your Data Sources.

## UI improvements

- **Organization domain warnings.** When signing up or logging in via CLI, a warning now appears if your email domain matches an existing Organization, so you can join it instead of creating a duplicate.
- **Playground navigation.** The playground header no longer disappears when clicking between nodes, and the sidebar overflow button is properly sized.
- **Job details panel.** Fixed overflow in the job details split-screen panel.
- **Organization banner.** The Organization banner is now sticky at the bottom of the page.

## Deprecation of BI and billing service Data Sources

{% callout type="warning" %}
**Action required:** The following service Data Sources will stop working on **Wednesday, April 1, 2026**.
{% /callout %}

The following service Data Sources are **deprecated and will be removed**:

- **`organization.bi_stats_rt`** and **`tinybird.bi_stats_rt`**
- **`organization.bi_stats`** and **`tinybird.bi_stats`**
- **`organization.processed_data`**

**Deadline: Wednesday, April 1, 2026.** After this date, queries against these Data Sources will fail. You must migrate any dependencies before then.

### Migration path

Use ClickHouse® **system tables** instead. All deprecated tables were built on views over system tables—query them directly:

- **`system.query_log`** — query execution logs including API queries, BI connector queries, and internal queries
- **`system.query_views_log`** — materialized view execution logs

{% callout type="warning" %}
**Always restrict `system.query_log` and `system.query_views_log` with a time filter on `event_time`**—unbounded scans are slow and will time out.
{% /callout %}

### Example replacements

#### To replace `tinybird.bi_stats_rt` and `organization.bi_stats_rt`

```sql
SELECT
  event_time_microseconds as start_datetime,
  current_database as database,
  query_id,
  query,
  normalizeQuery(query) as query_normalized,
  exception_code,
  exception,
  query_duration_ms as duration,
  read_bytes,
  read_rows,
  result_bytes,
  result_rows
FROM system.query_log
WHERE
  type > 1
  AND event_time >= now() - INTERVAL 1 DAY
  AND http_user_agent = 'postgres'
```

#### Materialized View execution logs

```sql
SELECT
  event_time,
  view_name,
  view_target,
  view_duration_ms,
  read_rows,
  read_bytes,
  written_rows,
  written_bytes,
  peak_memory_usage,
  exception_code,
  exception
FROM system.query_views_log
WHERE
  event_time >= now() - INTERVAL 1 DAY
  AND view_type = 2
  AND status > 1
```

#### API query usage

```sql
SELECT
  event_date as date,
  current_database as database,
  http_user_agent as user_agent,
  sum(read_bytes) as read_bytes,
  sum(written_bytes) as written_bytes
FROM system.query_log
WHERE
  type > 1
  AND event_time >= now() - INTERVAL 1 DAY
  AND notEmpty(http_user_agent)
GROUP BY database, user_agent, date
```

#### Materialized View usage

```sql
SELECT
  event_date as date,
  splitByChar('.', view_name)[1] as database,
  sum(read_bytes) as read_bytes,
  sum(written_bytes) as written_bytes
FROM system.query_views_log
WHERE
  event_time >= now() - INTERVAL 1 DAY
  AND view_type = 2
  AND status > 1
  AND splitByChar('.', view_name)[1] NOT IN ('default', 'system')
GROUP BY database, date
```

For column-level detail and querying patterns, see [How to debug queries using `system.query_log`](https://www.tinybird.co/docs/forward/monitoring/query-log).

## Bug fixes and improvements

- [Classic]: Google Cloud Scheduler connections are now hidden from the `/v0/connectors` API, consistent with Forward behavior.

## From the blog

**[Smarter deployments: faster schema changes for the most common operations](https://www.tinybird.co/blog-posts/smarter-deployments-with-alter)**: Most schema changes don't need a full table rebuild. `ALTER TABLE` support in deployments means simple changes deploy in seconds, not minutes.

**[Maple: an open source observability platform built with Tinybird's TypeScript SDK](https://www.tinybird.co/blog-posts/maple)**: David Granzin built Maple, an observability platform for metrics, logs, and traces, using Tinybird's TypeScript SDK. Zero infrastructure to manage, AI agents accelerating development.

{% callout type="info" %}
Still on Tinybird Classic? [Migrate to Forward](https://www.tinybird.co/docs/forward/migrations/migrate-from-classic).
{% /callout %}
