mirror of
https://github.com/apache/impala.git
synced 2026-01-03 15:00:52 -05:00
Change-Id: I63b59a896dc9dc0c9ed1d5e889f7b5626ba61202 Reviewed-on: http://gerrit.ent.cloudera.com:8080/3037 Reviewed-by: Alex Behm <alex.behm@cloudera.com> Tested-by: jenkins Reviewed-on: http://gerrit.ent.cloudera.com:8080/3124
78 lines
2.9 KiB
Thrift
78 lines
2.9 KiB
Thrift
// Copyright 2012 Cloudera Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//
|
|
// This file contains structures produced by the planner.
|
|
|
|
namespace cpp impala
|
|
namespace java com.cloudera.impala.thrift
|
|
|
|
include "Types.thrift"
|
|
include "Exprs.thrift"
|
|
include "DataSinks.thrift"
|
|
include "PlanNodes.thrift"
|
|
include "Partitions.thrift"
|
|
|
|
// TPlanFragment encapsulates info needed to execute a particular
|
|
// plan fragment, including how to produce and how to partition its output.
|
|
// It leaves out node-specific parameters neede for the actual execution.
|
|
struct TPlanFragment {
|
|
// display name to be shown in the runtime profile; unique within a query
|
|
1: required string display_name
|
|
|
|
// no plan or descriptor table: query without From clause
|
|
2: optional PlanNodes.TPlan plan
|
|
|
|
// exprs that produce values for slots of output tuple (one expr per slot);
|
|
// if not set, plan fragment materializes full rows of plan_tree
|
|
4: optional list<Exprs.TExpr> output_exprs
|
|
|
|
// Specifies the destination of this plan fragment's output rows.
|
|
// For example, the destination could be a stream sink which forwards
|
|
// the data to a remote plan fragment, or a sink which writes to a table (for
|
|
// insert stmts).
|
|
5: optional DataSinks.TDataSink output_sink
|
|
|
|
// Partitioning of the data created by all instances of this plan fragment;
|
|
// partitioning.type has the following meaning:
|
|
// - UNPARTITIONED: there is only one instance of the plan fragment
|
|
// - RANDOM: a particular output row is randomly assigned to any of the instances
|
|
// - HASH_PARTITIONED: output row r is produced by
|
|
// hash_value(partitioning.partitioning_exprs(r)) % #partitions
|
|
// - RANGE_PARTITIONING: currently not supported
|
|
// This is distinct from the partitioning of each plan fragment's
|
|
// output, which is specified by output_sink.output_partitioning.
|
|
6: required Partitions.TDataPartition partition
|
|
}
|
|
|
|
// location information for a single scan range
|
|
struct TScanRangeLocation {
|
|
1: required Types.TNetworkAddress server
|
|
|
|
// disk volume identifier of a particular scan range at 'server';
|
|
// -1 indicates an unknown volume id;
|
|
// only set for TScanRange.hdfs_file_split
|
|
2: optional i32 volume_id = -1
|
|
|
|
// If true, this block is cached on this server.
|
|
3: optional bool is_cached = false
|
|
}
|
|
|
|
// A single scan range plus the hosts that serve it
|
|
struct TScanRangeLocations {
|
|
1: required PlanNodes.TScanRange scan_range
|
|
// non-empty list
|
|
2: list<TScanRangeLocation> locations
|
|
}
|