开发者社区 > 博文 > 【JUSTQL Reference】DDL介绍之表操作
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

【JUSTQL Reference】DDL介绍之表操作

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

1.1 DDL

数据定义语言(Data Definition Language)定义了时空数据表结构,表结构的信息存储在JUST-DB中。

1.1.1 表操作

1.1.1.1 创建表

JUST当中,表的类型分为两种,通用表和插件表:

Ÿ   通用表(Common表)是指JUST中由基本数据类型构成的任意列数和任意行数的关系二维表,其中的字段可以包括空间字段(Geometry)、时间字段(Time)、属性字段等任意字段,我们可将其形态类比为Mysql等关系型数据库中的表

Ÿ   插件表是指JUST中依据时空数据模型构造并组织的表,目前共支持九种基础插件表和三种业务插件表(具体见章节1.1.1)。插件表中都有相同的基础预留字段,oid(对象objectid),geom(对象的地理信息:Point/LineStr/Polygon。对于业务插件表,则还有各自特有的预留字段,例如,轨迹表中有start_timeend_time来设定轨迹的起始时间和终止时间,路网表中会有level来设定路段的等级,等等,具体见章节3.1.1.1.1特定业务应用表

在创建表之前,请务必确认以下三点:

1.     数据类型:数据是否具备时空属性

Ÿ   如果有,是何种时空数据,根据表中数据类型,创建相应的插件表或通用表

Ÿ   如果没有,请创建通用类型表。通用表除了支持时空索引外,还支持id和属性索引。为了加快查询效率,建议为经常使用的属性和id字段建立索引。如果不建立索引,那么在数据量大时,不建议将无时空属性数据的表存入JUST

2.     应用场景:表中数据的应用场景是什么,并根据场景确认唯一主键、构造合适的索引

Ÿ   主键:其主要作用是防止数据的重复插入,如果主键没有用,建议不设置。目前JUST暂不支持主键自增的功能。如果插入重复主键,则当前记录会将历史记录覆盖!

Ÿ   索引:JUST支持通过userdata(用户自定义表参数)来创建指定的索引,以满足用户个性化的需求。但要注意的是,在用户不指定索引字段的情况下,如果表中出现多个空间或者时间字段,JUST将默认使用建表语句中的第一个空间字段和第一个时间字段建立时空索引。索引的详细技术解析见附录4.3索引使用指南。目前JUST支持同时建立多个索引,但不支持建表后重建索引。新增索引和删除索引功能将会在后续版本中逐步开发。

3.     字段类型:

Ÿ   时空字段注意点如下:经纬度,使用Point,而不使用String;时间字段使用Timestamp,而不使用String

Ÿ   非时空字段:按业务需求采用合适的属性即可

1.1.1.1.1 插件表

在创建插件表时,JUST会根据表中包含的对象类型,自动创建对应表的所有默认索引,如创建时空点表时,JUST则会为该表创建Z2Z3Z2Tattr(attr+z3)id共五种索引。

1.1.1.1.1.1    SD插件类型表

语法:

1.   --创建非SD插件类型表:SS时间静态空间静态表和DD时间动态空间动态表(pluginName = sspoint\ssline\ssregion\ddpoint\ddline\ddregion)  

2.   create table <tableName> as <pluginName>   

3.   (  

4.       -- 自定义属性,必填,例:Name String 

5.   )

6.    [userdata {"key":"value","key":"value"}]  

Ÿ   时空静态插件类型(SS):sspoint\ssline\ssregion

¡   默认字段(保留字) oid String, geom Point\Polygon\LineString均不允许为空

¡   自定义字段必填,自定义属性 LineString的长度

¡   默认主键oid

¡   示例:

1.  create sspoint_table as sspoint(meta1 String, meta2 Double)   

Ÿ   时空动态插件类型(DD):ddpoint\ddline\ddregion

¡   默认字段(保留字) oid String, geom Point\Polygon\LineString, time Timestamp,均不允许为空

¡   自定义字段:必填,自定义属性

¡   默认主键: oid+time的联合主键

¡   示例 1

1.   create ddline_table as ddline(length Double) 

¡   示例2

1.  create ddregion_table as ddregion(area Double, regionName String)  

1.1.1.1.1.2    SD插件类型表

语法

1.   --创建SD插件类型表(pluginName = sdpoint\sdline\sdregion)  

2.   create table <tableName> as <pluginName>   

3.   (  

4.   -- 自定义空间属性,必填,例:length Double  

5.   )  

6.   (  

7.   -- 自定义时间属性,必填,例:avgSpeed Double  

8.   )  

9.   [userdata {"key":"value","key":"value"}]  

Ÿ   空间静态时间动态插件类型(SDsdpoint\sdregion\sdline

¡   默认字段(保留字)oid String, geom Point\Polygon\LineString, time Timestamp;

¡   自定义字段

n   自定义空间属性:必填

n   自定义时间属性:必填

¡   主键:oid+time的联合主键

¡   示例:

1.   create sdregion_table as sdregion(meta1 String, meta2 Double)(reading1 Integer, reading2 Float)  

1.1.1.1.2 特定业务应用表

Ÿ   路网插件类型roadnetwork

¡   继承了ssline的特殊插件类型,默认字段(保留字)基于ssline的预留字段及其他必要字段如下

字段

类型

解释

oid

String

对象的id

geom

Linestring

点组成的线

start_id

Integer

路段起始id

end_id

Integer

路段结束id

direction

Integer

路段方向

level

Integer

路段等级

speed_limit

Double

路段限速,km/h

length

Double

路段长,km

¡   用户还可以基于roadnetwork继续扩展自定义字段

¡   语法:

1.  --创建路网表

2.  create table <tableName> as roadnetwork  

3.  (        

4.  自定义属性,选填 

5.  )

¡   示例

1.  create table roadnetworktable as roadnetwork(weight Double)  

Ÿ   轨迹插件类型trajectory

¡   是继承了ddline的特殊插件类型,基于ddlinemeta预留字段及对应的字段类型如下:

字段

类型

解释

oid

String

对象的id

geom

Linestring

点组成的线

time

Timestamp

路段起始id

end_time

Timestamp

路段结束id

tid

String

轨迹id

st_series

Stseries

组成轨迹的所有时间戳序列

start_position

Point

轨迹起始点

end_position

Point

轨迹结束点

point_number

Integer

轨迹中的Point点数量

speed

Double

平均速度,km/h

length

Double

轨迹长度km

¡   用户还可以基于trajectory继续扩展自定义轨迹级别属性字段,比如区分是出租车轨迹还是行人轨迹,并且可以扩展自定义点级别属性字段用来表示每个轨迹点的瞬时速度、方向、是否载客等信息。

¡   注意:在创建表的时候最多两个括号,第一个括号里面是自定义轨迹级别属性字段,第二个括号里面是自定义点级别属性字段;如果只有一个括号则认为是自定义轨迹级别属性字段,如果没有括号则认为没有用户自定义字段

¡   语法

1.  --创建trajectory 轨迹表  

2.  create table <tableName> as trajectory  

3.  (        

4.  自定义的轨迹级别属性,选填,例:Name String  

5.  )

6.  (  

7.  自定义的点级别属性,选填,例:Speed Double           

8.  )  

¡   示例:

1.  create trajectoryTable as trajectory(trajectorytype Integer)(direction Double)

Ÿ   RouteOfTrajectory插件类型(routeoftrajectory

¡   是继承了ddregion的特殊插件类型,用于表示已经进行了按路段mapmatch的轨迹路段信息, 其基于ddregion的预留字段及路网必要字段如下:

字段

类型

解释

oid

String

对象的id

geom

Linestring

点组成的线

time

Timestamp

路段起始id

end_time

Timestamp

路段结束id

tid

String

轨迹id

start_position

Point

轨迹起始点

end_position

Point

轨迹结束点

routes   

Array

匹配后的路段线

¡   用户还可以基于routeoftrajectory继续扩展自定义字段,比如长度、平均速度

¡   语法

1.  --创建routeoftrajectory路网匹配后的轨迹表  

2.  create table <tableName> as routeoftrajectory

3.  (        

4.  -- 自定义属性,必填,例:Name String  

5.  )

¡   示例:

1.  create routeOfTrajectoryTable as routeoftrajectory(length Double, avg_speed Double)

1.1.1.1.3 TS时序表

¡   默认字段保留字):time Timestamp

¡   自定义字段:

§   Tag:维度,代表数据的归属或属性,一般不随着时间变化,为选填字段

§   Field/Value:指标,代表数据的测量值,支持多值,为必填字段

¡   主键:所有的tag+time

语法:

1.   -- 创建时序表 ts  

2.   create table  <tsTableName> as ts  

3.       (            

4.       -- 标签tags,选填,例:city String  

5.       )  

6.       (            

7.       -- values/fields,必填,例:PM25 Double  

8.       )

9.   [userdata {"key":"value","key":"value"}]  

示例:

1.   create table tableName as ts  

2.   (  

3.              Occupancy int  

4.   )  

5.   (  

6.              Temperature double,  

7.              Humidity double  

8.   )  

1.1.1.1.4 通用类型表

语法

1.   --创建通用类型表  

2.   create table <tableName>   

3.   (  

4.    -- 自定义属性,必填,例:Name String  

5.   )  

6.   [userdata {"key":"value","key":"value"}]

示例:

1.   create table <tableName> (  

2.       order_time Date,  

3.       order_position Point,   

4.       attr1 integer,  

5.       attr2 long,  

6.       attr3 long,  

7.       attr4 integer,  

8.       attr5 string,  

9.       attr6 double,  

10.     attr7 integer:index=true,  

11.     attr8 integer,  

12.     attr9 string  

13. ) userdata {   

14.     "geomesa.indices.enabled":"z2,z2t",  --创建z2,z2t索引

15.     "geomesa.z3.interval":"day",  

16.     "geomesa.xz.precision":"16",  

17.     "geomesa.attr.type":"z2t"  

18. }  

1.1.1.1.5 表语句解释与示例

1.       每个字段后都可以定义字段属性,格式为冒号加字段属性名称,常用如:primary key,支持的字段属性如下:

字段名

解释

primary key

定义该字段为主键,不填则不为主键(主键数量至多为一)

not null

定义该字段不允许为空,不填则可以为空(主键无需指定非空属性)

default

定义该字段的默认值,不填则默认为空(主键不能指定默认属性)

dtg

dtg=[true/false],定义该字段为时间字段,不填则默认为false

srid

定义该字段的坐标系,默认为4326(若该字段不为空间字段则会报错)

index=true

定义该字段添加索引,默认不添加(写成"Index=False"会报错,默认不添加索引;主键无需指定索引属性)

compress

compress=[ZIP/GZIP],定义该字段的压缩方式,仅支持String类型的字段,其他类型字段会报错(此外,主键和索引字段不能压缩)

comment

定义该字段的注释,支持中英文

2.       userdata用于配置表的属性,若需要创建时空索引,请务必创建相关字段,关键字说明如下:

关键字Key

Value

geomesa.indices.enabled

声明该表允许使用的索引,没有在此声明的索引,则不会被创建。如果不指定,则根据表中字段,自动创建相关类型的索引,默认使用z2,z3,xz2,xz3,建议使用z2t代替z3xz2t代替xz3,效率更高

geomesa.z3.interval

涉及时间相关索引时,如z3,xz3,z2t,xz2t, attr:timerange,最小的时间分区单位,默认为'week'可,可选项有:'day'/'week'/'month'/'year'

geomesa.xz.precision

xz系列索引精度(xz2,xz3,xz2t),默认为12,最大为18

geomesa.attr.type

属性索引的二级索引:属性索引是由属性+二级索引组成,其中二级索引包括 z2,z3,xz,xz3,xz2t,xz3

1.1.1.2 删除表

1.  drop table <tableName>      

1.1.1.3 显示表

1.   show tables    

1.1.1.4 查询表内字段

1.   desc table <tableName>     

1.1.1.5 查询某表的创表语句

1.   show create table <tableName>    

1.1.1.6 清空表

1.   truncate table <tableName>    

共0条评论