@Override public Iterator<Record> iterator() { ScanIterator iter = new ScanIterator(tasks); addCloseable(iter); return iter; }
@Override @SuppressWarnings("unchecked") protected Object getField(Record intermediate, int pos) { return intermediate.get(pos); }
@Override protected Record newStructData(Record reuse) { if (reuse != null) { return reuse; } else { return GenericRecord.create(struct); } }
@Test public void testProject() { Iterable<Record> results = IcebergGenerics.read(sharedTable).select("id").build(); Set<Long> expected = Sets.newHashSet(); expected.addAll(Lists.transform(file1Records, record -> (Long) record.getField("id"))); expected.addAll(Lists.transform(file2Records, record -> (Long) record.getField("id"))); expected.addAll(Lists.transform(file3Records, record -> (Long) record.getField("id"))); results.forEach(record -> Assert.assertEquals("Record should have one projected field", 1, record.size())); Assert.assertEquals("Should project only id columns", expected, Sets.newHashSet(transform(results, record -> (Long) record.getField("id")))); }
@Test public void testFilter() { Iterable<Record> result = IcebergGenerics.read(sharedTable).where(lessThan("id", 3)).build(); Assert.assertEquals("Records should match file 1", Sets.newHashSet(file1Records), Sets.newHashSet(result)); result = IcebergGenerics.read(sharedTable).where(lessThanOrEqual("id", 1)).build(); Assert.assertEquals("Records should match file 1 without id 2", Sets.newHashSet(filter(file1Records, r -> (Long) r.getField("id") <= 1)), Sets.newHashSet(result)); }
public static void assertEquals(Types.StructType struct, Record expected, Record actual) { List<Types.NestedField> fields = struct.fields(); for (int i = 0; i < fields.size(); i += 1) { Type fieldType = fields.get(i).type(); Object expectedValue = expected.get(i); Object actualValue = actual.get(i); assertEquals(fieldType, expectedValue, actualValue); } }
@Override protected void set(Record struct, int pos, Object value) { struct.set(pos, value); } }
@Override public GenericRecord copy() { return new GenericRecord(this); }
/** * Returns a builder to configure a read of the given table that produces generic records. * * @param table an Iceberg table * @return a builder to configure the scan */ public static ScanBuilder read(Table table) { return new ScanBuilder(table); }
@Override protected Object get(Record struct, int pos) { return struct.get(pos); } }
@Override protected Record reuseOrCreate(Object reuse) { if (reuse instanceof Record) { return (Record) reuse; } else { return GenericRecord.create(struct); } }
@Override protected void set(Record struct, int pos, Object value) { struct.set(pos, value); } }
@Override public GenericRecord copy(Map<String, Object> overwriteValues) { return new GenericRecord(this, overwriteValues); }
@Override protected Object get(Record struct, int index) { return struct.get(index); } }
public static GenericRecord create(StructType struct) { return new GenericRecord(struct); }
@Override protected Object get(Record struct, int pos) { return struct.get(pos); }
public static GenericRecord create(Schema schema) { return new GenericRecord(schema.asStruct()); }