- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- DLI作业开发流程
- 准备工作
- 创建弹性资源池和队列
- 创建数据库和表
- 数据迁移与数据传输
- 配置DLI访问其他云服务的委托权限
- 使用DLI提交SQL作业
- 使用DLI提交Flink作业
- 使用DLI提交Spark作业
- 使用Notebook实例提交DLI作业
- 使用CES监控DLI服务
- 使用AOM监控DLI服务
- 使用CTS审计DLI服务
- 权限管理
- DLI常用管理操作
- 最佳实践
-
开发指南
- 使用客户端工具连接DLI
- SQL作业开发指南
- Flink作业开发指南
- Spark Jar作业开发指南
-
语法参考
-
Spark SQL语法参考
- Spark SQL常用配置项说明
- Spark SQL语法概览
- Spark开源命令支持说明
- 数据库相关
- 表相关
- 数据相关
- 导出查询结果
- 跨源连接相关
- 视图相关
- 查看计划
- 数据权限相关
- 数据类型
- 自定义函数
-
内置函数
-
日期函数
- 日期函数概览
- add_months
- current_date
- current_timestamp
- date_add
- dateadd
- date_sub
- date_format
- datediff
- datediff1
- datepart
- datetrunc
- day/dayofmonth
- from_unixtime
- from_utc_timestamp
- getdate
- hour
- isdate
- last_day
- lastday
- minute
- month
- months_between
- next_day
- quarter
- second
- to_char
- to_date
- to_date1
- to_utc_timestamp
- trunc
- unix_timestamp
- weekday
- weekofyear
- year
-
字符串函数
- 字符串函数概览
- ascii
- concat
- concat_ws
- char_matchcount
- encode
- find_in_set
- get_json_object
- instr
- instr1
- initcap
- keyvalue
- length
- lengthb
- levenshtein
- locate
- lower/lcase
- lpad
- ltrim
- parse_url
- printf
- regexp_count
- regexp_extract
- replace
- regexp_replace
- regexp_replace1
- regexp_instr
- regexp_substr
- repeat
- reverse
- rpad
- rtrim
- soundex
- space
- substr/substring
- substring_index
- split_part
- translate
- trim
- upper/ucase
- 数学函数
- 聚合函数
- 分析窗口函数
- 其他函数
-
日期函数
- SELECT
-
标示符
- aggregate_func
- alias
- attr_expr
- attr_expr_list
- attrs_value_set_expr
- boolean_expression
- class_name
- col
- col_comment
- col_name
- col_name_list
- condition
- condition_list
- cte_name
- data_type
- db_comment
- db_name
- else_result_expression
- file_format
- file_path
- function_name
- groupby_expression
- having_condition
- hdfs_path
- input_expression
- input_format_classname
- jar_path
- join_condition
- non_equi_join_condition
- number
- num_buckets
- output_format_classname
- partition_col_name
- partition_col_value
- partition_specs
- property_name
- property_value
- regex_expression
- result_expression
- row_format
- select_statement
- separator
- serde_name
- sql_containing_cte_name
- sub_query
- table_comment
- table_name
- table_properties
- table_reference
- view_name
- view_properties
- when_expression
- where_condition
- window_function
- 运算符
-
Flink SQL语法参考
- Flink Opensource SQL1.15语法参考
- Flink Opensource SQL1.12语法参考
- Flink Opensource SQL1.10语法参考
-
HetuEngine SQL语法参考
-
HetuEngine SQL语法
- 使用前必读
- 数据类型
-
DDL 语法
- CREATE SCHEMA
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLE LIKE
- CREATE VIEW
- ALTER TABLE
- ALTER VIEW
- ALTER SCHEMA
- DROP SCHEMA
- DROP TABLE
- DROP VIEW
- TRUNCATE TABLE
- COMMENT
- VALUES
- SHOW语法使用概要
- SHOW SCHEMAS(DATABASES)
- SHOW TABLES
- SHOW TBLPROPERTIES TABLE|VIEW
- SHOW TABLE/PARTITION EXTENDED
- SHOW FUNCTIONS
- SHOW PARTITIONS
- SHOW COLUMNS
- SHOW CREATE TABLE
- SHOW VIEWS
- SHOW CREATE VIEW
- DML 语法
- DQL 语法
- 辅助命令语法
- 预留关键字
- SQL函数和操作符
- 数据类型隐式转换
- 附录
-
HetuEngine SQL语法
- Hudi SQL语法参考
- Delta SQL语法参考
-
Spark SQL语法参考
-
API参考
- API使用前必读
- API概览
- 如何调用API
- API快速入门
- 权限相关API
- 全局变量相关API
- 资源标签相关API
- 增强型跨源连接相关API
- 跨源认证相关API
- 弹性资源池相关API
- 队列相关API(推荐)
- SQL作业相关API
- SQL模板相关API
- Flink作业相关API
- Flink作业模板相关API
- Flink作业管理相关API
- Spark作业相关API
- Spark作业模板相关API
- 权限策略和授权项
- 历史API
- 公共参数
- SDK参考
- 场景代码示例
-
常见问题
- DLI产品咨询类
- DLI弹性资源池和队列类
-
DLI数据库和表类
- 为什么在DLI控制台中查询不到表?
- OBS表压缩率较高怎么办?
- 字符码不一致导致数据乱码怎么办?
- 删除表后再重新创建同名的表,需要对操作该表的用户和项目重新赋权吗?
- DLI分区内表导入的文件不包含分区列的数据,导致数据导入完成后查询表数据失败怎么办?
- 创建OBS外表,由于OBS文件中的某字段存在换行符导致表字段数据错误怎么办?
- join表时没有添加on条件,造成笛卡尔积查询,导致队列资源爆满,作业运行失败怎么办?
- 手动在OBS表的分区目录下添加了数据,但是无法查询到数据怎么办?
- 为什么insert overwrite覆盖分区表数据的时候,覆盖了全量数据?
- 跨源连接RDS表中create_date字段类型是datetime,为什么DLI中查出来的是时间戳呢?
- SQL作业执行完成后,修改表名导致datasize不正确怎么办?
- 从DLI导入数据到OBS,数据量不一致怎么办?
-
增强型跨源连接类
- 增强型跨源连接绑定队列失败怎么办?
- DLI增强型跨源连接DWS失败怎么办?
- 创建跨源成功但测试网络连通性失败怎么办?
- 怎样配置DLI队列与数据源的网络连通?
- 为什么DLI增强型跨源连接要创建对等连接?
- DLI创建跨源连接,绑定队列一直在创建中怎么办?
- 新建跨源连接,显示已激活,但使用时提示communication link failure错误怎么办?
- 跨源访问MRS HBase,连接超时,日志未打印错误怎么办?
- DLI跨源连接报错找不到子网怎么办?
- 跨源RDS表,执行insert overwrite提示Incorrect string value错误怎么办?
- 创建RDS跨源表提示空指针错误怎么办?
- 对跨源DWS表执行insert overwrite操作,报错:org.postgresql.util.PSQLException: ERROR: tuple concurrently updated
- 通过跨源表向CloudTable Hbase表导入数据,executor报错:RegionTooBusyException
- 通过DLI跨源写DWS表,非空字段出现空值异常怎么办?
- 更新跨源目的端源表后,未同时更新对应跨源表,导致insert作业失败怎么办?
- RDS表有自增主键时怎样在DLI插入数据?
-
SQL作业类
- SQL作业开发类
-
SQL作业运维类
- 用户导表到OBS报“path obs://xxx already exists”错误
- 对两个表进行join操作时,提示:SQL_ANALYSIS_ERROR: Reference 't.id' is ambiguous, could be: t.id, t.id.;
- 执行查询语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
- 执行查询语句报错:There should be at least one partition pruning predicate on partitioned table XX.YYY
- LOAD数据到OBS外表报错:IllegalArgumentException: Buffer size too small. size
- SQL作业运行报错:DLI.0002 FileNotFoundException
- 用户通过CTAS创建hive表报schema解析异常错误
- 在DataArts Studio上运行DLI SQL脚本,执行结果报org.apache.hadoop.fs.obs.OBSIOException错误
- 使用CDM迁移数据到DLI,迁移作业日志上报UQUERY_CONNECTOR_0001:Invoke DLI service api failed错误
- SQL作业访问报错:File not Found
- SQL作业访问报错:DLI.0003: AccessControlException XXX
- SQL作业访问外表报错:DLI.0001: org.apache.hadoop.security.AccessControlException: verifyBucketExists on {{桶名}}: status [403]
- 执行SQL语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
-
Flink作业类
- Flink作业咨询类
-
Flink SQL作业类
- 怎样将OBS表映射为DLI的分区表?
- Flink SQL作业Kafka分区数增加或减少,怎样不停止Flink作业实现动态感知?
- 在Flink SQL作业中创建表使用EL表达式,作业运行提示DLI.0005错误怎么办?
- Flink作业输出流写入数据到OBS,通过该OBS文件路径创建的DLI表查询无数据
- Flink SQL作业运行失败,日志中有connect to DIS failed java.lang.IllegalArgumentException: Access key cannot be null错误
- Flink SQL作业消费Kafka后sink到es集群,作业执行成功,但未写入数据
- Flink Opensource SQL如何解析复杂嵌套 JSON?
- Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为什么会不一致?
- Flink Opensource SQL Elasticsearch结果表failure-handler参数填写retry_rejected导致提交失败
- Kafka Sink配置发送失败重试机制
- 如何在一个Flink作业中将数据写入到不同的Elasticsearch集群中?
- 作业语义检验时提示DIS通道不存在怎么处理?
- Flink jobmanager日志一直报Timeout expired while fetching topic metadata怎么办?
- Flink Jar作业类
- Flink作业性能调优类
-
Spark作业相类
- Spark作业开发类
-
Spark作业运维类
- 运行Spark作业报java.lang.AbstractMethodError
- Spark作业访问OBS数据时报ResponseCode: 403和ResponseStatus: Forbidden错误
- 有访问OBS对应的桶的权限,但是Spark作业访问时报错 verifyBucketExists on XXXX: status [403]
- Spark作业运行大批量数据时上报作业运行超时异常错误
- 使用Spark作业访问sftp中的文件,作业运行失败,日志显示访问目录异常
- 执行作业的用户数据库和表权限不足导致作业运行失败
- 为什么Spark3.x的作业日志中打印找不到global_temp数据库
- 在使用Spark2.3.x访问元数据时,DataSource语法创建avro类型的OBS表创建失败
- DLI资源配额类
- DLI权限管理类
- DLI API类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
使用DLI分析车联网场景驾驶行为数据
应用场景
在车联网领域,云计算与大数据为企业提供了强大的分析挖掘能力,可以帮助企业和车队管理者更加科学、便捷地进行车辆数据管理与分析。
流程指导
使用DLI进行驾驶行为数据分析的操作过程主要包括以下步骤:
步骤1:上传数据。将数据上传到对象存储服务OBS,为后面使用DLI完成数据分析做准备。
步骤2:分析数据。使用DLI对待分析的数据进行查询。
示例代码
具体样例数据及详细SQL语句可以通过数据包进行下载。
方案优势
- 数据免搬迁:DLI支持与多种数据源的对接,直接通过SQL建表就可以完成数据源的映射。
- 简单易用:直接使用标准SQL编写指标分析逻辑,无需关注背后复杂的分布式计算平台。
- 按需计费:日志分析按时效性要求按周期进行调度,每次调度之间存在大量空闲期。DLI按需计费只在使用期间收费,有效节约队列成本。
资源和成本规划
资源 |
资源说明 |
成本说明 |
---|---|---|
OBS |
需要创建一个OBS桶将数据上传到对象存储服务OBS,为后面使用DLI完成数据分析做准备。 |
OBS的使用涉及以下几项费用: 实际产生的费用与存储的文件大小、用户访问所产生的请求次数和流量大小有关,请根据自己的业务进行预估。 |
DLI |
在创建SQL作业前需购买队列,使用DLI的队列资源时,按照队列CU时进行计费。 |
如购买按需计费的队列,在使用队列资源时,按照队列CU时进行计费。 以小时为单位进行结算。不足一小时按一小时计费,小时数按整点计算。队列CU时按需计费的计算费用=单价*CU数*小时数。 |
数据说明
- 详单数据
车辆上报的详单数据,包括定时上报的位置记录和异常的驾驶行为触发的告警事件数据。
表2 详单数据 字段名称
字段类型
字段说明
driverID
string
驾驶员ID
carNumber
string
车牌号
latitude
double
纬度
longitude
double
经度
speed
int
速度
direction
int
方向
siteName
string
地点
time
timestamp
记录上报时间
isRapidlySpeedup
int
急加速标识,“1”表示急加速,“0”表示非急加速
isRapidlySlowdown
int
急减速
isNeutralSlide
int
空挡滑行
isNeutralSlideFinished
int
空挡滑行结束
neutralSlideTime
bigint
空挡滑行时长
isOverspeed
int
超速
isOverspeedFinished
int
超速结束
overspeedTime
bigint
超速时长
isFatigueDriving
int
疲劳驾驶
isHthrottleStop
int
停车轰油门
isOilLeak
int
用油异常
- 订单数据
表3 订单数据 字段名称
字段类型
字段说明
orderNumber
string
订单号
driverID
string
驾驶员ID
carNumber
string
车牌号
customerID
string
客户ID
sourceCity
string
出发城市
targetCity
string
到达城市
expectArriveTime
timestamp
期望送达时间
time
timestamp
记录产生时间
action
string
事件类型,包括创建订单、开始发货、货物送达、订单签收等事件
步骤1:上传数据
- 下载OBS Browser+。下载地址请参考《对象存储服务工具指南》。
- 安装OBS Browser+。安装步骤请参考《对象存储服务工具指南》。
- 登录OBS Browser+。OBS Browser+支持AK方式登录,以及授权码登录两种登录方式。登录步骤请参考《对象存储服务工具指南》。
- 通过OBS Browser+上传数据。
在OBS Browser+页面单击“创建桶”,按照要求选择“区域”和填写“桶名”(例如:dli-demo),其他参数保持默认或根据需要选择,创建桶成功后,返回桶列表,单击桶dli-demo。OBS Browser+提供强大的拖拽上传功能,您可以将本地的一个或多个文件或者文件夹拖拽到对象存储的对象列表或者并行文件系统的对象列表中;同时您也可以将文件或文件夹拖拽到指定的目录上,这样可以上传到指定的目录中。
单击Best_Practice_01.zip获取本示例的测试数据,将“Best_Practice_01.zip”压缩包解压。后续操作说明如下:
- 详单数据:将解压后Data目录下的“detail-records”文件夹上传到OBS桶根目录下。
- 订单数据:将解压后Data目录下的“order-records”文件夹上传到OBS桶根目录下。
步骤2:分析数据
使用DLI对分析的数据进行查询。
- 创建数据库、表。
- 在Console页面上方菜单栏中单击“产品”,单击“大数据”分类中的“数据湖探索 DLI”。
- 在DLI控制台总览页面左侧,单击“SQL编辑器”,进入SQL作业编辑器页面。
- 在SQL作业编辑器左侧,选择“数据库”页签,单击
创建demo数据库,请参见图2。
说明:
“default”为内置数据库,不能使用该数据库名。
- 选择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://dli-demo/detail-records/');
说明:
使用该案例时,需将上述SQL语句中的文件路径修改为实际存放详单数据的OBS路径。
- 单击“执行”,创建详单表detail_records,请参见图3。
- 执行以下SQL语句,在demo数据库下创建告警事件表event_records,步骤同1.d和1.e。
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)
- 使用另一种方式创建订单表order_records。
- 将OBS数据导入到order_records表,单击“数据管理 > 库表管理”,单击demo数据库,进入“表管理”页面,单击order_records表对应“操作”列中的“更多”>“导入”,数据格式选择“CSV”,数据源路径为“obs://dli-demo/order-records/”,参数配置完成后单击“确定”。请参见图5。
说明:
导入数据时,默认时间戳格式为“yyyy-MM-dd HH:mm:ss”,如果采用其他日期格式,可打开“高级选项”手动输入(本示例该选项不做修改)。
- 执行查询
- 执行以下SQL语句,对所有司机在某段时间的异常告警事件进行统计。
说明:
常用查询语句可以在SQL编辑器中,选择“更多 > 设为模板”设置为模板。设为模板后,后续可以在模板管理页面找到对应模板进行SQL查询和修改。
具体操作为:选择“作业模板 > SQL模板 > 自定义模板”,在对应模板的操作列,单击“执行”会跳转到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”
展示结果如下:
图6 急加速 - 执行以下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”
展示结果如下:
图7 超速记录 - 执行以下SQL语句,查询订单信息。
select * from order_records where orderNumber = "2017013013584419488" order by time desc
图8 订单信息 - 执行以下SQL语句,根据司机和发车时间信息查询司机的详细行驶特点。
select driverID, carNumber, latitude, longitude, siteName, time from detail_records where driverID = "panxian1000005" and time > "2017-01-30 16:00:00" and siteName IS NOT NULL order by time desc
在查询结果中,单击
“结果图形化”:
- “图形类型”选择“柱状图”
- “X轴”选择“time”
- “Y轴”选择“latitude”
- “结果数目”选择“10”
展示结果如下:
图9 行驶信息
- 执行以下SQL语句,对所有司机在某段时间的异常告警事件进行统计。