Skip to main content

query(sql, options?)

Execute a SQL query against the oleander lake using DuckDB. Returns structured results with columns, types, and rows. If the API rejects the query, the SDK throws instead of returning a failed result.
const result = await client.query(
  "SELECT * FROM oleander.default.flowers LIMIT 10",
);

const columns = result.results?.columns;   // ["sepal_length", "sepal_width", ...]
const rows = result.results?.rows;         // [[5.1, 3.5, ...], ...]
const count = result.row_count;            // 10
const elapsed = result.execution_time;     // "42ms"

Parameters

sql
string
required
The SQL query to execute. Supports DuckDB SQL syntax.
options.save
boolean
default:"false"
When true, persists query results as a table. The table name is returned in saved_table_name.

Saving results

Use save: true to persist query results as a table for later use.
const result = await client.query(
  "SELECT * FROM oleander.default.flowers LIMIT 10",
  { save: true },
);

if (result.saved_table_name) {
  const followUp = await client.query(
    `SELECT avg(sepal_length) FROM ${result.saved_table_name}`,
  );
}

Iterating over results

const result = await client.query(
  "SELECT species, sepal_length FROM oleander.default.flowers LIMIT 10",
);

const { columns, rows } = result.results!;
const speciesIdx = columns.indexOf("species");
const sepalLengthIdx = columns.indexOf("sepal_length");

for (const row of rows) {
  const species = row[speciesIdx] as string;
  const sepalLength = row[sepalLengthIdx] as number;
  // process each record ...
}

Return type: LakeQueryResult

FieldTypeDescription
successbooleanWhether the query executed successfully
resultsobjectQuery results with columns, column_types, and rows
row_countnumberNumber of rows returned
execution_timestringQuery execution time (for example, "42ms")
saved_table_namestringTable name if save: true was used
querystringThe original SQL query