{
 "type": [
  "object"
 ],
 "properties": {
  "default_config": {
   "$ref": "#/$defs/DefaultConfig"
  },
  "matchers": {
   "type": [
    "array"
   ],
   "default": "[]",
   "items": {
    "$ref": "#/$defs/MatchConfig"
   }
  },
  "tables": {
   "type": [
    "array"
   ],
   "default": "[]",
   "items": {
    "$ref": "#/$defs/UserTableConfig"
   }
  },
  "cycle_resolution_strategy": {
   "$ref": "#/$defs/CycleResolutionStrategy"
  },
  "schema_creation_mode": {
   "$ref": "#/$defs/SchemaCreationMode"
  },
  "table_truncation_mode": {
   "$ref": "#/$defs/TableTruncationMode"
  },
  "safety_mode": {
   "$ref": "#/$defs/SafetyMode"
  },
  "global_seed": {
   "type": [
    "string"
   ],
   "default": ""
  },
  "schemas": {
   "type": [
    "array"
   ],
   "items": {
    "type": [
     "string"
    ]
   }
  },
  "metadata": {
   "$ref": "#/$defs/AdditionalMetadata"
  },
  "use_text_column_heuristics": {
   "type": [
    "boolean"
   ],
   "default": "true"
  },
  "flags": {
   "type": [
    "array"
   ],
   "default": "[]",
   "items": {
    "$ref": "#/$defs/ConfigFlag"
   }
  },
  "scripts": {
   "$ref": "#/$defs/PrePostExecutionScripts"
  },
  "variables": {
   "$ref": "#/$defs/ConfigVariables"
  }
 },
 "additionalProperties": false,
 "$defs": {
  "DefaultConfig": {
   "type": [
    "object",
    "null"
   ],
   "properties": {
    "mode": {
     "$ref": "#/$defs/UserTransformationMode"
    },
    "target_ratio": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "target_row_number": {
     "type": [
      "integer",
      "null"
     ],
     "format": "int64"
    },
    "insert_batch_size": {
     "type": [
      "integer",
      "null"
     ]
    },
    "use_working_directory": {
     "type": [
      "boolean"
     ],
     "default": "true"
    },
    "locale": {
     "type": [
      "string"
     ],
     "default": "en-GB"
    },
    "in_memory_filter_threshold": {
     "type": [
      "integer",
      "null"
     ]
    },
    "parent_data_mode": {
     "$ref": "#/$defs/ParentDataMode"
    },
    "checkpoint": {
     "$ref": "#/$defs/Checkpoint"
    },
    "fetch": {
     "$ref": "#/$defs/FetchConfig"
    },
    "items": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/DefaultConfigItem"
     }
    },
    "additional_items": {
     "type": [
      "array"
     ],
     "default": "[]",
     "items": {
      "$ref": "#/$defs/DefaultConfigItem"
     }
    }
   },
   "additionalProperties": false
  },
  "MatchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "transformation": {
     "$ref": "#/$defs/MatcherTransformation"
    }
   },
   "oneOf": [
    {
     "$ref": "#/$defs/AllMatchConfig"
    },
    {
     "$ref": "#/$defs/SqlTypeMatchConfig"
    },
    {
     "$ref": "#/$defs/ColumnNameMatchConfig"
    },
    {
     "$ref": "#/$defs/TableNameMatchConfig"
    },
    {
     "$ref": "#/$defs/FullyQualifiedColumnNameMatchConfig"
    },
    {
     "$ref": "#/$defs/ComplexFilterMatchConfig"
    }
   ]
  },
  "UserTableConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "table_name_with_schema": {
     "type": [
      "string"
     ]
    },
    "mode": {
     "$ref": "#/$defs/UserTransformationMode"
    },
    "transformations": {
     "type": [
      "array"
     ],
     "default": "[]",
     "items": {
      "$ref": "#/$defs/ColumnTransformationParams"
     }
    },
    "target_ratio": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "target_row_number": {
     "type": [
      "integer",
      "null"
     ],
     "format": "int64"
    },
    "cycle_breaker_references": {
     "type": [
      "array"
     ],
     "default": "[]",
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "insert_batch_size": {
     "type": [
      "integer",
      "null"
     ]
    },
    "use_working_directory": {
     "type": [
      "boolean",
      "null"
     ]
    },
    "filter": {
     "type": [
      "string"
     ]
    },
    "checkpoint": {
     "$ref": "#/$defs/Checkpoint"
    },
    "in_memory_filter_threshold": {
     "type": [
      "integer",
      "null"
     ]
    },
    "parent_data_mode": {
     "$ref": "#/$defs/ParentDataMode"
    },
    "fetch": {
     "$ref": "#/$defs/FetchConfig"
    }
   },
   "additionalProperties": false
  },
  "CycleResolutionStrategy": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "FAIL",
    "DELETE_NOT_REQUIRED",
    "DEFER_FOREIGN_KEY"
   ]
  },
  "SchemaCreationMode": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "DO_NOT_CREATE",
    "CREATE",
    "CREATE_IF_NOT_EXISTS",
    "DROP_AND_CREATE"
   ]
  },
  "TableTruncationMode": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "DO_NOT_TRUNCATE",
    "TRUNCATE",
    "IGNORE"
   ]
  },
  "SafetyMode": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "STRICT",
    "RELAXED"
   ]
  },
  "AdditionalMetadata": {
   "type": [
    "object",
    "null"
   ],
   "properties": {
    "tables": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/TableAdditionalMetadata"
     }
    },
    "schemas": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "$ref": "#/$defs/SchemaMapping"
     }
    }
   },
   "additionalProperties": false
  },
  "ConfigFlag": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "DISABLE_DB_INDEXES_ON_WRITE",
    "DISABLE_DB_TRIGGERS_ON_WRITE",
    "USE_FILE_BATCH_INSERT",
    "NOT_FALLBACK_TO_ONE_BY_ONE_INSERTS",
    "SKIP_FAILED_BATCHES",
    "FORCE_FALLBACK_TO_ONE_BY_ONE_INSERTS",
    "FORCE_CLAIM_SINK",
    "START_INT_SEQUENCE_FROM_ZERO",
    "DO_NOT_CONTINUE_FROM_CHECKPOINT",
    "DO_NOT_PRELOAD_METADATA_SNAPSHOT",
    "PROPAGATE_FILTER_TO_CHILDREN",
    "DO_NOT_SELECT_COUNT_FOR_MASKING",
    "SAME_DATABASE_TRANSFORMATION",
    "DISABLE_EAGER_LOAD_TABLES",
    "DO_NOT_USE_ASSISTED_JOINS",
    "DISABLE_BULK_INSERT",
    "IMPRECISE_AGGREGATION",
    "ENABLE_BULK_COLUMN_STATS",
    "APPENDING_MODE"
   ]
  },
  "PrePostExecutionScripts": {
   "type": [
    "object",
    "null"
   ],
   "properties": {
    "pre": {
     "$ref": "#/$defs/PrePostExecutionScript"
    },
    "post": {
     "$ref": "#/$defs/PrePostExecutionScript"
    }
   },
   "additionalProperties": false
  },
  "ConfigVariables": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": true
  },
  "UserTransformationMode": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "MASKING",
    "GENERATION",
    "KEEP"
   ]
  },
  "ParentDataMode": {
   "type": [
    "string"
   ],
   "enum": [
    "NEW",
    "OLD",
    "ALL"
   ]
  },
  "Checkpoint": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/RefreshCheckpoint"
    },
    {
     "$ref": "#/$defs/IgnoreCheckpoint"
    },
    {
     "$ref": "#/$defs/IncrementalCheckpoint"
    }
   ]
  },
  "FetchConfig": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/StreamingFetchConfig"
    },
    {
     "$ref": "#/$defs/ChunkingFetchConfig"
    }
   ]
  },
  "DefaultConfigItem": {
   "type": [
    "object"
   ],
   "properties": {
    "id": {
     "type": [
      "string",
      "null"
     ]
    },
    "conditions": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/Condition"
     }
    },
    "transformation": {
     "$ref": "#/$defs/TransformationParams"
    }
   },
   "additionalProperties": false
  },
  "MatcherTransformation": {
   "type": [
    "object"
   ],
   "properties": {
    "params": {
     "$ref": "#/$defs/TransformationParams"
    },
    "mapping": {
     "$ref": "#/$defs/ValueMapping"
    },
    "mode": {
     "$ref": "#/$defs/UserTransformationMode"
    }
   },
   "additionalProperties": false
  },
  "AllMatchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "match_by": {
     "const": "all"
    },
    "comment": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "SqlTypeMatchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "match_by": {
     "const": "sql_type"
    },
    "types": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "comment": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "ColumnNameMatchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "match_by": {
     "const": "column_name"
    },
    "columns": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "comment": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "TableNameMatchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "match_by": {
     "const": "table_name"
    },
    "tables": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "comment": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "FullyQualifiedColumnNameMatchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "match_by": {
     "const": "fully_qualified_column_name"
    },
    "names": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "comment": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "ComplexFilterMatchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "match_by": {
     "const": "complex_filter"
    },
    "filter": {
     "$ref": "#/$defs/Filter"
    },
    "comment": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "ColumnTransformationParams": {
   "type": [
    "object"
   ],
   "properties": {
    "columns": {
     "type": [
      "array"
     ],
     "default": "[]",
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "params": {
     "$ref": "#/$defs/TransformationParams"
    },
    "id": {
     "type": [
      "string",
      "null"
     ]
    },
    "mapping": {
     "$ref": "#/$defs/ValueMapping"
    },
    "mode": {
     "$ref": "#/$defs/UserTransformationMode"
    }
   },
   "additionalProperties": false,
   "if": {
    "required": [
     "params"
    ],
    "properties": {
     "params": {
      "required": [
       "type"
      ],
      "properties": {
       "type": {
        "enum": [
         "arithmetic_generator",
         "constant_boolean",
         "constant_date",
         "constant_numeric",
         "constant_string",
         "constant_xml",
         "continuous_generator",
         "date_generator",
         "date_time_unique_hashing",
         "default_value",
         "enum_unique_hashing",
         "format_preserving_hashing",
         "formatted_string_generator",
         "int_sequence_generator",
         "json_multi_value_transformer",
         "json_pointer_transformer",
         "noising",
         "quantile_generator",
         "redaction",
         "string_sequence_generator",
         "t24_id_remap",
         "unique_hashing",
         "uuid_generator",
         "xpath_transformer"
        ]
       }
      }
     }
    }
   },
   "then": {
    "required": [
     "columns"
    ],
    "properties": {
     "columns": {
      "minItems": 1,
      "maxItems": 1
     }
    }
   }
  },
  "TableAdditionalMetadata": {
   "type": [
    "object"
   ],
   "properties": {
    "table_name_with_schema": {
     "type": [
      "string"
     ]
    },
    "foreign_keys": {
     "$ref": "#/$defs/ForeignKeysAdditionalMetadata"
    },
    "fields": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "$ref": "#/$defs/FieldAdditionalMetadata"
     }
    }
   },
   "additionalProperties": false
  },
  "SchemaMapping": {
   "type": [
    "object"
   ],
   "properties": {
    "input": {
     "type": [
      "string"
     ]
    },
    "output": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "PrePostExecutionScript": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/InlinePrePostExecutionScript"
    },
    {
     "$ref": "#/$defs/FilePrePostExecutionScript"
    }
   ]
  },
  "RefreshCheckpoint": {
   "type": [
    "object"
   ],
   "properties": {
    "mode": {
     "const": "refresh"
    }
   },
   "additionalProperties": false
  },
  "IgnoreCheckpoint": {
   "type": [
    "object"
   ],
   "properties": {
    "mode": {
     "const": "ignore_table"
    }
   },
   "additionalProperties": false
  },
  "IncrementalCheckpoint": {
   "type": [
    "object"
   ],
   "properties": {
    "mode": {
     "const": "incremental"
    },
    "column_name": {
     "type": [
      "string"
     ]
    },
    "source": {
     "$ref": "#/$defs/IncrementalSource"
    }
   },
   "additionalProperties": false
  },
  "StreamingFetchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "streaming"
    },
    "fetch_size": {
     "type": [
      "integer"
     ],
     "default": "1000"
    }
   },
   "additionalProperties": false
  },
  "ChunkingFetchConfig": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "chunking"
    },
    "chunk_size": {
     "type": [
      "integer"
     ],
     "default": "1000"
    },
    "parallelism": {
     "type": [
      "integer"
     ],
     "default": "1"
    }
   },
   "additionalProperties": false
  },
  "Condition": {
   "type": [
    "object"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/IsKeyCondition"
    },
    {
     "$ref": "#/$defs/IsPrimaryKeyCondition"
    },
    {
     "$ref": "#/$defs/IsForeignKeyCondition"
    },
    {
     "$ref": "#/$defs/IsIgnoredForeignKeyCondition"
    },
    {
     "$ref": "#/$defs/IsDetachedForeignKeyCondition"
    },
    {
     "$ref": "#/$defs/IsUniqueCondition"
    },
    {
     "$ref": "#/$defs/IsNullableCondition"
    },
    {
     "$ref": "#/$defs/ModeInCondition"
    },
    {
     "$ref": "#/$defs/ParentModeInCondition"
    },
    {
     "$ref": "#/$defs/TrueCondition"
    },
    {
     "$ref": "#/$defs/DataTypeCondition"
    },
    {
     "$ref": "#/$defs/UniqueValuesCondition"
    },
    {
     "$ref": "#/$defs/IsEmptyCondition"
    },
    {
     "$ref": "#/$defs/ParentTransformationParamsCondition"
    },
    {
     "$ref": "#/$defs/NoParentTransformationParamsCondition"
    },
    {
     "$ref": "#/$defs/IsUuidCondition"
    },
    {
     "$ref": "#/$defs/IsIdentityCondition"
    },
    {
     "$ref": "#/$defs/IsAutogeneratedCondition"
    },
    {
     "$ref": "#/$defs/SingleDistinctValueCondition"
    },
    {
     "$ref": "#/$defs/DistinctValuesCondition"
    },
    {
     "$ref": "#/$defs/StandardDeviationCondition"
    },
    {
     "$ref": "#/$defs/NotCondition"
    },
    {
     "$ref": "#/$defs/SafetyModeCondition"
    },
    {
     "$ref": "#/$defs/IsIgnoredTableCondition"
    },
    {
     "$ref": "#/$defs/TextColumnHeuristicsEnabledCondition"
    },
    {
     "$ref": "#/$defs/ColumnTableNameRegexCondition"
    },
    {
     "$ref": "#/$defs/IsComputableColumnCondition"
    },
    {
     "$ref": "#/$defs/IsEnum"
    },
    {
     "$ref": "#/$defs/IsColumnWithLargeValuesCondition"
    },
    {
     "$ref": "#/$defs/HasDefaultValue"
    },
    {
     "$ref": "#/$defs/ExternalClassifierCondition"
    }
   ]
  },
  "TransformationParams": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/CategoricalGeneratorParams"
    },
    {
     "$ref": "#/$defs/ConditionalGeneratorParams"
    },
    {
     "$ref": "#/$defs/ContinuousGeneratorParams"
    },
    {
     "$ref": "#/$defs/QuantileGeneratorParams"
    },
    {
     "$ref": "#/$defs/ForeignKeyGeneratorParams"
    },
    {
     "$ref": "#/$defs/UniqueGeneratorParams"
    },
    {
     "$ref": "#/$defs/FormatPreservingHashingParams"
    },
    {
     "$ref": "#/$defs/FormattedStringGeneratorParams"
    },
    {
     "$ref": "#/$defs/IntSequenceGeneratorParams"
    },
    {
     "$ref": "#/$defs/StringSequenceGeneratorParams"
    },
    {
     "$ref": "#/$defs/NoisingParams"
    },
    {
     "$ref": "#/$defs/NullGeneratorParams"
    },
    {
     "$ref": "#/$defs/PassthroughParams"
    },
    {
     "$ref": "#/$defs/PersonGeneratorParams"
    },
    {
     "$ref": "#/$defs/AddressGeneratorParams"
    },
    {
     "$ref": "#/$defs/FinanceGeneratorParams"
    },
    {
     "$ref": "#/$defs/RedactionParams"
    },
    {
     "$ref": "#/$defs/UniqueHashingParams"
    },
    {
     "$ref": "#/$defs/DateTimeUniqueHashingParams"
    },
    {
     "$ref": "#/$defs/EnumUniqueHashingParams"
    },
    {
     "$ref": "#/$defs/DateGeneratorParams"
    },
    {
     "$ref": "#/$defs/UuidGeneratorParams"
    },
    {
     "$ref": "#/$defs/ConstantNumericGeneratorParams"
    },
    {
     "$ref": "#/$defs/ConstantStringGeneratorParams"
    },
    {
     "$ref": "#/$defs/DefaultValueGeneratorParams"
    },
    {
     "$ref": "#/$defs/ConstantDateGeneratorParams"
    },
    {
     "$ref": "#/$defs/ConstantBooleanGeneratorParams"
    },
    {
     "$ref": "#/$defs/LoopGeneratorParams"
    },
    {
     "$ref": "#/$defs/ConstantXmlGeneratorParams"
    },
    {
     "$ref": "#/$defs/JsonPointerTransformerParams"
    },
    {
     "$ref": "#/$defs/XPathTransformerParams"
    },
    {
     "$ref": "#/$defs/JsonMultiValueTransformerParams"
    },
    {
     "$ref": "#/$defs/T24IdRemapParams"
    },
    {
     "$ref": "#/$defs/VoidGeneratorParams"
    },
    {
     "$ref": "#/$defs/ScriptingTransformerParams"
    },
    {
     "$ref": "#/$defs/ArithmeticGeneratorParams"
    },
    {
     "$ref": "#/$defs/SieveGeneratorParams"
    }
   ]
  },
  "ValueMapping": {
   "type": [
    "object"
   ],
   "properties": {
    "read": {
     "type": [
      "string"
     ]
    },
    "write": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "Filter": {
   "type": [
    "object"
   ],
   "properties": {
    "schemas": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "tables": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "columns": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "types": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "ForeignKeysAdditionalMetadata": {
   "type": [
    "object"
   ],
   "additionalProperties": {
    "$ref": "#/$defs/ForeignKeyAdditionalMetadata"
   }
  },
  "FieldAdditionalMetadata": {
   "type": [
    "object"
   ],
   "properties": {
    "name": {
     "type": [
      "string"
     ]
    },
    "nullable": {
     "type": [
      "boolean",
      "null"
     ]
    }
   },
   "additionalProperties": false
  },
  "InlinePrePostExecutionScript": {
   "type": [
    "object"
   ],
   "properties": {
    "source": {
     "const": "INLINE"
    },
    "script": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "FilePrePostExecutionScript": {
   "type": [
    "object"
   ],
   "properties": {
    "source": {
     "const": "FILE"
    },
    "path": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "IncrementalSource": {
   "type": [
    "object"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/LastValueIncrementalSource"
    },
    {
     "$ref": "#/$defs/ConstantIncrementalSource"
    }
   ]
  },
  "IsKeyCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_key"
    }
   },
   "additionalProperties": false
  },
  "IsPrimaryKeyCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_primary_key"
    }
   },
   "additionalProperties": false
  },
  "IsForeignKeyCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_foreign_key"
    }
   },
   "additionalProperties": false
  },
  "IsIgnoredForeignKeyCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_ignored_foreign_key"
    }
   },
   "additionalProperties": false
  },
  "IsDetachedForeignKeyCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_detached_foreign_key"
    }
   },
   "additionalProperties": false
  },
  "IsUniqueCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_unique"
    }
   },
   "additionalProperties": false
  },
  "IsNullableCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_nullable"
    }
   },
   "additionalProperties": false
  },
  "ModeInCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "mode_in"
    },
    "modes": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/UserTransformationMode"
     }
    }
   },
   "additionalProperties": false
  },
  "ParentModeInCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "parent_mode_in"
    },
    "modes": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/UserTransformationMode"
     }
    }
   },
   "additionalProperties": false
  },
  "TrueCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "true"
    }
   },
   "additionalProperties": false
  },
  "DataTypeCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "data_type"
    },
    "data_type": {
     "$ref": "#/$defs/TransformationDataType"
    }
   },
   "additionalProperties": false
  },
  "UniqueValuesCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "unique_values"
    },
    "unique_ratio_threshold": {
     "type": [
      "number"
     ],
     "format": "double",
     "default": "0.5"
    },
    "min_table_size_threshold": {
     "type": [
      "integer"
     ],
     "default": "10"
    }
   },
   "additionalProperties": false
  },
  "IsEmptyCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_empty"
    }
   },
   "additionalProperties": false
  },
  "ParentTransformationParamsCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "parent_transformation"
    },
    "parent_transformation_params": {
     "$ref": "#/$defs/TransformationParams"
    }
   },
   "additionalProperties": false
  },
  "NoParentTransformationParamsCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "no_parent_transformation"
    }
   },
   "additionalProperties": false
  },
  "IsUuidCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_uuid"
    }
   },
   "additionalProperties": false
  },
  "IsIdentityCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_identity"
    }
   },
   "additionalProperties": false
  },
  "IsAutogeneratedCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_autogenerated"
    }
   },
   "additionalProperties": false
  },
  "SingleDistinctValueCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "single_distinct_value"
    }
   },
   "additionalProperties": false
  },
  "DistinctValuesCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "distinct_values"
    },
    "minimum_threshold": {
     "type": [
      "integer"
     ]
    },
    "maximum_threshold": {
     "type": [
      "integer",
      "null"
     ]
    }
   },
   "additionalProperties": false
  },
  "StandardDeviationCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "std_dev"
    },
    "std_dev_threshold": {
     "type": [
      "number"
     ],
     "format": "double",
     "default": "0.0"
    }
   },
   "additionalProperties": false
  },
  "NotCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "not"
    },
    "condition": {
     "$ref": "#/$defs/Condition"
    }
   },
   "additionalProperties": false
  },
  "SafetyModeCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "safety_mode"
    },
    "mode": {
     "$ref": "#/$defs/SafetyMode"
    }
   },
   "additionalProperties": false
  },
  "IsIgnoredTableCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_ignored_table"
    }
   },
   "additionalProperties": false
  },
  "TextColumnHeuristicsEnabledCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "text_column_heuristics"
    }
   },
   "additionalProperties": false
  },
  "ColumnTableNameRegexCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "column_table_name_regex"
    },
    "column_regex": {
     "type": [
      "string"
     ]
    },
    "table_regex": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "IsComputableColumnCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_computable_column_condition"
    }
   },
   "additionalProperties": false
  },
  "IsEnum": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_enum"
    }
   },
   "additionalProperties": false
  },
  "IsColumnWithLargeValuesCondition": {
   "type": "object",
   "properties": {
    "type": {
     "const": "is_large_value_column"
    }
   },
   "additionalProperties": false
  },
  "HasDefaultValue": {
   "type": "object",
   "properties": {
    "type": {
     "const": "has_default_value_generator"
    }
   },
   "additionalProperties": false
  },
  "ExternalClassifierCondition": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "external_classifier"
    },
    "classifier": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "CategoricalGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "categorical_generator"
    },
    "categories": {
     "$ref": "#/$defs/Categories"
    }
   },
   "additionalProperties": false
  },
  "ConditionalGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "conditional_generator"
    },
    "conditional_column": {
     "type": [
      "string"
     ]
    },
    "conditional_table": {
     "type": [
      "string",
      "null"
     ]
    },
    "conditional_value": {
     "type": [
      "string",
      "null"
     ]
    },
    "if_false": {
     "$ref": "#/$defs/TransformationParams"
    },
    "if_true": {
     "$ref": "#/$defs/TransformationParams"
    },
    "reference_columns": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "ContinuousGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "continuous_generator"
    },
    "mean": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "std": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "min": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "max": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "numeric_type": {
     "$ref": "#/$defs/NumericType"
    },
    "round": {
     "type": [
      "integer",
      "null"
     ]
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    }
   },
   "additionalProperties": false
  },
  "QuantileGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "quantile_generator"
    },
    "hist": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "number"
      ],
      "format": "double"
     }
    },
    "bin_edges": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "number"
      ],
      "format": "double"
     }
    },
    "numeric_type": {
     "$ref": "#/$defs/NumericType"
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    }
   },
   "additionalProperties": false
  },
  "ForeignKeyGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "foreign_key_generator"
    },
    "distribution": {
     "$ref": "#/$defs/ForeignKeyDistribution"
    },
    "parent_data_mode": {
     "$ref": "#/$defs/ParentDataMode"
    },
    "referred_schema": {
     "type": [
      "string",
      "null"
     ]
    },
    "referred_table": {
     "type": [
      "string",
      "null"
     ]
    },
    "referred_fields": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "UniqueGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "unique_generator"
    },
    "transformations": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "$ref": "#/$defs/UniqueGeneratorColumnTransformationParams"
     }
    }
   },
   "additionalProperties": false
  },
  "FormatPreservingHashingParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "format_preserving_hashing"
    },
    "groups": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/FormatPreservingHashingGroup"
     }
    },
    "locale": {
     "type": [
      "string",
      "null"
     ]
    },
    "filter": {
     "$ref": "#/$defs/FormatPreservingHashingFilter"
    },
    "length_threshold": {
     "type": [
      "integer",
      "null"
     ],
     "format": "int32"
    }
   },
   "additionalProperties": false
  },
  "FormattedStringGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "formatted_string_generator"
    },
    "pattern": {
     "type": [
      "string",
      "null"
     ]
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    }
   },
   "additionalProperties": false
  },
  "IntSequenceGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "int_sequence_generator"
    },
    "start_from": {
     "type": [
      "integer",
      "null"
     ]
    }
   },
   "additionalProperties": false
  },
  "StringSequenceGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "string_sequence_generator"
    },
    "length": {
     "type": [
      "integer",
      "null"
     ]
    },
    "start_from": {
     "type": [
      "string",
      "null"
     ]
    },
    "alphabets": {
     "type": [
      "array"
     ],
     "default": "[]",
     "items": {
      "$ref": "#/$defs/Alphabet"
     }
    }
   },
   "additionalProperties": false
  },
  "NoisingParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "noising"
    },
    "sensitivity": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "min": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    },
    "max": {
     "type": [
      "number",
      "null"
     ],
     "format": "double"
    }
   },
   "additionalProperties": false
  },
  "NullGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "null_generator"
    }
   },
   "additionalProperties": false
  },
  "PassthroughParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "passthrough"
    }
   },
   "additionalProperties": false
  },
  "PersonGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "person_generator"
    },
    "column_templates": {
     "type": [
      "array"
     ],
     "default": "[]",
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    },
    "locale": {
     "type": [
      "string",
      "null"
     ]
    },
    "length_exceeded_mode": {
     "$ref": "#/$defs/ValueLengthExceededMode"
    },
    "column_lengths": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "integer"
      ]
     }
    },
    "discriminator_digits": {
     "type": [
      "integer"
     ]
    }
   },
   "additionalProperties": false
  },
  "AddressGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "address_generator"
    },
    "column_templates": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    },
    "locale": {
     "type": [
      "string",
      "null"
     ]
    },
    "length_exceeded_mode": {
     "$ref": "#/$defs/ValueLengthExceededMode"
    },
    "column_lengths": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "integer"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "FinanceGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "finance_generator"
    },
    "column_templates": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    },
    "length_exceeded_mode": {
     "$ref": "#/$defs/ValueLengthExceededMode"
    },
    "column_lengths": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "integer"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "RedactionParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "redaction"
    },
    "action": {
     "$ref": "#/$defs/Action"
    },
    "which": {
     "$ref": "#/$defs/Position"
    },
    "count": {
     "type": [
      "integer"
     ],
     "default": "4"
    },
    "mask_with": {
     "type": [
      "string"
     ],
     "default": "*"
    }
   },
   "additionalProperties": false
  },
  "UniqueHashingParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "unique_hashing"
    },
    "max_value": {
     "type": [
      "number"
     ],
     "format": "double"
    },
    "precision": {
     "type": [
      "integer"
     ]
    }
   },
   "additionalProperties": false
  },
  "DateTimeUniqueHashingParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "date_time_unique_hashing"
    },
    "min": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    },
    "max": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    }
   },
   "additionalProperties": false
  },
  "EnumUniqueHashingParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "enum_unique_hashing"
    },
    "values": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string",
       "null"
      ]
     }
    },
    "is_enum_set": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "DateGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "date_generator"
    },
    "mean": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    },
    "std": {
     "type": [
      "string",
      "null"
     ]
    },
    "min": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    },
    "max": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    }
   },
   "additionalProperties": false
  },
  "UuidGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "uuid_generator"
    },
    "consistent_with_column": {
     "type": [
      "string",
      "null"
     ],
     "default": "self"
    }
   },
   "additionalProperties": false
  },
  "ConstantNumericGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "constant_numeric"
    },
    "value": {
     "type": [
      "number",
      "null"
     ]
    },
    "min": {
     "type": [
      "number",
      "null"
     ]
    },
    "max": {
     "type": [
      "number",
      "null"
     ]
    },
    "numeric_type": {
     "$ref": "#/$defs/NumericType"
    }
   },
   "additionalProperties": false
  },
  "ConstantStringGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "constant_string"
    },
    "value": {
     "type": [
      "string",
      "null"
     ]
    }
   },
   "additionalProperties": false
  },
  "DefaultValueGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "default_value"
    },
    "default_value": {
     "type": [
      "string",
      "null"
     ]
    }
   },
   "additionalProperties": false
  },
  "ConstantDateGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "constant_date"
    },
    "value": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    },
    "min": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    },
    "max": {
     "type": [
      "string",
      "null"
     ],
     "format": "date-time"
    }
   },
   "additionalProperties": false
  },
  "ConstantBooleanGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "constant_boolean"
    },
    "value": {
     "type": [
      "boolean",
      "null"
     ]
    }
   },
   "additionalProperties": false
  },
  "LoopGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "loop_generator"
    },
    "repeatable": {
     "type": [
      "boolean"
     ],
     "default": "true"
    },
    "source": {
     "$ref": "#/$defs/ElementSource"
    }
   },
   "additionalProperties": false
  },
  "ConstantXmlGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "constant_xml"
    },
    "value": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "JsonPointerTransformerParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "json_pointer_transformer"
    },
    "specifications": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/JsonPointersSpecification"
     }
    },
    "locale": {
     "type": [
      "string",
      "null"
     ]
    },
    "auto_detect": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "XPathTransformerParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "xpath_transformer"
    },
    "specifications": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/XPathSpecification"
     }
    },
    "encoding": {
     "type": [
      "string"
     ],
     "default": "UTF-16"
    },
    "omit_xml_declaration": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "JsonMultiValueTransformerParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "json_multi_value_transformer"
    },
    "transformation": {
     "$ref": "#/$defs/TransformationParams"
    },
    "mask_sub_values": {
     "type": [
      "boolean"
     ],
     "default": "true"
    }
   },
   "additionalProperties": false
  },
  "T24IdRemapParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "t24_id_remap"
    },
    "prefix": {
     "type": [
      "string"
     ]
    },
    "preserve_structure": {
     "type": [
      "boolean"
     ],
     "default": "false"
    },
    "preserve_prefix": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "VoidGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "void_generator"
    }
   },
   "additionalProperties": false
  },
  "ScriptingTransformerParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "scripting_transformer"
    },
    "language": {
     "$ref": "#/$defs/ScriptingLanguage"
    },
    "script": {
     "$ref": "#/$defs/Script"
    },
    "init_script": {
     "$ref": "#/$defs/Script"
    },
    "additional_properties": {
     "$ref": "#/$defs/ScriptingAdditionalProperties"
    }
   },
   "additionalProperties": false
  },
  "ArithmeticGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "arithmetic_generator"
    },
    "variables": {
     "$ref": "#/$defs/Variables"
    },
    "constants": {
     "$ref": "#/$defs/Constants"
    },
    "is_transforming_dates": {
     "type": [
      "boolean",
      "null"
     ]
    },
    "expression": {
     "type": [
      "string"
     ]
    },
    "references": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "$ref": "#/$defs/ExternalColumnDependency"
     }
    }
   },
   "additionalProperties": false
  },
  "SieveGeneratorParams": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "sieve_generator"
    },
    "generator": {
     "$ref": "#/$defs/TransformationParams"
    },
    "condition": {
     "type": [
      "string"
     ]
    },
    "max_discard_percentage": {
     "type": [
      "number"
     ],
     "format": "double",
     "default": "200.0"
    },
    "is_condition_on_dates": {
     "type": [
      "boolean",
      "null"
     ]
    },
    "references": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "$ref": "#/$defs/ExternalColumnDependency"
     }
    },
    "constants": {
     "$ref": "#/$defs/Constants"
    }
   },
   "additionalProperties": false
  },
  "ForeignKeyAdditionalMetadata": {
   "type": [
    "object"
   ],
   "properties": {
    "referred_database": {
     "type": [
      "string"
     ]
    },
    "referred_schema": {
     "type": [
      "string"
     ]
    },
    "referred_table": {
     "type": [
      "string"
     ]
    },
    "columns": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/ForeignKeyColumnMappingAdditionalMetadata"
     }
    }
   },
   "additionalProperties": false
  },
  "LastValueIncrementalSource": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "last_value"
    }
   },
   "additionalProperties": false
  },
  "ConstantIncrementalSource": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "constant"
    },
    "start_from": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "TransformationDataType": {
   "type": [
    "string"
   ],
   "enum": [
    "TEXT",
    "NUMERIC",
    "DATE",
    "BOOLEAN",
    "ANY"
   ]
  },
  "Categories": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/ProvidedCategories"
    },
    {
     "$ref": "#/$defs/CsvFileCategories"
    },
    {
     "$ref": "#/$defs/MultiProvidedCategories"
    },
    {
     "$ref": "#/$defs/MultiCsvFileCategories"
    }
   ]
  },
  "NumericType": {
   "type": [
    "string",
    "null"
   ],
   "enum": [
    "INT",
    "LONG",
    "DOUBLE",
    "FLOAT",
    "BIG_DECIMAL",
    "BIG_INTEGER",
    "SHORT",
    "BYTE",
    "UNSIGNED_BYTE",
    "UNSIGNED_INTEGER",
    "UNSIGNED_LONG",
    "UNSIGNED_SHORT"
   ]
  },
  "ForeignKeyDistribution": {
   "type": [
    "string"
   ],
   "enum": [
    "POISSON",
    "ROUND_ROBIN",
    "ORIGINAL"
   ]
  },
  "UniqueGeneratorColumnTransformationParams": {
   "type": [
    "object"
   ],
   "properties": {
    "columns": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "params": {
     "$ref": "#/$defs/TransformationParams"
    }
   },
   "additionalProperties": false,
   "if": {
    "required": [
     "params"
    ],
    "properties": {
     "params": {
      "required": [
       "type"
      ],
      "properties": {
       "type": {
        "enum": [
         "arithmetic_generator",
         "constant_boolean",
         "constant_date",
         "constant_numeric",
         "constant_string",
         "constant_xml",
         "continuous_generator",
         "date_generator",
         "date_time_unique_hashing",
         "default_value",
         "enum_unique_hashing",
         "format_preserving_hashing",
         "formatted_string_generator",
         "int_sequence_generator",
         "json_multi_value_transformer",
         "json_pointer_transformer",
         "noising",
         "quantile_generator",
         "redaction",
         "string_sequence_generator",
         "t24_id_remap",
         "unique_hashing",
         "uuid_generator",
         "xpath_transformer"
        ]
       }
      }
     }
    }
   },
   "then": {
    "required": [
     "columns"
    ],
    "properties": {
     "columns": {
      "minItems": 1,
      "maxItems": 1
     }
    }
   }
  },
  "FormatPreservingHashingGroup": {
   "type": [
    "object"
   ],
   "properties": {
    "selector": {
     "$ref": "#/$defs/FormatPreservingHashingGroupSelector"
    },
    "alphabets": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/Alphabet"
     }
    }
   },
   "additionalProperties": false
  },
  "FormatPreservingHashingFilter": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/FirstCharactersFilter"
    },
    {
     "$ref": "#/$defs/LastCharactersFilter"
    },
    {
     "$ref": "#/$defs/CharactersFilter"
    },
    {
     "$ref": "#/$defs/SubstringFilter"
    },
    {
     "$ref": "#/$defs/RegexFilter"
    }
   ]
  },
  "Alphabet": {
   "type": [
    "object"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/DigitsAlphabet"
    },
    {
     "$ref": "#/$defs/LowerLettersAlphabet"
    },
    {
     "$ref": "#/$defs/UpperLettersAlphabet"
    },
    {
     "$ref": "#/$defs/CustomAlphabet"
    }
   ]
  },
  "ValueLengthExceededMode": {
   "type": [
    "string",
    "null"
   ],
   "default": "TRUNCATE",
   "enum": [
    "IGNORE",
    "TRUNCATE"
   ]
  },
  "Action": {
   "type": [
    "string"
   ],
   "enum": [
    "KEEP",
    "MASK"
   ]
  },
  "Position": {
   "type": [
    "string"
   ],
   "enum": [
    "FIRST",
    "LAST"
   ]
  },
  "ElementSource": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/ProvidedElementSource"
    },
    {
     "$ref": "#/$defs/CsvFileElementSource"
    },
    {
     "$ref": "#/$defs/ProvidedMultiColumnsElementSource"
    }
   ]
  },
  "JsonPointersSpecification": {
   "type": [
    "object"
   ],
   "properties": {
    "pointers": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "transformation": {
     "$ref": "#/$defs/TransformationParams"
    },
    "ignore_errors": {
     "type": [
      "boolean"
     ],
     "default": "false"
    },
    "relative": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "XPathSpecification": {
   "type": [
    "object"
   ],
   "properties": {
    "queries": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "transformation": {
     "$ref": "#/$defs/TransformationParams"
    },
    "ignore_errors": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "ScriptingLanguage": {
   "type": [
    "string"
   ],
   "enum": [
    "JAVASCRIPT"
   ]
  },
  "Script": {
   "type": [
    "object",
    "null"
   ],
   "properties": {
    "code": {
     "type": [
      "string",
      "null"
     ]
    },
    "file": {
     "type": [
      "string",
      "null"
     ]
    }
   },
   "additionalProperties": false
  },
  "ScriptingAdditionalProperties": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": {
    "type": [
     "object"
    ],
    "additionalProperties": false
   }
  },
  "Variables": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": {
    "$ref": "#/$defs/TransformationParams"
   }
  },
  "Constants": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": {
    "type": [
     "number"
    ]
   }
  },
  "ExternalColumnDependency": {
   "type": [
    "object"
   ],
   "properties": {
    "column_name": {
     "type": [
      "string"
     ]
    },
    "referred_schema": {
     "type": [
      "string",
      "null"
     ]
    },
    "referred_table": {
     "type": [
      "string"
     ]
    },
    "reference_columns": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "ForeignKeyColumnMappingAdditionalMetadata": {
   "type": [
    "object"
   ],
   "properties": {
    "column": {
     "type": [
      "string"
     ]
    },
    "referred_column": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "ProvidedCategories": {
   "type": [
    "object"
   ],
   "properties": {
    "value_source": {
     "const": "PROVIDED"
    },
    "type": {
     "$ref": "#/$defs/DictionaryType"
    },
    "values": {
     "$ref": "#/$defs/ProvidedCategoriesValues"
    },
    "null_values": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "CsvFileCategories": {
   "type": [
    "object"
   ],
   "properties": {
    "value_source": {
     "const": "CSV_FILE"
    },
    "type": {
     "$ref": "#/$defs/DictionaryType"
    },
    "path": {
     "type": [
      "string"
     ]
    },
    "format": {
     "$ref": "#/$defs/CsvFileCategoriesFormat"
    },
    "null_values": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "MultiProvidedCategories": {
   "type": [
    "object"
   ],
   "properties": {
    "value_source": {
     "const": "MULTIPLE_PROVIDED"
    },
    "column_types": {
     "$ref": "#/$defs/DictionaryTypes"
    },
    "null_values": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "category_values": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/MultiProvidedCategory"
     }
    }
   },
   "additionalProperties": false
  },
  "MultiCsvFileCategories": {
   "type": [
    "object"
   ],
   "properties": {
    "value_source": {
     "const": "MULTIPLE_CSV_FILE"
    },
    "column_types": {
     "$ref": "#/$defs/DictionaryTypes"
    },
    "null_values": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    },
    "path": {
     "type": [
      "string"
     ]
    },
    "format": {
     "$ref": "#/$defs/MultiCsvFileCategoriesFormat"
    }
   },
   "additionalProperties": false
  },
  "FormatPreservingHashingGroupSelector": {
   "type": [
    "object"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/DigitsSelector"
    },
    {
     "$ref": "#/$defs/LowerLettersSelector"
    },
    {
     "$ref": "#/$defs/UpperLettersSelector"
    },
    {
     "$ref": "#/$defs/RegexSelector"
    },
    {
     "$ref": "#/$defs/WordCharactersSelector"
    }
   ]
  },
  "FirstCharactersFilter": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "first"
    },
    "n": {
     "type": [
      "integer"
     ],
     "format": "int32"
    }
   },
   "additionalProperties": false
  },
  "LastCharactersFilter": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "last"
    },
    "n": {
     "type": [
      "integer"
     ],
     "format": "int32"
    }
   },
   "additionalProperties": false
  },
  "CharactersFilter": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "characters"
    },
    "characters": {
     "type": [
      "string"
     ]
    },
    "ignore_case": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "SubstringFilter": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "substring"
    },
    "substring": {
     "type": [
      "string"
     ]
    },
    "ignore_case": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "RegexFilter": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "regex"
    },
    "pattern": {
     "type": [
      "string"
     ]
    },
    "ignore_case": {
     "type": [
      "boolean"
     ],
     "default": "false"
    }
   },
   "additionalProperties": false
  },
  "DigitsAlphabet": {
   "type": "object",
   "properties": {
    "type": {
     "const": "digits"
    }
   },
   "additionalProperties": false
  },
  "LowerLettersAlphabet": {
   "type": "object",
   "properties": {
    "type": {
     "const": "lower_letters"
    }
   },
   "additionalProperties": false
  },
  "UpperLettersAlphabet": {
   "type": "object",
   "properties": {
    "type": {
     "const": "upper_letters"
    }
   },
   "additionalProperties": false
  },
  "CustomAlphabet": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "custom"
    },
    "parts": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "$ref": "#/$defs/CustomAlphabetPart"
     }
    }
   },
   "additionalProperties": false
  },
  "ProvidedElementSource": {
   "type": [
    "object"
   ],
   "properties": {
    "value_source": {
     "const": "PROVIDED"
    },
    "column_type": {
     "$ref": "#/$defs/DictionaryType"
    },
    "values": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string",
       "null"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "CsvFileElementSource": {
   "type": [
    "object"
   ],
   "properties": {
    "value_source": {
     "const": "CSV_FILE"
    },
    "path": {
     "type": [
      "string"
     ]
    },
    "format": {
     "$ref": "#/$defs/CsvFileFormat"
    },
    "column_types": {
     "$ref": "#/$defs/DictionaryTypes"
    },
    "null_values": {
     "type": [
      "array",
      "null"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "ProvidedMultiColumnsElementSource": {
   "type": [
    "object"
   ],
   "properties": {
    "value_source": {
     "const": "MULTIPLE_PROVIDED"
    },
    "column_types": {
     "$ref": "#/$defs/DictionaryTypes"
    },
    "values": {
     "type": [
      "array"
     ],
     "items": {
      "$ref": "#/$defs/MultiProvidedValues"
     }
    }
   },
   "additionalProperties": false
  },
  "DictionaryType": {
   "type": [
    "string",
    "null"
   ],
   "default": "STRING",
   "enum": [
    "STRING",
    "BOOLEAN",
    "NUMERIC"
   ]
  },
  "ProvidedCategoriesValues": {
   "type": [
    "object"
   ],
   "default": "{}",
   "additionalProperties": {
    "type": [
     "number"
    ]
   }
  },
  "CsvFileCategoriesFormat": {
   "type": [
    "object",
    "null"
   ],
   "properties": {
    "encoding": {
     "type": [
      "string"
     ],
     "default": "UTF-8"
    },
    "delimiter": {
     "type": [
      "string"
     ],
     "default": ","
    },
    "trim": {
     "type": [
      "boolean"
     ],
     "default": "true"
    },
    "columns": {
     "$ref": "#/$defs/CsvFileCategoriesColumns"
    }
   },
   "additionalProperties": false
  },
  "DictionaryTypes": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": {
    "$ref": "#/$defs/DictionaryType"
   }
  },
  "MultiProvidedCategory": {
   "type": [
    "object"
   ],
   "properties": {
    "values": {
     "$ref": "#/$defs/MultiProvidedCategoryValues"
    },
    "weight": {
     "type": [
      "number"
     ],
     "default": "0.0"
    }
   },
   "additionalProperties": false
  },
  "MultiCsvFileCategoriesFormat": {
   "type": [
    "object",
    "null"
   ],
   "properties": {
    "encoding": {
     "type": [
      "string"
     ],
     "default": "UTF-8"
    },
    "delimiter": {
     "type": [
      "string"
     ],
     "default": ","
    },
    "trim": {
     "type": [
      "boolean"
     ],
     "default": "true"
    },
    "columns": {
     "$ref": "#/$defs/MultiCsvFileCategoriesColumns"
    }
   },
   "additionalProperties": false
  },
  "DigitsSelector": {
   "type": "object",
   "properties": {
    "type": {
     "const": "digits"
    }
   },
   "additionalProperties": false
  },
  "LowerLettersSelector": {
   "type": "object",
   "properties": {
    "type": {
     "const": "lower_letters"
    }
   },
   "additionalProperties": false
  },
  "UpperLettersSelector": {
   "type": "object",
   "properties": {
    "type": {
     "const": "upper_letters"
    }
   },
   "additionalProperties": false
  },
  "RegexSelector": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "regex"
    },
    "pattern": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "WordCharactersSelector": {
   "type": "object",
   "properties": {
    "type": {
     "const": "word_characters"
    }
   },
   "additionalProperties": false
  },
  "CustomAlphabetPart": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/CharacterSet"
    },
    {
     "$ref": "#/$defs/UnicodeBlock"
    },
    {
     "$ref": "#/$defs/UnicodeRange"
    }
   ]
  },
  "CsvFileFormat": {
   "type": [
    "object",
    "null"
   ],
   "properties": {
    "encoding": {
     "type": [
      "string"
     ],
     "default": "UTF-8"
    },
    "delimiter": {
     "type": [
      "string"
     ],
     "default": ","
    },
    "trim": {
     "type": [
      "boolean"
     ],
     "default": "true"
    },
    "columns": {
     "$ref": "#/$defs/CsvFileColumns"
    }
   },
   "additionalProperties": false
  },
  "MultiProvidedValues": {
   "type": [
    "object"
   ],
   "additionalProperties": {
    "type": [
     "string",
     "null"
    ]
   }
  },
  "CsvFileCategoriesColumns": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/CsvFileCategoriesColumnsString"
    },
    {
     "$ref": "#/$defs/CsvFileCategoriesColumnsNumeric"
    }
   ]
  },
  "MultiProvidedCategoryValues": {
   "type": [
    "object"
   ],
   "default": "{}",
   "additionalProperties": {
    "type": [
     "string"
    ]
   }
  },
  "MultiCsvFileCategoriesColumns": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/MultiCsvFileCategoriesColumnsString"
    },
    {
     "$ref": "#/$defs/MultiCsvFileCategoriesColumnsNumeric"
    }
   ]
  },
  "CharacterSet": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "characters"
    },
    "characters": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "UnicodeBlock": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "unicode_block"
    },
    "name": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "UnicodeRange": {
   "type": [
    "object"
   ],
   "properties": {
    "type": {
     "const": "unicode_range"
    },
    "from": {
     "type": [
      "integer"
     ],
     "format": "int32"
    },
    "to": {
     "type": [
      "integer"
     ],
     "format": "int32"
    }
   },
   "additionalProperties": false
  },
  "CsvFileColumns": {
   "type": [
    "object",
    "null"
   ],
   "oneOf": [
    {
     "$ref": "#/$defs/CsvFileColumnsName"
    },
    {
     "$ref": "#/$defs/CsvFileColumnsIndex"
    }
   ]
  },
  "CsvFileCategoriesColumnsString": {
   "type": [
    "object"
   ],
   "properties": {
    "column_accessor_type": {
     "const": "NAME"
    },
    "categories": {
     "type": [
      "string"
     ]
    },
    "weights": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "CsvFileCategoriesColumnsNumeric": {
   "type": [
    "object"
   ],
   "properties": {
    "column_accessor_type": {
     "const": "INDEX"
    },
    "categories": {
     "type": [
      "integer"
     ]
    },
    "weights": {
     "type": [
      "integer"
     ]
    }
   },
   "additionalProperties": false
  },
  "MultiCsvFileCategoriesColumnsString": {
   "type": [
    "object"
   ],
   "properties": {
    "column_accessor_type": {
     "const": "NAME"
    },
    "categories": {
     "$ref": "#/$defs/MultiCsvFileCategoriesColumnsStringMapping"
    },
    "weights": {
     "type": [
      "string"
     ]
    }
   },
   "additionalProperties": false
  },
  "MultiCsvFileCategoriesColumnsNumeric": {
   "type": [
    "object"
   ],
   "properties": {
    "column_accessor_type": {
     "const": "INDEX"
    },
    "categories": {
     "$ref": "#/$defs/MultiCsvFileCategoriesColumnsNumericMapping"
    },
    "weights": {
     "type": [
      "integer"
     ]
    }
   },
   "additionalProperties": false
  },
  "CsvFileColumnsName": {
   "type": [
    "object"
   ],
   "properties": {
    "column_accessor_type": {
     "const": "NAME"
    },
    "names": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "string"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "CsvFileColumnsIndex": {
   "type": [
    "object"
   ],
   "properties": {
    "column_accessor_type": {
     "const": "INDEX"
    },
    "indexes": {
     "type": [
      "array"
     ],
     "items": {
      "type": [
       "integer"
      ]
     }
    }
   },
   "additionalProperties": false
  },
  "MultiCsvFileCategoriesColumnsStringMapping": {
   "type": [
    "object"
   ],
   "additionalProperties": {
    "type": [
     "string"
    ]
   }
  },
  "MultiCsvFileCategoriesColumnsNumericMapping": {
   "type": [
    "object"
   ],
   "additionalProperties": {
    "type": [
     "integer"
    ]
   }
  }
 }
}
