## io.IcebergSource


An Iceberg table of a catalog, read by snapshot sequence number, as


Usage

``` python
io.IcebergSource(
    catalog, identifier, *, where=None, name=None, on_violation=None
)
```


the input of transforms. [name](engines.Dialect.md#sverify.engines.Dialect.name) is the table's name in the plans that read it (default: the last part of `identifier`).

A refresh reads the files that appends added since the version a node's state was computed from; after row-level deletes or overwrites it diffs the data files that changed. A table dropped and created again under `identifier` (a new table UUID) is read in full. Tables with equality deletes cannot be read.

With `where` (a SQL condition on the columns), the source is the rows on which it is TRUE: snapshots read only the data files whose statistics do not rule it out, and changes are filtered.


## Parameters


`catalog: Catalog`  
A pyiceberg catalog.

`identifier: str`  
The table's identifier in it, e.g. `"db.readings"`.

`where: str | None = None`  
A SQL condition on the columns. The source is the rows on which it is TRUE; data files are skipped only where Lean proves from their statistics that it is TRUE on none of their rows (`Rel.eval_pruned` in `SubstraitLean/Pruning.lean`). Default: None, every row.

`name: str | None = None`  
The table's name in the plans that read it. Default: the last part of `identifier`.

`on_violation: _quarantine.Policy | None = None`  
What a refresh does with a batch that breaks a precondition on this source, for transforms that set no `on_violation` of their own: `"error"`, `"quarantine"` or `"hold"` (see [sverify.transform](transform.md#sverify.transform)). Default: None, `"error"`.


## Attributes


`catalog`  
The catalog.

`identifier`  
The table's identifier.

`where`  
The SQL condition, or None.

`name`  
The table's name in the plans that read it.

`skipped: list[str]`  
The data files the last snapshot did not read.


## Methods

| Name | Description |
|----|----|
| [changes()](#changes) | The change from sequence number `since` to `until`, as a refresh |
| [contract()](#contract) | The contract the table property `sverify.contract` records. |
| [latest()](#latest) | The current snapshot's sequence number (0 before the first). |
| [schema()](#schema) | The table's current schema, as Arrow. |
| [snapshot()](#snapshot) | The table's rows at a snapshot, with what its metadata says about |
| [stored()](#stored) | The node state the current snapshot holds, if an [IcebergSink](io.IcebergSink.md#sverify.io.IcebergSink) |
| [table()](#table) | The table as the catalog loads it now (a `pyiceberg.table.Table`). |

------------------------------------------------------------------------


#### changes()


The change from sequence number `since` to `until`, as a refresh


Usage

``` python
changes(since, until=None)
```


reads it.


##### Parameters


`since: int`  
The version the node's state was computed from.

`until: int | None = None`  
A snapshot sequence number to read up to. Default: the current snapshot.


##### Returns


`SourceBatch`  
The rows of the files appends added (trusted), or the diff of

the data files that changed (exact); or, where snapshot `since`

is gone or unreadable, the snapshot at `until` and the reason.


##### Raises


`ValueError`  
No ancestor has sequence number `until`.


------------------------------------------------------------------------


#### contract()


The contract the table property `sverify.contract` records.


Usage

``` python
contract(version=None)
```


##### Parameters


`version: int | None = None`  
A snapshot's sequence number: the contract the table recorded while that snapshot was current, read from the metadata files the table's metadata log keeps. Default: the current one.


##### Returns


`Contract | None`  
The contract, or None if the table had none then (or its

metadata file is gone).


------------------------------------------------------------------------


#### latest()


The current snapshot's sequence number (0 before the first).


Usage

``` python
latest()
```


------------------------------------------------------------------------


#### schema()


The table's current schema, as Arrow.


Usage

``` python
schema()
```


------------------------------------------------------------------------


#### snapshot()


The table's rows at a snapshot, with what its metadata says about


Usage

``` python
snapshot(version=None)
```


every row (`required` fields, file statistics, and the contract of an [IcebergSink](io.IcebergSink.md#sverify.io.IcebergSink) that wrote every snapshot).


##### Parameters


`version: int | None = None`  
A snapshot sequence number of the current snapshot's ancestry; 0 is the empty table before the first snapshot. Default: the current snapshot.


##### Returns


`Snapshot`  
The version, the rows and the facts.


##### Raises


`ValueError`  
No ancestor has that sequence number.


------------------------------------------------------------------------


#### stored()


The node state the current snapshot holds, if an [IcebergSink](io.IcebergSink.md#sverify.io.IcebergSink)


Usage

``` python
stored()
```


wrote it under the table's contract: the current snapshot is the sink's, or the snapshots after the sink's last one only rewrite files ([replace](sql.Dialect.md#sverify.sql.Dialect.replace), as compaction does). A restarted job's first refresh resumes the sink's node from it, when it was stored by the same plan from the same sources.


##### Returns


`Stored | None`  
The stored state, or None if a snapshot after the sink's last

one changed rows.


------------------------------------------------------------------------


#### table()


The table as the catalog loads it now (a `pyiceberg.table.Table`).


Usage

``` python
table()
```
