Registry / database / trino-client

trino-client

JSON →
library0.2.9jsnpmunverified

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.

npm install trino-client
INSTALL
IMPORT
SIG · TRINO-CLIENT
T
trino-client
databasejavascriptv0.2.9
Install
Import
Disk
Pass rate
0/ 6
Env Coverage0 / 6
glibc
1822
musl
1822
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

TrinoClient
import { TrinoClient } from 'trino-client';
const TrinoClient = require('trino-client').TrinoClient;
The library primarily uses ES modules. While CommonJS `require` might work in some transpiled setups, `import` is the idiomatic and recommended approach. The `TrinoClient` class itself is not directly constructible since v0.2.0; use `TrinoClient.create()`.
Trino
import type { Trino } from 'trino-client';
import { Trino } from 'trino-client';
This is typically used as a TypeScript type for the client instance returned by `TrinoClient.create()`, not a runtime value. Import it as a type.
QueryConfig
import type { QueryConfig } from 'trino-client';
import { QueryConfig } from 'trino-client';
This interface defines the configuration options for connecting to Trino and executing queries. It's a TypeScript type and should be imported as such for type safety.

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();
Debug
Known issues
breakingThe `TrinoClient.query` method no longer returns a promise resolving to a single result object but an async iterator of result pages. Direct access to `columns` or `data` properties on the initial promise resolution will fail.
fix
Update query result consumption to use a `for await...of` loop to iterate over `QueryResult` objects. Each `QueryResult` object will contain `columns` and `data` for a specific page of results.
affects: >=0.2.0
breakingThe `TrinoClient` class constructor was made private in v0.2.0. Instantiating via `new TrinoClient()` will result in a TypeError, as the constructor is no longer publicly accessible.
fix
Use the static factory method `TrinoClient.create(config)` to obtain a client instance.
affects: >=0.2.0
gotchaWhen connecting to Trino via HTTPS, ensure proper SSL/TLS configuration. Using `requestVerification: false` (equivalent to `rejectUnauthorized: false` in Node.js `https` module) disables certificate validation. This is a security risk and should only be used in development environments with self-signed certificates.
fix
For production, ensure your Trino server uses trusted certificates. If using self-signed certificates in development, explicitly set `https: true` and `requestVerification: false` in `QueryConfig`, understanding the security implications.
affects: >=0.2.1
Errors
Common errors & fixes
TypeError: TrinoClient is not a constructor
Attempting to instantiate `TrinoClient` with the `new` keyword after version 0.2.0.
fix
Use the static factory method `TrinoClient.create(config)` instead of `new TrinoClient(config)`.
Error: self-signed certificate in certificate chain
Connecting to a Trino server over HTTPS with a self-signed or untrusted SSL/TLS certificate without disabling certificate verification.
fix
If in a development environment, set `requestVerification: false` in your `QueryConfig`. For production, ensure the Trino server uses a certificate issued by a trusted Certificate Authority (CA).
SyntaxError: Named export 'TrinoClient' not found
Trying to use CommonJS `require()` syntax (e.g., `const { TrinoClient } = require('trino-client');`) in a module that primarily uses ES modules, or an incorrect named import.
fix
Ensure your environment is configured for ES modules and use `import { TrinoClient } from 'trino-client';`.
Error: Query failed: line X:Y: Table 'catalog.schema.table' does not exist
The specified catalog, schema, or table in your query does not exist, or the configured user lacks sufficient permissions to access it.
fix
Verify the `catalog`, `schema`, `user`, and table name in your `QueryConfig` and SQL query. Check Trino server logs for more details on access rights or table existence.
Upgrade
Version history
0.2.9latest on npm
Audit
Dependencies
axiosrequiredUsed for making HTTP requests to the Trino server.
form-datarequiredUsed for handling multipart form data, potentially for specific Trino APIs or authentication methods.
p-queuerequiredManages concurrency for requests.
Agent activity
16 hits · last 30 days
node
14
OpenAI (training)
1
Resources
trino-client — npm install trino-client · libregistry