Search in sources :

Example 31 with SamzaSqlRelRecord

use of org.apache.samza.sql.SamzaSqlRelRecord in project samza by apache.

the class AvroSchemaGenRelConverter method computePayloadSchema.

private Schema computePayloadSchema(String streamName, SamzaSqlRelMessage relMessage) {
    SamzaSqlRelRecord relRecord = relMessage.getSamzaSqlRelRecord();
    List<Schema.Field> keyFields = new ArrayList<>();
    List<String> fieldNames = relRecord.getFieldNames();
    List<Object> values = relRecord.getFieldValues();
    for (int index = 0; index < fieldNames.size(); index++) {
        if (fieldNames.get(index).equals(SamzaSqlRelMessage.KEY_NAME) || values.get(index) == null) {
            continue;
        }
        Object value = values.get(index);
        Schema avroType;
        if (value instanceof GenericData.Record) {
            avroType = ((GenericData.Record) value).getSchema();
        } else {
            avroType = ReflectData.get().getSchema(value.getClass());
        }
        keyFields.add(new Schema.Field(fieldNames.get(index), avroType, "", null));
    }
    Schema ks = Schema.createRecord(streamName, "", streamName + "_namespace", false);
    ks.setFields(keyFields);
    String schemaStr = ks.toString();
    Schema schema;
    // CachedSchemaRegistryClient doesn't like if we recreate schema objects.
    if (schemas.containsKey(schemaStr)) {
        schema = schemas.get(schemaStr);
    } else {
        schema = Schema.parse(schemaStr);
        schemas.put(schemaStr, schema);
    }
    return schema;
}
Also used : Schema(org.apache.avro.Schema) ArrayList(java.util.ArrayList) GenericData(org.apache.avro.generic.GenericData) SamzaSqlRelRecord(org.apache.samza.sql.SamzaSqlRelRecord) SamzaSqlRelRecord(org.apache.samza.sql.SamzaSqlRelRecord)

Aggregations

SamzaSqlRelRecord (org.apache.samza.sql.SamzaSqlRelRecord)31 Test (org.junit.Test)25 ArrayList (java.util.ArrayList)6 SamzaSqlRelMessage (org.apache.samza.sql.data.SamzaSqlRelMessage)5 List (java.util.List)3 Schema (org.apache.avro.Schema)3 JoinRelType (org.apache.calcite.rel.core.JoinRelType)3 SamzaSqlRelMsgMetadata (org.apache.samza.sql.data.SamzaSqlRelMsgMetadata)3 HashMap (java.util.HashMap)2 Map (java.util.Map)2 GenericData (org.apache.avro.generic.GenericData)2 ByteString (org.apache.calcite.avatica.util.ByteString)2 SamzaException (org.apache.samza.SamzaException)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 Preconditions (com.google.common.base.Preconditions)1 Collections (java.util.Collections)1 LinkedList (java.util.LinkedList)1 Collectors (java.util.stream.Collectors)1 GenericRecord (org.apache.avro.generic.GenericRecord)1 IndexedRecord (org.apache.avro.generic.IndexedRecord)1