Connectors / Files & object stores

Google Cloud Storage

source

Google Cloud Storage source — JSONL, JSON array, or raw text

Install

cargo install faucet-cli --features source-gcs
faucet init --source gcs
# Cargo.toml — use it as a library
cargo add faucet-source-gcs

Starter config

source:
  type: gcs
  config:
    bucket: ""    # REQUIRED — GCS bucket name.
    # prefix: ""    # Object name prefix filter.
    # include: null    # Glob over the whole object key selecting which listed objects to read (e.g.
    # object_keys: []    # Explicit object names.
    # auth: { type: service_account_json_file }    # one of: service_account_json_file, service_account_json_inline, application_default, anonymous
      # --- Alternative variants — replace the block above with one of these ---
      # type: service_account_json_inline
      # config:
        # json: ""    # REQUIRED
      #
      # type: application_default
      #
      # type: anonymous
    # file_format: null    # Format of files stored in GCS.
    # max_objects: 0    # Hard cap on the number of objects read (after listing).
    # concurrency: 10    # Maximum concurrent object reads (default: 10).
    # batch_size: 1000    # Records per emitted `StreamPage`.
    # verify_length: true    # Verify each object's byte length against the length the store advertises, failing the read with `FaucetError::Source` on a short (truncated) or over-long transfer (#161).
    # verify_checksum: false    # Verify each object's body against the checksum the store advertises (#161).
    # max_object_bytes: 2147483648    # Largest object, once decompressed, that a format read whole (JSON array, raw text, CSV, XML, Excel, Avro, ORC, buffered Parquet, and JSON Lines under `verify_checksum`) may reach; a larger one fails with an error instead of exhausting memory.
    # max_decoded_bytes: 0    # Most bytes one object may decode to in memory where a format can expand past its input: an Avro file's records (per batch where the file streams), an Excel workbook's parts and shared strings.
    # storage_host: ""    # Optional storage-host override (e.g.
    # compression: null    # User-facing compression config.
    # csv: { ... }    # CSV dialect.
    # excel: { ... }    # Excel worksheet selection.
    # xml: { ... }    # XML record framing.
    # avro: { ... }    # Avro read/write options.
    # orc: { ... }    # ORC read options.
    # parquet: { ... }    # Parquet reader options (the `parquet:` block of an object-store source).

Capabilities

Replay Non-deterministic replay
Exactly-once replay No
Incremental No
Dataset discovery Yes
Reports lag No
Compression Yes

Config fields

FieldTypeDefaultDescription
bucket
required
string — GCS bucket name.
prefix string — Object name prefix filter. Ignored when object_keys is set.
include string — Glob over the whole object key selecting which listed objects to read (e.g. exports/*.parquet). Without it, folder markers and objects with a _- or .-prefixed path segment below the prefix (_SUCCESS, _temporary/, .crc) are skipped; with it, exactly the matching keys are read.
object_keys array — Explicit object names. When set, listing is skipped and prefix is ignored.
auth object type: application_default Credential source.
file_format object json_lines File format.
max_objects integer — Hard cap on the number of objects read (after listing).
concurrency integer 10 Maximum concurrent object reads (default: 10).
batch_size integer 1000 Records per emitted StreamPage. See "Streaming and batching" in the README. batch_size = 0 is the "no batching" sentinel and emits one page per object.
verify_length boolean true Verify each object's byte length against the length the store advertises, failing the read with FaucetError::Source on a short (truncated) or over-long transfer (#161). Cheap — a byte counter over a body that is read anyway — so it defaults to true.
verify_checksum boolean false Verify each object's body against the checksum the store advertises (#161). Stronger than the length check but costs a hash over the full body, so it defaults to false. When the store advertises no usable checksum for an object, verification is skipped for that object (a debug log notes it); the length check still applies. A JSON Lines object is then read whole (up to max_object_bytes) and verified before any of its records is emitted.
max_object_bytes integer 2147483648 Largest object, once decompressed, that a format read whole (JSON array, raw text, CSV, XML, Excel, Avro, ORC, buffered Parquet, and JSON Lines under verify_checksum) may reach; a larger one fails with an error instead of exhausting memory. It also bounds one line of a streamed JSON Lines object, so an object with no newline fails the same way. Default 2 GiB.
max_decoded_bytes integer — Most bytes one object may decode to in memory where a format can expand past its input: an Avro file's records (per batch where the file streams), an Excel workbook's parts and shared strings. A file past it fails with an error instead of exhausting memory. Default 64 × max_object_bytes, at most 16 GiB.
storage_host string — Optional storage-host override (e.g. http://localhost:4443 for fake-gcs-server). Production users should leave this unset.
compression string | object auto Compression codec applied to each downloaded object. Defaults to CompressionConfig::Auto — the codec is resolved per-object-key, so a single source can read a mix of compressed and uncompressed objects. Requires the crate-local compression feature.
csv object delimiter: ","has_headers: truequote: "on_unknown_field: widen CSV dialect, used when file_format: csv (#604).
excel object header_row: 0 Worksheet selection, used when file_format: xlsx (#604).
xml object record_element: recordroot_element: records Record framing, used when file_format: xml (#604).
avro object codec: null Reader schema, used when file_format: avro (#719).
orc object {} Column projection, used when file_format: orc (#719).
parquet object {} Column projection, used when file_format: parquet (#777): only parquet.columns are decoded, before any row group is read.
Get started

Your first pipeline runs in five minutes.

Install the CLI, scaffold a config, and move real data — nothing external to stand up.

curl -LsSf https://github.com/faucet-hq/faucet-stream/releases/latest/download/faucet-cli-installer.sh | sh
brew install faucet-hq/faucet-stream/faucet-cli