@Override public List<SqlFunction> listFunctions(ExecutionContext context) { /** * TODO: currently the Shell only shows some UDFs supported by Samza internally. We may need to require UDFs * to provide a function of getting their "SamzaSqlUdfDisplayInfo", then we can get the UDF information from * SamzaSqlApplicationConfig.udfResolver(or SamzaSqlApplicationConfig.udfMetadata) instead of registering * UDFs one by one as below. */ List<SqlFunction> udfs = new ArrayList<>(); udfs.add(new SamzaSqlUdfDisplayInfo("RegexMatch", "Matches the string to the regex", Arrays.asList(SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.STRING), SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.STRING)), SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.BOOLEAN))); return udfs; }
private SqlFieldSchema getSqlTypeFromUnionTypes(List<Schema> types) { // Typically a nullable field's schema is configured as an union of Null and a Type. // This is to check whether the Union is a Nullable field if (types.size() == 2) { if (types.get(0).getType() == Schema.Type.NULL) { return convertField(types.get(1)); } else if ((types.get(1).getType() == Schema.Type.NULL)) { return convertField(types.get(0)); } } return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.ANY); } }
return SqlFieldSchema.createArraySchema(elementSchema); case BOOLEAN: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.BOOLEAN); case DOUBLE: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.DOUBLE); case FLOAT: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.FLOAT); case ENUM: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.STRING); case UNION: return getSqlTypeFromUnionTypes(fieldSchema.getTypes()); case FIXED: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.BYTES); case STRING: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.STRING); case BYTES: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.BYTES); case INT: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.INT32); case LONG: return SqlFieldSchema.createPrimitiveSchema(SamzaSqlFieldType.INT64); case RECORD: SqlSchema rowSchema = convertSchema(fieldSchema.getFields());