public Builder addArray(Object... values) { addArray(Arrays.asList(values)); return this; }
@Test public void testParsesArrayOfArrays() throws Exception { Schema schema = Schema.builder() .addArrayField("f_arrayOfIntArrays", FieldType.array(FieldType.INT32)) .build(); String rowString = "{\n" + "\"f_arrayOfIntArrays\" : [ [1, 2], [3, 4], [5]]\n" + "}"; RowJsonDeserializer deserializer = RowJsonDeserializer.forSchema(schema); Row parsedRow = newObjectMapperWith(deserializer).readValue(rowString, Row.class); Row expectedRow = Row.withSchema(schema) .addArray(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5)) .build(); assertEquals(expectedRow, parsedRow); }
@Test public void testCreatesArrayWithNullElement() { List<Integer> data = Lists.newArrayList(2, null, 5, null); Schema type = Stream.of(Schema.Field.of("array", Schema.FieldType.array(Schema.FieldType.INT32, true))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testProjectArrayField() { PCollection<Row> input = pCollectionOf2Elements(); Schema resultType = Schema.builder() .addInt32Field("f_int") .addArrayField("f_stringArr", Schema.FieldType.STRING) .build(); PCollection<Row> result = input.apply("sqlQuery", SqlTransform.query("SELECT f_int, f_stringArr FROM PCOLLECTION")); PAssert.that(result) .containsInAnyOrder( Row.withSchema(resultType).addValues(1).addArray(Arrays.asList("111", "222")).build(), Row.withSchema(resultType) .addValues(2) .addArray(Arrays.asList("33", "44", "55")) .build()); pipeline.run(); }
@Test public void testSingleElement() throws Exception { Row inputRow = Row.withSchema(INPUT_SCHEMA).addValues(1).addArray(Arrays.asList("111")).build(); PCollection<Row> input = pipeline.apply( "boundedInput1", Create.of(inputRow) .withSchema( INPUT_SCHEMA, SerializableFunctions.identity(), SerializableFunctions.identity())); Schema resultType = Schema.builder().addStringField("f_arrElem").build(); PCollection<Row> result = input.apply("sqlQuery", SqlTransform.query("SELECT ELEMENT(f_stringArr) FROM PCOLLECTION")); PAssert.that(result).containsInAnyOrder(Row.withSchema(resultType).addValues("111").build()); pipeline.run(); }
@Test public void testCreatesArrayOfMap() { List<Map<Integer, String>> data = ImmutableList.<Map<Integer, String>>builder() .add(ImmutableMap.of(1, "value1")) .add(ImmutableMap.of(2, "value2")) .build(); Schema type = Stream.of( Schema.Field.of( "array", FieldType.array(FieldType.map(FieldType.INT32, FieldType.STRING)))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testCreatesRowArray() { Schema nestedType = Stream.of(Schema.Field.of("f1_str", FieldType.STRING)).collect(toSchema()); List<Row> data = Lists.newArrayList( Row.withSchema(nestedType).addValues("one").build(), Row.withSchema(nestedType).addValues("two").build(), Row.withSchema(nestedType).addValues("three").build()); Schema type = Stream.of(Schema.Field.of("array", FieldType.array(FieldType.row(nestedType)))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testArrayOfRow() throws Exception { Schema nestedSchema = Schema.builder().addInt32Field("f1_int").addStringField("f1_str").build(); FieldType collectionElementType = FieldType.row(nestedSchema); Schema schema = Schema.builder().addArrayField("f_array", collectionElementType).build(); Row row = Row.withSchema(schema) .addArray( Row.withSchema(nestedSchema).addValues(1, "one").build(), Row.withSchema(nestedSchema).addValues(2, "two").build(), Row.withSchema(nestedSchema).addValues(3, "three").build()) .build(); CoderProperties.coderDecodeEncodeEqual(RowCoder.of(schema), row); }
@Test public void testPrimitiveArraySetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); Row row = Row.withSchema(PRIMITIVE_ARRAY_POJO_SCHEMA) .addArray("a", "b", "c", "d") .addArray(1, 2, 3, 4) .addArray(42L, 43L, 44L, 45L) .build(); PrimitiveArrayPOJO pojo = registry.getFromRowFunction(PrimitiveArrayPOJO.class).apply(row); assertEquals(row.getArray("strings"), pojo.strings); assertEquals(row.getArray("integers"), Ints.asList(pojo.integers)); assertEquals(row.getArray("longs"), Arrays.asList(pojo.longs)); }
private PCollection<Row> pCollectionOf2Elements() { return pipeline.apply( "boundedInput1", Create.of( Row.withSchema(INPUT_SCHEMA) .addValues(1) .addArray(Arrays.asList("111", "222")) .build(), Row.withSchema(INPUT_SCHEMA) .addValues(2) .addArray(Arrays.asList("33", "44", "55")) .build()) .withSchema( INPUT_SCHEMA, SerializableFunctions.identity(), SerializableFunctions.identity())); } }
@Test public void testArrayOfArray() throws Exception { FieldType arrayType = FieldType.array(FieldType.array(FieldType.INT32)); Schema schema = Schema.builder().addField("f_array", arrayType).build(); Row row = Row.withSchema(schema) .addArray( Lists.newArrayList(1, 2, 3, 4), Lists.newArrayList(5, 6, 7, 8), Lists.newArrayList(9, 10, 11, 12)) .build(); CoderProperties.coderDecodeEncodeEqual(RowCoder.of(schema), row); }
@Test public void testPrimitiveArraySetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); Row row = Row.withSchema(PRIMITIVE_ARRAY_BEAN_SCHEMA) .addArray("a", "b", "c", "d") .addArray(1, 2, 3, 4) .addArray(42L, 43L, 44L, 45L) .build(); PrimitiveArrayBean bean = registry.getFromRowFunction(PrimitiveArrayBean.class).apply(row); assertEquals(row.getArray("strings"), bean.getStrings()); assertEquals(row.getArray("integers"), Ints.asList(bean.getIntegers())); assertEquals(row.getArray("longs"), Arrays.asList(bean.getLongs())); }
@Test public void testArrays() throws Exception { Schema schema = Schema.builder().addArrayField("f_array", FieldType.STRING).build(); Row row = Row.withSchema(schema).addArray("one", "two", "three", "four").build(); CoderProperties.coderDecodeEncodeEqual(RowCoder.of(schema), row); }
@Test public void testCreatesArray() { List<Integer> data = Lists.newArrayList(2, 3, 5, 7); Schema type = Stream.of(Schema.Field.of("array", Schema.FieldType.array(Schema.FieldType.INT32))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testNestedArraysSetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); List<List<String>> listOfLists = Lists.newArrayList( Lists.newArrayList("a", "b", "c"), Lists.newArrayList("d", "e", "f"), Lists.newArrayList("g", "h", "i")); Row row = Row.withSchema(NESTED_ARRAYS_POJO_SCHEMA).addArray(listOfLists).build(); NestedArraysPOJO pojo = registry.getFromRowFunction(NestedArraysPOJO.class).apply(row); assertEquals(listOfLists, pojo.lists); }
@Test public void testNestedArraysSetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); List<List<String>> listOfLists = Lists.newArrayList( Lists.newArrayList("a", "b", "c"), Lists.newArrayList("d", "e", "f"), Lists.newArrayList("g", "h", "i")); Row row = Row.withSchema(NESTED_ARRAYS_BEAM_SCHEMA).addArray(listOfLists).build(); NestedArraysBean bean = registry.getFromRowFunction(NestedArraysBean.class).apply(row); assertEquals(listOfLists, bean.getLists()); }
@Test public void testRecursiveArraySetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); Row row1 = createSimpleRow("string1"); Row row2 = createSimpleRow("string2"); Row row3 = createSimpleRow("string3"); ; Row row = Row.withSchema(NESTED_ARRAY_BEAN_SCHEMA).addArray(row1, row2, row3).build(); NestedArrayBean bean = registry.getFromRowFunction(NestedArrayBean.class).apply(row); assertEquals(3, bean.getBeans().length); assertEquals("string1", bean.getBeans()[0].getStr()); assertEquals("string2", bean.getBeans()[1].getStr()); assertEquals("string3", bean.getBeans()[2].getStr()); }
@Test public void testRecursiveArraySetters() throws NoSuchSchemaException { SchemaRegistry registry = SchemaRegistry.createDefault(); Row row1 = createSimpleRow("string1"); Row row2 = createSimpleRow("string2"); Row row3 = createSimpleRow("string3"); ; Row row = Row.withSchema(NESTED_ARRAY_POJO_SCHEMA).addArray(row1, row2, row3).build(); NestedArrayPOJO pojo = registry.getFromRowFunction(NestedArrayPOJO.class).apply(row); assertEquals(3, pojo.pojos.length); assertEquals("string1", pojo.pojos[0].str); assertEquals("string2", pojo.pojos[1].str); assertEquals("string3", pojo.pojos[2].str); }
@Test public void testCreatesArrayArray() { List<List<Integer>> data = Lists.<List<Integer>>newArrayList(Lists.newArrayList(1, 2, 3, 4)); Schema type = Stream.of(Schema.Field.of("array", FieldType.array(FieldType.array(FieldType.INT32)))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }
@Test public void testCreatesArrayArrayWithNullElement() { List<List<Integer>> data = Lists.<List<Integer>>newArrayList(Lists.newArrayList(1, null, 3, null), null); Schema type = Stream.of( Schema.Field.of( "array", FieldType.array(FieldType.array(FieldType.INT32, true), true))) .collect(toSchema()); Row row = Row.withSchema(type).addArray(data).build(); assertEquals(data, row.getArray("array")); }