Flow PHP

ColumnOrder

Union to specify the order used for the min_value and max_value fields for a column. This union takes the role of an enhanced enum that allows rich elements (which will be needed for a collation-based ordering in the future).

Possible values are:

  • TypeDefinedOrder - the column uses the order defined by its logical or physical type (if there is no logical type).

  • IEEE754TotalOrder - the floating point column uses IEEE 754 total order.

  • Int96TimestampOrder - the INT96 column uses chronological timestamp order.

If the reader does not support the value of this union, min and max stats for this column should be ignored.

Properties

$_TSPEC  : mixed
$IEEE_754_TOTAL_ORDER  : null|IEEE754TotalOrder
$INT96_TIMESTAMP_ORDER  : null|Int96TimestampOrder
$isValidate  : mixed
$TYPE_ORDER  : null|TypeDefinedOrder
The sort orders for logical types are: UTF8 - unsigned byte-wise comparison INT8 - signed comparison INT16 - signed comparison INT32 - signed comparison INT64 - signed comparison UINT8 - unsigned comparison UINT16 - unsigned comparison UINT32 - unsigned comparison UINT64 - unsigned comparison DECIMAL - signed comparison of the represented value DATE - signed comparison FLOAT16 - signed comparison of the represented value (*) TIME_MILLIS - signed comparison TIME_MICROS - signed comparison TIMESTAMP_MILLIS - signed comparison TIMESTAMP_MICROS - signed comparison INTERVAL - undefined JSON - unsigned byte-wise comparison BSON - unsigned byte-wise comparison ENUM - unsigned byte-wise comparison LIST - undefined MAP - undefined VARIANT - undefined GEOMETRY - undefined GEOGRAPHY - undefined FILE - undefined

Methods

__construct()  : mixed
getName()  : mixed
read()  : mixed
write()  : mixed

Properties

$_TSPEC

public static mixed $_TSPEC = array(1 => array('var' => 'TYPE_ORDER', 'isRequired' => false, 'type' => \Thrift\Type\TType::STRUCT, 'class' => '\Flow\Parquet\ThriftModel\TypeDefinedOrder'), 2 => array('var' => 'IEEE_754_TOTAL_ORDER', 'isRequired' => false, 'type' => \Thrift\Type\TType::STRUCT, 'class' => '\Flow\Parquet\ThriftModel\IEEE754TotalOrder'), 3 => array('var' => 'INT96_TIMESTAMP_ORDER', 'isRequired' => false, 'type' => \Thrift\Type\TType::STRUCT, 'class' => '\Flow\Parquet\ThriftModel\Int96TimestampOrder'))

$TYPE_ORDER

The sort orders for logical types are: UTF8 - unsigned byte-wise comparison INT8 - signed comparison INT16 - signed comparison INT32 - signed comparison INT64 - signed comparison UINT8 - unsigned comparison UINT16 - unsigned comparison UINT32 - unsigned comparison UINT64 - unsigned comparison DECIMAL - signed comparison of the represented value DATE - signed comparison FLOAT16 - signed comparison of the represented value (*) TIME_MILLIS - signed comparison TIME_MICROS - signed comparison TIMESTAMP_MILLIS - signed comparison TIMESTAMP_MICROS - signed comparison INTERVAL - undefined JSON - unsigned byte-wise comparison BSON - unsigned byte-wise comparison ENUM - unsigned byte-wise comparison LIST - undefined MAP - undefined VARIANT - undefined GEOMETRY - undefined GEOGRAPHY - undefined FILE - undefined

public null|TypeDefinedOrder $TYPE_ORDER = null

In the absence of logical types, the sort order is determined by the physical type: BOOLEAN - false, true INT32 - signed comparison INT64 - signed comparison INT96 (only used for legacy timestamps) - depends on sort order (+) FLOAT - signed comparison of the represented value () DOUBLE - signed comparison of the represented value () BYTE_ARRAY - unsigned byte-wise comparison FIXED_LEN_BYTE_ARRAY - unsigned byte-wise comparison

(+) While the INT96 type has been deprecated, at the time of writing it is still used in many legacy systems. It is optional for writers to emit statistics for INT96 columns. Writers that emit stats for such columns should use the INT96_TIMESTAMP_ORDER for this type and order the values according to the legacy rules: - compare the last 4 bytes (days) as a little-endian 32-bit signed integer - if equal last 4 bytes, compare the first 8 bytes as a little-endian 64-bit signed integer (nanos) If TYPE_ORDER is used for an INT96 column, readers should ignore all statistics (min/max fields in Statistics and min_values/max_values fields in ColumnIndex) for that column.

(*) Because TYPE_ORDER is ambiguous for floating point types due to underspecified handling of NaN and -0/+0, it is recommended that writers use IEEE_754_TOTAL_ORDER for these types.

If TYPE_ORDER is used for floating point types, then the following
compatibility rules should be applied when reading statistics:
- If the min is a NaN, it should be ignored.
- If the max is a NaN, it should be ignored.
- If the nan_count field is set, a reader can compute
  nan_count + null_count == num_values to deduce whether all non-null
  values are NaN.
- If the min is +0, the row group may contain -0 values as well.
- If the max is -0, the row group may contain +0 values as well.
- When looking for NaN values, min and max should be ignored.
  If the nan_count field is set, it can be used to check whether
  NaNs are present.

When writing page or column chunk statistics for columns with
TYPE_ORDER order, the following rules must be followed:
- The nan_count field must be set for floating point types, even if
  it is zero.
- If the nan_count field is set, min and max statistics fields, when
  present, must not contain NaN values and must be computed from
  non-NaN values only. This signals to readers that the min and max
  statistics are reliable for non-NaN values.
- If all non-null values are NaN, min and max statistics must not be
  written.
- If the computed max value is zero (whether negative or positive),
  `+0.0` should be written into the max statistics field.
- If the computed min value is zero (whether negative or positive),
  `-0.0` should be written into the min statistics field.

When writing column indexes for columns with TYPE_ORDER order, the
following rules must be followed:
- NaNs must not be written to min_values or max_values.
- If all non-null values of a page are NaN, a column index must not
  be written for this column chunk because min_values and max_values
  are required.
- If the computed max value is zero (whether negative or positive),
  `+0.0` should be written into the corresponding max_values entry.
- If the computed min value is zero (whether negative or positive),
  `-0.0` should be written into the corresponding min_values entry.

Methods

__construct()

public __construct([mixed $vals = null ]) : mixed
Parameters
$vals : mixed = null

read()

public read(mixed $input) : mixed
Parameters
$input : mixed

write()

public write(mixed $output) : mixed
Parameters
$output : mixed
On this page

Search results