Skip to main content

Versatile Data Kit SDK plugin provides support for trino database and trino transformation templates.

Project description

monthly download count for vdk-trino

This plugin allows vdk-core to interface with and execute queries against a Trino database. Additionally, it can collect lineage data, assuming a lineage logger has been provided through the vdk-core configuration.

Usage

Run

pip install vdk-trino

After this data jobs will have access to Trino database connection managed by Versatile Data Kit SDK.

If it is the only database plugin installed , vdk would automatically use it. Otherwise, users need to set VDK_DB_DEFAULT_TYPE=TRINO as an environment variable or set 'db_default_type' option in the data job config file (config.ini).

For example

    def run(job_input: IJobInput):
        job_input.execute_query("select 'Hi Trino!'")

Templates

vdk-trino comes with pre-defined templates for SQL transformations

Lineage

The package gathers lineage data for all Trino SQL queries executed in a data job

Other plugins can read that lineage data log it. They need to provide ILineageLogger implementation and hook this way:

    @hookimpl
    def vdk_initialize(context: CoreContext) -> None:
        context.state.set(StoreKey[ILineageLogger]("trino-lineage-logger"), MyLogger())

Ingestion

This plugin allows users to ingest data to a Trino database, which can be preferable to inserting data manually as it automatically handles serializing, packaging and sending of the data asynchronously with configurable batching and throughput. To do so, you must set the expected variables to connect to Trino, plus the following environment variable:

export VDK_INGEST_METHOD_DEFAULT=TRINO

Then, from inside the run function in a Python step, you can use the send_object_for_ingestion or send_tabular_data_for_ingestion methods to ingest your data.

Multiple Trino Database Connections

Configuring Multiple Trino Databases

To effectively manage multiple Trino database connections within a data job, configure the default database in the [vdk] section of the config.ini file. This section should contain the primary connection details that the application will use by default. The default Trino connection is saved as trino and should always be called with that name. Subsections should not be created with that name. Subsection name vdk_trino is prohibited.

For each additional Trino database, add a new section following the pattern vdk_<name>, where <name> is a unique identifier for each database connection. These additional sections must also include all necessary Trino connection details.

Note: When using in code the <name> should be lowercased. For example, if you have vdk_DEV, in the data job you should refer to the database using the dev string.

Example config.ini with Multiple Trino Databases

[vdk]
trino_user=user
trino_password=password
trino_host=localhost
trino_port=28080
trino_schema=default
trino_catalog=memory
trino_use_ssl=True

[vdk_trino_reports]
trino_user=reports_user
trino_password=reports_password
trino_host=reports_host
trino_port=28081
trino_schema=reports
trino_catalog=memory
trino_use_ssl=False

You can specify which database to use in your data job by referencing the specific section name.

def run(job_input):

    # Querying the default Trino database
    default_query = "SELECT * FROM default_table"
    job_input.execute_query(sql=default_query, database="trino") # database option can be omitted

    # Querying the reports Trino database
    reports_query = "SELECT * FROM reports_table"
    job_input.execute_query(sql=reports_query, database="trino_reports") # database is mandatory; if omitted query will be executed against default db

Ingestion into Multiple Trino Databases

For data ingestion, you can also specify the target database to ensure the data is sent to the correct Trino instance.

def run(job_input):

    # Ingest data into the default database
    payload_default = {"col1": "value1", "col2": "value2"}
    job_input.send_object_for_ingestion(
        payload=payload_default,
        destination_table="default_table",
        method="trino"
    )

    # Ingest data into the reports database
    payload_reports = {"col1": "value3", "col2": "value4"}
    job_input.send_object_for_ingestion(
        payload=payload_reports,
        destination_table="reports_table",
        method="trino_reports"
    )

Secrets with Multiple Trino Databases

If you have a config like above, for the default vdk section, secrets overrides work like usual. For example, to override trino_user=your_user, you should create a secret trino_user with value your_user.

If you want to override a config property for a subsection, you have to prefix the secret with the subsection name without vdk. For example, to override trino_user=reports_user for vdk_trino_reports, create a secret trino_reports_trino_user with value reports_user.

Environmental variables with Multiple Trino Databases

Environment variables work pretty much the same way as secrets. For the above config:

export VDK_TRINO_USER=user # overrides trino_user=user in section [vdk] (default trino)
export VDK_TRINO_REPORTS_TRINO_USER=reports_user # overrides trino_user=reports_user in section [vdk_trino_reports]

Note: Environment variables take precedence over secrets. For example, if you have a secret trino_reports_trino_user=reports_user and an env variable VDK_TRINO_REPORTS_TRINO_USER=another_reports_user the value of trino_user for section vdk_trino_reports will be another_reports_user.

Configuration

Run vdk config-help - search for those prefixed with "TRINO_" to see what configuration options are available.

Testing

Testing this plugin locally requires installing the dependencies listed in vdk-plugins/vdk-trino/requirements.txt

Run

pip install -r requirements.txt

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vdk_trino-0.4.1533145490.tar.gz (38.9 kB view details)

Uploaded Source

File details

Details for the file vdk_trino-0.4.1533145490.tar.gz.

File metadata

  • Download URL: vdk_trino-0.4.1533145490.tar.gz
  • Upload date:
  • Size: 38.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.15

File hashes

Hashes for vdk_trino-0.4.1533145490.tar.gz
Algorithm Hash digest
SHA256 0d4180fa57514c71c2fb69105a5c8b1e04af1387651518a5e7b8e11429aba44e
MD5 944b71f5b020e15ff25c67357b6f95ed
BLAKE2b-256 c1da3d0a195b6adbbd18570d2ecf014e0258a40c1a5b2edf8b1e1345c555cd7f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page