This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch ty/NormalizeTimeColumn
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ty/NormalizeTimeColumn by this
push:
new ee0d093a009 Make Time Column as a normal value column in table model
ee0d093a009 is described below
commit ee0d093a00994dccffe86d4fc72d2302d9b3ebda
Author: JackieTien97 <[email protected]>
AuthorDate: Wed Jul 17 19:10:39 2024 +0800
Make Time Column as a normal value column in table model
---
.../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 32 +++++++++------------
.../queryengine/common/header/DatasetHeader.java | 6 ----
.../distribute/TableDistributionPlanner.java | 33 +++++-----------------
3 files changed, 21 insertions(+), 50 deletions(-)
diff --git
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index dea1239786e..66e6cc2ddd8 100644
---
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -56,10 +56,8 @@ public class IoTDBRpcDataSet {
public List<String> columnTypeList; // no deduplication
private final Map<String, Integer>
columnOrdinalMap; // used because the server returns deduplicated columns
- // record original time column index, like select s1, time, s2 from table,
timeOriginColumnIndex
- // will be 2
- private int timeOriginColumnIndex = 1;
- private List<TSDataType> columnTypeDeduplicatedList; // deduplicated from
columnTypeList
+ private final Map<String, Integer> columnName2TsBlockColumnIndexMap;
+ private final List<TSDataType> columnTypeDeduplicatedList; // deduplicated
from columnTypeList
public int fetchSize;
public final long timeout;
public boolean hasCachedRecord = false;
@@ -128,7 +126,9 @@ public class IoTDBRpcDataSet {
}
// deduplicate and map
this.columnOrdinalMap = new HashMap<>();
+ this.columnName2TsBlockColumnIndexMap = new HashMap<>();
if (!ignoreTimeStamp) {
+ this.columnName2TsBlockColumnIndexMap.put(TIMESTAMP_STR, 1);
this.columnOrdinalMap.put(TIMESTAMP_STR, 1);
}
@@ -143,17 +143,13 @@ public class IoTDBRpcDataSet {
String name = columnNameList.get(i);
this.columnNameList.add(name);
this.columnTypeList.add(columnTypeList.get(i));
- if (!columnOrdinalMap.containsKey(name)) {
+ if (!columnName2TsBlockColumnIndexMap.containsKey(name)) {
int index = columnNameIndex.get(name);
- if (index >= 0) {
- if (columnTypeDeduplicatedList.get(index) == null) {
- columnTypeDeduplicatedList.set(index,
TSDataType.valueOf(columnTypeList.get(i)));
- }
- } else {
- // -1 for Time Column
- timeOriginColumnIndex = i + 1;
+ if (columnTypeDeduplicatedList.get(index) == null) {
+ columnTypeDeduplicatedList.set(index,
TSDataType.valueOf(columnTypeList.get(i)));
}
- columnOrdinalMap.put(name, index + startIndex);
+ columnOrdinalMap.put(name, i + startIndex);
+ columnName2TsBlockColumnIndexMap.put(name, index);
}
}
} else {
@@ -166,6 +162,7 @@ public class IoTDBRpcDataSet {
this.columnTypeList.add(columnType);
columnOrdinalMap.computeIfAbsent(
name, v -> addColumnTypeListReturnIndex(index,
TSDataType.valueOf(columnType)));
+ columnName2TsBlockColumnIndexMap.put(name, i);
}
}
@@ -452,8 +449,7 @@ public class IoTDBRpcDataSet {
}
public int findColumn(String columnName) {
- int columnIndex = columnOrdinalMap.get(columnName);
- return columnIndex == -1 ? timeOriginColumnIndex : columnIndex;
+ return columnOrdinalMap.get(columnName);
}
public String getValueByName(String columnName) throws
StatementExecutionException {
@@ -563,13 +559,13 @@ public class IoTDBRpcDataSet {
return columnNameList.get(columnIndex - 1);
}
- // return -1 for time column
+ // return -1 for time column of tree model
private int getTsBlockColumnIndex(String columnName) {
- Integer index = columnOrdinalMap.get(columnName);
+ Integer index = columnName2TsBlockColumnIndexMap.get(columnName);
if (index == null) {
throw new IllegalArgumentException("Unknown column name :" + columnName);
}
- return index - startIndex;
+ return index;
}
public void checkRecord() throws StatementExecutionException {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
index 43f0167eec2..312645b1c03 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
@@ -30,8 +30,6 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
-import static
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand.TIMESTAMP_EXPRESSION_STRING;
-
/** The header of query result dataset. */
public class DatasetHeader {
@@ -160,8 +158,4 @@ public class DatasetHeader {
public int hashCode() {
return Objects.hash(columnHeaders, isIgnoreTimestamp);
}
-
- public void addTimeColumn() {
- columnToTsBlockIndexMap.put(TIMESTAMP_EXPRESSION_STRING, -1);
- }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
index b5ee339640e..56a89b90828 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
@@ -33,15 +33,14 @@ import
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.Pla
import
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PushLimitOffsetIntoTableScan;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Query;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import static com.google.common.base.Preconditions.checkArgument;
import static
org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector.NOOP;
-import static
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand.TIMESTAMP_EXPRESSION_STRING;
public class TableDistributionPlanner {
private final Analysis analysis;
@@ -88,30 +87,12 @@ public class TableDistributionPlanner {
PlanNode outputNodeWithExchange =
new
AddExchangeNodes(mppQueryContext).addExchangeNodes(distributedPlan,
planContext);
if (analysis.getStatement() instanceof Query) {
- // select s1, time, s2 from table;
- // List<String> columnNameList {s1, time, s2}
- // Map<String, Integer> columnName2TsBlockColumnIndexMap {s1:0, time:
-1, s2: 1}
- // resultSet.getString(2);
- // => String columnName = columnNameList.get(2 - 1); fetch columnName
- // => int indexForTsBlockColumn =
columnName2TsBlockColumnIndexMap.get(columnName);
- // => Column c = indexForTsBlockColumn >= 0 ?
- // tsBlock.getValueColumn(indexForTsBlockColumn) :
tsBlock.getTimeColumn()
- // => c.getString(currentRowIndex);
- List<String> outputColumnNames =
- new ArrayList<>(outputNodeWithExchange.getOutputSymbols().size());
- boolean hasTimeColumn = false;
- for (Symbol column : outputNodeWithExchange.getOutputSymbols()) {
- String columnName = column.getName();
- if (!TIMESTAMP_EXPRESSION_STRING.equalsIgnoreCase(columnName)) {
- outputColumnNames.add(columnName);
- } else {
- hasTimeColumn = true;
- }
- }
-
analysis.getRespDatasetHeader().setColumnToTsBlockIndexMap(outputColumnNames);
- if (hasTimeColumn) {
- analysis.getRespDatasetHeader().addTimeColumn();
- }
+ analysis
+ .getRespDatasetHeader()
+ .setColumnToTsBlockIndexMap(
+ outputNodeWithExchange.getOutputSymbols().stream()
+ .map(Symbol::getName)
+ .collect(Collectors.toList()));
}
adjustUpStream(outputNodeWithExchange, planContext);