15 package com.cloudera.impala.planner;
17 import java.util.List;
24 import com.cloudera.impala.thrift.TDataSink;
25 import com.cloudera.impala.thrift.TDataSinkType;
26 import com.cloudera.impala.thrift.TExplainLevel;
27 import com.cloudera.impala.thrift.THdfsTableSink;
28 import com.cloudera.impala.thrift.TTableSink;
29 import com.cloudera.impala.thrift.TTableSinkType;
30 import com.google.common.base.Preconditions;
48 Preconditions.checkState(targetTable instanceof
HdfsTable);
58 PlanNode inputNode = fragment_.getPlanRoot();
59 int numNodes = fragment_.getNumNodes();
68 if (inputNode.getCardinality() == -1 || inputNode.getAvgRowSize() == -1) {
75 long perHostInputCardinality = Math.max(1L, inputNode.getCardinality() / numNodes);
76 long perHostInputBytes =
77 (long) Math.ceil(perHostInputCardinality * inputNode.getAvgRowSize());
78 perHostMemCost_ = Math.min(perHostInputBytes, numPartitions * perPartitionMemReq);
89 case PARQUET:
return 1024L * 1024L * 1024L;
90 case TEXT:
return 100L * 1024L;
92 Preconditions.checkState(
false,
"Unsupported TableSink format " +
100 TExplainLevel explainLevel) {
101 StringBuilder output =
new StringBuilder();
102 String overwriteStr =
", OVERWRITE=" + (
overwrite_ ?
"true" :
"false");
103 String partitionKeyStr =
"";
105 StringBuilder tmpBuilder =
new StringBuilder(
", PARTITION-KEYS=(");
107 tmpBuilder.append(expr.toSql() +
",");
109 tmpBuilder.deleteCharAt(tmpBuilder.length() - 1);
110 tmpBuilder.append(
")");
111 partitionKeyStr = tmpBuilder.toString();
113 output.append(String.format(
"%sWRITE TO HDFS [%s%s%s]\n", prefix,
114 targetTable_.getFullName(), overwriteStr, partitionKeyStr));
117 if (explainLevel.ordinal() > TExplainLevel.MINIMAL.ordinal()) {
119 if (totalNumPartitions == -1) {
120 output.append(detailPrefix +
"partitions=unavailable");
122 output.append(detailPrefix +
"partitions="
123 + (totalNumPartitions == 0 ? 1 : totalNumPartitions));
126 if (explainLevel.ordinal() >= TExplainLevel.EXTENDED.ordinal()) {
127 output.append(PrintUtils.printHosts(detailPrefix, fragment_.getNumNodes()));
132 return output.toString();
137 TDataSink result =
new TDataSink(TDataSinkType.TABLE_SINK);
138 THdfsTableSink hdfsTableSink =
new THdfsTableSink(
141 TTableSinkType.HDFS);
142 tTableSink.hdfs_table_sink = hdfsTableSink;
143 result.table_sink = tTableSink;
static List< TExpr > treesToThrift(List<?extends Expr > exprs)
final long DEFAULT_NUM_PARTITIONS
HdfsTableSink(Table targetTable, List< Expr > partitionKeyExprs, boolean overwrite)
String getExplainString(String prefix, String detailPrefix, TExplainLevel explainLevel)
long getPerPartitionMemReq(HdfsFileFormat format)
final List< Expr > partitionKeyExprs_