作业开发 本章节主要介绍SQL作业相关问题中有关作业开发的问题。 如何合并小文件 使用SQL过程中,生成的小文件过多时,会导致作业执行时间过长,且查询对应表时耗时增大,建议对小文件进行合并。 1. 设置配置项。 spark.sql.shuffle.partitions 分区数量(即此场景下最终生成的文件数量) 2. 执行SQL。 INSERT OVERWRITE TABLE tablename select FROM tablename distribute by rand() 创建OBS表时正确指定OBS路径 场景概述 创建OBS表时,OBS路径须指定到数据库下的具体表层路径。路径格式为:obs://xxx/数据库名/表名。 正确示例 CREATE TABLE disellertaskactivity30d(userid STRING COMMENT '用户ID') SORTED as parquet LOCATION 'obs://akcbigdata/akdc.db/disellertaskactivity30d' 错误示例 CREATE TABLE disellertaskactivity30d(userid STRING COMMENT '用户ID') SORTED as parquet LOCATION 'obs://akcbigdata/akdc.db' 说明 如果指定路径为akdc.db时,进行insert overwrite操作时,会将akdc.db下的数据都清空,造成重大事故。 关联OBS桶中嵌套的JSON格式数据如何创建表 DLI支持关联OBS桶中嵌套的JSON格式数据,使用异步模式建表即可。 建表语句如下: create table tb1 using json options(path 'obs://....') 在SQL语句中如何设置局部变量 可以在select语句中通过where条件语句进行过滤,例如: select from table where part '202012' count函数如何进行聚合 使用count函数进行聚合的正确用法如下: SELECT httpmethod, count(httpmethod) FROM apigateway WHERE serviceid 'ecs' Group BY httpmethod 或者 SELECT httpmethod FROM apigateway WHERE serviceid 'ecs' DISTRIBUTE BY httpmethod 错误用法:将会报错。 SELECT httpmethod, count(httpmethod) FROM apigateway WHERE serviceid 'ecs' DISTRIBUTE BY httpmethod