Documentation

YAML Schema Reference

Complete YAML configuration specification for GoMask CLI

YAML Schema Reference

Complete specification for GoMask CLI YAML configuration files.


Routine Types

GoMask supports two routine types:

TypePurpose
syntheticGenerate new synthetic test data
maskingMask/anonymize existing data

Top-Level Structure

Both routine types share a common top-level structure:

routine:                    # Required: Routine configuration
  name: "Display Name"
  type: synthetic           # or "masking"
  connector_id: 123
  description: "Optional description"

settings:                   # Optional: Execution settings
  batch_size: 1000

tables:                     # Required: Table configurations
  - table_name: users
    # ... table config

SyntheticRoutine

Full schema for synthetic data generation:

routine:
  name: "Customer Data Generator"
  type: synthetic
  connector_id: 1
  description: "Generates synthetic customer data"

settings:
  generation_mode: hierarchical
  batch_size: 1000
  parallel_workers: 4
  enforce_referential_integrity: true
  global_record_count: 1000
  localization_language: en
  localization_region: US
  runtime_parameter_definitions:
    - key: "param_record_count"
      name: "record_count"
      type: integer
      defaultValue: 1000
      description: "Number of records to generate"
      required: false

tables:
  - table_name: users
    schema_name: public
    hierarchy_level: 0
    target_record_count: 1000
    order_index: 0
    columns:
      - column_name: id
        generation_function: sequential_integer
        is_primary_key: true
        generation_parameters:
          - name: start
            value: 1
      - column_name: email
        generation_function: generate_email
        is_unique: true
        generation_parameters:
          - name: domain
            value: "example.com"
      - column_name: first_name
        generation_function: generate_first_name
      - column_name: created_at
        generation_function: generate_datetime
        generation_parameters:
          - name: start
            value: "2023-01-01"
          - name: end
            value: "2024-12-31"

  - table_name: orders
    schema_name: public
    hierarchy_level: 1
    parent_table_name: users
    target_record_count: 5000
    record_distribution:
      distribution_type: uniform
      min_records_per_parent: 1
      max_records_per_parent: 10
    columns:
      - column_name: id
        generation_function: sequential_integer
        is_primary_key: true
      - column_name: user_id
        is_foreign_key: true
        referenced_table: users
        referenced_column: id
      - column_name: total
        generation_function: generate_decimal
        generation_parameters:
          - name: min
            value: 10.00
          - name: max
            value: 500.00
          - name: precision
            value: 2

MaskingRoutine

Full schema for data masking:

routine:
  name: "PII Masking"
  type: masking
  connector_id: 1
  description: "Anonymize sensitive customer data"

settings:
  batch_size: 1000
  parallel_workers: 4
  audit_reporting_enabled: true
  localization_language: en
  localization_region: US

tables:
  - table_name: customers
    schema_name: public
    columns:
      - column_name: email
        masking_function: mask_email
        sensitivity_level: high
        data_category: pii
        masking_config:
          - name: preserve_domain
            value: false
      - column_name: ssn
        masking_function: mask_ssn
        sensitivity_level: high
        masking_config:
          - name: preserve_last
            value: 4
      - column_name: phone
        masking_function: mask_phone
        masking_config:
          - name: preserve_format
            value: true
      - column_name: first_name
        masking_function: generate_first_name
      - column_name: notes
        masking_function: nullify

Routine Section

The routine section defines the routine metadata:

FieldTypeRequiredDescription
namestringYesDisplay name of the routine
typestringYessynthetic or masking
connector_idintegerYesID of the database connector
descriptionstringNoOptional description

Settings Section

Synthetic Settings

FieldTypeDefaultDescription
generation_modestringhierarchicalGeneration mode
batch_sizeinteger1000Records per batch
parallel_workersinteger4Number of parallel workers
enforce_referential_integritybooleantrueEnforce FK constraints
global_record_countinteger1000Default record count
localization_languagestringenLanguage code
localization_regionstringUSRegion code
runtime_parameter_definitionsarray[]Runtime parameters

Masking Settings

FieldTypeDefaultDescription
batch_sizeinteger1000Records per batch
parallel_workersinteger4Number of parallel workers
audit_reporting_enabledbooleantrueEnable audit logs
localization_languagestringenLanguage code
localization_regionstringUSRegion code

Tables Section

Each table in the tables array has these properties:

Common Table Properties

FieldTypeRequiredDescription
table_namestringYesName of the database table
schema_namestringNoSchema name (default: public)

Synthetic Table Properties

FieldTypeDefaultDescription
hierarchy_levelinteger0Level in generation hierarchy
parent_table_namestring-Parent table for FK relationships
target_record_countinteger-Number of records to generate
order_indexinteger0Order within hierarchy level
table_typestringentityType: entity or junction
record_distributionobject-Distribution settings for child records

Record Distribution

Control how child records are distributed across parent records:

