开发者社区 > 数据库 > 数据仓库 > 正文

云原生数据仓库AnalyticDB 排序不准确怎么解决?

云原生数据仓库AnalyticDB PostgreSQL版子查询sql使用ORCA优化器无法排序;Legacy排序不准确怎么解决?-- 使用ORCA优化器
--set optimizer = on;
-- 使用Legacy优化器
--set optimizer = off;
-- / 观察kr_date字段排序不正确 /

SELECT pt.*
FROM (
SELECT kr_date, brand, customer_id, customer_name
, vin7, advisor_name, dealer_name, dealer_id, big_region_name_en AS region_code
, campaign_type AS campaignType, dealership_id AS dealerId
FROM ads_dmo.ads_rpt_voc_kr_detail_dmo_t
WHERE kr_date BETWEEN '2024-01-01' AND '2024-01-19'
AND campaign_type = '售后'
ORDER BY kr_date DESC
) pt
LIMIT 50 offset 50
18a1fa6c0c7bdc0575f8e7a32a9abb90.png

展开
收起
真的很搞笑 2024-01-21 19:41:24 61 0
2 条回答
写回答
取消 提交回答
  • limit 50 offset 50 order by desc 并不会作用在外面的seletc p 查询
    SELECT pt.

    FROM (
    SELECT kr_date, brand, customer_id, customer_name
    , vin7, advisor_name, dealer_name, dealer_id, big_region_name_en AS region_code
    , campaign_type AS campaignType, dealership_id AS dealerId
    FROM ads_dmo.ads_rpt_voc_kr_detail_dmo_t
    WHERE kr_date BETWEEN '2024-01-01' AND '2024-01-19'
    AND campaign_type = '售后'
    ) pt ORDER BY pt.kr_date DESC
    LIMIT 50 offset 50; ,此回答整理自钉群“云原生数据仓库AnalyticDB PostgreSQL版交流群开源讨论群”

    2024-01-22 10:57:15
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在云原生数据仓库AnalyticDB PostgreSQL版中,使用ORCA优化器时,可能会出现排序不准确的情况。这是因为ORCA优化器在处理子查询时,可能会对排序进行重新排序或调整。

    为了解决这个问题,您可以尝试以下方法:

    1. 使用Legacy优化器:将ORCA优化器设置为关闭状态,即使用Legacy优化器。这样可以确保查询按照预期的顺序执行。
    --set optimizer = off;
    SELECT pt.*
    FROM (
    SELECT kr_date, brand, customer_id, customer_name
    , vin7, advisor_name, dealer_name, dealer_id, big_region_name_en AS region_code
    , campaign_type AS campaignType, dealership_id AS dealerId
    FROM ads_dmo.ads_rpt_voc_kr_detail_dmo_t
    WHERE kr_date BETWEEN '2024-01-01' AND '2024-01-19'
    AND campaign_type = '售后'
    ORDER BY kr_date DESC
    ) pt
    LIMIT 50 offset 50
    
    1. 使用KEYSET方法:KEYSET是一种基于键值范围的分页方法,可以更准确地控制数据的排序和分页。您可以使用KEYSET方法来替换OFFSET方法,以实现更准确的分页。
    --set optimizer = on;
    SELECT pt.*
    FROM (
    SELECT kr_date, brand, customer_id, customer_name
    , vin7, advisor_name, dealer_name, dealer_id, big_region_name_en AS region_code
    , campaign_type AS campaignType, dealership_id AS dealerId
    FROM ads_dmo.ads_rpt_voc_kr_detail_dmo_t
    WHERE kr_date BETWEEN '2024-01-01' AND '2024-01-19'
    AND campaign_type = '售后'
    ORDER BY kr_date DESC
    ) pt
    LIMIT 50 offset 50
    
    1. 检查数据分布:如果以上方法仍然无法解决问题,可能是由于数据分布不均匀导致的。在这种情况下,您可以考虑对数据进行分区或重新组织,以确保数据在各个节点上分布均匀。

    总的来说,在使用ORCA优化器时,需要注意其对排序的影响。如果发现排序不准确,可以尝试使用Legacy优化器、KEYSET方法或检查数据分布来解决该问题。

    2024-01-21 19:46:50
    赞同 展开评论 打赏

阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 相关电子书

    更多
    基于阿里云MaxCompute 构建企业云数据仓库CDW的最佳实践建议 立即下载
    PostgresChina2018_陶征霖_新一代数据仓库OushuDB架构剖析 立即下载
    MaxCompute数据仓库数据转换实践 立即下载