diff --git a/target_clickhouse/connectors.py b/target_clickhouse/connectors.py index b86d9ed..2f59b74 100644 --- a/target_clickhouse/connectors.py +++ b/target_clickhouse/connectors.py @@ -105,10 +105,15 @@ def to_sql_type( sqlalchemy.types.FLOAT(), ) elif type(sql_type) == sqlalchemy.types.INTEGER: - sql_type = typing.cast( - sqlalchemy.types.TypeEngine, - clickhouse_sqlalchemy_types.Int64(), - ) + minimum = jsonschema_type.get("minimum") + if minimum is not None and minimum == 0: + sql_type = typing.cast( + sqlalchemy.types.TypeEngine, clickhouse_sqlalchemy_types.UInt64(), + ) + else: + sql_type = typing.cast( + sqlalchemy.types.TypeEngine, clickhouse_sqlalchemy_types.Int64(), + ) elif type(sql_type) == sqlalchemy.types.DATE: sql_type = typing.cast( sqlalchemy.types.TypeEngine, diff --git a/target_clickhouse/sinks.py b/target_clickhouse/sinks.py index 75495a4..98e96db 100644 --- a/target_clickhouse/sinks.py +++ b/target_clickhouse/sinks.py @@ -162,19 +162,7 @@ def _validate_and_parse(self, record: dict) -> dict: # Pre-validate and correct string type mismatches. record = pre_validate_for_string_type(record, self.schema, self.logger) - try: - self._validator.validate(record) - self._parse_timestamps_in_record( - record=record, - schema=self.schema, - treatment=self.datetime_error_treatment, - ) - except jsonschema_exceptions.ValidationError as e: - if self.logger: - self.logger.exception(f"Record failed validation: {record}") - raise e # : RERAISES - - return record + return super()._validate_and_parse(record) def _parse_timestamps_in_record( self,