samredai commented on a change in pull request #3839:
URL: https://github.com/apache/iceberg/pull/3839#discussion_r783446761
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A boolean data type in Iceberg can be represented using an instance of
this class.
Example:
>>> column_foo = BooleanType()
>>> isinstance(column_foo, BooleanType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("double", "DoubleType", is_primitive=True)
+
+
+class Date(Type):
+ """`date` type from https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Date data type in Iceberg can be represented using an instance of this
class. Dates in Iceberg are
calendar dates without a timezone or time.
Example:
>>> column_foo = DateType()
>>> isinstance(column_foo, DateType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Long data type in Iceberg can be represented using an instance of this
class. Longs in Iceberg are
64-bit signed integers.
Example:
>>> column_foo = LongType()
>>> isinstance(column_foo, LongType)
True
Attributes:
max (int): The maximum allowed value for Longs, inherited from the
canonical Iceberg implementation
in Java. (returns `9223372036854775807`)
min (int): The minimum allowed value for Longs, inherited from the
canonical Iceberg implementation
in Java (returns `-9223372036854775808`)
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Double data type in Iceberg can be represented using an instance of
this class. Doubles in Iceberg are
64-bit IEEE 754 floating points.
Example:
>>> column_foo = DoubleType()
>>> isinstance(column_foo, DoubleType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Float data type in Iceberg can be represented using an instance of
this class. Floats in Iceberg are
32-bit IEEE 754 floating points and can be promoted to Doubles.
Example:
>>> column_foo = FloatType()
>>> isinstance(column_foo, FloatType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
An Integer data type in Iceberg can be represented using an instance of
this class. Integers in Iceberg are
32-bit signed and can be promoted to Longs.
Example:
>>> column_foo = IntegerType()
>>> isinstance(column_foo, IntegerType)
True
Attributes:
max (int): The maximum allowed value for Integers, inherited from
the canonical Iceberg implementation
in Java (returns `2147483647`)
min (int): The minimum allowed value for Integers, inherited from
the canonical Iceberg implementation
in Java (returns `-2147483648`)
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("double", "DoubleType", is_primitive=True)
+
+
+class Date(Type):
+ """`date` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("date", "DateType", is_primitive=True)
+
+
+class Time(Type):
+ """`time` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("time", "TimeType", is_primitive=True)
+
+
+class Timestamp(Type):
+ """`timestamp` type from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Timestamp data type in Iceberg can be represented using an instance of
this class. Timestamps in
Iceberg have microsecond precision and include a date and a time of day
without a timezone.
Example:
>>> column_foo = TimestampType()
>>> isinstance(column_foo, TimestampType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("double", "DoubleType", is_primitive=True)
+
+
+class Date(Type):
+ """`date` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("date", "DateType", is_primitive=True)
+
+
+class Time(Type):
+ """`time` type from https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Time data type in Iceberg can be represented using an instance of this
class. Times in Iceberg
have microsecond precision and are a time of day without a date or
timezone.
Example:
>>> column_foo = TimeType()
>>> isinstance(column_foo, TimeType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("double", "DoubleType", is_primitive=True)
+
+
+class Date(Type):
+ """`date` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("date", "DateType", is_primitive=True)
+
+
+class Time(Type):
+ """`time` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("time", "TimeType", is_primitive=True)
+
+
+class Timestamp(Type):
+ """`timestamp` type from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("timestamp", "TimestampType", is_primitive=True)
+
+
+class Timestamptz(Type):
+ """`timestamptz` type from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("timestamptz", "TimestamptzType", is_primitive=True)
+
+
+class String(Type):
+ """Arbitrary-length character sequences Encoded with UTF-8: `string` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("string", "StringType", is_primitive=True)
+
+
+class UUID(Type):
+ """Universally unique identifiers: `uuid` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("uuid", "UUIDType", is_primitive=True)
+
+
+class Binary(Type):
+ """Arbitrary-length byte array from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Binary data type in Iceberg can be represented using an instance of
this class. Binarys in
Iceberg are arbitrary-length byte arrays.
Example:
>>> column_foo = BinaryType()
>>> isinstance(column_foo, BinaryType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("double", "DoubleType", is_primitive=True)
+
+
+class Date(Type):
+ """`date` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("date", "DateType", is_primitive=True)
+
+
+class Time(Type):
+ """`time` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("time", "TimeType", is_primitive=True)
+
+
+class Timestamp(Type):
+ """`timestamp` type from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("timestamp", "TimestampType", is_primitive=True)
+
+
+class Timestamptz(Type):
+ """`timestamptz` type from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A Timestamptz data type in Iceberg can be represented using an instance
of this class. Timestamptzs in
Iceberg are stored as UTC and include a date and a time of day with a
timezone.
Example:
>>> column_foo = TimestamptzType()
>>> isinstance(column_foo, TimestamptzType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
Instead of including the link to the primitive types section of the
docstring for each class, I'm realizing it really applies to this entire file
so maybe it would be better as a module-level docstring on line 1. Something
like this:
```py
"""Data types used in describing Iceberg schemas
This module implements the data types described in the Iceberg specification
for Iceberg schemas. To
describe an Iceberg table schema, these classes can be used in the
construction of a StructType instance.
Example:
>>> StructType(
[
NestedField(True, 1, "required_field", StringType()),
NestedField(False, 2, "optional_field", IntegerType()),
]
)
Notes:
- https://iceberg.apache.org/#spec/#primitive-types
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("double", "DoubleType", is_primitive=True)
+
+
+class Date(Type):
+ """`date` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("date", "DateType", is_primitive=True)
+
+
+class Time(Type):
+ """`time` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("time", "TimeType", is_primitive=True)
+
+
+class Timestamp(Type):
+ """`timestamp` type from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("timestamp", "TimestampType", is_primitive=True)
+
+
+class Timestamptz(Type):
+ """`timestamptz` type from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("timestamptz", "TimestamptzType", is_primitive=True)
+
+
+class String(Type):
+ """Arbitrary-length character sequences Encoded with UTF-8: `string` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("string", "StringType", is_primitive=True)
+
+
+class UUID(Type):
+ """Universally unique identifiers: `uuid` from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A UUID data type in Iceberg can be represented using an instance of this
class. UUIDs in
Iceberg are universally unique identifiers.
Example:
>>> column_foo = UUIDType()
>>> isinstance(column_foo, UUIDType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
##########
File path: python/src/iceberg/types.py
##########
@@ -157,15 +157,107 @@ def value(self) -> NestedField:
return self._value_field
-BooleanType = Type("boolean", "BooleanType", is_primitive=True)
-IntegerType = Type("int", "IntegerType", is_primitive=True)
-LongType = Type("long", "LongType", is_primitive=True)
-FloatType = Type("float", "FloatType", is_primitive=True)
-DoubleType = Type("double", "DoubleType", is_primitive=True)
-DateType = Type("date", "DateType", is_primitive=True)
-TimeType = Type("time", "TimeType", is_primitive=True)
-TimestampType = Type("timestamp", "TimestampType", is_primitive=True)
-TimestamptzType = Type("timestamptz", "TimestamptzType", is_primitive=True)
-StringType = Type("string", "StringType", is_primitive=True)
-UUIDType = Type("uuid", "UUIDType", is_primitive=True)
-BinaryType = Type("binary", "BinaryType", is_primitive=True)
+class Boolean(Type):
+ """`boolean` from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("boolean", "BooleanType", is_primitive=True)
+
+
+class Integer(Type):
+ """32-bit signed integers: `int` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 2147483647
+
+ min: int = -2147483648
+
+ def __init__(self):
+ super().__init__("int", "IntegerType", is_primitive=True)
+
+
+class Long(Type):
+ """64-bit signed integers: `long` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ max: int = 9223372036854775807
+
+ min: int = -9223372036854775808
+
+ def __init__(self):
+ super().__init__("long", "LongType", is_primitive=True)
+
+
+class Float(Type):
+ """32-bit IEEE 754 floating point: `float` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("float", "FloatType", is_primitive=True)
+
+
+class Double(Type):
+ """64-bit IEEE 754 floating point: `double` from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("double", "DoubleType", is_primitive=True)
+
+
+class Date(Type):
+ """`date` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("date", "DateType", is_primitive=True)
+
+
+class Time(Type):
+ """`time` type from https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("time", "TimeType", is_primitive=True)
+
+
+class Timestamp(Type):
+ """`timestamp` type from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("timestamp", "TimestampType", is_primitive=True)
+
+
+class Timestamptz(Type):
+ """`timestamptz` type from
https://iceberg.apache.org/#spec/#primitive-types"""
+
+ def __init__(self):
+ super().__init__("timestamptz", "TimestamptzType", is_primitive=True)
+
+
+class String(Type):
+ """Arbitrary-length character sequences Encoded with UTF-8: `string` from
https://iceberg.apache.org/#spec/#primitive-types"""
Review comment:
```py
"""A primitive data type for an Iceberg schema
A String data type in Iceberg can be represented using an instance of
this class. Strings in
Iceberg are arbitrary-length character sequences and are encoded with
UTF-8.
Example:
>>> column_foo = StringType()
>>> isinstance(column_foo, StringType)
True
Attributes:
is_primitive (bool): Specifies whether this is a primitive Iceberg
schema data type (as opposed to a
nested Iceberg schema data type)
"""
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]