Trino JavaScript Client

0.2.9 · active · verified Tue Apr 21

The `trino-client` library provides an official JavaScript/TypeScript client for interacting with Trino (formerly PrestoSQL) instances from Node.js environments. It enables developers to execute SQL queries, retrieve results, and manage connections programmatically. The current stable version is 0.2.9, with new releases occurring frequently, typically on a monthly or bi-monthly basis, primarily for dependency updates and minor improvements. A key differentiator introduced in version 0.2.0 is the adoption of async iterators for query results, offering an efficient and modern way to process potentially large datasets streamingly. The library supports secure connections via SSL/TLS and provides robust error handling for Trino interactions.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates how to connect to a Trino instance, execute a simple `SELECT` query, and process results using the async iterator pattern. It includes basic configuration and handles environment variables for sensitive data.

import { TrinoClient, type QueryConfig, type Trino } from 'trino-client';

async function runTrinoQuery() {
  const config: QueryConfig = {
    serverUrl: process.env.TRINO_SERVER_URL || 'http://localhost:8080',
    catalog: process.env.TRINO_CATALOG || 'memory',
    schema: process.env.TRINO_SCHEMA || 'default',
    user: process.env.TRINO_USER || 'testuser',
    // Optional: For SSL/TLS connections, enable 'https' and manage 'requestVerification'
    // https: true,
    // requestVerification: false // Use with caution for self-signed certs in dev
    // For Basic Authentication, pass an 'auth' object, e.g.,
    // auth: new (await import('trino-client')).BasicAuth('username', 'password'),
  };

  let trinoClient: Trino; // Type for the client instance

  try {
    // Starting from v0.2.0, TrinoClient constructor is private. Use static factory method.
    trinoClient = TrinoClient.create(config);
    console.log(`Connected to Trino at ${config.serverUrl}`);

    const query = 'SELECT * FROM system.runtime.nodes LIMIT 1';
    console.log(`Executing query: "${query}"`);

    // The query method now returns an async iterator (since v0.2.0)
    const queryResults = await trinoClient.query(query);

    console.log('Query results:');
    for await (const { columns, data } of queryResults) {
      if (columns) {
        console.log('Columns:', columns.map(c => c.name).join(', '));
      }
      if (data) {
        data.forEach(row => console.log(row));
      }
    }
    console.log('Query finished successfully.');

  } catch (error) {
    console.error('Failed to run Trino query:', error instanceof Error ? error.message : String(error));
  }
}

runTrinoQuery();

view raw JSON →