开发者社区 > 博文 > 【JUSTQL Reference 】DML介绍之数据导入
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

【JUSTQL Reference 】DML介绍之数据导入

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

数据操纵语句(Data Manipulation Language)将数据加载到相应表中,同时会根据用户在创表时指定的索引类型,为数据自动创建索引。

1.1.1 数据导入   

1.1.1.1 从数据库中导入数据

1.1.1.1.1 Hive

语法:

1.   load hive:<hiveDatabaseName>.<hiveTableName> to JUST:<justTableName>   

2.   config {  

3.       JUSTField1: "hiveField1",  

4.       JUSTField2: "hiveField2",  

5.       JUSTField3: "mapFunctionName(hiveField3…)",  

6.       ……  

7.   }

8.   [filter <filterStr>]  

示例:

1.   LOAD hive:JUST_tutorial.order_table to JUST:<tableName> Config {   

2.       order_time:"to_timestampInMS(time)",  

3.       order_position:"st_makePoint(lng,lat)",   

4.       attr1:"attr1",  

5.       attr2:"attr2",  

6.       attr3:"attr3",  

7.       attr4:"attr4",  

8.       attr5:"attr5",  

9.       attr6:"attr6"  

10. }  

1.1.1.1.2 MySQL

语法:

1.  load  mysql: <mysqlDatabaseName>.<mysqlTableName> to JUST:<tablename> Config {

2.  ...

3.  }    

4.  [userdata {  

5.          "just.io.input.mysql.url":"xx",  

6.          "just.io.input.mysql.user":"xxx",  

7.          "just.io.input.mysql.password":"xxx"

8.  } ]

1.1.1.2  从文件中导入数据

目前,JUST支持两种文件字段映射方式:

1.       列名映射:如导入文件中首行为字段名,则需要load语句最后面加 with header关键字,Config中的字段映射要用文件首行的列名表示;

2.       Index映射:如导入文件中无字段名,则不需要load语句最后加 with header关键字,Config中的字段映射要用列序号来表示。

1.1.1.2.1 HDFS

1.   load hdfs:<dataPath> to JUST:<tableName>    

2.   config {  

3.              JUSTField1: "StringArg1",  

4.              JUSTField2: "StringArg2",  

5.              JUSTField3: "mapFunctionName(StringArg3…)",  

6.              ……  

7.   }  

8.   [SEPARATOR <separatorStr>] 

9.   [with header] 

10. [PARTITION  <partitionNum>]  

1.1.1.3 特殊数据导入示例

1.1.1.3.1 轨迹数据导入

目前,JUST已支持在导入轨迹数据的同时,对轨迹数据进行预处理,如轨迹分段、轨迹去噪等。

语法:3.2.1.3.2.2.的基础上,新增userdatajson参数

参数:{预处理名:对应预处理参数},具体见3.4.2.轨迹操作

示例:hdfs文件中导入轨迹,文件中无字段名,字段以逗号分隔符分割

1.  LOAD hdfs:"/just_test_load/test_load" to JUST:test_table  

2.      Config {  

3.          oid: "0",  

4.          tid: "1",  

5.          time: "to_timestamp(3)",

6.          geom: "st_makePoint(4,5)" 

7.      }userdata{

8.          "just.traj.noise_filter":"{

9.                           '@type': 'HEURISTIC_FILTER',

10.                          'maxSpeedMeterPerSecond':60.0,

11.                          'minTrajLengthInKM': 1}",

12.         "just.traj.segmentation":"{

13.                          'segmenterType':'TIME_INTERVAL_SEGMENTER',

14.                          'maxTimeIntervalInMinute': 10,

15.                          'minTrajLengthInKM': 2}

16. } separator ','

1.1.2 Kafka中消费数据

JUST的实时数据接入,目前支持kafka数据源, 存储支持JUSTKafkaJDBC等,共涉及DDLDMLDQL三个部分。INSERT INTO之前,必须先创建对应介质中的表,一个完整的SQL包含三部分:source ddlsink ddlinsert int

注:实时数据接入的完整示例,见附件4.3

语法:

1.   insert into <tableName>  

2.   select  

3.     [ (columnName[ , columnName]*) ]   

4.   from  

5.     <tableName> | subQuery  

6.   where booleanExpression ]  

7.   group by { groupItem [, groupItem ]* } ]  

8.   having booleanExpression ]  

9.   [ WINDOW windowName as windowSpec [, windowName as windowSpec ]* ]  

示例:下面是以从kafka中接入数据为例的代码。

1.   -- just_sourcejust_sink均为在前步骤已建好的表  

2.   INSERT INTO just_sink  

3.   SELECT  

4.   taxiId,  

5.   -- 13位的时间时间戳转成TIMESTAMPFROM_UNIXTIME接收10位的时间戳  

6.   TO_TIMESTAMP(FROM_UNIXTIME(btime/1000)) as ts2,  

7.   timestamp2MS(ts) as btime_ms,  

8.   UNIX_TIMESTAMP(DATE_FORMAT(ts,'yyyy-MM-dd HH:mm:ss')) as btime_s,  

9.   -- 创建point,以WKT的格式输出  

10. st_asText(st_makePoint(lng,lat)) as point2,  

11. -- 创建linestring,以WKT的格式输出  

12. st_asText(st_makeLine(linestring_point_data)) as linestring2,  

13. -- 创建polygon,以WKT的格式输出  

14. st_asText(st_makePolygon(st_makeLine(polygon_point_data))) as polygon2,  

15. -- 创建mbr2,以WKT的格式输出  

16. st_asText(st_makeBBOX(lng,lat, lng2, lat2)) as mbr2  

17. FROM kafka_source;  

共0条评论