华为云-使用DLI进行车联网场景驾驶行为数据分析

步骤一:下载数据文件收起

1)创建OBS桶

需要创建一个OBS桶将数据上传到对象存储服务OBS,为后面使用DLI完成数据分析做准备。

打开桌面浏览器,进入OBS控制台,点击创建桶:

桶名称:自定义

数据冗余存储策略:单AZ存储

桶策略:公共读

其余配置默认即可,点击立即创建。

2)配置obsutil

打开桌面浏览器,进入ECS控制台,复制ECS的弹性公网IP:

打开桌面的Xfce终端,输入命令连接远程服务器

ssh root@EIP

服务器密码展示如下:

输入下面代码,下载样例数据及详细SQL语句并解压:

wget https://dli-best-practice-demo.obs.cn-north-4.myhuaweicloud.com/Best_Practice_01/Best_Practice_01.zip

unzip Best_Practice_01.zip

详单数据:存储于detail-records文件夹

订单数据:存储于order-records文件夹

执行wget命令下载obsutil工具。

wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz

在软件包所在目录,执行以下解压命令。

tar -xzvf obsutil_linux_amd64.tar.gz

进入obsutil所在目录,执行以下命令,为obsutil增加可执行权限。

cd obsutil_linux_amd64_5.4.11/
chmod 755 obsutil

说明:您必须为obsutil增加可执行权限,否则会在查询obsutil版本号时出现No such file or directory报错。

继续在目录中执行以下命令,如果能顺利返回obsutil版本号,说明安装成功。

./obsutil version

打开华为云控制台-我的凭证-访问秘钥-新增访问秘钥

确认新增后,点击立即下载

新打开一个终端,输入以下命令查看AK/SK:

vim /home/user/Downloads/credentials.csv

回到第一个连接有服务器的终端页面,初始化obsutil配置:

进入obsutil所在目录,用上步骤获取到的AK/SK替换下面命令中的ak/sk

./obsutil config -i=ak -k=sk -e=obs.cn-north-4.myhuaweicloud.com

3)上传数据文件

初始化成功后,运行以下命令将解压后Data目录下的“detail-records”和“order-records”文件夹上传到OBS桶根目录下。

./obsutil cp /root/Data/detail-records obs://桶名 -r -f

./obsutil cp /root/Data/order-records obs://桶名 -r -f

注意:请用你创建的真实OBS桶名替换命令中的桶名。

步骤二:分析数据收起

使用DLI对分析的数据进行查询。

1)创建数据库、表。

在Console页面上方菜单栏中单击“产品”,单击“大数据”分类中的“数据湖探索 DLI”。

在DLI控制台总览页面左侧,单击“SQL编辑器”,进入SQL作业编辑器页面。

在SQL作业编辑器左侧,选择“数据库”页签,单击创建demo数据库

选择demo数据库,在编辑框中输入以下SQL语句:

create table detail_records(
  driverID String,
  carNumber String, 
  latitude double,
  longitude double,
  speed int,
  direction int,
  siteName String,
  time timestamp,
  isRapidlySpeedup int,
  isRapidlySlowdown int,
  isNeutralSlide int,
  isNeutralSlideFinished int,
  neutralSlideTime long,
  isOverspeed int,
  isOverspeedFinished int,
  overspeedTime long,
  isFatigueDriving int,
  isHthrottleStop int,
  isOilLeak int) USING CSV OPTIONS (PATH 'obs://桶名/detail-records/');

注意:请用你创建的真实OBS桶名替换命令中的桶名。

单击“执行”,创建详单表detail_records

执行以下SQL语句,在demo数据库下创建告警事件表event_records

create table event_records(
  driverID String,
  carNumber String, 
  latitude double,
  longitude double,
  speed int,
  direction int,
  siteName String,
  time timestamp,
  isRapidlySpeedup int,
  isRapidlySlowdown int,
  isNeutralSlide int,
  isNeutralSlideFinished int,
  neutralSlideTime long,
  isOverspeed int,
  isOverspeedFinished int,
  overspeedTime long,
  isFatigueDriving int,
  isHthrottleStop int,
  isOilLeak int)

执行以下SQL语句,将告警事件数据从详单中抽取出来插入到event_records表中。

insert into table event_records
(select *
from detail_records
where isRapidlySpeedup > 0
OR isRapidlySlowdown > 0
OR isNeutralSlide > 0
OR isNeutralSlideFinished > 0
OR isOverspeed > 0
OR isOverspeedFinished > 0
OR isFatigueDriving > 0
OR isHthrottleStop > 0
OR isOilLeak > 0)

2)执行查询

执行以下SQL语句,对所有司机在某段时间的异常告警事件进行统计。

select
  driverID,
  carNumber,
  sum(isRapidlySpeedup) as rapidlySpeedupTimes,
  sum(isRapidlySlowdown) as rapidlySlowdownTimes,
  sum(isNeutralSlide) as neutralSlideTimes,
  sum(neutralSlideTime) as neutralSlideTimeTotal,
  sum(isOverspeed) as overspeedTimes,
  sum(overspeedTime) as overspeedTimeTotal,
  sum(isFatigueDriving) as fatigueDrivingTimes,
  sum(isHthrottleStop) as hthrottleStopTimes,
  sum(isOilLeak) as oilLeakTimes
from
  event_records
where
  time >= "2017-01-01 00:00:00"
  and time <= "2017-02-01 00:00:00"
group by
  driverID,
  carNumber
order by
  rapidlySpeedupTimes desc,
  rapidlySlowdownTimes desc,
  neutralSlideTimes desc,
  neutralSlideTimeTotal desc,
  overspeedTimes desc,
  overspeedTimeTotal desc,
  fatigueDrivingTimes desc,
  hthrottleStopTimes desc,
  oilLeakTimes desc

在查询结果中,单击“结果图形化”:

“图形类型”选择“柱状图”

“X轴”选择“driverID”

“Y轴”选择“rapidlySpeedupTimes”

“结果数目”选择“10”

展示结果如下:

执行以下SQL语句,查询某个司机在某个时间段的详细记录。

select
  *
from
  event_records
where
  driverID = "panxian1000005"
  and time >= "2017-01-01 00:00:00"
  and time <= "2017-02-01 00:00:00"

在查询结果中,单击“结果图形化”:

“图形类型”选择“柱状图”

“X轴”选择“driverID”

“Y轴”选择“speed”

“结果数目”选择“10”

展示结果如下: