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;
}
Aggregations