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'))
$IEEE_754_TOTAL_ORDER
public
null|IEEE754TotalOrder
$IEEE_754_TOTAL_ORDER
= null
$INT96_TIMESTAMP_ORDER
public
null|Int96TimestampOrder
$INT96_TIMESTAMP_ORDER
= null
$isValidate
public
static mixed
$isValidate
= false
$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
getName()
public
getName() : mixed
read()
public
read(mixed $input) : mixed
Parameters
- $input : mixed
write()
public
write(mixed $output) : mixed
Parameters
- $output : mixed