Uploaded image for project: 'Apache Arrow'
  1. Apache Arrow
  2. ARROW-11793

[C++][Parquet] dictinct_count broken (always 0) in column chunk statistics

Details

    Description

      The distinct_count attribute of the column chunk metadata statistics is broken: It always shows 0. This seems to be the case for all types of columns. Checked with int64 as well as dictionary encoded string columns:

      import pyarrow as pa
      import pyarrow.parquet as pq
      
      table = pa.Table.from_pydict({
          'foo': pa.array(['ABC', 'DEF']).dictionary_encode()
      })
      
      pq.write_table(table, 'test_row_group_statistics.parquet', version='2.0', data_page_version='2.0')
      
      pq_file = pq.ParquetFile('test_row_group_statistics.parquet')
      print(pq_file.metadata.row_group(0).column(0).statistics)
      

      Output:

      <pyarrow._parquet.Statistics object at 0x0000020A1699D770>
        has_min_max: True
        min: ABC
        max: DEF
        null_count: 0
        distinct_count: 0
        num_values: 2
        physical_type: BYTE_ARRAY
        logical_type: String
        converted_type (legacy): UTF8
      

      Attachments

        Activity

          lidavidm David Li added a comment -

          From a quick grep it seems it's just never set by the writer in the first place. Possibly a Parquet file not written by Arrow C++ would set this.

          lidavidm David Li added a comment - From a quick grep it seems it's just never set by the writer in the first place. Possibly a Parquet file not written by Arrow C++ would set this.

          I think there's more to this. When looking at the tpc-h file customer_0_0.parquet, parquet-tools shows null counts yet Arrow reports HasNullCount() == FALSE.

           

           $ parquet-tools inspect tpch/customer_0_0.parquet --detail
          ...
          ■■■■■■■■■■■■■■■■ColumnChunk
          ■■■■■■■■■■■■■■■■■■■■file_offset = 184618
          ■■■■■■■■■■■■■■■■■■■■meta_data = ColumnMetaData
          ■■■■■■■■■■■■■■■■■■■■■■■■type = 6
          ■■■■■■■■■■■■■■■■■■■■■■■■encodings = list
          ■■■■■■■■■■■■■■■■■■■■■■■■■■■■3
          ■■■■■■■■■■■■■■■■■■■■■■■■■■■■0
          ■■■■■■■■■■■■■■■■■■■■■■■■■■■■4
          ■■■■■■■■■■■■■■■■■■■■■■■■path_in_schema = list
          ■■■■■■■■■■■■■■■■■■■■■■■■■■■■c_address
          ■■■■■■■■■■■■■■■■■■■■■■■■num_values = 7500
          ■■■■■■■■■■■■■■■■■■■■■■■■total_uncompressed_size = 207320
          ■■■■■■■■■■■■■■■■■■■■■■■■total_compressed_size = 207320
          ■■■■■■■■■■■■■■■■■■■■■■■■data_page_offset = 184618
          ■■■■■■■■■■■■■■■■■■■■■■■■statistics = Statistics
          ■■■■■■■■■■■■■■■■■■■■■■■■■■■■max = b'zyWvi,SGc,tXTls'
          ■■■■■■■■■■■■■■■■■■■■■■■■■■■■min = b'   5L06W67,Mw8G'
          ■■■■■■■■■■■■■■■■■■■■■■■■■■■■null_count = 469
          
          drauschenbach David Rauschenbach added a comment - I think there's more to this. When looking at the tpc-h file customer_0_0.parquet, parquet-tools shows null counts yet Arrow reports HasNullCount() == FALSE.    $ parquet-tools inspect tpch/customer_0_0.parquet --detail ... ■■■■■■■■■■■■■■■■ColumnChunk ■■■■■■■■■■■■■■■■■■■■file_offset = 184618 ■■■■■■■■■■■■■■■■■■■■meta_data = ColumnMetaData ■■■■■■■■■■■■■■■■■■■■■■■■type = 6 ■■■■■■■■■■■■■■■■■■■■■■■■encodings = list ■■■■■■■■■■■■■■■■■■■■■■■■■■■■3 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■0 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■4 ■■■■■■■■■■■■■■■■■■■■■■■■path_in_schema = list ■■■■■■■■■■■■■■■■■■■■■■■■■■■■c_address ■■■■■■■■■■■■■■■■■■■■■■■■num_values = 7500 ■■■■■■■■■■■■■■■■■■■■■■■■total_uncompressed_size = 207320 ■■■■■■■■■■■■■■■■■■■■■■■■total_compressed_size = 207320 ■■■■■■■■■■■■■■■■■■■■■■■■data_page_offset = 184618 ■■■■■■■■■■■■■■■■■■■■■■■■statistics = Statistics ■■■■■■■■■■■■■■■■■■■■■■■■■■■■max = b 'zyWvi,SGc,tXTls' ■■■■■■■■■■■■■■■■■■■■■■■■■■■■min = b '   5L06W67,Mw8G' ■■■■■■■■■■■■■■■■■■■■■■■■■■■■null_count = 469
          rokm Rok Mihevc added a comment -

          This issue has been migrated to issue #27644 on GitHub. Please see the migration documentation for further details.

          rokm Rok Mihevc added a comment - This issue has been migrated to issue #27644 on GitHub. Please see the migration documentation for further details.

          People

            Unassigned Unassigned
            ARF1 ARF
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated: