Hemanth Umashankar created HIVE-30136:
-----------------------------------------
Summary: Vectorized LEAD/LAG uses wrong constant for
DOUBLE/DECIMAL literal default (reads long 0)
Key: HIVE-30136
URL: https://issues.apache.org/jira/browse/HIVE-30136
Project: Hive
Issue Type: Bug
Reporter: Hemanth Umashankar
With vectorization enabled, LAG/LEAD(..., ..., <double literal>) returns 0.0 on
rows that need the default (e.g. first row per partition for LAG offset 1).
With vectorization disabled, the same query returns the correct default.
Suspected cause: VectorPTFEvaluatorAbstractLeadLag.initDefaultValue() always
uses ConstantVectorExpression.getLongValue(); double literals use doubleValue,
so longValue is 0.
Repro:
CREATE TABLE lag_default_repro (
region STRING,
sale_id INT,
amount DOUBLE
);
INSERT INTO lag_default_repro VALUES
('east', 1, 10.0),
('east', 2, 20.0),
('west', 1, 100.0);
SET hive.vectorized.execution.enabled=false;
SELECT
region,
sale_id,
amount,
LAG(amount, 1, 2.5) OVER (PARTITION BY region ORDER BY sale_id) AS
prev_amount_or_default
FROM lag_default_repro
ORDER BY region, sale_id;
SET hive.vectorized.execution.enabled=true;
SELECT
region,
sale_id,
amount,
LAG(amount, 1, 2.5) OVER (PARTITION BY region ORDER BY sale_id) AS
prev_amount_or_default
FROM lag_default_repro
ORDER BY region, sale_id;
--
This message was sent by Atlassian Jira
(v8.20.10#820010)