Touch function

The touch() function loads a table from disk to memory. Useful for triggering a "hot" start from conditions where data may be "cold", such as after a restart or any condition which caused disk cache to flush. A "hot" start provides the usual fast and expected query performance, as no caching or movement from disk to memory is required prior to an initial query.

Arguments:

Wraps a SQL statement.

Return value

Returns an object representing index state.

{
"data_pages": number,
"index_key_pages": number,
"index_values_pages": number
}

See the Index documentation for more information on how the above values are determined.

General example

Consider a table with an indexed symbol column:

CREATE TABLE x AS (
SELECT
rnd_geohash(40) g,
rnd_double(0)* 100 a,
rnd_symbol(5, 4, 4, 1) b,
timestamp_sequence(0, 100000000000) k
FROM
long_sequence(20)
),
index(b) timestamp(k) PARTITION BY DAY;

Run touch() to "warm up" the table:

SELECT touch(SELECT * FROM x WHERE k IN '1970-01-22');

On success, an object is returned with the state of the index.

{
"data_pages": 4,
"index_key_pages": 1,
"index_values_pages": 1
}

Practical example

Many people use scripts to restart QuestDB.

Use touch() after startup via the REST API:

curl -G \
--data-urlencode "SELECT touch(SELECT * FROM x WHERE k IN '1970-01-22');" \
http://localhost:9000/exec

All subsequent queries will be within performance expectations, without additional latency added for "warming up" the data. Touch simulates a query without transferring data over the network, apart from the object as confirmation.