return ArrowFileReader.toBean(ArrowFileFormat.ArrowFileMetadata.parseFrom(metadataCaptor.getValue()));
@Override public void execDataArrived(RpcOutcomeListener<Ack> outcomeListener, QueryWritableBatch result) { try (TimedBlock b = Timer.time("dataMetadataArrived"); QueryDataBatch dataBatch = LocalUserUtil.acquireData(allocator, outcomeListener, result); RecordBatchLoader loader = new RecordBatchLoader(allocator)) { b.addID("attempt=" + attemptId); loader.load(dataBatch.getHeader().getDef(), dataBatch.getData()); // Query output just contains the batch unique id and number of records in the batch. try (RecordBatchData batch = new RecordBatchData(loader, allocator)) { List<ValueVector> vectors = batch.getVectors(); if (vectors.size() < 4 || !(vectors.get(3) instanceof VarBinaryVector) ) { throw UserException.unsupportedError() .message("Job output contains invalid data") .build(logger); } VarBinaryVector metadataVector = (VarBinaryVector) vectors.get(3); for (int i = 0; i < batch.getRecordCount(); i++) { final ArrowFileFormat.ArrowFileMetadata metadata = ArrowFileFormat.ArrowFileMetadata.parseFrom(metadataVector.getObject(i)); job.getJobAttempt().getInfo().getResultMetadataList().add(ArrowFileReader.toBean(metadata)); } } } catch (Exception ex) { exception.addException(ex); } } }