Первый набор 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 символов. Чувствительные значения всё равно отклоняются. В этом руководстве разрешение не используется.