Первый набор CSV

English · Русский

Для чего это нужно

Пример показывает отдельные этапы профилирования, построения спецификации, генерации и повторной проверки. Он подходит для знакомства; для своего чувствительного источника сначала используйте процесс с ручным review.

Что получится в результате

Профиль, DatasetSpec, 25 новых покупателей и два отчёта валидации.

Предварительные требования

Установлен Python 3.11+ и пакет проекта. Терминал открыт в корне репозитория agent-paranoid-android; виртуальное окружение активно. Входы — только вымышленные файлы из репозитория. Папка назначения новая; есть права чтения входов и записи результата. Для команд ниже используйте macOS/Linux; в PowerShell вводите каждую команду одной строкой без \.

Пошаговое выполнение

Шаг 1. Выполните готовый пример

Что сделать: Запустите существующий сценарий с отдельной новой папкой.

Где выполнить: macOS/Linux, корень checkout.

Команда или пример:

bash examples/csv_quickstart/run.sh out/ru-quickstart

Что должно произойти: Последовательно выполняются profile-csv, infer-spec, generate и validate.

Как проверить: В out/ru-quickstart/generated есть customers.csv, manifest и validation_report.json.

Если не получилось: Если test-data-agent не найден, активируйте окружение. Если папка занята, выберите новое имя.

Шаг 2. Проверьте результат

Что сделать: Прочитайте повторный отчёт автоматически.

Где выполнить: Тот же каталог.

Команда или пример:

python -c "import json; from pathlib import Path; r=json.loads(Path('out/ru-quickstart/revalidation_report.json').read_text()); assert r['valid'] is True; print('validation: ok')"

Что должно произойти: Проверка прошла без вывода строк данных.

Как проверить: Код 0 и validation: ok.

Если не получилось: Если valid=false, проверьте секции отчёта и используйте раздел диагностики.

Проверка результата

Сопоставьте имена и типы полей в dataset_spec.yaml с ожидаемыми. Прочитайте generation_manifest.json. Скрипт на вымышленном входе выполняет все этапы подряд; на новом реальном домене остановитесь после infer-spec для review.

Типичные ошибки

Ошибка Причина Решение
Output already exists: Скрипт не перезаписывает результаты Задайте новую выходную папку.
command not found Нет активного окружения Вернитесь к установке.

На Windows этот Bash-скрипт не является проверенным способом запуска. Выполните отдельные команды из основного процесса в PowerShell, каждую одной строкой.

Следующий шаг

Основной рабочий процесс.

Сгенерировать одну таблицу CSV

Для чего это нужно

Сокращённая команда подходит для известной структуры и небольшого проверенного входа. Она сразу профилирует CSV и создаёт DatasetSpec, данные и отчёты; для нового чувствительного домена используйте отдельный review.

Что получится в результате

В out/ru-csv будут customers.csv (25 строк), csv_profile.json, dataset_spec.json, validation_report.json и generation_manifest.json.

Предварительные требования

Установлен Python 3.11+ и пакет проекта. Терминал открыт в корне репозитория agent-paranoid-android; виртуальное окружение активно. Входы — только вымышленные файлы из репозитория. Папка назначения новая; есть права чтения входов и записи результата. Для команд ниже используйте macOS/Linux; в PowerShell вводите каждую команду одной строкой без \.

Пошаговое выполнение

Шаг 1. Сгенерируйте 25 строк

Что сделать: Используйте существующую вымышленную фикстуру и явные параметры.

Где выполнить: Корень checkout.

Команда или пример:

test-data-agent generate-from-csv examples/csv_quickstart/customers.csv --count 25 --seed 12345 --format csv --output out/ru-csv/customers.csv

Что должно произойти: Создан один файл данных и соседние артефакты.

Как проверить: Команда сообщает validation: passed; создан manifest.

Если не получилось: Убедитесь, что --output задаёт файл, а не папку. Для повтора выберите новую папку.

Шаг 2. Проверьте manifest и число строк

Что сделать: Проверьте флаги без печати содержимого CSV.

Где выполнить: Корень checkout.

Команда или пример:

python -c "import json; from pathlib import Path; p=Path('out/ru-csv'); m=json.loads((p/'generation_manifest.json').read_text()); assert m['synthetic'] is True and m['source_rows_copied'] is False and m['validation_valid'] is True and m['seed']==12345; print('manifest: ok')"
python -c "import csv; from pathlib import Path; f=Path('out/ru-csv/customers.csv').open(newline=''); assert len(list(csv.DictReader(f)))==25; print('rows: ok')"

Что должно произойти: Печатаются manifest: ok и rows: ok.

Как проверить: Обе команды завершаются кодом 0.

Если не получилось: Если строки не совпали, не используйте результат; сохраните отчёт и запустите validate.

Шаг 3. Повторите с тем же seed

Что сделать: Создайте отдельный набор для проверки воспроизводимости.

Где выполнить: Тот же checkout и окружение.

Команда или пример:

test-data-agent generate-from-csv examples/csv_quickstart/customers.csv --count 25 --seed 12345 --format csv --output out/ru-csv-repeat/customers.csv

Что должно произойти: Создан второй CSV при тех же входах и настройках.

Как проверить: Оба файла можно сравнить командой ниже.

Если не получилось: Не изменяйте CSV и зависимости между запусками.

Шаг 4. Сравните данные

Что сделать: Сравните байты CSV в одном окружении.

Где выполнить: Корень checkout.

Команда или пример:

python -c "from pathlib import Path; assert Path('out/ru-csv/customers.csv').read_bytes()==Path('out/ru-csv-repeat/customers.csv').read_bytes(); print('deterministic: ok')"

Что должно произойти: Файлы совпадают.

Как проверить: Код 0.

Если не получилось: Проверьте вход, seed, count, locale и версии зависимостей; manifest может содержать сведения окружения, поэтому не сравнивайте все артефакты как один файл.

Проверка результата

Выполните test-data-agent validate out/ru-csv/dataset_spec.json out/ru-csv. Ожидается код 0. Для своего входа замените путь CSV, сохраните заголовок и отдельный выходной каталог; не вставляйте его строки в чат.

Типичные ошибки

Ошибка Причина Решение
Ошибка разбора CSV (текст зависит от входа) Кодировка, разделитель или повреждённый заголовок Подготовьте небольшой синтетический аналог и проверьте его локально; не публикуйте исходные строки.
unsafe filesystem path Вход и выход конфликтуют или путь содержит symlink Разнесите вход и результат по обычным папкам.

Что важно про значения

Одинаковый seed гарантирует повтор в зафиксированном окружении, а не между любыми версиями Faker, сериализаторов и платформ. Сохраните spec, seed и manifest.

По умолчанию исходные категории заменяются. --local-category customers.status — отдельное разрешение на проверенный ограниченный нечувствительный enum, а не способ сохранить идентификаторы или текст. Не включайте его без review содержимого и назначения. CSV-политика ограничивает такие строковые enum 20 значениями длиной до 64 символов. Чувствительные значения всё равно отклоняются. В этом руководстве разрешение не используется.

Следующий шаг

Проверка результата.