【详述】数据实时更新,导致分页查询的每次数据不一样,想根据创建时间不变去判断,或者有啥好建议
【背景】数据表没有这条数据时想插入操作,有这条数据时,更新操作,但是更新操作时不想改变创建时间
【业务影响】
【StarRocks版本】2.3.0
【集群规模】3fe(1 follower+2observer)+5be(fe与be混部)
【机器信息】CPU虚拟核/内存/网卡,48C/64G/万兆
【表模型】
CREATE TABLE area
(
id
varchar(20) NOT NULL COMMENT “id”,
updated_time
bigint(20) NOT NULL COMMENT “上报时间”,
series
varchar(100) NULL COMMENT “系”,
model
varchar(100) NULL COMMENT “型”,
pos_latitude
varchar(100) NULL COMMENT “纬度”,
pos_longitude
varchar(100) NULL COMMENT “经度”,
country
varchar(100) NULL COMMENT “国家”,
province
varchar(100) NULL COMMENT “省”,
city
varchar(100) NULL COMMENT “城市”,
area
varchar(100) NULL COMMENT “区域名称”,
area_id
varchar(100) NULL COMMENT “区域编码”,
created_time
datetime NULL COMMENT “创建时间”,
province_id
varchar(100) NULL COMMENT “省份编码”,
city_id
varchar(100) NULL COMMENT “城市编码”
) ENGINE=OLAP
UNIQUE KEY(vin
)
COMMENT “OLAP”
DISTRIBUTED BY HASH(vin
) BUCKETS 32
PROPERTIES (
“replication_num” = “3”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“enable_persistent_index” = “false”
);
【导入或者导出方式】Flink
realDS.addSink(StarRocksSink.sink(TableSchema.builder().
primaryKey(“vin”).
field(“id”, DataTypes.VARCHAR(20).notNull()).
field(“updated_time”, DataTypes.BIGINT().notNull()).
field(“series”, DataTypes.VARCHAR(100)).
field(“model”, DataTypes.VARCHAR(100)).
field(“pos_latitude”, DataTypes.VARCHAR(100)).
field(“pos_longitude”, DataTypes.VARCHAR(100)).
field(“country”, DataTypes.VARCHAR(100)).
field(“province”, DataTypes.VARCHAR(100)).
field(“city”, DataTypes.VARCHAR(100)).
field(“area”, DataTypes.VARCHAR(100)).
field(“area_id”, DataTypes.VARCHAR(100)).
field(“created_time”, DataTypes.VARCHAR(100)).
field(“province_id”, DataTypes.VARCHAR(100)).
field(“city_id”, DataTypes.VARCHAR(100))
.build(),
StarRocksSinkOptions.builder().withProperty(“connector”, “starrocks”).
withProperty(“jdbc-url”, ConfigLoader.getActiveStringProperty(“gdmp.starrocks.jdbc.url”)).
withProperty(“load-url”, ConfigLoader.getActiveStringProperty(“gdmp.starrocks.load.url”)).
withProperty(“username”, ConfigLoader.getActiveStringProperty(“gdmp.starrocks.username”)).
withProperty(“password”, ConfigLoader.getActiveStringProperty(“gdmp.starrocks.password”)).
withProperty(“table-name”, “ads_vehicle_area”).
withProperty(“database-name”, ConfigLoader.getActiveStringProperty(“gdmp.starrocks.database.name”)).
withProperty(“sink.properties.column_separator”, “\x01”).
withProperty(“sink.properties.row_delimiter”, “\x02”).
withProperty(“sink.buffer-flush.interval-ms”, ConfigLoader.getActiveStringProperty(“gdmp.starrocks.buffer.flush.interval.ms”)).
withProperty(“driver”, “com.mysql.cj.jdbc.Driver”).build(), (slot, entity) -> {
slot[0] = entity.id;
slot[1] = entity.updatedTime;
slot[2] = entity.series;
slot[3] = entity.model;
slot[4] = entity.posLatitude;
slot[5] = entity.posLongitude;
slot[6] = entity.country;
slot[7] = entity.province;
slot[8] = entity.city;
slot[9] = entity.area;
slot[10] = entity.areaId;
slot[11] = entity.createdTime;
slot[12] = entity.provinceId;
slot[13] = entity.cityId;
})
)
StarRocks是MPP分布式数据库,查询出的结果是无序的,分布式数据库分页,和单机是不一样的,不加order by的话,不能保证达到单机数据库的效果
老师 那加order by 就能解决吗
老师 那还有什么办法推荐吗
是的 需要order by一个或者多个组合的唯一键才会确定顺序