/** * Get a {@link TypeName#INT32} value by field name, {@link IllegalStateException} is thrown if * schema doesn't match. */ @Nullable public Integer getInt32(String fieldName) { return getInt32(getSchema().indexOf(fieldName)); }
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output( row.getString("string2_field") + ":" + row.getInt32("integer2_field")); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output( row.getString("string3_field") + ":" + row.getInt32("integer3_field")); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@FieldAccess("foo") Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
@ProcessElement public void process(@Element Row row, OutputReceiver<String> r) { r.output(row.getString(0) + ":" + row.getInt32(1)); } }));
/** Asserts result contains single row with an int field. */ public static SerializableFunction<Iterable<Row>, Void> matchesScalar(int expected) { return records -> { Row row = Iterables.getOnlyElement(records); assertNotNull(row); assertEquals(expected, (int) row.getInt32(0)); return null; }; }
@Override public Void apply(Iterable<Row> input) { Iterator<Row> iter = input.iterator(); assertTrue(iter.hasNext()); Row row = iter.next(); assertEquals(row.getDouble("avg1"), 8.142857143, 1e-7); assertTrue(row.getInt32("avg2") == 8); assertEquals(row.getDouble("varpop1"), 26.40816326, 1e-7); assertTrue(row.getInt32("varpop2") == 26); assertEquals(row.getDouble("varsamp1"), 30.80952381, 1e-7); assertTrue(row.getInt32("varsamp2") == 30); assertFalse(iter.hasNext()); return null; } }
@ProcessElement public void process(@Element Row row, OutputReceiver<Row> r) { r.output( Row.withSchema(schema2) .addValues(row.getString(0), row.getInt32(1)) .build()); } }))
@ProcessElement public void process(@Element Row row, OutputReceiver<Row> r) { r.output( Row.withSchema(schema) .addValues(row.getString(0), row.getInt32(1)) .build()); } }))
@ProcessElement public void process(@Element Row row, MultiOutputReceiver r) { r.getRowReceiver(firstOutput) .output( Row.withSchema(schema2) .addValues(row.getString(0), row.getInt32(1)) .build()); r.getRowReceiver(secondOutput) .output( Row.withSchema(schema3) .addValues(row.getString(0), row.getInt32(1)) .build()); } })
@Test public void testCreatesNestedRow() { Schema nestedType = Stream.of(Schema.Field.of("f1_str", Schema.FieldType.STRING)).collect(toSchema()); Schema type = Stream.of( Schema.Field.of("f_int", Schema.FieldType.INT32), Schema.Field.of("nested", Schema.FieldType.row(nestedType))) .collect(toSchema()); Row nestedRow = Row.withSchema(nestedType).addValues("foobar").build(); Row row = Row.withSchema(type).addValues(42, nestedRow).build(); assertEquals((int) 42, (Object) row.getInt32("f_int")); assertEquals("foobar", row.getRow("nested").getString("f1_str")); }
@Test public void testNullValuesGetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); Row row = registry.getToRowFunction(POJOWithNullables.class).apply(new POJOWithNullables(null, 42)); assertNull(row.getString("str")); assertEquals(42, (Object) row.getInt32("anInt")); }
@Test @Category(NeedsRunner.class) public void testFilterMultipleFields() { // Pass only elements where field1 + field2 >= 100. PCollection<POJO> filtered = pipeline .apply(Create.of(new POJO("", 52, 48), new POJO("", 52, 2), new POJO("", 70, 33))) .apply( Filter.<POJO>create() .whereFieldNames( Lists.newArrayList("field2", "field3"), r -> r.getInt32("field2") + r.getInt32("field3") >= 100)); PAssert.that(filtered).containsInAnyOrder(new POJO("", 52, 48), new POJO("", 70, 33)); pipeline.run(); } }
@Test public void testRegisterForClass() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); registry.registerSchemaForClass( String.class, STRING_SCHEMA, s -> Row.withSchema(STRING_SCHEMA).addValue(s).build(), r -> r.getString("string")); registry.registerSchemaForClass( Integer.class, INTEGER_SCHEMA, s -> Row.withSchema(INTEGER_SCHEMA).addValue(s).build(), r -> r.getInt32("integer")); tryGetters(registry); }
@Test public void testRegisterForType() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); registry.registerSchemaForType( TypeDescriptors.strings(), STRING_SCHEMA, s -> Row.withSchema(STRING_SCHEMA).addValue(s).build(), r -> r.getString("string")); registry.registerSchemaForType( TypeDescriptors.integers(), INTEGER_SCHEMA, s -> Row.withSchema(INTEGER_SCHEMA).addValue(s).build(), r -> r.getInt32("integer")); tryGetters(registry); }
@Test public void testToRow() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); SimplePOJO pojo = createSimple("string"); Row row = registry.getToRowFunction(SimplePOJO.class).apply(pojo); assertEquals(12, row.getFieldCount()); assertEquals("string", row.getString("str")); assertEquals((byte) 1, (Object) row.getByte("aByte")); assertEquals((short) 2, (Object) row.getInt16("aShort")); assertEquals((int) 3, (Object) row.getInt32("anInt")); assertEquals((long) 4, (Object) row.getInt64("aLong")); assertEquals(true, row.getBoolean("aBoolean")); assertEquals(DATE.toInstant(), row.getDateTime("dateTime")); assertEquals(INSTANT, row.getDateTime("instant").toInstant()); assertArrayEquals(BYTE_ARRAY, row.getBytes("bytes")); assertArrayEquals(BYTE_BUFFER.array(), row.getBytes("byteBuffer")); assertEquals(BigDecimal.ONE, row.getDecimal("bigDecimal")); assertEquals("stringbuilder", row.getString("stringBuilder")); }
@Test public void testRefInRange() { BeamSqlInputRefExpression ref0 = new BeamSqlInputRefExpression(SqlTypeName.BIGINT, 0); Assert.assertEquals( row.getInt64(0), ref0.evaluate(row, null, BeamSqlExpressionEnvironments.empty()).getValue()); BeamSqlInputRefExpression ref1 = new BeamSqlInputRefExpression(SqlTypeName.INTEGER, 1); Assert.assertEquals( row.getInt32(1), ref1.evaluate(row, null, BeamSqlExpressionEnvironments.empty()).getValue()); BeamSqlInputRefExpression ref2 = new BeamSqlInputRefExpression(SqlTypeName.DOUBLE, 2); Assert.assertEquals( row.getDouble(2), ref2.evaluate(row, null, BeamSqlExpressionEnvironments.empty()).getValue()); BeamSqlInputRefExpression ref3 = new BeamSqlInputRefExpression(SqlTypeName.BIGINT, 3); Assert.assertEquals( row.getInt64(3), ref3.evaluate(row, null, BeamSqlExpressionEnvironments.empty()).getValue()); }