[ 
https://issues.apache.org/jira/browse/HIVE-30136?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hemanth Umashankar updated HIVE-30136:
--------------------------------------
    Description: 
With vectorization enabled, {{{}LAG{}}}/{{{}LEAD{}}} with a double-literal 
default returns {{0.0}} on rows that should use the default (e.g. the first row 
per partition for {{LAG}} with offset 1). With vectorization disabled, the same 
query returns the correct default.

Suspected cause: {{VectorPTFEvaluatorAbstractLeadLag.initDefaultValue()}} 
always uses {{{}ConstantVectorExpression.getLongValue(){}}}. Double literals 
are stored in {{{}doubleValue{}}}, so {{longValue}} is 0.
h3. Repro
{code:sql}
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);

-- Run the query below twice: once with =false, once with =true
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;
{code}
h3. Expected vs. actual

Rows that should use the default (east/1 and west/1) show {{2.5}} with 
vectorization disabled, but {{0.0}} with vectorization enabled.

  was:
h3. Summary
With vectorization enabled, {{LAG}}/{{LEAD}} with a double-literal default 
returns {{0.0}} on rows that should use the default (e.g. the first row per 
partition for {{LAG}} with offset 1). With vectorization disabled, the same 
query returns the correct default.

Suspected cause: {{VectorPTFEvaluatorAbstractLeadLag.initDefaultValue()}} 
always uses {{ConstantVectorExpression.getLongValue()}}. Double literals are 
stored in {{doubleValue}}, so {{longValue}} is 0.

h3. Repro
{code:sql}
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);

-- Run the query below twice: once with =false, once with =true
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;
{code}

h3. Expected vs. actual
Rows that should use the default (east/1 and west/1) show {{2.5}} with 
vectorization disabled, but {{0.0}} with vectorization enabled.


> Fix vectorized LEAD/LAG literal defaults for DOUBLE/DECIMAL
> -----------------------------------------------------------
>
>                 Key: HIVE-30136
>                 URL: https://issues.apache.org/jira/browse/HIVE-30136
>             Project: Hive
>          Issue Type: Bug
>          Components: Vectorization
>    Affects Versions: 4.3.0
>            Reporter: Hemanth Umashankar
>            Assignee: Hemanth Umashankar
>            Priority: Major
>
> With vectorization enabled, {{{}LAG{}}}/{{{}LEAD{}}} with a double-literal 
> default returns {{0.0}} on rows that should use the default (e.g. the first 
> row per partition for {{LAG}} with offset 1). With vectorization disabled, 
> the same query returns the correct default.
> Suspected cause: {{VectorPTFEvaluatorAbstractLeadLag.initDefaultValue()}} 
> always uses {{{}ConstantVectorExpression.getLongValue(){}}}. Double literals 
> are stored in {{{}doubleValue{}}}, so {{longValue}} is 0.
> h3. Repro
> {code:sql}
> 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);
> -- Run the query below twice: once with =false, once with =true
> 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;
> {code}
> h3. Expected vs. actual
> Rows that should use the default (east/1 and west/1) show {{2.5}} with 
> vectorization disabled, but {{0.0}} with vectorization enabled.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to