【问题标题】:Updating in Loops - Slow performance - Snowflake DB循环更新 - 性能缓慢 - Snowflake DB
【发布时间】:2021-12-09 20:21:29
【问题描述】:

我有从 HANA 存储过程复制过来的逻辑。有循环,它迭代 3k 次。在循环内部,表格不断更新。虽然每个更新语句只需要 1-2 秒,但所有作业运行时间超过 2 小时。在 Hana,同样的工作在 5 分钟内完成。

如何才能在雪花中实现最大性能?是否可以将此更新更改为选择语句?

FOR A IN 1 .. :ITERATION_COUNT
DO

/*ITERATIONS IN ORDER TO STEP DOWN THROUGH THE ALLOCATION
 *PROCESS USING THE LOWEST PERCENT TO PLAN. ALLOCATES ONE 
 *CASE SIZE QUANTITY DURING EACH STEP AND ADJUSTS THE
 *VALUES ACCORDINGLY.*/
UPDATE IA_IFC_ALLOCATION.IFC_NEED_ALLOCATION IFC_NEED_ALLOCATION
SET IFC_NEED_ALLOCATION.ALLOCATION_AMOUNT = COALESCE(IFC_NEED_ALLOCATION.ALLOCATION_AMOUNT,0) + IFC_NEED_ALLOCATION.CASE_SIZE,
    IFC_NEED_ALLOCATION.NEW_PROJOH = IFC_NEED_ALLOCATION.NEW_PROJOH + IFC_NEED_ALLOCATION.CASE_SIZE,
    IFC_NEED_ALLOCATION.PERCENT_TO_PLAN  = (IFC_NEED_ALLOCATION.NEW_PROJOH + IFC_NEED_ALLOCATION.CASE_SIZE)/NULLIF(IFC_NEED_ALLOCATION.OUTL,0)
FROM IA_IFC_ALLOCATION.IFC_NEED_ALLOCATION
JOIN (SELECT
    PTP.ITEM,
    MIN(LOC) AS LOC,
    PTP.ZZPOLOC,
    PTP.PERCENT_TO_PLAN
    FROM(
        SELECT 
        ITEM,
        ZZPOLOC,
        MIN(PERCENT_TO_PLAN) AS PERCENT_TO_PLAN
        FROM IA_IFC_ALLOCATION.IFC_NEED_ALLOCATION
        GROUP BY 
        ITEM,
        ZZPOLOC) PTP
    JOIN IA_IFC_ALLOCATION.IFC_NEED_ALLOCATION ON 
    PTP.ITEM=IFC_NEED_ALLOCATION.ITEM
    AND PTP.PERCENT_TO_PLAN =IFC_NEED_ALLOCATION.PERCENT_TO_PLAN 
    GROUP BY 
    PTP.ITEM,
    PTP.ZZPOLOC,
    PTP.PERCENT_TO_PLAN) IFC_NEED_ALLOCATION_MIN_PTP ON 
IFC_NEED_ALLOCATION.ITEM = IFC_NEED_ALLOCATION_MIN_PTP.ITEM
AND IFC_NEED_ALLOCATION.PERCENT_TO_PLAN = IFC_NEED_ALLOCATION_MIN_PTP.PERCENT_TO_PLAN
AND IFC_NEED_ALLOCATION.LOC = IFC_NEED_ALLOCATION_MIN_PTP.LOC
WHERE IFC_NEED_ALLOCATION.RECEIVED_QUANTITY > 0;

UPDATE IA_IFC_ALLOCATION.IFC_NEED_ALLOCATION
SET IFC_NEED_ALLOCATION.RECEIVED_QUANTITY = IFC_NEED_ALLOCATION.RECEIVED_QUANTITY - IFC_NEED_ALLOCATION.CASE_SIZE
FROM IA_IFC_ALLOCATION.IFC_NEED_ALLOCATION
WHERE IFC_NEED_ALLOCATION.RECEIVED_QUANTITY > 0;

END FOR;

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    我不会“更新表”,而是“构建结果集”来推动单个合并操作。

    这闻起来像递归 CTE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-08
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2015-07-13
      • 2023-02-09
      相关资源
      最近更新 更多