///|
fn demonstrate() -> Unit raise {
let bundle = @moonice.open_bundle(
@fs.read_file_to_string("fixtures/partitioned.icebundle.json"),
)
let state = bundle.load_snapshot()
// 2024-03-01T00:00:00 UTC, expressed as exact epoch microseconds.
let predicate = @moonice.parse_predicate(
"{\"field\":\"ts\",\"op\":\">=\",\"value\":\"1709251200000000\"}",
state.schema,
)
let mut total = 0L
let mut batches = 0
let result = bundle.scan_batches(
predicate,
rows => {
batches += 1
for row in rows {
if row.values.get(1) is Some(@moonice.Integer(id)) {
total += id
}
}
},
batch_size=1,
)
println("partition_specs=\{bundle.metadata.partition_specs.length()}")
println(
"batches=\{batches} matched_rows=\{result.matched_rows} id_sum=\{total}",
)
println(
"scanned_files=\{result.scanned_files} delete_files=\{result.delete_files}",
)
if result.matched_rows != 2 || total != 21L || batches != 2 {
@sys.exit(1)
}
}
///|
fn main {
demonstrate() catch {
error => {
println("Batch example failed: \{error}")
@sys.exit(1)
}
}
}