fields:
  - name: "id"
    type: uint # (default IDField (non-mutex))
    distribution: "sequential"
    min: 0
    max: 1000000000 # 1B
    repeat: false # if false, data generation stops when we hit >= max. only available with sequential
    step: 1
  - name: "age"
    type: int
    distribution: "uniform" # uniform or zipfian # TODO should totally add some kind of poission, normal, gaussian, bimodal
    min: 15
    max: 107
    null_chance: 0.01
  - name: "education_level"
    type: string
    source_file: "values/education.txt"
    distribution: "zipfian"
    s: 1.1
    v: 5.1
  - name: "gender"
    type: string
    source_file: "values/gender.txt"
    distribution: "fixed"
  - name: "income_bracket"
    type: string
    source_file: "values/income.txt"
  - name: "domain"
    type: "string-set"
    min_num: 1
    max_num: 6
    source_file: "values/opendns-top-domains-10K.txt"
    distribution: "zipfian"
    s: 1.5
    v: 4.3
  - name: "timestamp"
    type: "timestamp" # (default TimestampField)
    min_date: 2006-01-02T15:04:05.001Z # RFC3339Nano
    max_date: 2010-01-02T15:04:05.001Z # RFC3339Nano
    distribution: "increasing" # only "increasing" is supported right now
    min_step_duration: "10us"
    max_step_duration: "100ms" # generated values will add randomly between 1s and 1h to previous value starting at min_date.
    repeat: false # stop at > max_date unless repeat=true... then go back to min.
  - name: "political_party"
    type: "string"
    source_file: "values/political_parties.txt"
    distribution: "zipfian"
    s: 1.0001
    v: 1.0001
  - name: "ltv"
    type: "float" # use idk_params to choose a scale
    min_float: 0.2
    max_float: 1500
    distribution: "uniform" # only supported value
  - name: "hobby"
    type: "string-set"
    source_file: "values/hobbies.txt"
    distribution: "zipfian"
    min_num: 0
    max_num: 4
    s: 1.3
    v: 2.5

# idk_params describe how data from "fields" should be ingested by IDK
idk_params:
  primary_key_config:
    field: "id" # if this is a single field named "id" then we'll use uint IDs, if it's empty we'll autogen ids, and if it's anything else we'll do string keys... yes this is a bit hacky, needs to be cleaned up.
  # fields is keyed by names of fields from top level "fields". It is
  # not required that all fields appear here, those that don't will
  # use the default ingestion.
  fields:
    id:
      - type: "ID"
    timestamp:
      - type: "RecordTime"
        layout: "2006-01-02T15:04:05Z"
        epoch: 1970-01-01T00:00:00.0Z
        name: "na"
    domain:
      - type: "StringArray"
        time_quantum: "YMD"
    ltv:
      - type: "Decimal"
        scale: 2
    income_bracket:
      - type: "String"
        mutex: true
    education_level:
      - type: "String"
        mutex: true
    gender:
      - type: "String"
        mutex: true
    political_party:
      - type: "String"
        mutex: true
