如何合并小文件
使用SQL过程中,生成的小文件过多时,会导致作业执行时间过长,且查询对应表时耗时增大,建议对小文件进行合并。
- 设置配置项。
spark.sql.shuffle.partitions = 分区数量(即此场景下最终生成的文件数量)
- 执行SQL。
INSERT OVERWRITE TABLE tablename
select * FROM tablename distribute by rand()
创建OBS表时正确指定OBS路径
场景概述
创建OBS表时,OBS路径须指定到数据库下的具体表层路径。路径格式为:obs://xxx/数据库名/表名。
正确示例
CREATE TABLE `di_seller_task_activity_30d`(`user_id` STRING COMMENT '用户ID') SORTED as parquet
LOCATION 'obs://akc-bigdata/akdc.db/di_seller_task_activity_30d'
错误示例
CREATE TABLE `di_seller_task_activity_30d`(`user_id` STRING COMMENT '用户ID') SORTED as parquet
LOCATION 'obs://akc-bigdata/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
http_method,
count(http_method)
FROM
apigateway
WHERE
service_id = 'ecs' Group BY http_method
或者
SELECT
http_method
FROM
apigateway
WHERE
service_id = 'ecs' DISTRIBUTE BY http_method
错误用法:将会报错。
SELECT
http_method,
count(http_method)
FROM
apigateway
WHERE
service_id = 'ecs' DISTRIBUTE BY http_method
如何将一个区域中的DLI表数据同步到另一个区域中?
可以使用OBS跨区域复制功能实现,步骤如下:
1.将区域一中的DLI表数据导出到自定义的OBS桶中。
2.通过OBS跨区域复制功能将数据复制至区域二的OBS桶中。
3.根据需要导入或使用对应的数据。
SQL作业如何指定表的部分字段进行表数据的插入
当前DLI不支持指定部分列字段进行表数据插入。
如需执行插入操作,需要所有表字段数据一起插入。