From fec957f33467b69a678ca9a8c5c2d48111cecd9e Mon Sep 17 00:00:00 2001 From: foefl Date: Fri, 7 Nov 2025 14:28:39 +0100 Subject: [PATCH] add schemas --- src/umbreit/db.py | 89 ++++++++++++++++++++++++++++++++++++++++---- src/umbreit/types.py | 8 ++++ 2 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 src/umbreit/types.py diff --git a/src/umbreit/db.py b/src/umbreit/db.py index 37254da..c410ec4 100644 --- a/src/umbreit/db.py +++ b/src/umbreit/db.py @@ -1,6 +1,9 @@ +import polars as pl import sqlalchemy as sql from sqlalchemy import Column, Table +from umbreit.types import PolarsNullValues, PolarsSchema + metadata = sql.MetaData() ext_bedpbed = Table( @@ -25,6 +28,28 @@ ext_bedpbed = Table( Column("BEDP_DATUM_LIEFERUNG", sql.Date, nullable=True), ) +ext_bedpbed_schema_map: PolarsSchema = { + "BEDARFNR": pl.UInt32, + "BEDP_SEQUENZ": pl.UInt32, + "BEDP_TITELNR": pl.UInt32, + "BEDP_MAN": pl.UInt8, + "VERLAGSNR": pl.UInt32, + "PRODUKT_GR": pl.UInt8, + "BEARBEITER": pl.String, + "BEDP_MENGE_BEDARF": pl.UInt32, + "BEDP_MENGE_VERKAUF": pl.UInt32, + "BEDP_MENGE_ANFRAGE": pl.UInt32, + "BEDP_MENGE_BESTELLUNG": pl.UInt32, + "BEDP_MENGE_FREI": pl.UInt32, + "BEDP_MENGE_BEDARF_VM": pl.UInt32, + "BEDP_BESTELLWEG": pl.String, + "BEDP_DATUM_LIEFERUNG": pl.Date, +} + +ext_bedpbed_null_values: PolarsNullValues = { + "BEDP_MENGE_BEDARF": "-1", +} + ext_titel_info = Table( "ext_titel_info", metadata, @@ -34,7 +59,7 @@ ext_titel_info = Table( Column("VERLAGSNR", sql.Integer, nullable=False), Column("VERLAG_SUCHBEGRIFF", sql.String(225), nullable=False), Column("MELDENUMMER", sql.Integer, nullable=False), - Column("DATUM_LIEFERBAR", sql.Date, nullable=False), + Column("DATUM_LIEFERBAR", sql.DateTime, nullable=False), Column("MENGE_VORMERKER", sql.Integer, nullable=True), Column("PRODUKTGRUPPE", sql.Integer, nullable=False), Column("PRODUKTGRUPPE_TYP", sql.String(3), nullable=False), @@ -42,6 +67,22 @@ ext_titel_info = Table( Column("BESTAND_VERFUEGBAR", sql.Integer, nullable=False), ) +ext_titel_info_schema_map: PolarsSchema = { + "TI_NUMMER": pl.UInt32, + "MANDFUEHR": pl.UInt8, + "TI_KURZTEXT": pl.String, + "VERLAGSNR": pl.UInt32, + "VERLAG_SUCHBEGRIFF": pl.String, + "MELDENUMMER": pl.UInt8, + "DATUM_LIEFERBAR": pl.Datetime, + "MENGE_VORMERKER": pl.UInt32, + "PRODUKTGRUPPE": pl.UInt16, + "PRODUKTGRUPPE_TYP": pl.String, + "EINKAEUFER": pl.String, + "BESTAND_VERFUEGBAR": pl.UInt64, +} + +ext_titel_info_null_values: PolarsNullValues = {} EXT_BESPBES_INFO = Table( "EXT_BESPBES_INFO", @@ -50,7 +91,7 @@ EXT_BESPBES_INFO = Table( Column("BESP_DAT_ERW", sql.Date, nullable=False), Column("BESP_MENGE", sql.Integer, nullable=False), Column("BESP_STATUS", sql.Integer, nullable=False), - Column("BESP_GRUND", sql.Integer, nullable=True), + Column("BESP_GRUND", sql.String(2), nullable=True), Column("BESP_MAND", sql.Integer, nullable=False), Column("BESP_TITELNR", sql.Integer, nullable=False), Column("BESPAA", sql.String(1), nullable=True), @@ -58,6 +99,21 @@ EXT_BESPBES_INFO = Table( Column("BESVAK999", sql.String(1), nullable=True), ) +EXT_BESPBES_INFO_schema_map: PolarsSchema = { + "BES_DATUM": pl.Date, + "BESP_DAT_ERW": pl.Date, + "BESP_MENGE": pl.UInt32, + "BESP_STATUS": pl.UInt8, + "BESP_GRUND": pl.String, + "BESP_MAND": pl.UInt8, + "BESP_TITELNR": pl.UInt32, + "BESPAA": pl.String, + "BESP_ART": pl.String, + "BESVAK999": pl.String, +} + +EXT_BESPBES_INFO_null_values: PolarsNullValues = {} + EXT_AUFPAUF = Table( "EXT_AUFPAUF", metadata, @@ -78,11 +134,30 @@ EXT_AUFPAUF = Table( Column("AUFP_DATUM_ANLAGE", sql.DateTime, nullable=False), ) -tables: tuple[Table, ...] = ( - ext_bedpbed, - ext_titel_info, - EXT_AUFPAUF, - EXT_BESPBES_INFO, +EXT_AUFPAUF_schema_map: PolarsSchema = { + "TITELNR": pl.UInt32, + "AUFTRAGSNUMMER": pl.UInt32, + "AUFTRAGS_DATUM": pl.Datetime, + "AUFTRAGS_ART": pl.UInt8, + "DATUM_LIEFERUNG": pl.Date, + "AUFTRAGS_STATUS": pl.String, + "KUNDE_LIEFERUNG": pl.UInt32, + "KUNDE_RECHNUNG": pl.UInt32, + "MANDANT": pl.UInt8, + "AUFP_POSITION": pl.UInt16, + "AUFP_MENGE_AUFTRAG": pl.UInt32, + "AUFP_MENGE_GELIEFERT": pl.UInt32, + "AUFP_VORMERKUNG": pl.String, + "AUFP_DATUM_ANLAGE": pl.Datetime, +} + +EXT_AUFPAUF_null_values: PolarsNullValues = {} + +csv_tables: tuple[tuple[Table, PolarsSchema, PolarsNullValues], ...] = ( + (ext_bedpbed, ext_bedpbed_schema_map, ext_bedpbed_null_values), + (ext_titel_info, ext_titel_info_schema_map, ext_titel_info_null_values), + (EXT_AUFPAUF, EXT_AUFPAUF_schema_map, EXT_AUFPAUF_null_values), + (EXT_BESPBES_INFO, EXT_BESPBES_INFO_schema_map, EXT_BESPBES_INFO_null_values), ) results = Table( diff --git a/src/umbreit/types.py b/src/umbreit/types.py new file mode 100644 index 0000000..1e97b43 --- /dev/null +++ b/src/umbreit/types.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from typing import TypeAlias + +import polars as pl + +PolarsSchema: TypeAlias = dict[str, type[pl.DataType]] +PolarsNullValues: TypeAlias = dict[str, str]