【发布时间】: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