Skip to main content

Formats

Value formats shared by pond.toml, the CLI, the Python API and the HTTP API.

Table and Pond references​

FormUsed inMeaning
tablePython APIOne of the current Pond's own tables.
source.tablePython API, trace, puddle showA table published by the Pond source.
source.`name.with.dots` Python API, @puddle targetsBackticks take a part literally, for a table or Object name containing dots. Either part can be quoted.
name@majordo, /api/status idsOne major version line of a Pond.
{pond}_v{major}.tablecatalog SQLA table in a specific major line.
{pond}.tablecatalog SQLA table in the Pond's served major.
{pond}#{spout}trigger windowA Spout, which is managed as its own node.

An unquoted reference is split at its first dot, so sales.daily.v2 is the table daily.v2 of sales, while daily.v2 alone is a table of the Source daily. Names and columns beginning with _duckstring_ are reserved for Duckstring.

Versions​

Pond versions are semantic versions, MAJOR.MINOR.PATCH. In [sources], a version pins a Source's major line and minimum version, and a trailing ? makes the Source optional. See pond.toml.

Durations​

Used by trigger tide, window --duration, alert --stale and --renotify, and catchment init --checkpoint-every.

A duration is one or more number-and-unit pairs with no spaces: 30s, 45m, 12h, 1d, 2w, 1h30m.

UnitMeaning
sseconds
mminutes
hhours
ddays
wweeks

A window's --every takes a single pair only, such as 1d or 12h.

Times​

Window --start and --until take ISO 8601 timestamps, such as 2026-10-01T02:00:00+00:00. --start also accepts HH:MM, meaning that time today in UTC. Freshness values in the API and run history are ISO 8601 in UTC.

Credential references​

Destination URIs never contain credentials directly. They contain references, resolved on the Catchment only when the credential is used:

ReferenceResolves to
${env:NAME}The environment variable NAME on the Catchment process.
${secret:NAME}The secret NAME from the Catchment's secret store.

A reference can also be the whole destination, such as ${env:DATABASE_URL} or ${secret:SLACK_WEBHOOK}, when the entire URI is sensitive or is provided that way. Its scheme is then checked when it's resolved, at the first delivery or test, rather than when the Spout or channel is added.

A missing variable or secret fails the delivery with an error naming the reference, never its value. Any other ${...} text is left as it is.

Data root URIs​

Where a Catchment stores published tables (catchment init --data-root, catchment settings --data-root, DUCKSTRING_DATA_ROOT).

FormStorage
a local pathA directory on the Catchment's machine. The default is under the state directory.
/Volumes/...A Databricks Volume, used as a local path.
s3://bucket/prefixAmazon S3 or an S3-compatible store.
gs://bucket/prefixGoogle Cloud Storage.
abfss://container@account.dfs.core.windows.net/prefixAzure Data Lake Storage, configured through the environment.

Query parameters for s3:// and gs://:

ParameterDescription
key_idAccess key ID. Without key_id and secret, the standard AWS credential chain is used.
secretSecret access key.
regionRegion. Defaults to AWS_REGION or AWS_DEFAULT_REGION.
endpointAn S3-compatible endpoint such as http://minio:9000, using path-style addressing. Also settable as DUCKSTRING_S3_ENDPOINT.
s3://my-lake/duckstring?region=eu-west-2&key_id=${env:AWS_KEY}&secret=${secret:AWS_SECRET}

Destination URIs​

Where a Spout delivers. The scheme picks the writer.

file://​

file:///srv/exports/sales

Writes {table}.parquet into the directory, replacing each file atomically.

s3:// and gs://​

s3://bucket/prefix?region=eu-west-2
gs://bucket/prefix?key_id=${env:GCS_HMAC_ID}&secret=${env:GCS_HMAC_SECRET}

Writes {prefix}/{table}.parquet, or with --mode append, the table's per-run files.

ParameterDescription
key_id, secretCredentials. Required for gs:// (as HMAC keys). For s3://, the AWS credential chain is used without them.
session_tokenAn S3 session token.
regionS3 region.
endpointAn S3-compatible endpoint such as http://minio:9000, as for a data root. Defaults to DUCKSTRING_S3_ENDPOINT. The scheme sets whether TLS is used, and addressing is path-style.
url_style, use_sslOverride the addressing style (path or vhost) and TLS for an endpoint.

postgres://​

postgres://loader:${secret:PG_PASSWORD}@db.internal:5432/analytics?schema=duckstring

A standard libpq connection URI (postgresql:// also works). Tables are created in the schema query parameter (default public), and delivery progress is recorded in a _duckstring_egress table there. The table being delivered needs a primary key.

Notification URIs​

Where an alert channel sends.

https:// and http://​

Posts a JSON message to the URL. The message has a top-level text summary alongside structured fields, so a Slack incoming webhook URL works directly.

mailto:​

mailto:oncall@example.com,data@example.com?smtp=smtp.example.com:587&user=alerts&password=${secret:SMTP_PASSWORD}

Sends an email to each comma-separated address.

ParameterDefaultDescription
smtpDUCKSTRING_SMTP_HOSTSMTP server as host:port. The port defaults to 587. Required one way or the other.
fromDUCKSTRING_SMTP_FROM, else duckstring@localhostSender address.
userDUCKSTRING_SMTP_USERSMTP username.
passwordDUCKSTRING_SMTP_PASSWORDSMTP password.
tlsDUCKSTRING_SMTP_TLS, else onSTARTTLS. 0, false or no turns it off.