private Schema buildOutputSchema( final PluginTask task, Schema inputSchema, List<ColumnConfig> jsonColumns) { ImmutableList.Builder<Column> builder = ImmutableList.builder(); int i = 0; for (Column inputColumn : inputSchema.getColumns()) { Column outputColumn = new Column(i++, inputColumn.getName(), inputColumn.getType()); builder.add(outputColumn); } for (ColumnConfig columnConfig : jsonColumns) { String columnName = task.getJoinedColumnsPrefix() + columnConfig.getName(); builder.add(new Column(i++, columnName, columnConfig.getType())); } return new Schema(builder.build()); }
@Override public void run(TaskSource taskSource, Schema schema, FileInput input, PageOutput output) { try (final PageBuilder pageBuilder = new PageBuilder(Exec.getBufferAllocator(), schema, output)) { while (input.nextFile()) { Buffer buffer = input.poll(); if (buffer != null) { for (Column column : schema.getColumns()) { Type type = column.getType(); switch (type.getName()) { case "boolean": pageBuilder.setBoolean(column, true); break; case "long": pageBuilder.setLong(column, 2L); break; case "double": pageBuilder.setDouble(column, 3.0D); break; case "string": pageBuilder.setString(column, "45"); break; case "timestamp": pageBuilder.setTimestamp(column, Timestamp.ofEpochMilli(678L)); break; default: throw new IllegalStateException("Unknown type: " + type.getName()); } } pageBuilder.addRecord(); if (raiseException) { throw new RuntimeException("emulated exception"); } } } pageBuilder.finish(); } }