Flat File
A Flat File Source reads and parses structured files in multiple formats (CSV, positional, XML, JSON) from various acquisition channels (FTP, HTTP, S3, Azure Blob Storage).
Each row or logical unit becomes an independent message processed asynchronously for maximum scalability and flexibility.
Acquisition channels
| Channel | Description |
|---|---|
| FTP / FTPS / SFTP | Securely download files from an FTP server. Auth via user/password or SSH key; paths, filename patterns, retention rules supported. |
| Amazon S3 | Connect to a bucket and filter by prefix or filename. |
| Azure Blob Storage | Access a container; auth via connection string or service principal. |
| Azure Blob Storage RFE | Extended variant for multi/coordination processing (in development). |
| Google Cloud Storage | Connection to a Google Cloud Storage (GCS) bucket for object and file download. |
| Azure Files | Read-only connection to Azure File Shares. Allows access to traditional directory structures for file retrieval. |
| Azure Data Lake Storage | Access to ADLS Gen2 hierarchical file systems for reading and downloading large volumes of data. |
| HTTP | Download from HTTP/HTTPS with possible authentication (API key, Basic, Bearer). |
Reading protocols
Flowlyze supports two reading protocols:
Coordinated
Flowlyze uses a working directory with read/write permissions:
- Copy file from source directory to a temporary processing directory
- Read and parse contents
- Move file to a completion directory on finish
Advantages:
- Visibility on pending files
- Error inspection
- Full traceability
Directory cleanup and artifact handling are the user’s responsibility.
Simple (TBD)
Flowlyze downloads and processes the file directly, without local copies.
On errors, Flowlyze emits a flow error message with details but does not keep a copy of the original file.
Supported formats
| Format | Status | Description |
|---|---|---|
| CSV | Implemented | Delimited files with advanced parsing (header, quoting, culture, custom delimiters). |
| Positional | TBD | Fixed-width files with explicit column positions. |
| XML | TBD | XML with XPath selectors, node mapping. |
| JSON | TBD | Complex JSON with JSONPath entity selection. |
CSV configuration
| Parameter | Description |
|---|---|
| Line Delimiter | Usually \n or \r\n. |
| Column Delimiter | Default ,; e.g., ;. |
| Quote Character | Default ". |
| Culture | Number/date culture (e.g., it-IT, en-US). |
| Has Header | First row contains column names (true/false). |
| Grouping Column | Column used to group multiple rows into a single message. |
Row Grouping
Flowlyze can group multiple source rows into one logical message using a grouping column.
This is useful for hierarchical relations or multiple versions of the same record in a file.
During parsing, Flowlyze evaluates the grouping column (e.g., product_id, record_id).
Rows with the same value are aggregated into one JSON object.
Each group yields a single message containing common fields and a nested array with grouped rows.
Example 1 – Variants grouped by main product
CSV with product variants (size, color, price) associated with a main product identified by product_id.
Source file
| product_id | variant_id | color | size | price |
|---|---|---|---|---|
| 1001 | 1 | red | M | 29.90 |
| 1001 | 2 | blue | L | 31.50 |
| 1002 | 3 | black | S | 28.00 |
Grouping column: product_id
Aggregated output
{
"product_id": 1001,
"variants": [
{ "variant_id": 1, "color": "red", "size": "M", "price": 29.90 },
{ "variant_id": 2, "color": "blue", "size": "L", "price": 31.50 }
]
},
{
"product_id": 1002,
"variants": [
{ "variant_id": 3, "color": "black", "size": "S", "price": 28.00 }
]
}