1.1.1 重复主键的记录将被覆盖、经纬度用Point
业务场景:
问题语句:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
评论:
在JUST中,主键(primary key)能够区分不同的记录。在JUST的同一张表中,不能存在主键值相同的记录。目前的表现是,若两条记录主键值相同,后一条记录会覆盖前一条记录。我们可以利用这一点防止数据的重复导入。
在这个场景中,同一辆车可能有多个不同的经纬度,因此不能将车辆编号设为主键。由于你会对车辆id进行查询,因此需要对car_id构建属性索引。
在JUST中,如果有空间字段,那么需要使用空间字段类型:point、polygon、linestring等。你这里把经纬度分开,不是一个很好的方案。空间字段:经纬度使用Point,而不是string和double。另外,由于会查询一段时间内的轨迹,建议构建z2t索引
修改后语句:
1. CREATE TABLE dc_nav_info (
2. car_id string :index = true :COMMENT = '车辆编号', -- 构建属性索引,而非主键
3. car_name string: COMMENT = '车辆名称',
4. rcv_time timestamp :COMMENT = '数据接收时间',
5. speed double :COMMENT = '车辆速度',
6. yaw_rad double :COMMENT = '车辆角度',
7. pt Point :COMMENT = "原始坐标位置", -- 用Point表示经纬度
8. pitch_rad double: COMMENT = '俯仰角度(°)',
9. altitude double: COMMENT = '海拔(m)',
10. gps_status int: COMMENT = 'GPS状态:0正常 1异常',
11. nav_status int: COMMENT = '惯导状态:0正常 1异常',
12. roll_rad double: COMMENT = '侧翻(°)',
13. from_station string: COMMENT = '始发站',
14. to_station string :COMMENT = '终点站'
15. ) USERDATA {
16. "geomesa.indices.enabled": "z2t,z2,attr",
17. "geomesa.z3.interval": "day"
18. }
1.1.2
默认时间索引为建表语句中的第一个时间字段
业务场景:
使用方式:不确定
问题语句:
1. CREATE TABLE dc_travel_guide (
2. rid long :PRIMARY KEY: COMMENT = '主键',
3. obj_time timestamp: COMMENT = '日期',
4. guide_line_name string: COMMENT = '路线名称',
5. travel_num int: COMMENT = '游览人数',
6. user_id string: COMMENT = '创建人ID',
7. latitude double: COMMENT = '纬度',
8. longitude double: COMMENT = '经度',
9. travel_time timestamp: COMMENT = '游览时间'
10. )
评论:
点的空间字段:经纬度用Point
JUST默认会对第一个时间构建时间索引,如果需要对游览时间查询,建议将游览查询放在日期前面。
修改后语句:
1.
2. rid long :PRIMARY KEY: COMMENT = '主键',
3. obj_time timestamp: COMMENT = '日期',
4. guide_line_name string: COMMENT = '路线名称',
5. travel_num int: COMMENT = '游览人数',
6. user_id string: COMMENT = '创建人ID',
7. pt Point:COMMENT='位置',
8. travel_time timestamp: COMMENT = '游览时间'
9. ) userdata { "geomesa.indices.enabled": "z2t,z2",
10. "geomesa.z3.interval": "day" }