作業開發
更新時間 2023-11-30 00:51:43
最近更新時間: 2023-11-30 00:51:43
分享文章
本章節主要介紹SQL作業相關問題中有關作業開發的問題。
如何合并小文件
使用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不支持指定部分列字段進行表數據插入。
如需執行插入操作,需要所有表字段數據一起插入。