record_distribution:
  distribution_type: uniform    # uniform, normal, weighted
  min_records_per_parent: 1
  max_records_per_parent: 10
  average_records_per_parent: 5  # for normal distribution
  distribution_weights:         # for weighted distribution
    weights: [0.2, 0.5, 0.3]
    values: [1, 3, 5]
  custom_distribution_function: "lambda parent_id: random.randint(1, 10)"
FieldTypeDescription
distribution_typestringuniform, normal, or weighted
min_records_per_parentintegerMinimum child records per parent
max_records_per_parentintegerMaximum child records per parent
average_records_per_parentnumberAverage for normal distribution
distribution_weightsobjectWeights and values for weighted distribution
custom_distribution_functionstringCustom Python lambda for distribution

Columns Section

Synthetic Column Properties

FieldTypeRequiredDescription
column_namestringYesName of the column
generation_functionstringNoFunction to generate data
generation_parametersarrayNoFunction parameters
data_typestringNoDatabase data type (alias: original_data_type)
is_primary_keybooleanfalseIs this the primary key
is_foreign_keybooleanfalseIs this a foreign key
referenced_tablestringNoFK referenced table (alias: reference_table)
referenced_columnstringNoFK referenced column (alias: reference_column)
is_nullablebooleantrueAllow NULL values (alias: nullable)
is_uniquebooleanfalseUnique constraint (alias: unique_constraint)
is_indexedbooleanfalseHas database index
max_lengthintegerNoMaximum length for varchar/char
precisionintegerNoPrecision for numeric columns
scaleintegerNoScale for numeric columns
default_valuestringNoDefault value for column
enum_valuesarrayNoAllowed enum values
column_commentstringNoColumn comment/description
order_indexinteger0Column order in generation
is_excludedbooleanfalseExclude from generation
enabledbooleantrueInclude in generation (inverse of is_excluded)

Masking Column Properties

FieldTypeRequiredDescription
column_namestringYesName of the column
masking_functionstringNoFunction to mask data
masking_configarrayNoFunction parameters
sensitivity_levelstringlowData sensitivity: low, medium, high
data_categorystringgenericCategory: pii, financial, etc.
data_typestringNoDatabase data type (alias: original_data_type)
is_nullablebooleantrueAllow NULL values (alias: nullable)
is_primary_keybooleanfalseIs this the primary key
is_foreign_keybooleanfalseIs this a foreign key
is_uniquebooleanfalseUnique constraint (alias: unique_constraint)
is_indexedbooleanfalseHas database index
max_lengthintegerNoMaximum length for varchar/char
precisionintegerNoPrecision for numeric columns
scaleintegerNoScale for numeric columns
default_valuestringNoDefault value for column
enum_valuesarrayNoAllowed enum values
column_commentstringNoColumn comment/description
referenced_tablestringNoFK referenced table (alias: reference_table)
referenced_columnstringNoFK referenced column (alias: reference_column)
is_excludedbooleanfalseExclude from masking
enabledbooleantrueInclude in masking (inverse of is_excluded)

Masking Config Parameters

The masking_config array supports the same parameter format as generation parameters:

masking_config:
  # Static value
  - name: preserve_domain
    value: false

  # Column reference (use value from another column)
  - name: source_value
    valueType: column
    columnReference: original_email

  # Table reference
  - name: lookup_value
    valueType: reference
    tableReference: lookup_table
    columnReference: masked_value
    mode: random
    filter: "category = 'email'"
FieldTypeDescription
namestringParameter name (required)
valueanyStatic parameter value
valueTypestringstatic, reference, expression, or column
columnReferencestringColumn to reference
tableReferencestringTable to reference
modestringReference mode: random, sequential
filterstringFilter condition for reference lookup

Generation Parameters

Parameters are specified as an array of objects:

generation_parameters:
  - name: min
    value: 1
  - name: max
    value: 100
  - name: domain
    value: "example.com"

Parameter Value Types

generation_parameters:
  # Static value
  - name: prefix
    value: "CUST-"
    valueType: static

  # Column reference
  - name: source
    valueType: reference
    columnReference: first_name
    tableReference: users

  # Expression
  - name: calculated
    valueType: expression
    value: "row.quantity * row.price"

Runtime Parameters

Define parameters that can be overridden at execution time:

settings:
  runtime_parameter_definitions:
    - key: "param_record_count"
      name: "record_count"
      type: integer
      defaultValue: 1000
      description: "Number of records to generate"
      required: false
    - key: "param_start_date"
      name: "start_date"
      type: string
      defaultValue: "2024-01-01"
      description: "Start date for date ranges"

Use in column configurations:

tables:
  - table_name: users
    target_record_count: ${record_count}

Override at runtime:

gomask run routine.yaml --param record_count=5000

Validation

Validate your configuration:

# Basic validation
gomask validate routine.yaml

# With detailed errors
gomask validate routine.yaml --detailed

# Show parsed configuration
gomask validate routine.yaml --show-config

See Also