Flow PHP

ArrayExtractor implements BatchableExtractor, Extractor, InfersSchema, Refreshable, CorruptedRecordsRouter

FinalYes

Interfaces

BatchableExtractor
A source that decides how many rows it puts in one Rows: withBatchSize() bounds what the source builds.
Extractor
InfersSchema
Refreshable
CorruptedRecordsRouter

Methods

__construct()  : mixed
batchSize()  : int<1, max>
corruptedRecordsLoader()  : Loader|null
extract()  : Generator<Signal|null, void>
Yields rows in batches. When the source is a BatchableExtractor a batch holds between 0 and that extractor's own batchSize() rows; the size is chosen by the extractor and MAY vary between batches. Consumers must not assume a minimum size, a constant size, or a non-empty batch.
inferSchema()  : static
isRepeatable()  : bool
True when extract() can run more than once and yield the same rows each time, so a build-time pass may read the source before the run without consuming it. A one-shot stream returns false; a wrapper answers for what it reads.
refresh()  : void
A Memory may have changed since the last plan: its inferred schema and its row count are read again. An array cannot change, and a spilled one-shot dataset cannot be read again.
schema()  : Schema
Answers before extract() runs, so every batch it yields carries this shape. Takes no FlowContext: a source that needs the pipeline's context to describe itself has not moved the answer to bind time.
statistics()  : Statistics
What the source knows about the data before a single row is read: how many rows, how many bytes. A source that knows nothing returns `new Statistics()`. Describes the source with NO pushdown applied - a limit or a partition filter the plan pushed is the plan's to account for.
withBatchSize()  : static
Mutates and returns the same instance, so one extractor shared across from_all() children shares its size.
withCorruptedRecords()  : static
Corrupted records routed to $loader; null refuses them, the default.
withSchema()  : static
Declares the shape every yielded batch must carry. A source that describes itself uses this instead of its own description, and values are cast to fit.

Methods

__construct()

public __construct(iterable<string|int, array<string|int, mixed>>|Memory $dataset[, Filesystem $filesystem = new NativeLocalFilesystem() ][, null|Path $spillRoot = null ]) : mixed
Parameters
$dataset : iterable<string|int, array<string|int, mixed>>|Memory

an array or a Memory is described in place, a Memory read at every describe and extract and described again after refresh(); anything else is read exactly once, spilled, and replayed

$filesystem : Filesystem = new NativeLocalFilesystem()
$spillRoot : null|Path = null

null resolves to $filesystem->getSystemTmpDir()

batchSize()

public batchSize() : int<1, max>
Return values
int<1, max>

extract()

Yields rows in batches. When the source is a BatchableExtractor a batch holds between 0 and that extractor's own batchSize() rows; the size is chosen by the extractor and MAY vary between batches. Consumers must not assume a minimum size, a constant size, or a non-empty batch.

public extract(Backend $backend, Criteria $criteria) : Generator<Signal|null, void>
Parameters
$backend : Backend
$criteria : Criteria
Return values
Generator<Signal|null, void>

isRepeatable()

True when extract() can run more than once and yield the same rows each time, so a build-time pass may read the source before the run without consuming it. A one-shot stream returns false; a wrapper answers for what it reads.

public isRepeatable() : bool
Return values
bool

refresh()

A Memory may have changed since the last plan: its inferred schema and its row count are read again. An array cannot change, and a spilled one-shot dataset cannot be read again.

public refresh() : void

schema()

Answers before extract() runs, so every batch it yields carries this shape. Takes no FlowContext: a source that needs the pipeline's context to describe itself has not moved the answer to bind time.

public schema() : Schema

Called once per RUN - every run plans afresh - so it MUST be idempotent and cheap on repeat: memoise what it sniffs, as CSVExtractor and ArrayExtractor do.

Return values
Schema

statistics()

What the source knows about the data before a single row is read: how many rows, how many bytes. A source that knows nothing returns `new Statistics()`. Describes the source with NO pushdown applied - a limit or a partition filter the plan pushed is the plan's to account for.

public statistics() : Statistics

Called AT MOST ONCE per run, and only when something needs the answer - so it must be lazy, never computed in the constructor - and it MUST be idempotent and cheap on repeat: memoise what it reads, the way schema() does.

A file source may only spend what the run already spends: it may complete a listing it must produce anyway and read metadata from the files schema() already opens, and it may extrapolate from those. It must not open an extra file or make an extra remote call. A database source may ask the planner for an estimate (EXPLAIN without ANALYZE), never run the query.

Return values
Statistics

withBatchSize()

Mutates and returns the same instance, so one extractor shared across from_all() children shares its size.

public withBatchSize(int $batchSize) : static
Parameters
$batchSize : int
Return values
static

withCorruptedRecords()

Corrupted records routed to $loader; null refuses them, the default.

public withCorruptedRecords(Loader|null $loader) : static
Parameters
$loader : Loader|null
Return values
static

withSchema()

Declares the shape every yielded batch must carry. A source that describes itself uses this instead of its own description, and values are cast to fit.

public withSchema(Schema $schema) : static
Parameters
$schema : Schema
Return values
static
On this page

Search results