Quick Start#
[1]:
from simpletype.api import (
Integer,
TinyInteger,
SmallInteger,
BigInteger,
Float,
Double,
Decimal,
String,
Binary,
Bool,
Null,
Datetime,
Set,
List,
Struct,
json_type_to_simple_type,
)
from rich import print as rprint
[2]:
simple_schema = {
"a_int": Integer(),
"a_float": Float(),
"a_str": String(),
"a_binary": Binary(),
"a_bool": Bool(),
"a_null": Null(),
"a_int_set": Set(itype=Integer()),
"a_str_list": List(itype=String()),
"a_struct_list": List(
itype=Struct(
fields={
"a_int": Integer(),
"a_str": String(),
}
)
),
"a_struct": Struct(
fields={
"a_int": Integer(),
"a_str": String(),
}
),
}
rprint(simple_schema)
{ 'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False), 'a_float': Float(default_for_null=Sentinel('NOTHING'), precision=Sentinel('NOTHING'), required=False), 'a_str': String(default_for_null='', required=False), 'a_binary': Binary(default_for_null=b'', required=False), 'a_bool': Bool(default_for_null=Sentinel('NOTHING'), required=False), 'a_null': Null(default_for_null=None, required=False), 'a_int_set': Set( itype=Integer(default_for_null=Sentinel('NOTHING'), required=False), default_for_null=[], required=False ), 'a_str_list': List(itype=String(default_for_null='', required=False), default_for_null=[], required=False), 'a_struct_list': List( itype=Struct( fields={ 'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False), 'a_str': String(default_for_null='', required=False) }, required=False ), default_for_null=[], required=False ), 'a_struct': Struct( fields={ 'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False), 'a_str': String(default_for_null='', required=False) }, required=False ) }
[3]:
simple_schema_json = {
k: v.to_dict() for k, v in simple_schema.items()
}
rprint(simple_schema_json)
{ 'a_int': {'type': 'int', 'required': False}, 'a_float': {'type': 'float', 'required': False}, 'a_str': {'type': 'str', 'default_for_null': '', 'required': False}, 'a_binary': {'type': 'bin', 'default_for_null': b'', 'required': False}, 'a_bool': {'type': 'bool', 'required': False}, 'a_null': {'type': 'null', 'default_for_null': None, 'required': False}, 'a_int_set': { 'type': 'set', 'itype': {'type': 'int', 'required': False}, 'default_for_null': [], 'required': False }, 'a_str_list': { 'type': 'list', 'itype': {'type': 'str', 'default_for_null': '', 'required': False}, 'default_for_null': [], 'required': False }, 'a_struct_list': { 'type': 'list', 'itype': { 'type': 'struct', 'fields': { 'a_int': {'type': 'int', 'required': False}, 'a_str': {'type': 'str', 'default_for_null': '', 'required': False} }, 'required': False }, 'default_for_null': [], 'required': False }, 'a_struct': { 'type': 'struct', 'fields': { 'a_int': {'type': 'int', 'required': False}, 'a_str': {'type': 'str', 'default_for_null': '', 'required': False} }, 'required': False } }
[4]:
simple_schema_1 = {
k: json_type_to_simple_type(v) for k, v in simple_schema_json.items()
}
rprint(simple_schema_1)
{ 'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False), 'a_float': Float(default_for_null=Sentinel('NOTHING'), precision=Sentinel('NOTHING'), required=False), 'a_str': String(default_for_null='', required=False), 'a_binary': Binary(default_for_null=b'', required=False), 'a_bool': Bool(default_for_null=Sentinel('NOTHING'), required=False), 'a_null': Null(default_for_null=None, required=False), 'a_int_set': Set( itype=Integer(default_for_null=Sentinel('NOTHING'), required=False), default_for_null=[], required=False ), 'a_str_list': List(itype=String(default_for_null='', required=False), default_for_null=[], required=False), 'a_struct_list': List( itype=Struct( fields={ 'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False), 'a_str': String(default_for_null='', required=False) }, required=False ), default_for_null=[], required=False ), 'a_struct': Struct( fields={ 'a_int': Integer(default_for_null=Sentinel('NOTHING'), required=False), 'a_str': String(default_for_null='', required=False) }, required=False ) }
[5]:
polars_schema = {
k: v.to_polars() for k, v in simple_schema.items()
}
rprint(polars_schema)
{ 'a_int': Int32, 'a_float': Float32, 'a_str': String, 'a_binary': Binary, 'a_bool': Boolean, 'a_null': Null, 'a_int_set': List(Int32), 'a_str_list': List(String), 'a_struct_list': List(Struct({'a_int': Int32, 'a_str': String})), 'a_struct': Struct({'a_int': Int32, 'a_str': String}) }
[6]:
glue_schema = {
k: v.to_glue() for k, v in simple_schema.items()
}
rprint(glue_schema)
{ 'a_int': 'bigint', 'a_float': 'float', 'a_str': 'string', 'a_binary': 'binary', 'a_bool': 'boolean', 'a_null': 'string', 'a_int_set': 'array<bigint>', 'a_str_list': 'array<string>', 'a_struct_list': 'array<struct<a_int:bigint,a_str:string>>', 'a_struct': 'struct<a_int:bigint,a_str:string>' }
[7]:
glue_schema = {
k: v.to_spark_string() for k, v in simple_schema.items()
}
rprint(glue_schema)
{ 'a_int': 'bigint', 'a_float': 'float', 'a_str': 'string', 'a_binary': 'binary', 'a_bool': 'boolean', 'a_null': 'null', 'a_int_set': {'type': 'array', 'elementType': 'bigint'}, 'a_str_list': {'type': 'array', 'elementType': 'string', 'containsNull': True}, 'a_struct_list': { 'type': 'array', 'elementType': { 'type': 'struct', 'fields': [ {'name': 'a_int', 'type': 'bigint', 'nullable': True, 'metadata': {}}, {'name': 'a_str', 'type': 'string', 'nullable': True, 'metadata': {}} ] }, 'containsNull': True }, 'a_struct': { 'type': 'struct', 'fields': [ {'name': 'a_int', 'type': 'bigint', 'nullable': True, 'metadata': {}}, {'name': 'a_str', 'type': 'string', 'nullable': True, 'metadata': {}} ] } }
[8]:
dynamodb_json_polars_schema = {
k: v.to_dynamodb_json_polars() for k, v in simple_schema.items()
}
rprint(dynamodb_json_polars_schema)
{ 'a_int': Struct({'N': String}), 'a_float': Struct({'N': String}), 'a_str': Struct({'S': String}), 'a_binary': Struct({'B': String}), 'a_bool': Struct({'BOOL': Boolean}), 'a_null': Struct({'NULL': Boolean}), 'a_int_set': Struct({'NS': List(String)}), 'a_str_list': Struct({'L': List(Struct({'S': String}))}), 'a_struct_list': Struct({'L': List(Struct({'M': Struct({'a_int': Struct({'N': String}), 'a_str': Struct({'S': String})})}))}), 'a_struct': Struct({'M': Struct({'a_int': Struct({'N': String}), 'a_str': Struct({'S': String})})}) }
[ ]: