From 165c0dc2e85acdf817a5b7ae75779f9afbdd78c8 Mon Sep 17 00:00:00 2001 From: Li Yu Heng Date: Wed, 3 Jan 2024 16:18:51 +0800 Subject: [PATCH] Fix td's FROM clause and iotdb's WHERE clause (#389) * tdengine FROM fix ? * iotdb fix * config --- configuration/conf/config.properties | 2 -- .../iot/benchmark/iotdb110/IoTDB.java | 12 ++------ .../iot/benchmark/tdengine3/TDengine.java | 29 ++++++++++++++----- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/configuration/conf/config.properties b/configuration/conf/config.properties index 872cbd1cf..3f96270bd 100644 --- a/configuration/conf/config.properties +++ b/configuration/conf/config.properties @@ -393,8 +393,6 @@ # 是否align by device # 目前仅支持iotdb、influxdb v1、tdengine-3 -# iotdb支持OPERATION_PROPORTION=1:1:1:0:0:0:0:0:0:1:0:0 -# tdengine支持1:1:1:1:1:1:1:1:1:1:1:1 # ALIGN_BY_DEVICE=false ################ Workload:相关参数 ###################### diff --git a/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java b/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java index b1bae6a4c..42f121ce5 100644 --- a/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java +++ b/iotdb-1.1/src/main/java/cn/edu/tsinghua/iot/benchmark/iotdb110/IoTDB.java @@ -659,16 +659,8 @@ private String getValueRangeQuerySql(ValueRangeQuery valueRangeQuery) { private String getValueFilterClause(List deviceSchemas, int valueThreshold) { StringBuilder builder = new StringBuilder(); - for (DeviceSchema deviceSchema : deviceSchemas) { - for (Sensor sensor : deviceSchema.getSensors()) { - builder - .append(" AND ") - .append(getDevicePath(deviceSchema)) - .append(".") - .append(sensor.getName()) - .append(" > ") - .append(valueThreshold); - } + for (Sensor sensor : deviceSchemas.get(0).getSensors()) { + builder.append(" AND ").append(sensor.getName()).append(" > ").append(valueThreshold); } return builder.toString(); } diff --git a/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java b/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java index 85b4cd6f7..5960174d7 100644 --- a/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java +++ b/tdengine-3.0/src/main/java/cn/edu/tsinghua/iot/benchmark/tdengine3/TDengine.java @@ -65,7 +65,10 @@ public class TDengine implements IDatabase { protected static final CyclicBarrier superTableBarrier = new CyclicBarrier(config.getCLIENT_NUMBER()); private static final String USE_DB = "use %s"; + private static final String SUPER_TABLE_NAME = "device"; + private static final String FROM = " FROM "; + private static final String WHERE = " WHERE "; private static final String ORDER_BY_TIME_DESC = " order by time desc "; private static final String ORDER_BY_WSTART_DESC = " order by _wstart desc "; private static final AtomicBoolean isInit = new AtomicBoolean(false); @@ -434,7 +437,7 @@ private static String getSimpleQuerySqlHead(List devices) { builder.append(", ").append(querySensors.get(i).getName()); } - builder.append(generateConstrainForDevices(devices)); + builder.append(generateFromClause(devices)); return builder.toString(); } @@ -444,12 +447,17 @@ private static String getSimpleQuerySqlHead(List devices) { * @param devices schema list of query devices * @return from and where clause */ - private static String generateConstrainForDevices(List devices) { + private static String generateFromClause(List devices) { StringBuilder builder = new StringBuilder(); + builder.append(FROM); if (config.isALIGN_BY_DEVICE()) { - builder.append(" FROM ").append(SUPER_TABLE_NAME); + builder.append(SUPER_TABLE_NAME); } else { - builder.append(" FROM ").append(devices.get(0).getDevice()); + for (DeviceSchema deviceSchema : devices) { + builder.append(deviceSchema.getDevice()).append(","); + } + // delete last "," + builder.delete(builder.length() - 1, builder.length()); } return builder.toString(); } @@ -500,14 +508,17 @@ private static String addWhereClause( return sql; } StringBuilder sqlBuilder = new StringBuilder(sql); - sqlBuilder.append(" WHERE "); + + sqlBuilder.append(WHERE); + if (timeRangeQuery != null) { String startTime = "" + timeRangeQuery.getStartTimestamp(); String endTime = "" + timeRangeQuery.getEndTimestamp(); sqlBuilder.append(" time >= ").append(startTime).append(" AND time <= ").append(endTime); } + if (valueRangeFilter != null) { - if (!sqlBuilder.toString().endsWith("WHERE ")) { + if (!sqlBuilder.toString().endsWith(WHERE)) { sqlBuilder.append(" AND "); } double valueThreshold = valueRangeFilter.getMinValue(); @@ -516,8 +527,9 @@ private static String addWhereClause( } sqlBuilder.delete(sqlBuilder.length() - 4, sqlBuilder.length()); } + if (!alignByDeviceTableNameFilter.isEmpty()) { - if (!sqlBuilder.toString().endsWith("WHERE ")) { + if (!sqlBuilder.toString().endsWith(WHERE)) { sqlBuilder.append(" AND "); } sqlBuilder.append(" tbname in ("); @@ -527,6 +539,7 @@ private static String addWhereClause( sqlBuilder.deleteCharAt(sqlBuilder.length() - 1); sqlBuilder.append(')'); } + return sqlBuilder.toString(); } @@ -559,7 +572,7 @@ private static String getAggQuerySqlHead(List devices, String meth .append(")"); } - builder.append(generateConstrainForDevices(devices)); + builder.append(generateFromClause(devices)); return builder.toString(); }