开发者社区 > 博文 > 【JUSTQL Reference】常见问题及解决方案
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

【JUSTQL Reference】常见问题及解决方案

  • 京东城市JUST团队
  • 2021-01-26
  • IP归属:未知
  • 747浏览

1.1.1 重复主键的记录将被覆盖、经纬度用Point

业务场景:

Ÿ   更新频率:11次(实时)

Ÿ   使用方法:通过car_id查询车辆的实时位置或一定时间内的轨迹信息;

问题语句:

1.   CREATE TABLE dc_nav_info (  

2.     car_id string :PRIMARY KEY :COMMENT = '车辆编号',  

3.     car_name string: COMMENT = '车辆名称',  

4.     rcv_time timestamp :COMMENT = '数据接收时间',  

5.     speed double :COMMENT = '车辆速度',  

6.     yaw_rad double :COMMENT = '车辆角度',  

7.     longitude_degree double :COMMENT = '原始坐标经度',  

8.     latitude_degree double :COMMENT = '原始坐标纬度',  

9.     pitch_rad double: COMMENT = '俯仰角度(°',  

10.   altitude double: COMMENT = '海拔(m',  

11.   gps_status int: COMMENT = 'GPS状态:0正常 1异常',  

12.   nav_status int: COMMENT = '惯导状态:0正常 1异常',  

13.   roll_rad double: COMMENT = '侧翻(°',  

14.   from_station string: COMMENT = '始发站',  

15.   to_station string :COMMENT = '终点站'  

16. )  

评论:

JUST中,主键(primary key)能够区分不同的记录。JUST的同一张表中,不能存在主键值相同的记录。目前的表现是,若两条记录主键值相同,后一条记录会覆盖前一条记录。我们可以利用这一点防止数据的重复导入。

在这个场景中,同一辆车可能有多个不同的经纬度,因此不能将车辆编号设为主键。由于你会对车辆id进行查询,因此需要对car_id构建属性索引。

JUST中,如果有空间字段,那么需要使用空间字段类型:pointpolygonlinestring等。你这里把经纬度分开,不是一个很好的方案。空间字段:经纬度使用Point,而不是stringdouble另外,由于会查询一段时间内的轨迹,建议构建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 默认时间索引为建表语句中的第一个时间字段

业务场景

Ÿ   更新频率:11次(实时)

Ÿ   使用方式:不确定

问题语句

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.   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.     pt Point:COMMENT='位置',  

8.     travel_time timestamp: COMMENT = '游览时间'  

9.   ) userdata { "geomesa.indices.enabled""z2t,z2",  

10. "geomesa.z3.interval""day" }  

共0条评论