You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@iceberg.apache.org by GitBox <gi...@apache.org> on 2022/01/12 22:12:35 UTC

[GitHub] [iceberg] samredai commented on a change in pull request #3839: Expanding primitive types to individual classes

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: issues-unsubscribe@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org