The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
First release: a DBI backend for Trino over the cluster’s HTTP REST API.
Trino(), dbConnect(),
dbDisconnect() and dbIsValid() manage a
connection’s life cycle. dbConnect() probes
/v1/info, so a wrong address or a rejected credential fails
at connection time. Its arguments are validated before the coordinator
is contacted, with plain messages.trino_auth_basic(), trino_auth_jwt() and
trino_auth_oauth2() supply credentials, and
trino_ssl() sets the TLS options, including
ca_bundle to trust an internal certificate authority
without turning verification off. dbConnect() refuses to
send credentials to an http:// host unless
allow_http_auth = TRUE.timeout bounds each HTTP request (60 seconds by
default) and query_max_run_time bounds a query on the
cluster.dbSendQuery(), dbFetch(),
dbGetQuery(), dbExecute(),
dbSendStatement(), dbHasCompleted() and
dbClearResult() run queries, with automatic
nextUri pagination, chunked fetching through
dbFetch(n = ), and server-side cancellation when a running
result is cleared.dbExecute() returns the number of rows Trino says a
statement changed, and 0 for DDL.
dbSendStatement() runs the statement to completion, so that
dbGetRowsAffected() answers straight away.dbColumnInfo() and dbFetch(n = 0) describe
the columns before the first row is fetched.dbIsValid() on a result reports whether it has been
cleared, not whether the query has finished, as DBI requires:
dbColumnInfo() and dbGetRowCount() keep
working until dbClearResult().
dbHasCompleted() reports that every row has been
consumed.trino_query_error and trino_canceled, carrying
the server’s error_name, error_code,
error_type and query_id, so a caller can react
to a specific Trino error without matching on the message text.params is an error, and dbBind()
says that parameters are not supported. Put values into a statement with
DBI::sqlInterpolate() or glue::glue_sql():
dbQuoteLiteral() writes typed Trino literals
(DATE '...', TIMESTAMP '...',
TRUE, doubles that read back exactly).BIGINT is returned as exact
bit64::integer64 by default
(bigint = "numeric" or "character" for the
alternatives), and DOUBLE bit for bit. Trino sends both as
JSON numbers, which are converted without going through text. The lowest
BIGINT, which bit64 keeps for NA, is
NA with a warning.TIMESTAMP WITH TIME ZONE is resolved per value whether the
server sends a zone name or an offset.INTERVAL columns are read as text, and a bare
NULL as a logical.dbDataType() and trino_type_to_r() map
between R and Trino types.dbListTables(), dbExistsTable(),
dbListFields() and dbGetInfo() read the
catalog. Table names are strings of one to three parts,
DBI::Id() or quoted identifiers, and are matched ignoring
case, as Trino does. dbExistsTable() counts a row in
information_schema.tables, so its cost does not grow with
the size of the schema, and reports FALSE rather than an
error for a name in a catalog that does not exist.dbWriteTable(), dbAppendTable() and
dbCreateTable() write data frames. Rows go in as
INSERT INTO ... VALUES statements of
chunk_size rows each (1000 by default), every value a
literal, since Trino’s protocol has no parameter binding.
dbWriteTable(overwrite = TRUE) renames the existing table
rather than dropping it, and restores it if the write fails.
dbRemoveTable() and dbRenameTable() drop and
rename tables, and temporary = TRUE is an error, because
Trino has no temporary tables.dbBegin(), dbCommit(),
dbRollback() and dbWithTransaction() run
statements inside a Trino transaction. Whether a ROLLBACK
undoes a write depends on the connector behind the catalog;
dbBegin() warns for the catalogs that hold no real storage
(memory, system, tpch,
tpcds, jmx and blackhole).dplyr pipelines are translated to Trino SQL through a
dbplyr dialect, which requires dbplyr >= 2.6.0. The methods are
registered when dbplyr is loaded rather than through
NAMESPACE, because a NAMESPACE directive for
sql_dialect(), which older versions lack, would make such a
dbplyr fail to load./ divides as a double,
%% takes the sign of the divisor, as.integer()
and as.integer64() truncate, grepl(),
sub() and gsub() honour fixed and
ignore.case and accept R’s \\1
back-references, and paste(), paste0() and
str_c() accept columns of any type. days(),
weeks(), months(), years(),
hours(), minutes() and seconds()
build intervals, for date + days(1). A Date or
POSIXct from R becomes a typed literal in a pipeline.filter_out(), from dplyr 1.2.0, uses Trino’s native
IS DISTINCT FROM rather than the CASE WHEN
comparison dbplyr falls back to. dplyr 1.2.0’s
when_any()/when_all() and
recode_values()/replace_values()/
replace_when() are not translated, because dbplyr 2.6.0 has
no translation for them on any backend.copy_to() and compute() write through
dbWriteTable(), and need temporary = FALSE and
a table name. compute() does not run ANALYZE,
which not every connector supports.WHERE 0 = 1)
rather than LIMIT 0. Both plan without reading data on
Trino, and the default avoids depending on dbplyr internals.simulate_trino() returns a connection that carries the
dialect without a session, for inspecting translated SQL with no cluster
to hand.round() on halves, the approximate
median() and quantile(), DECIMAL
beyond 15 digits, and paste() of a
DOUBLE.dev/record-fixtures.R), so everything about how values are
encoded is tested against payloads a cluster really sends.tests/testthat/test-live.R runs against a real Trino
when RTRINO_TEST_URL is set, and CI runs it against
trinodb/trino.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.