Yuwei Fu created BEAM-10379:
-------------------------------

             Summary: Some problems when implementing BIT_AND aggregation 
function in BeamSQL
                 Key: BEAM-10379
                 URL: https://issues.apache.org/jira/browse/BEAM-10379
             Project: Beam
          Issue Type: Task
          Components: dsl-sql, dsl-sql-zetasql
            Reporter: Yuwei Fu


Performs a bitwise AND operation on expression and returns the result.

Supported Argument Types: INT64
Returned Data Types: INT64

Examples

{code:sql}
SELECT BIT_AND(c) as bit_and FROM UNNEST([0xF001, 0x00A1]) as c;

+---------+
| bit_and |
+---------+
| 1 |
+---------+
{code}

 

What is expected: should include both Calcite and ZetaSQL dialects.

How to test: unit tests

Reference: 
[https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions#bit_and]

 

Problems: 

After implementation, the current situation is:
 # When table is empty, the result is empty, correct.

 # When table contains only null values, the result is null, correct.

 # When table contains only valid numerical values, the result is as expected, 
correct.

 # When table contains both valid numerical values and null values, the result 
should be null, but it seems all null values have been directly ignored before 
doing the bit_and operation. Only numerical values are taken into operation, so 
the result is incorrect.

 
It turns out that on direct runner, NULL will not be passed to CombineFn thus 
all NULL inputs are ignored. And then if there is any non-null inputs, bit_and 
will be applied on them only, which leads to a non-null result, which is not 
correct.

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to