private Schema.Field toField(Schema schema, Integer fieldIndex) { Schema.Field original = schema.getField(fieldIndex); return original.withName("c" + fieldIndex); } }
/** Return the estimated serialized size of a give row object. */ public static long estimatedSizeBytes(Row row) { Schema schema = row.getSchema(); int fieldCount = schema.getFieldCount(); int bitmapSize = (((fieldCount - 1) >> 6) + 1) * 8; int fieldsSize = 0; for (int i = 0; i < schema.getFieldCount(); ++i) { fieldsSize += (int) estimatedSizeBytes(schema.getField(i).getType(), row.getValue(i)); } return (long) bitmapSize + fieldsSize; }
private Object castField(List<Object> resultValues, int i) { return BeamTableUtils.autoCastField(outputSchema.getField(i), resultValues.get(i)); }
/** Create an instance of {@code RelDataType} so it can be used to create a table. */ public static RelDataType toCalciteRowType(Schema schema, RelDataTypeFactory dataTypeFactory) { RelDataTypeFactory.Builder builder = new RelDataTypeFactory.Builder(dataTypeFactory); IntStream.range(0, schema.getFieldCount()) .forEach( idx -> builder.add( schema.getField(idx).getName(), toRelDataType(dataTypeFactory, schema, idx))); return builder.build(); }
public static Row toBeamRow(GenericRecord record, Schema schema) { List<Object> values = new ArrayList(); for (int i = 0; i < record.getSchema().getFields().size(); i++) { org.apache.avro.Schema.Field avroField = record.getSchema().getFields().get(i); values.add(AvroUtils.convertAvroFormat(schema.getField(i), record.get(avroField.name()))); } return Row.withSchema(schema).addValues(values).build(); }
private static void unnestRow(Row input, Row.Builder output) { for (int i = 0; i < input.getSchema().getFieldCount(); ++i) { Field field = input.getSchema().getField(i); if (field.getType().getTypeName().isCompositeType()) { unnestRow(input.getRow(i), output); } else { output.addValue(input.getValue(i)); } } } /** A {@link PTransform} that unnests nested row. */
@Nullable @Override @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"}) public <T> T getValue(int fieldIdx) { Field field = getSchema().getField(fieldIdx); FieldType type = field.getType(); Object fieldValue = getters.get(fieldIdx).get(getterTarget); if (fieldValue == null && !field.getNullable()) { throw new RuntimeException("Null value set on non-nullable field" + field); } return fieldValue != null ? getValue(type, fieldValue, fieldIdx) : null; }
private Row tupleToRow(Schema schema, ImmutableList<RexLiteral> tuple) { return IntStream.range(0, tuple.size()) .mapToObj(i -> autoCastField(schema.getField(i), tuple.get(i).getValue())) .collect(toRow(schema)); } }
private SqlTypeName getFieldType(Row row, String fieldName) { Schema.Field field = row.getSchema().getField(fieldName); return CalciteUtils.toSqlTypeName(field.getType()); } }
private Schema payloadSchema() { return messageSchema().getField(PAYLOAD_FIELD).getType().getRowSchema(); }
private static RelDataType toRelDataType( RelDataTypeFactory dataTypeFactory, Schema schema, int fieldIndex) { Schema.Field field = schema.getField(fieldIndex); RelDataType type = toRelDataType(dataTypeFactory, field.getType()); return dataTypeFactory.createTypeWithNullability(type, field.getNullable()); }
@Override public int hashCode() { int h = 1; for (int i = 0; i < getFieldCount(); i++) { h = 31 * h + Equals.deepHashCode(getValue(i), getSchema().getField(i).getType()); } return h; }
@Test public void testWrongName() { Schema schema = Schema.of(Field.of("f_byte", FieldType.BYTE)); thrown.expect(IllegalArgumentException.class); schema.getField("f_string"); }
@Test public void testWrongIndex() { Schema schema = Schema.of(Field.of("f_byte", FieldType.BYTE)); thrown.expect(IndexOutOfBoundsException.class); schema.getField(1); }
@Test public void testNestedSchema() { Schema nestedSchema = Schema.of(Field.of("f1_str", FieldType.STRING)); Schema schema = Schema.of(Field.of("nested", FieldType.row(nestedSchema))); Field inner = schema.getField("nested").getType().getRowSchema().getField("f1_str"); assertEquals("f1_str", inner.getName()); assertEquals(FieldType.STRING, inner.getType()); }
@Test public void testArraySchema() { FieldType arrayType = FieldType.array(FieldType.STRING); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }
@Test public void testNestedArraySchema() { FieldType arrayType = FieldType.array(FieldType.array(FieldType.STRING)); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }
@Test public void testArrayOfRowSchema() { Schema nestedSchema = Schema.of(Field.of("f1_str", FieldType.STRING)); FieldType arrayType = FieldType.array(FieldType.row(nestedSchema)); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }