Uploaded image for project: 'Beam'
  1. Beam
  2. BEAM-10379

Nulls are not passed to aggregation function in ZetaSQL.

Details

    • Task
    • Status: Resolved
    • P2
    • Resolution: Fixed
    • None
    • 2.34.0
    • dsl-sql, dsl-sql-zetasql
    • None

    Description

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

      Supported Argument Types: INT64
      Returned Data Types: INT64

      Examples

      SELECT BIT_AND(c) as bit_and FROM UNNEST([0xF001, 0x00A1]) as c;
      
      +---------+
      | bit_and |
      +---------+
      | 1       |
      +---------+
      

       

      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:
      1. When table is empty, the result is empty, correct.

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

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

      4. When table contains both valid numerical values and null values, the result should be null (BitAnd(null, val) = 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.

      Before figuring out the root cause and proposing a fix, the previous implementation of BIT_AND is reverted.
       

      Attachments

        Issue Links

          Activity

            People

              benglez Benjamin Gonzalez
              fuyuwei Yuwei Fu
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1h
                  1h