Руководство по эксплуатации¶
Конфигурация¶
SDVG использует два конфигурационных файла: файл конфигурации экземпляра SDVG и файл конфигурации генерации данных.
Конфигурация экземпляра SDVG¶
Описание полей конфигурации экземпляра SDVG¶
Конфигурация экземпляра SDVG содержит следующие поля:
log_format
: Формат логов. Поддерживаемые значения:text
,json
. По умолчаниюtext
.http
: Конфигурация HTTP сервера, описывается структуройHTTPConfig
.open_ai
: Конфигурация OpenAI, описывается структуройOpenAI
.
Структура http
используется для описания конфигурации HTTP сервера, который может быть
запущен для взаимодействия с SDVG, и содержит следующие поля:
listen_address
: Адрес для прослушивания HTTP-сервера. По умолчанию:8080
.read_timeout
: Таймаут для чтения данных. По умолчанию1m
(1 минута).write_timeout
: Таймаут для записи данных. По умолчанию1m
(1 минута).idle_timeout
: Таймаут для ожидания бездействия. По умолчанию1m
(1 минута).
Структура open_ai
используется для описания конфигурации OpenAI и содержит следующие поля:
api_key
: API ключ для доступа к OpenAI.base_url
: Базовый URL для API OpenAI.model
: Модель OpenAI.
Примеры конфигурации экземпляра SDVG¶
Пример конфига для HTTP сервера:
Пример конфига для OpenAI:
open_ai:
api_key: "sk-123"
base_url: "http://10.0.1.100:11434/v1"
model: "deepseek-r1:70b-llama-distill-q8_0"
Конфигурация генерации данных¶
Данная конфигурация используется непосредственно для генерации данных после запуска SDVG.
Описание полей конфигурации генерации данных¶
Конфигурация генерации данных содержит следующие поля:
random_seed
: Сид для генерации случайных чисел. Если не указан или равен0
, используется случайное значение.workers_count
: Количество потоков для генерации данных. По умолчанию равно количеству CPU умноженному на 4.batch_size
: Размер пачки данных для генерации и отправки в выходное хранилище. По умолчанию1000
.models
: Карта моделей данных, где ключ - имя модели, значение - структураmodels[*]
.models_to_ignore
: Список моделей, которые не надо генерировать в данном запуске SDVG (внешние ключи на эти модели при этом будут работать, если сохраняются значенияrandom_seed
иrows_count
).output
: Конфигурация вывода сгенерированных данных, описывается структуройoutput
.
Структура output
описывает конфигурацию вывода сгенерированных данных:
type
: Тип выходного формата сгенерированных данных. Поддерживаемые значения:devnull
,csv
,parquet
,http
,tcs
. По умолчаниюcsv
.dir
: Директория для записи сгенерированных данных. По умолчанию./output
.create_model_dir
: Параметр, отвечающий за то, создавать ли при записи отдельные директории для каждой из моделей. По умолчаниюfalse
.params
: Параметры для выбранного типа выходного формата, описываются структуройoutput.params
.checkpoint_interval
: Параметр, отвечающий за то, как часто будут обновляться файлы, содержащие текущий прогресс. По умолчанию5s
(5 секунд).
Структура models[*]
описывает модель генерируемых данных и содержит следующие поля:
rows_count
: Количество строк для генерации. Обязательное поле.rows_per_file
: Количество строк на один файл. Поддерживается дляcsv
иparquet
. По умолчанию равноrows_count
.generate_from
: Номер строки, с которой нужно начать генерацию. По умолчанию0
.generate_to
: Номер строки, до которой нужно генерировать. По умолчанию равенrows_count
.model_dir
: Директория для записи сгенерированных данных конкретной модели относительноoutput_dir
. По умолчанию название модели.columns
: Список столбцов модели данных, описанных структуройmodels[*].columns
.partition_columns
: Список столбцов, участвующих в партиционировании данных. Поддерживается дляparquet
иcsv
.
Структура models[*].partition_columns
описывает как столбец участвует в партиционировании данных:
name
: Имя столбца из схемыmodels[*].columns
. Обязательное поле.write_to_output
: Флаг, указывающий, нужно ли записывать партиционный столбец в конечные файлы с данными.
Структура models[*].columns
описывает столбец модели данных и содержит следующие поля:
name
: Имя столбца. Обязательное поле.type
: Тип данных столбца. Поддерживаемые значения:integer
,float
,string
,datetime
,uuid
.type_params
: Параметры для выбранного типа данных, описанные структуройmodels[*].columns[*].type_params
.values
: Перечисление возможных значений столбца. Не может использоваться вместе с параметрамиdistinct
.ordered
: Флаг, указывающий, должны ли значения в столбце быть упорядоченными (аналог sequence).distinct_percentage
: Процент уникальных значений в столбце. Должен быть между0
и1
. Не работает совместно сdistinct_count
.distinct_count
: Количество уникальных значений в столбце. Должно быть больше0
. Не работает совместно сdistinct_percentage
.null_percentage
: Процент пустых значений в столбце. Должен быть между0
и1
.ranges
: Набор диапазонов параметров для столбца, позволяющий указать несколько конфигураций с их процентным распределением (range_percentage
). Каждый диапазон (ranges[*]
) может содержать:type_params
: Параметры для выбранного типа данных, описанные структуройmodels[*].columns[*].type_params
.values
: Перечисление возможных значений в данном диапазоне.ordered
: Флаг упорядоченности значений.distinct_percentage
: Процент уникальных значений в диапазоне.distinct_count
: Количество уникальных значений в диапазоне.null_percentage
: Процент пустых значений в диапазоне.range_percentage
: Процентное соотношение этого диапазона относительно всей выборки.parquet_params
: Параметры для форматирования значений в выходном форматеparquet
.foreign_key
: Имя столбца в форматеmodel_name.column_name
, на который ссылается внешний ключ, значения будут браться из него. Не может использоваться вместе с другими параметрами столбца.foreign_key_order
: Флаг, указывающий на то, что надо использовать порядок значений из внешнего ключа. Полезно, если необходимо сохранить соответствие значений между колонками из внешней таблицы.
Внимание: параметры
ranges
и прямое указание параметров на уровне столбца (values
,type_params
,distinct_percentage
,distinct_count
,null_percentage
,ordered
) взаимоисключающие. Использовать их одновременно нельзя.
Структура models[*].columns[*].parquet_params
:
encoding
: Кодировка для столбца. Поддерживаемые значения:PLAIN
,RLE_DICTIONARY
,DELTA_BINARY_PACKED
,DELTA_BYTE_ARRAY
,DELTA_LENGTH_BYTE_ARRAY
. По умолчаниюPLAIN
.
Структура models[*].columns[*].type_params
для типа данных integer
:
bit_width
: Ширина битов для целого числа. Поддерживаемые значения:8
,16
,32
,64
. По умолчанию32
.from
: Минимальное значение для целого числа. По умолчанию минимальное значение для выбранной ширины битов.to
: Максимальное значение для целого числа. По умолчанию максимальное значение для выбранной ширины битов.
Структура models[*].columns[*].type_params
для типа данных float
:
bit_width
: Ширина битов для вещественного числа. Поддерживаемые значения:32
,64
. По умолчанию32
.from
: Минимальное значение для вещественного числа. По умолчанию минимальное значение для выбранной ширины битов.to
: Максимальное значение для вещественного числа. По умолчанию максимальное значение для выбранной ширины битов.
Структура models[*].columns[*].type_params
для типа данных string
:
min_length
: Минимальная длина строки. По умолчанию1
.max_length
: Максимальная длина строки. По умолчанию32
.logical_type
: Логический тип строки. Поддерживаемые значения:first_name
,last_name
,phone
,text
.template
: Шаблон для генерации строки. СимволA
- любая большая буква, символa
- любая маленькая буква, символ0
- любая цифра, символ#
- любой символ. Остальные символы остаются как есть.locale
: Локаль для генерации строк. Поддерживаемые значения:ru
,en
. По умолчаниюen
.without_large_letters
: Флаг, указывающий, исключать ли большие буквы из строки.without_small_letters
: Флаг, указывающий, исключать ли маленькие буквы из строки.without_numbers
: Флаг, указывающий, исключать ли числа из строки.without_special_chars
: Флаг, указывающий, исключать ли специальные символы из строки.
Структура models[*].columns[*].type_params
для типа данных datetime
:
from
: Минимальное значение для даты и времени. По умолчанию01.01.1900
.to
: Максимальное значение для даты и времени. По умолчанию01.01.2025
.
Структура output.params
для формата csv
:
float_precision
: Точность чисел с плавающей запятой. По умолчанию2
.datetime_format
: Формат даты и времени. По умолчанию2006-01-02T15:04:05Z07:00
.without_headers
: Флаг, указывающий, исключать ли CSV заголовок из файлов с данными.delimiter
: Односимвольный CSV разделитель. По умолчанию,
.
Структура output.params
для формата parquet
:
compression_codec
: Кодек сжатия. Поддерживаемые значения:UNCOMPRESSED
,SNAPPY
,GZIP
,LZ4
,ZSTD
. По умолчаниюUNCOMPRESSED
.float_precision
: Точность чисел с плавающей запятой. По умолчанию2
.datetime_format
: Формат даты и времени. Поддерживаемые значения:millis
,micros
. По умолчаниюmillis
.
Структура output.params
для формата http
:
endpoint
: Конечная точка для отправки данных.timeout
: Таймаут для отправки данных, указывается в формате строки: комбинацияh
,m
,s
без пробелов, например:1h
,5m30s
,2h5s
. По умолчанию1m
(1 минута).batch_size
: Размер отправляемого в одном запросе массива данных. По умолчанию1000
.workers_count
: Количество потоков для записи данных. По умолчанию1
. Является экспериментальным полем.headers
: Заголовки http запроса, указываются в формате словаря. По умолчанию отсутствуют.-
format_template
: Формат отправляемых данных, конфигурируемый с помощью шаблонов Golang. Для использования в полеformat_template
доступны: -
поля:
ModelName
- имя модели.Rows
- массив записей, где каждый элемент является словарем, который представляет собой строку данных. Ключи словаря соответствуют названиям столбцов, а значения — данным в этих столбцах.
- функции:
len
- возвращает длину переданного элемента.json
- преобразует переданный элемент в JSON строку.
Пример значения поля format_template
:
format_template: |
{
"table_name": "{{ .ModelName }}",
"meta": {
"rows_count": {{ len .Rows }}
},
"rows": [
{{- range $i, $row := .Rows }}
{{- if $i}},{{ end }}
{
"id": {{ index $row "id" }},
"username": "{{ index $row "name" }}"
}
{{- end }}
]
}
Значение поля format_template
по умолчанию:
Структура output.params
для формата tcs
:
Подобна структуре для формата http
, за исключением того,
что поле format_template
неизменяемое и всегда равняется значению по умолчанию.
Примеры конфигурации генерации данных¶
Пример конфигурации модели данных:
workers_count: 32
batch_size: 1000
random_seed: 0
output:
type: "devnull"
dir: output-dir
models:
token:
rows_count: 500000
model_dir: token_model
columns:
- name: id
type: uuid
- name: user_id
foreign_key: user.id
- name: session_id
type: string
type_params:
min_length: 16
max_length: 32
distinct_percentage: 1
- name: token_type
type: string
values:
- "access"
- "refresh"
user:
rows_count: 10000
columns:
- name: id
type: integer
type_params:
from: 1
to: 500000
ordered: true
- name: str_id
type: string
ordered: true
- name: ru_phone
type: string
type_params:
logical_type: phone
locale: ru
- name: first_name_ru
type: string
type_params:
logical_type: first_name
locale: ru
- name: last_name_ru
type: string
type_params:
logical_type: last_name
locale: ru
- name: first_name_en
type: string
type_params:
logical_type: first_name
- name: passport
type: string
type_params:
template: AA 00 000 000
distinct_percentage: 1
ordered: true
- name: rating
type: float
type_params:
from: 0.0
to: 5.0
- name: created
type: datetime
type_params:
from: 2020-01-01T00:00:00Z
ordered: true
- name: birthday
type: datetime
ranges:
- type_params:
from: 1900-01-01T00:00:00Z
- values: [null]
range_percentage: 0.1
- values:
- 2005-03-09T04:44:00Z
Пример конфигурации для генерации CSV файлов:
output:
type: csv
params:
float_precision: 1
datetime_format: 2006-01-02
models:
user:
rows_count: 10000
columns:
- name: id
type: uuid
- name: session_id
type: string
- name: last_seen_at
type: datetime
partition_columns:
- name: id
write_to_output: false
- name: session_id
write_to_output: false
Пример конфигурации для генерации parquet файлов:
output:
type: parquet
params:
float_precision: 1
datetime_format: millis
compression_codec: UNCOMPRESSED
models:
token:
rows_count: 500000
rows_per_file: 250000
columns:
- name: id
type: uuid
- name: session_id
type: string
parquet:
encoding: RLE_DICTIONARY
distinct_percentage: 1
partition_columns:
- name: id
write_to_output: true
Пример конфигурации для отправки сгенерированных данных по http:
output:
type: http
params:
endpoint: "http://127.0.0.1:8080/insert"
timeout: 30s
headers:
Authorization: "Bearer <token>"
format_template: |
{
"table_name": "{{ .ModelName }}",
"meta": {
"rows_count": {{ len .Rows }}
},
"rows": {{ json .Rows }}
}
models:
user:
rows_count: 10000
columns:
- name: id
type: uuid
- name: session_id
type: string
Пример конфигурации для отправки сгенерированных данных в tcs:
output:
type: tcs
params:
endpoint: "http://127.0.0.1:7101/insert"
timeout: 30s
models:
user:
rows_count: 10000
columns:
- name: id
type: uuid
- name: session_id
type: string
Запуск¶
Для запуска в интерактивном режиме достаточно запустить бинарный файл SDVG:
Для получения информации о возможных командах и их аргументах:
Генерация данных¶
Перед началом генерации данных происходит проверка выходной директории на наличие конфликтующих файлов. Если обнаружены конфликты, они будут отображены в виде списка ошибок при запуске. Это позволяет избежать перезаписи или повреждения существующих данных.
Для запуска генерации с указанием файла конфигурации генерации:
Игнорирование конфликтов¶
Если вы хотите автоматически удалить конфликтующие файлы в выходной директории
и продолжить генерацию без дополнительных сообщений, используйте флаг -F
или --force
:
Продолжение генерации¶
Для продолжения генерации с последней записанной строки:
Важно: для корректного продолжения генерации нельзя менять конфигурацию генерации и уже сгенерированные данные.