atoti.Column.default_value#

property Column.default_value: bool | int | float | date | datetime | time | Sequence[bool] | Sequence[int] | Sequence[float] | Sequence[str] | str | None#

Value used to replace None inserted values.

The default value can either be:

  • None:

    >>> none_default_value_table = session.create_table(
    ...     "None",
    ...     data_types={"ZonedDateTime": "ZonedDateTime"},
    ...     default_values={"ZonedDateTime": None},
    ... )
    >>> none_default_value_table["ZonedDateTime"].default_value
    
  • a value matching the column’s data_type:

    >>> from datetime import datetime
    >>> from zoneinfo import ZoneInfo
    >>> homogeneous_default_value_table = session.create_table(
    ...     "Homogeneous",
    ...     data_types={"ZonedDateTime": "ZonedDateTime"},
    ...     default_values={
    ...         "ZonedDateTime": datetime(
    ...             2025,
    ...             2,
    ...             13,
    ...             20,
    ...             58,
    ...             42,
    ...             tzinfo=ZoneInfo("America/New_York"),
    ...         )
    ...     },
    ... )
    >>> homogeneous_default_value_table["ZonedDateTime"].default_value
    datetime.datetime(2025, 2, 13, 20, 58, 42, tzinfo=zoneinfo.ZoneInfo(key='America/New_York'))
    >>> session.create_table(  
    ...     "Heterogeneous",
    ...     data_types={"ZonedDateTime": "ZonedDateTime"},
    ...     default_values={
    ...         # Stringified ZonedDateTimes are not accepted.
    ...         "ZonedDateTime": "2025-02-13T20:58:42-05:00[America/New_York]"
    ...     },
    ... )
    Traceback (most recent call last):
        ...
    atoti._graphql_client.exceptions.GraphQLClientGraphQLMultiError: Coercion from STRING to ZONED_DATE_TIME is not supported. ...
    >>> session.create_table(  
    ...     "Heterogeneous",
    ...     data_types={"ZonedDateTime": "ZonedDateTime"},
    ...     default_values={
    ...         # `"N/A"` is not accepted either.
    ...         "ZonedDateTime": "N/A"
    ...     },
    ... )
    Traceback (most recent call last):
        ...
    atoti._graphql_client.exceptions.GraphQLClientGraphQLMultiError: Coercion from STRING to ZONED_DATE_TIME is not supported. ...
    >>> session.create_table(  
    ...     "Heterogeneous",
    ...     data_types={"ZonedDateTime": "ZonedDateTime"},
    ...     default_values={
    ...         # ZonedDateTime values must have a zone info.
    ...         "ZonedDateTime": datetime(2025, 2, 13, 20, 58, 42)
    ...     },
    ... )
    Traceback (most recent call last):
        ...
    atoti._graphql_client.exceptions.GraphQLClientGraphQLMultiError: Coercion from LOCAL_DATE_TIME to ZONED_DATE_TIME is not supported. ...
    

Each data type has its own default default_value value:

>>> import pprint
>>> all_data_types = [
...     "boolean",
...     "boolean[]",
...     "double",
...     "double[]",
...     "float",
...     "float[]",
...     "int",
...     "int[]",
...     "LocalDate",
...     "LocalDateTime",
...     "LocalTime",
...     "long",
...     "long[]",
...     "String",
...     "String[]",
...     "ZonedDateTime",
... ]
>>> all_data_types_table = session.create_table(
...     "All",
...     data_types={data_type: data_type for data_type in all_data_types},
... )
>>> pprint.pp(
...     {
...         column_name: all_data_types_table[column_name].default_value
...         for column_name in all_data_types_table
...     },
...     sort_dicts=False,
... )
{'boolean': False,
 'boolean[]': None,
 'double': None,
 'double[]': None,
 'float': None,
 'float[]': None,
 'int': None,
 'int[]': None,
 'LocalDate': datetime.date(1970, 1, 1),
 'LocalDateTime': datetime.datetime(1970, 1, 1, 0, 0),
 'LocalTime': datetime.time(0, 0),
 'long': None,
 'long[]': None,
 'String': 'N/A',
 'String[]': None,
 'ZonedDateTime': datetime.datetime(1970, 1, 1, 0, 0, tzinfo=TzInfo(UTC))}

