Connectors / Files & object stores
Azure Blob Storage
sourceAzure Blob Storage / ADLS Gen2 source — JSONL, JSON array, or raw text
Install
cargo install faucet-cli --features source-azure-blob faucet init --source azure-blob
# Cargo.toml — use it as a library cargo add faucet-source-azure-blob
Starter config
source:
type: azure-blob
config:
container: "" # REQUIRED — Blob container / ADLS Gen2 filesystem name.
# account: "" # Storage-account name.
# auth: { type: account_key } # one of: account_key, sas_token, connection_string, managed_identity, service_principal, default
# --- Alternative variants — replace the block above with one of these ---
# type: sas_token
# config:
# sas_token: "" # REQUIRED
#
# type: connection_string
# config:
# connection_string: "" # REQUIRED
#
# type: managed_identity
# config:
# client_id: ""
#
# type: service_principal
# config:
# client_id: "" # REQUIRED
# client_secret: "" # REQUIRED
# tenant_id: "" # REQUIRED
# authority_host: ""
#
# type: default
# endpoint: "" # Custom blob endpoint (e.g.
# allow_http: false # Permit plaintext HTTP (required for a local Azurite emulator).
# use_emulator: false # Target the Azurite storage emulator with its well-known `devstoreaccount1` credentials.
# timeout_secs: 0 # Seconds one request (including reading its body) may take.
# connect_timeout_secs: 10 # Seconds to wait for a connection to the storage endpoint.
# max_retries: 10 # Retries of a failed request, including resuming an interrupted body read.
# retry_timeout_secs: 600 # Seconds after a request first went out during which it may still be retried or its body resumed.
# 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.
# file_format: null # Format of objects stored in the container.
# 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 blob's byte length against the length the store advertises, failing the read with `FaucetError::Source` on a short (truncated) or over-long transfer.
# verify_checksum: false # Not supported on Azure Blob: `object_store` exposes no `Content-MD5` attribute and an Azure ETag is not a content hash, so there is nothing to verify against.
# max_object_bytes: 2147483648 # Largest object, once decompressed, that a format read whole (JSON array, raw text, CSV, XML, Excel, Avro, ORC, buffered Parquet) 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.
# 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 | No |
| Reports lag | No |
| Compression | Yes |
Config fields
| Field | Type | Default | Description |
|---|---|---|---|
containerrequired | string | — | Blob container / ADLS Gen2 filesystem name. Required. |
account | string | — | Storage-account name. Optional when a connection string or the emulator supplies it, otherwise required. |
auth | object | type: default | Credential source. Defaults to the environment / managed-identity credential chain. |
endpoint | string | — | Custom blob endpoint (e.g. an Azurite emulator or a sovereign cloud). |
allow_http | boolean | false | Permit plaintext HTTP (required for a local Azurite emulator). |
use_emulator | boolean | false | Target the Azurite storage emulator with its well-known devstoreaccount1 credentials. |
timeout_secs | integer | — | Seconds one request (including reading its body) may take. Unset (the default) means no limit, since a blob body is read at the pace of the sink and a total deadline would cut long reads off mid-body. |
connect_timeout_secs | integer | 10 | Seconds to wait for a connection to the storage endpoint. Defaults to 10. |
max_retries | integer | 10 | Retries of a failed request, including resuming an interrupted body read. Defaults to 10. |
retry_timeout_secs | integer | 600 | Seconds after a request first went out during which it may still be retried or its body resumed. Defaults to 600. Keep it within the lifetime of the credential (a SAS token or bearer token), since a retry reuses the original request's credentials. |
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. |
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. batch_size = 0 is the "no batching" sentinel and emits one page per object. |
verify_length | boolean | true | Verify each blob's byte length against the length the store advertises, failing the read with FaucetError::Source on a short (truncated) or over-long transfer. Cheap — a byte counter over a body that is read anyway — so it defaults to true. |
verify_checksum | boolean | false | Not supported on Azure Blob: object_store exposes no Content-MD5 attribute and an Azure ETag is not a content hash, so there is nothing to verify against. Setting it true is **rejected at config load** rather than silently ignored — see validate(). |
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) may reach; a larger one fails with an error instead of exhausting memory. It also bounds one line of a streamed JSON Lines blob, so a blob 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. |
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). |
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