apache / apache/iotdb

[Bug] 2.0.5版本,table模式下,无模式建的表,再执行insert时,会把已经存在的记录里除了timestamp之外的字段全部覆盖

Đang mở
#16,630 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Java
Star
6.4k
Fork
1.2k
Merge trung bình
1 ngày 23 giờ
Pull request đã merge (30 ngày)
115

Mô tả

### Search before asking

- [x] I searched in the [issues](https://github.com/apache/iotdb/issues) and found nothing similar.

### Version

release2.0.5
docker-standalone

### Describe the bug and provide the minimal reproduce step

1、安装2.0.5 docker-standalone版本
2、建表并插入数据
@Test
public void testCreateAndInsert() throws Exception {
log.info("IOTDB Test executed");
try (ITableSession session =
new TableSessionBuilder()
.nodeUrls(Collections.singletonList("127.0.0.1:6667"))
.username("root")
.password("root")
.build()) {

session.executeNonQueryStatement("CREATE DATABASE IF NOT EXISTS db1");
session.executeNonQueryStatement("use db1");

// 不创建表直接写入数据
List columnNameList =
Arrays.asList("region_id", "plant_id", "device_id", "model","kind","weather","birthday", "temperature", "humidity");
List dataTypeList =
Arrays.asList(
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.STRING,
TSDataType.FLOAT,
TSDataType.DOUBLE);
List columnTypeList =
new ArrayList<>(
Arrays.asList(
ColumnCategory.TAG,
ColumnCategory.TAG,
ColumnCategory.TAG,
ColumnCategory.ATTRIBUTE,
ColumnCategory.ATTRIBUTE,
ColumnCategory.ATTRIBUTE,
ColumnCategory.ATTRIBUTE,
ColumnCategory.FIELD,
ColumnCategory.FIELD));
Tablet tablet = new Tablet("table1", columnNameList, dataTypeList, columnTypeList, 100);
for (int i = 0; i < 100; i++) {
int rowIndex = tablet.getRowSize();
tablet.addTimestamp(rowIndex, System.currentTimeMillis());
tablet.addValue("region_id", rowIndex, "1");
tablet.addValue("plant_id", rowIndex, "5");
tablet.addValue("device_id", rowIndex, "3");
tablet.addValue("model", rowIndex, "A");
tablet.addValue("kind", rowIndex, "west");
tablet.addValue("weather", rowIndex, "cloudy");
tablet.addValue("birthday", rowIndex, "2025-10-17");
tablet.addValue("temperature", rowIndex, 37.6F);
tablet.addValue("humidity", rowIndex, 111.1);
if (tablet.getRowSize() == tablet.getMaxRowNumber()) {
session.insert(tablet);
tablet.reset();
}
log.info("数据" + i);
Thread.sleep(3000L);
}
if (tablet.getRowSize() != 0) {
session.insert(tablet);
tablet.reset();
}
}
log.info("数据插入成功");
}
3、观察数据插入成功
4、再通过命令插入记录
INSERT INTO db1.table1 (region_id, plant_id, device_id, model, kind, weather, birthday, temperature, humidity)
VALUES ('1', '5', '3', 'B', 'north', 'rain', '2025-10-19', 40.6, 121.1)
5、观察发现已经存在的记录里除了timestamp之外的字段全部覆盖了

### What did you expect to see?

2.0.5版本,table模式下,无模式建的表,再执行insert时,会把已经存在的记录里除了timestamp之外的字段全部覆盖。

### What did you see instead?

nothing

### Anything else?

_No response_

### Are you willing to submit a PR?

- [ ] I'm willing to submit a PR!

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu với bản tái hiện testCreateAndInsert được cung cấp, sử dụng TableSessionBuilder và đường dẫn chèn ở chế độ bảng trên thiết lập docker-standalone 2.0.5. So sánh thao tác chèn schemaless vào tablet với SQL INSERT sau đó vào db1.table1. Hoàn tất khi tái hiện được việc ghi đè và xác minh rằng các bản ghi hiện có vẫn giữ nguyên các giá trị trước đó không phải timestamp.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
java, sql
Lĩnh vực
databases
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.