Skip to content

kylejb-forks/trino-js-client

 
 

Repository files navigation

trino-js-client

A Trino client for Node.js.

Warning

The project is currently undergoing a migration to the trinodb organization. Join us on Trino Slack in #core-dev, help us, and stay tuned.

@latest it-tests license

Features

  • Connections over HTTP or HTTPS
  • Supports HTTP Basic Authentication
  • Per-query user information for access control

Requirements

  • Node 12 or newer.
  • Trino 0.16x or newer.

Install

npm install trino-client or yarn add trino-client

Usage

For additional info on all available methods and types have a look at the API documentation.

Create a Trino client

const trino: Trino = Trino.create({
  server: 'http://localhost:8080',
  catalog: 'tpcds',
  schema: 'sf100000',
  auth: new BasicAuth('test'),
});

Submit a query

const iter: Iterator<QueryResult> = await trino.query(
  'select * from customer limit 100'
);

Iterate through the query results

for await (const queryResult of iter) {
  console.log(queryResult.data);
}

Alternative: map and aggregate the data

const data: QueryData[] = await iter
  .map(r => r.data ?? [])
  .fold<QueryData[]>([], (row, acc) => [...acc, ...row]);

Examples

More usage examples can be found in the integration tests.

Build

Use the following commands to build the project locally with your modifications, and in preparation to contribute a pull request.

Requirements:

  • yarn

Install dependencies:

yarn install --frozen-lockfile

Lint the source code:

yarn test:lint

Build:

yarn build

A successful build run does not produce any message on the terminal.

Integration test

Integration tests run against a Trino server running on your workstation.

Requirements:

Create a cluster:

kind create cluster

Deploy Trino:

kubectl apply -f tests/it/trino.yml

Wait for pods to be ready:

kubectl wait --for=condition=ready pods -n trino-system --all --timeout=120s

Ensure Trino is running and available on port 8080. Run the following command in a separate terminal:

kubectl -n trino-system port-forward svc/trino 8080:8080

Run tests:

yarn test:it --testTimeout=60000

Output should look similar to the following:

 PASS  tests/it/client.spec.ts
  trino
    ✓ exhaust query results (1567 ms)
    ✓ close running query (200 ms)
    ✓ cancel running query (17 ms)
    ✓ get query info (1 ms)
    ✓ client extra header propagation
    ✓ query request header propagation (88 ms)
    ✓ QueryResult has error info
    ✓ QueryInfo has failure info (1 ms)
    ✓ prepare statement (98 ms)
    ✓ multiple prepare statement (432 ms)

Test Suites: 1 passed, 1 total
Tests:       10 passed, 10 total
Snapshots:   0 total
Time:        3.457 s
Ran all test suites matching /tests\/it/i.

Remove the cluster:

kind delete cluster

Contributing

Follow the Trino contribution guidelines and contact us on Slack and GitHub.

Copyright Trino JS Client contributors 2022-present

Releasing

Releases are automated with GitHub Actions and only require a pull request that updates the version in package.json. For example, see PR 723

About

TypeScript client library for Trino

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 99.6%
  • Emacs Lisp 0.4%