Skip to content

Commit 587f82b

Browse files
committed
Merge remote-tracking branch 'origin/perf-base-image' into perf-base-image
2 parents 28920d5 + d7ad891 commit 587f82b

File tree

17 files changed

+428
-236
lines changed

17 files changed

+428
-236
lines changed

fe/fe-core/src/main/java/org/apache/doris/analysis/OutFileClause.java

Lines changed: 86 additions & 206 deletions
Large diffs are not rendered by default.

fe/fe-core/src/main/java/org/apache/doris/binlog/AddPartitionRecord.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,12 @@ public AddPartitionRecord(long commitSeq, PartitionPersistInfo partitionPersistI
9090
sb.append("\");");
9191
} else if (!this.listPartitionItem.equals(ListPartitionItem.DUMMY_ITEM)) {
9292
// list
93-
sb.append("VALUES IN ");
94-
sb.append(((ListPartitionItem) listPartitionItem).toSql());
93+
String partitionSql = ((ListPartitionItem) listPartitionItem).toSql();
94+
// the partition may default partition
95+
if (!partitionSql.isEmpty()) {
96+
sb.append("VALUES IN ");
97+
sb.append(partitionSql);
98+
}
9599
sb.append(" (\"version_info\" = \"");
96100
sb.append(partition.getVisibleVersion());
97101
sb.append("\");");

fe/fe-core/src/main/java/org/apache/doris/catalog/ListPartitionInfo.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,21 +207,27 @@ public String toSql(OlapTable table, List<Long> partitionId) {
207207
String partitionName = partition.getName();
208208
List<PartitionKey> partitionKeys = entry.getValue().getItems();
209209

210-
sb.append("PARTITION ").append(partitionName).append(" VALUES IN ");
211-
sb.append("(");
210+
sb.append("PARTITION ").append(partitionName);
211+
StringBuilder partitionKeysBuilder = new StringBuilder();
212212
int idxInternal = 0;
213213
for (PartitionKey partitionKey : partitionKeys) {
214214
String partitionKeyStr = partitionKey.toSql();
215-
if (!isMultiColumnPartition) {
215+
if (!isMultiColumnPartition && !partitionKeyStr.isEmpty()) {
216216
partitionKeyStr = partitionKeyStr.substring(1, partitionKeyStr.length() - 1);
217217
}
218-
sb.append(partitionKeyStr);
218+
partitionKeysBuilder.append(partitionKeyStr);
219219
if (partitionKeys.size() > 1 && idxInternal != partitionKeys.size() - 1) {
220-
sb.append(",");
220+
partitionKeysBuilder.append(",");
221221
}
222222
idxInternal++;
223223
}
224-
sb.append(")");
224+
225+
// length == 0 means it is a default partition
226+
if (partitionKeysBuilder.length() > 0) {
227+
sb.append(" VALUES IN ").append("(");
228+
sb.append(partitionKeysBuilder.toString());
229+
sb.append(")");
230+
}
225231

226232
if (!"".equals(getStoragePolicy(entry.getKey()))) {
227233
sb.append("(\"storage_policy\" = \"").append(getStoragePolicy(entry.getKey())).append("\")");

fe/fe-core/src/main/java/org/apache/doris/catalog/ListPartitionItem.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ public String toString() {
188188
}
189189

190190
public String toSql() {
191+
if (isDefaultPartition) {
192+
return "";
193+
}
191194
StringBuilder sb = new StringBuilder();
192195
sb.append("(");
193196

fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionKey.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.google.common.base.Joiner;
4141
import com.google.common.base.Preconditions;
4242
import com.google.common.collect.Lists;
43+
import com.google.gson.Gson;
4344
import com.google.gson.JsonArray;
4445
import com.google.gson.JsonDeserializationContext;
4546
import com.google.gson.JsonDeserializer;
@@ -69,6 +70,7 @@ public class PartitionKey implements Comparable<PartitionKey>, Writable {
6970
private List<String> originHiveKeys;
7071
@SerializedName("ts")
7172
private List<PrimitiveType> types;
73+
// the isD not serialize before because of Gson using PartitionKeySerializer
7274
@SerializedName("isD")
7375
private boolean isDefaultListPartitionKey = false;
7476

@@ -366,6 +368,9 @@ public PartitionKey successor() throws AnalysisException {
366368

367369
// return: ("100", "200", "300")
368370
public String toSql() {
371+
if (isDefaultListPartitionKey) {
372+
return "";
373+
}
369374
StringBuilder sb = new StringBuilder("(");
370375
int i = 0;
371376
for (LiteralExpr expr : keys) {
@@ -594,8 +599,13 @@ public JsonElement serialize(PartitionKey partitionKey, java.lang.reflect.Type r
594599
jsonArray.add(typeAndKey);
595600
}
596601

597-
// for compatibility in the future
598-
jsonArray.add(new JsonPrimitive("unused"));
602+
// use extend as a json to record some information
603+
JsonArray extend = new JsonArray();
604+
extend.add(context.serialize(partitionKey.isDefaultListPartitionKey()));
605+
606+
// for compatibility in the future add item before unused
607+
extend.add("unused");
608+
jsonArray.add(new JsonPrimitive(GsonUtils.GSON.toJson(extend)));
599609

600610
return jsonArray;
601611
}
@@ -640,8 +650,18 @@ public PartitionKey deserialize(JsonElement json, java.lang.reflect.Type typeOfT
640650
partitionKey.types.add(type);
641651
partitionKey.keys.add(key);
642652
}
653+
JsonPrimitive extend = jsonArray.get(jsonArray.size() - 1).getAsJsonPrimitive();
654+
String extendStr = extend.getAsString();
655+
// for compatibility, extend takes up the previous "unused" position
656+
// so the last element needs to be checked here, if it is unused ignore it
657+
if (!extendStr.equals("unused")) {
658+
// parse extend record
659+
Gson gson = new Gson();
660+
JsonArray pExtend = gson.fromJson(extendStr, JsonArray.class);
661+
partitionKey.setDefaultListPartition(pExtend.get(0).getAsBoolean());
662+
// ignore the last element
663+
}
643664

644-
// ignore the last element
645665
return partitionKey;
646666
}
647667
}

fe/fe-core/src/main/java/org/apache/doris/datasource/property/fileformat/AvroFileFormatProperties.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ public void analyzeFileFormatProperties(Map<String, String> formatProperties, bo
3636
}
3737

3838
@Override
39-
public TResultFileSinkOptions toTResultFileSinkOptions() {
40-
return null;
39+
public void fullTResultFileSinkOptions(TResultFileSinkOptions sinkOptions) {
4140
}
4241

4342
@Override

fe/fe-core/src/main/java/org/apache/doris/datasource/property/fileformat/CsvFileFormatProperties.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,9 @@ public void analyzeFileFormatProperties(Map<String, String> formatProperties, bo
134134
}
135135

136136
@Override
137-
public TResultFileSinkOptions toTResultFileSinkOptions() {
138-
return null;
137+
public void fullTResultFileSinkOptions(TResultFileSinkOptions sinkOptions) {
138+
sinkOptions.setColumnSeparator(columnSeparator);
139+
sinkOptions.setLineDelimiter(lineDelimiter);
139140
}
140141

141142
// The method `analyzeFileFormatProperties` must have been called once before this method

fe/fe-core/src/main/java/org/apache/doris/datasource/property/fileformat/FileFormatProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public abstract void analyzeFileFormatProperties(
6262
* generate TResultFileSinkOptions according to the properties of specified file format
6363
* You must call method `analyzeFileFormatProperties` once before calling method `toTResultFileSinkOptions`
6464
*/
65-
public abstract TResultFileSinkOptions toTResultFileSinkOptions();
65+
public abstract void fullTResultFileSinkOptions(TResultFileSinkOptions sinkOptions);
6666

6767
/**
6868
* generate TFileAttributes according to the properties of specified file format

fe/fe-core/src/main/java/org/apache/doris/datasource/property/fileformat/JsonFileFormatProperties.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ public void analyzeFileFormatProperties(Map<String, String> formatProperties, bo
7373
}
7474

7575
@Override
76-
public TResultFileSinkOptions toTResultFileSinkOptions() {
77-
return null;
76+
public void fullTResultFileSinkOptions(TResultFileSinkOptions sinkOptions) {
7877
}
7978

8079
@Override

fe/fe-core/src/main/java/org/apache/doris/datasource/property/fileformat/OrcFileFormatProperties.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,20 @@
2424
import org.apache.doris.thrift.TFileTextScanRangeParams;
2525
import org.apache.doris.thrift.TResultFileSinkOptions;
2626

27+
import com.google.common.collect.Maps;
28+
2729
import java.util.Map;
2830

2931
public class OrcFileFormatProperties extends FileFormatProperties {
32+
public static final Map<String, TFileCompressType> ORC_COMPRESSION_TYPE_MAP = Maps.newHashMap();
33+
34+
static {
35+
ORC_COMPRESSION_TYPE_MAP.put("plain", TFileCompressType.PLAIN);
36+
ORC_COMPRESSION_TYPE_MAP.put("snappy", TFileCompressType.SNAPPYBLOCK);
37+
ORC_COMPRESSION_TYPE_MAP.put("zlib", TFileCompressType.ZLIB);
38+
ORC_COMPRESSION_TYPE_MAP.put("zstd", TFileCompressType.ZSTD);
39+
}
40+
3041
private TFileCompressType orcCompressionType = TFileCompressType.ZLIB;
3142

3243
public OrcFileFormatProperties() {
@@ -36,11 +47,26 @@ public OrcFileFormatProperties() {
3647
@Override
3748
public void analyzeFileFormatProperties(Map<String, String> formatProperties, boolean isRemoveOriginProperty)
3849
throws AnalysisException {
50+
// get compression type
51+
// save compress type
52+
if (formatProperties.containsKey(PROP_COMPRESS_TYPE)) {
53+
if (ORC_COMPRESSION_TYPE_MAP.containsKey(
54+
formatProperties.get(PROP_COMPRESS_TYPE).toLowerCase())) {
55+
this.orcCompressionType = ORC_COMPRESSION_TYPE_MAP.get(
56+
formatProperties.get(PROP_COMPRESS_TYPE).toLowerCase());
57+
formatProperties.remove(PROP_COMPRESS_TYPE);
58+
} else {
59+
throw new AnalysisException("orc compression type ["
60+
+ formatProperties.get(PROP_COMPRESS_TYPE) + "] is invalid,"
61+
+ " please choose one among ZLIB, SNAPPY, ZSTD or PLAIN");
62+
}
63+
}
3964
}
4065

4166
@Override
42-
public TResultFileSinkOptions toTResultFileSinkOptions() {
43-
return null;
67+
public void fullTResultFileSinkOptions(TResultFileSinkOptions sinkOptions) {
68+
sinkOptions.setOrcCompressionType(orcCompressionType);
69+
sinkOptions.setOrcWriterVersion(1);
4470
}
4571

4672
@Override

0 commit comments

Comments
 (0)