Columns part of the table keys cannot have None as their default value. Key columns with:

  • a numeric scalar data type default to 0:

    >>> numeric_scalar_data_types = [
    ...     "double",
    ...     "float",
    ...     "int",
    ...     "long",
    ... ]
    >>> numeric_scalar_data_types_table = session.create_table(
    ...     "Numeric scalar",
    ...     data_types={
    ...         data_type: data_type for data_type in numeric_scalar_data_types
    ...     },
    ...     keys=numeric_scalar_data_types,
    ... )
    >>> {
    ...     column_name: numeric_scalar_data_types_table[
    ...         column_name
    ...     ].default_value
    ...     for column_name in numeric_scalar_data_types_table
    ... }
    {'double': 0.0, 'float': 0.0, 'int': 0, 'long': 0}
    >>> numeric_scalar_data_types_table += (None, None, None, None)
    >>> numeric_scalar_data_types_table.head()
    Empty DataFrame
    Columns: []
    Index: [(0.0, 0.0, 0, 0)]
    
  • an array data type must have their default value specified:

    >>> array_data_types = ["int[]", "long[]", "float[]", "double[]"]
    >>> session.create_table(
    ...     "Array",
    ...     data_types={data_type: data_type for data_type in array_data_types},
    ...     keys=array_data_types,
    ... )
    Traceback (most recent call last):
        ...
    atoti._graphql_client.exceptions.GraphQLClientGraphQLMultiError: Cannot make a int[] non-nullable because there is no global default value defined for this type. You should manually define a default value.
    >>> array_data_types_table = session.create_table(
    ...     "Array",
    ...     data_types={data_type: data_type for data_type in array_data_types},
    ...     default_values={
    ...         "int[]": [1],
    ...         "long[]": [2],
    ...         "float[]": [3.0],
    ...         "double[]": [4.0],
    ...     },
    ...     keys={"int[]"},
    ... )
    >>> {
    ...     column_name: array_data_types_table[column_name].default_value
    ...     for column_name in array_data_types_table
    ... }
    {'int[]': (1,), 'long[]': (2,), 'float[]': (3.0,), 'double[]': (4.0,)}
    >>> array_data_types_table += (None, None, None, None)
    >>> array_data_types_table.head()
          long[] float[] double[]
    int[]
    [1]      [2]   [3.0]    [4.0]
    

Changing the default value from:

  • None to something else affects both the past None values and the future ones:

    >>> table = session.create_table(
    ...     "Change",
    ...     data_types={
    ...         "int[]": "int[]",
    ...         "long[]": "long[]",
    ...         "float": "float",
    ...         "String": "String",
    ...     },
    ...     default_values={
    ...         "int[]": [1],
    ...         "long[]": None,
    ...         "float": None,
    ...         "String": None,
    ...     },
    ...     keys={"int[]"},
    ... )
    >>> table += (None, None, None, None)
    >>> table["int[]"].default_value = [2]
    >>> table["long[]"].default_value = [3, 4, 5]
    >>> table["float"].default_value = 6.0
    >>> table["String"].default_value = "seven"
    >>> {column_name: table[column_name].default_value for column_name in table}
    {'int[]': (2,), 'long[]': (3, 4, 5), 'float': 6.0, 'String': 'seven'}
    >>> table += (None, None, None, None)
    >>> table.head().sort_index()
              long[]  float String
    int[]
    [1]    [3, 4, 5]    6.0  seven
    [2]    [3, 4, 5]    6.0  seven
    
  • non-None to something else does not affect the past values:

    >>> table["int[]"].default_value = [8]
    >>> table["long[]"].default_value = [9, 10, 11]
    >>> table["float"].default_value = 12.0
    >>> table["String"].default_value = "thirteen"
    >>> table += (None, None, None, None)
    >>> table.head().sort_index()
                long[]  float    String
    int[]
    [1]      [3, 4, 5]    6.0     seven
    [2]      [3, 4, 5]    6.0     seven
    [8]    [9, 10, 11]   12.0  thirteen
    

Changing the default value from non-None to None is impossible both:

  • for key columns:

    >>> table["int[]"].default_value = None
    Traceback (most recent call last):
        ...
    atoti._graphql_client.exceptions.GraphQLClientGraphQLMultiError: Cannot define a null default value for a non-nullable type.
    >>> table["int[]"].default_value
    (8,)
    
  • and non-key columns:

    >>> table["float"].default_value = None
    Traceback (most recent call last):
        ...
    atoti._graphql_client.exceptions.GraphQLClientGraphQLMultiError: Cannot define a null default value for a non-nullable type.
    >>> table["float"].default_value
    12.0