Databricks中Redshift查询性能慢于客户端问题及优化说明
小数据集Redshift-Databricks查询提速方案及问题上报依据
问题背景
相同SQL查询在Redshift客户端DBeaver中仅需约5分钟即可返回800行结果,但通过Databricks的Spark Redshift连接器执行时耗时长达14分钟,流程卡在Waiting for Redshift to unload intermediate data under s3环节,推测瓶颈在于Redshift将查询结果写入S3临时桶的过程。
提速方案及上报依据
1. 优化SQL查询逻辑,消除全表扫描风险
原查询中对hit_time_gmt_ts字段反复调用TO_TIMESTAMP进行过滤,这会导致Redshift无法利用该字段上的索引(若存在),被迫执行全表扫描后再做转换过滤,即使最终结果集很小,底层扫描的数据量也可能极大。
- 优化后的SQL:
select to_char(TO_TIMESTAMP(hit_time_gmt_ts, 'DD-Mon-YYYY HH24:MI:SS'),'YYYYMMDD') as hit_time_gmt_dt_key, post_visid_combined, visit_return_count, event_list from cnds.omni_hit_data_cn_v where hit_time_gmt_ts >= TO_CHAR('2024-07-01'::timestamp, 'DD-Mon-YYYY HH24:MI:SS') and hit_time_gmt_ts < TO_CHAR('2025-01-01'::timestamp, 'DD-Mon-YYYY HH24:MI:SS') and post_campaign ~ '(^EM.*_T_.*)((NEWCA)|(NCA)).*' - 依据:将日期条件转换为
hit_time_gmt_ts原生格式过滤,让Redshift可以使用字段索引(若存在),大幅减少扫描数据量,加快查询执行和S3卸载速度。
2. 调整Spark Redshift连接器参数,优化S3卸载流程
- 开启自动压缩:在Spark读取配置中添加
.option("unload_s3_auto_compression", "true"),压缩后可显著降低S3文件大小,减少数据传输与写入耗时。 - 控制卸载文件规格:添加
.option("extracopyoptions", "DELIMITER '|' GZIP")(配合压缩),或通过maxfilesize参数指定单文件大小,避免生成过多小文件或超大文件,提升S3读写效率。 - 依据:Redshift卸载数据到S3时,压缩能大幅降低IO量;合理的文件大小可减少S3请求次数,提升整体传输效率。
3. 检查S3临时桶的网络与权限配置
- 确认S3临时桶(
RS_tempDir)与Redshift集群处于同一AWS区域(当前Redshift在us-east-1,需确保S3桶也在该区域),跨区域传输会带来显著延迟。 - 验证Redshift集群的IAM角色是否拥有S3临时桶的完整读写权限,权限不足可能导致隐性重试等待。
- 依据:AWS跨区域数据传输存在带宽限制与延迟,同区域访问S3速度可提升数倍;权限问题会导致Redshift写入S3时反复重试,拉长等待时间。
4. 小数据集场景改用JDBC直连方式
针对仅800行的小数据集,可绕过Redshift Unload到S3的流程,直接通过JDBC读取结果:
df = (spark.read .format("jdbc") .option("url", RS_jdbcUrl) .option("dbtable", f"({query}) as temp_table") .option("user", RS_username) .option("password", RS_password) .load() )
- 依据:Unload到S3的流程专为大数据集批量传输设计,小数据集下JDBC直连可省去S3写入与读取的中间环节,直接缩短整体耗时。
问题上报核心依据
- 执行链路差异:DBeaver直接从Redshift拉取结果,而Databricks采用Unload到S3再读取的链路,新增的S3写入环节成为性能瓶颈,该环节效率由Redshift卸载能力、S3配置共同决定。
- 原SQL性能缺陷:函数包装过滤字段导致全表扫描,是Redshift执行缓慢进而拖累Databricks流程的根源,即使结果集小,底层扫描的数据量也远超预期。
- 连接器配置优化空间:当前使用的Spark Redshift连接器未开启压缩等关键优化参数,导致S3传输效率低下。
内容的提问来源于stack exchange,提问作者thotwielder
相关产品推荐
相关产品推荐

