private synchronized void setQueryOutputInfo(QueryExecution.QueryOutputInfo outputInfo) { // if first callback, set column names if (columns == null) { List<String> columnNames = outputInfo.getColumnNames(); List<Type> columnTypes = outputInfo.getColumnTypes(); checkArgument(columnNames.size() == columnTypes.size(), "Column names and types size mismatch"); ImmutableList.Builder<Column> list = ImmutableList.builder(); for (int i = 0; i < columnNames.size(); i++) { list.add(new Column(columnNames.get(i), columnTypes.get(i))); } columns = list.build(); types = outputInfo.getColumnTypes(); } for (URI outputLocation : outputInfo.getBufferLocations()) { exchangeClient.addLocation(outputLocation); } if (outputInfo.isNoMoreBufferLocations()) { exchangeClient.noMoreLocations(); } }
public static Iterable<List<Object>> fixData(List<Column> columns, Iterable<List<Object>> data) { if (data == null) { return null; } requireNonNull(columns, "columns is null"); List<TypeSignature> signatures = columns.stream() .map(column -> parseTypeSignature(column.getType())) .collect(toList()); ImmutableList.Builder<List<Object>> rows = ImmutableList.builder(); for (List<Object> row : data) { checkArgument(row.size() == columns.size(), "row/column size mismatch"); List<Object> newRow = new ArrayList<>(); for (int i = 0; i < row.size(); i++) { newRow.add(fixValue(signatures.get(i), row.get(i))); } rows.add(unmodifiableList(newRow)); // allow nulls in list } return rows.build(); }
@Override public void addResults(QueryStatusInfo statusInfo, QueryData data) { if (types.get() == null && statusInfo.getColumns() != null) { types.set(getTypes(statusInfo.getColumns())); } if (data.getData() != null) { checkState(types.get() != null, "Data without types received!"); List<Column> columns = statusInfo.getColumns(); for (List<Object> fields : data.getData()) { ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder(); for (int i = 0; i < fields.size(); i++) { Type type = types.get().get(i); Object value = convertValue(fields.get(i), type); if (value != null) { builder.put(columns.get(i).getName(), value); } } producer.send(new KeyedMessage<>(topicName, count.getAndIncrement(), builder.build())); } } }
columns = queryStatusInfo.getColumns().stream() .map(c -> { List<ClientTypeSignatureParameter> arguments = c.getTypeSignature().getArguments(); return new SchemaField(c.getName(), fromPrestoType(c.getTypeSignature().getRawType(), arguments.stream() .filter(argument -> argument.getKind() == com.facebook.presto.spi.type.ParameterKind.TYPE) String type = queryStatusInfo.getColumns().get(i).getTypeSignature().getRawType(); Object value = objects.get(i); if (value != null) {
(columns.size() == 1) && (columns.get(0).getType().equals(StandardTypes.BIGINT))) { Iterator<List<Object>> iterator = data.iterator(); if (iterator.hasNext()) { columns = ImmutableList.of(new Column("result", "boolean", new ClientTypeSignature(StandardTypes.BOOLEAN, ImmutableList.of()))); data = ImmutableSet.<List<Object>>of(ImmutableList.<Object>of(true));
private void assertQueryResult(String type, Object data, Object expected) { List<List<Object>> rows = newArrayList(fixData( ImmutableList.of(new Column("test", parseTypeSignature(type))), ImmutableList.of(ImmutableList.of(data)))); assertEquals(rows.size(), 1); assertEquals(rows.get(0).size(), 1); assertEquals(rows.get(0).get(0), expected); } }
protected Function<Column, Type> columnTypeGetter() { return column -> { String typeName = column.getType(); Type type = prestoServer.getMetadata().getType(parseTypeSignature(typeName)); if (type == null) { throw new AssertionError("Unhandled type: " + typeName); } return type; }; } }
private List<String> createResults() { List<Column> columns = ImmutableList.of(new Column("_col0", BigintType.BIGINT)); return ImmutableList.<String>builder() .add(newQueryResults(null, 1, null, null, "QUEUED")) .add(newQueryResults(1, 2, columns, null, "RUNNING")) .add(newQueryResults(1, 3, columns, null, "RUNNING")) .add(newQueryResults(0, 4, columns, ImmutableList.of(ImmutableList.of(253161)), "RUNNING")) .add(newQueryResults(null, null, columns, null, "FINISHED")) .build(); }
private static Iterable<List<Object>> fixData(List<Column> columns, List<List<Object>> data) { if (data == null) { return null; } requireNonNull(columns, "columns is null"); ImmutableList.Builder<List<Object>> rows = ImmutableList.builder(); for (List<Object> row : data) { checkArgument(row.size() == columns.size(), "row/column size mismatch"); List<Object> newRow = new ArrayList<>(); for (int i = 0; i < row.size(); i++) { newRow.add(fixValue(columns.get(i).getType(), row.get(i))); } rows.add(unmodifiableList(newRow)); // allow nulls in list } return rows.build(); }
@Override public void addResults(QueryStatusInfo statusInfo, QueryData data) { if (types.get() == null && statusInfo.getColumns() != null) { types.set(getTypes(statusInfo.getColumns())); } if (data.getData() == null) { return; } checkState(types.get() != null, "Type information is missing"); List<Column> columns = statusInfo.getColumns(); for (List<Object> fields : data.getData()) { try { XContentBuilder dataBuilder = jsonBuilder().startObject(); for (int i = 0; i < fields.size(); i++) { Type type = types.get().get(i); Object value = convertValue(fields.get(i), type); dataBuilder.field(columns.get(i).getName(), value); } dataBuilder.endObject(); client.prepareIndex(tableName, "doc") .setSource(dataBuilder.string(), JSON) .get(); } catch (IOException e) { throw new UncheckedIOException("Error loading data into Elasticsearch index: " + tableName, e); } } }
private String createResults() { QueryResults queryResults = new QueryResults( "20160128_214710_00012_rk68b", server.url("/query.html?20160128_214710_00012_rk68b").uri(), null, null, ImmutableList.of(new Column("_col0", BigintType.BIGINT)), ImmutableList.of(ImmutableList.of(123)), StatementStats.builder().setState("FINISHED").build(), //new StatementStats("FINISHED", false, true, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null), null, ImmutableList.of(), null, null); return QUERY_RESULTS_CODEC.toJson(queryResults); }
protected Function<Column, Type> columnTypeGetter() { return column -> { String typeName = column.getType(); Type type = prestoServer.getMetadata().getType(parseTypeSignature(typeName)); if (type == null) { throw new AssertionError("Unhandled type: " + typeName); } return type; }; } }
private static List<Column> createColumnsList(QueryInfo queryInfo) { requireNonNull(queryInfo, "queryInfo is null"); StageInfo outputStage = queryInfo.getOutputStage(); requireNonNull(outputStage, "outputStage is null"); List<String> names = queryInfo.getFieldNames(); List<Type> types = outputStage.getTypes(); checkArgument(names.size() == types.size(), "names and types size mismatch"); ImmutableList.Builder<Column> list = ImmutableList.builder(); for (int i = 0; i < names.size(); i++) { String name = names.get(i); TypeSignature typeSignature = types.get(i).getTypeSignature(); String type = typeSignature.toString(); list.add(new Column(name, type, new ClientTypeSignature(typeSignature))); } return list.build(); }
private void assertQueryResult(String type, Object data, Object expected) { List<List<Object>> rows = newArrayList(fixData( ImmutableList.of(new Column("test", parseTypeSignature(type))), ImmutableList.of(ImmutableList.of(data)))); assertEquals(rows.size(), 1); assertEquals(rows.get(0).size(), 1); assertEquals(rows.get(0).get(0), expected); } }
private List<String> createResults() { List<Column> columns = ImmutableList.of(new Column("_col0", BigintType.BIGINT)); return ImmutableList.<String>builder() .add(newQueryResults(null, 1, null, null, "QUEUED")) .add(newQueryResults(1, 2, columns, null, "RUNNING")) .add(newQueryResults(1, 3, columns, null, "RUNNING")) .add(newQueryResults(0, 4, columns, ImmutableList.of(ImmutableList.of(253161)), "RUNNING")) .add(newQueryResults(null, null, columns, null, "FINISHED")) .build(); }