Руководство по эксплуатации¶
Конфигурация¶
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:
Продолжение генерации¶
Для продолжения генерации с последней записанной строки:
Важно: для корректного продолжения генерации нельзя менять конфигурацию генерации и уже сгенерированные данные.