Отчет об ошибке, который заставил меня построить это, состоял из трех слов: " синхронизация отбрасывает строки." Подача продукта клиент и #39;s поступала в виде ночного CSV, мой импортер Laravel переписал его, и где-то между двумя файлами исчезала горстка SKU. Мой первый инстинкт был очевидным: бросить оба файла в строку diff. Дифф вернулся сплошным красным. Каждая строка была "изменена и quot; потому что экспорт был пересортирован другим столбцом той ночью, поэтому строка 4 в старом файле была строкой 900 в новом. Линия diff была технически правильной и совершенно бесполезной. На самом деле мне нужен был инструмент, который понимал, что файл представляет собой таблицу, соответствующую каждой строке его аналогу от SKU, и говорил мне, какие записи были действительно добавлены, удалены или отредактированы. Этот инструмент - Toolz Проверка различий CSV, и это руководство является причиной этого.
TL;DR: CSV-разница сравнивает два файла CSV как структурированные данные, а не как строки текста. Совпадают строки с помощью столбца ключа, например
idили
Я создаю продукты SaaS на Laravel и React и отправляю плагины WordPress, а это значит, что я трачу много времени на сверку экспорта: одна система и #39;s представление данных с другой's, вчера вечером's снимок с сегодняшним вечером's, файл, который клиент клянется, что он отправил с файлом, который действительно прибыл. CSV - это лингва-франка для всего этого, и правильное сравнение двух CSV - одна из тех задач, которые выглядят тривиально, пока вы не попытаетесь сделать это с помощью неправильного инструмента. Это руководство, которое я хотел бы прочитать разочарованной версии меня.
Что такое CSV diff checker?
Проверка CSV diff берет два CSV-файла, оригинальную и измененную версию, и сообщает, чем отличается вторая от первой на уровне строк и ячеек Вместо вывода добавленных и удаленных строк текстового diff вы получаете четыре корзины: строки, существующие только в новом файле (добавлены), строки, существующие только в старом файле (удалены), строки, существующие в обоих, но значения которых различаются (изменены), и строки, которые идентичны (неизменены).Для каждой измененной строки хороший инструмент идет на один уровень глубже и называет конкретные столбцы, которые перемещались, показывая старое значение рядом с новым.
Различие, которое заставляет все это работать, заключается в том, как строки объединяются в пары между двумя файлами. Разница CSV может совпадать по столбцу ключа, рассматривая значение как значение id или email как личность записи, или она может совпадать по позиции, сравнивая строку один в строку один. сопоставление ключей - это то, что вы хотите почти каждый раз, когда сравниваете экспорт, потому что одна и та же запись может приземляться на другую строку каждый раз, когда данные извлекаются. Позиционное сопоставление - это для файлов, где номер строки сам по себе значим и стабилен, как нумерованный реестр, который только когда-либо добавляется. Выбор правильного режима - это единственное самое важное решение, и именно поэтому инструмент Toolz ставит его вперед и в центр, а не в угадывание.
Почему при повторной сортировке экспорта линейный дифференциал становится полностью красным?
Это сбой, который отправляет людей, ищущих инструмент, специфичный для CSV, поэтому стоит точно понять. текстовый разметка, встроенная в Git и каждый редактор кода, сравнивает файлы построчно и по порядку. Он запускает алгоритм, который находит самую длинную общую подпоследовательность строк и отмечает все остальное как вставленное или удаленное. Это точно подходит для исходного кода, где порядок строк - это значение файла. Переместите функцию, и вы действительно изменили файл.
Экспорт CSV - это наоборот. Порядок строк обычно является случайностью чего угодно ORDER BY запрос случайно использовал, и он может меняться между двумя прогонами, которые содержат идентичные данные, В момент сдвига порядка сортировки, строка diff видит почти каждую строку в новой позиции, не может выстроить их, и сообщает весь файл как измененный. нужная информация, которую на самом деле изменили три записи, погребена под тысячами ложных срабатываний.Diff сделал свою работу верно; он просто ответил на вопрос о строках, когда у вас был вопрос о записях.
CSV-разница исправляет это, сначала разбивая файл на строки и столбцы, а затем сравнивая записи по их ключу, а не по номеру строки. Повторная сортировка файла не имеет никакого эффекта, потому что SKU A-1007 сравнивается с рядом с SKU A-1007 в другом файле независимо от того, где находится любой из них. Это вся причина существования категории, и именно поэтому я обращаюсь к Инструмент CSV diff вместо git diff всякий раз, когда файл представляет собой данные, а не код.
Какое отношение RFC 4180 имеет к сравнению файлов?
Все, потому что вы не можете правильно сравнить два CSV, если вы не можете их правильно разобрать сначала CSV использовался десятилетиями, прежде чем кто-либо стандартизировал его. В 2005 году IETF опубликовал RFC 4180, который описывает общий формат и text/csv Тип MIME. Это не закон, которому подчиняется каждый инструмент, но он наиболее близок к общему контракту и определяет правила, согласно которым наивное сравнение ошибается.
Правило, которое имеет наибольшее значение, - это цитирование. поле может быть обернуто двойными кавычками, и оно должно быть, если оно содержит запятую, двойную кавычку или разрыв строки. двойная кавычка внутри цитируемого поля избегается путем удвоения его. Итак, значение "Doe, John" это единое поле, и "She said ""hi""" является значением She said "hi". Сравнение, которое разделяет каждую строку на запятых, будет сокращено "Doe, John" в два поля, сдвиньте каждый столбец после него, а затем уверенно сообщите, что строка изменилась, когда она не изменилась. Toolz diff запускает тот же конечный автомат RFC 4180, который питает Просмотрщик CSV: он ходит по тексту символ за символом, отслеживает, находится ли он внутри поля цитирования, и рассматривает запятую или новую строку как разделитель только тогда, когда она находится за пределами кавычек. Правильный анализ является предварительным условием для правильного определения различий, и это та часть, которую скрипты, прокрученные вручную, почти всегда пропускают.
Как сравнить два файла CSV с инструментом?
Поток намеренно короткий. Вставьте исходный файл в первое поле и измененный файл во второе или нажмите "Загрузить образец", чтобы увидеть обработанный пример, где одна строка редактируется, одна добавляется, а другая удаляется.
Подтвердите разделитель. автообнаружение оценок запятая, точка с запятой, вкладка и труба тем, насколько последовательно каждая из них разделяет первые несколько строк на одинаковое количество столбцов, которые правильно обрабатывают европейские файлы с запятой и экспорт, разделенный вкладками. Если обнаружение неверно для ваших данных, установите его вручную. оставьте переключатель заголовка включенным, если первая строка каждого файла содержит имена столбцов, что и подает селектор клавишных столбцов.
Теперь выберите, как совпадают строки. Выберите ключевой столбец из раскрывающегося списка, обычно a id, emailили SKU, и инструмент сравнивает записи по этому значению. Выберите вместо этого позицию для сравнения строка за строкой. Два переключателя уточняют сравнение: включите нечувствительное к регистру сопоставление, если Active а active должно считаться как то же значение, и оставить трим-белое пространство включенным, чтобы отклоняющееся ведущее пространство не регистрировалось как изменение. Нажмите Сравнить, и сводка показывает четыре счета с первого взгляда.Откройте вкладку Изменено, чтобы расширить каждую отредактированную строку и увидеть, какие именно ячейки перемещаются, или вкладки Добавлено и Удалено, чтобы увидеть полные строки как таблицу. Когда вы закончите, Копировать отчет или Скачать экспортирует текстовое резюме каждого различия, включая значение до и после каждой измененной ячейки, готовый вставить в запрос на вытягивание, билет или электронное письмо клиенту.
Когда мне следует сопоставлять по ключу и по позиции?
Это выбор, который определяет, полезен ли дифференциал или шум, поэтому вот правило, которое я использую, изложенное в виде таблицы.
| положение | Матч по | почему |
|---|---|---|
| Экспорт базы данных или API, который можно пересортировать | Ключевая колонка | Каждая запись попадает на разные линии; ключом является его стабильная идентичность |
| Согласование двух систем' просмотр одних и тех же записей | Ключевая колонка | Вам важно, существует ли пластинка и совпадает ли она с обеих сторон, а не с тем, где она находится |
| Сравнивая снимок вчерашнего вечера и №39;s с сегодняшним днем и №39;s | Ключевая колонка | Строки добавляются и удаляются с течением времени, поэтому номера строк дрейфуют |
| Журнал или реестр только для приложений с фиксированным заказом | Должность | Номер строки стабилен и значим; строка N действительно & quot;the N-е событие& quot; |
| Два файла, которые вы знаете, имеют одинаковый порядок строк | Должность | Ключа не существует, но порядок гарантирован идентичен |
| Файл вообще без уникального столбца | Должность | Нечего включать, поэтому сравните по порядку и примите ограничение |
Короткая версия: достичь для сопоставления ключей по умолчанию, потому что большинство CSV являются экспортом записей, которые несут идентификатор.Отойдите обратно к позиционному сопоставлению только тогда, когда нет полезного ключа или когда порядок строк действительно является частью данных. если вы выберете ключ и инструмент предупреждает, что столбец содержит дубликаты значений, то это сигнал столбец на самом деле не уникален, и вы должны либо выбрать лучший ключ, либо очистить источник. я поймал более одного сломанного экспорта именно потому, что "unique" столбец ID оказался не таким.
Как он показывает, что на самом деле изменилось подряд?
Количество "5 строк изменено & quot; является началом, но вопрос, который у вас действительно есть, & quot;изменил как? & quot; The Toolz diff отвечает, что на строку. когда совпадающая запись отличается, он сравнивает две версии столбец за столбцом и перечисляет только те ячейки, которые перемещались, каждая из которых отображается как предыдущее значение, пронзенное рядом с новым значением. строка клиента, где только plan колонка пошла от free на pro сообщает, что одиночная клетка, а не вся запись, поэтому вы не оставляете глаз на два длинных ряда, пытаясь обнаружить одно изменившееся поле.
Это представление на уровне ячейки, где CSV diff зарабатывает свое хранение над электронной таблицей's собственные функции сравнения, которые имеют тенденцию выделять ячейки с цветом, но не дают вам ничего для копирования или вставки в обзор. В экспортированном отчете каждое изменение записано в тексте: ключ строки, имя столбца, а также старое и новое значение. На практике я вставляю это прямо в описание запроса на извлечение, чтобы рецензент мог увидеть влияние миграции на данные, не открывая сами файлы. Это тот же инстинкт, который стоит за структурным JSON дифф, который сообщает об изменении ключей с их путями, а не о шумных изменениях строк; оба инструмента существуют, потому что & quot; что изменилось & quot; вопрос лучше, чем & quot; какие строки отличаются. & quot;
Безопасно ли сравнивать конфиденциальные файлы CSV онлайн?
Для этого инструмента, да, и причина архитектурный, а не мизинца обещание. каждый шаг, анализируя оба файла, сопоставляя строки, вычисляя различия для каждой соты, и строя отчет, работает как JavaScript внутри вашего собственного браузера вкладка. нет никакой загрузки, ни сервера туда и обратно, и ничего не зарегистрировано или сохранено. вы можете доказать это, открыв свой браузер и #39;s вкладка сети и нажав Сравнить: ни один запрос не покидает страницу. После загрузки страницы вы можете полностью отключиться от Интернета и он продолжает работать.
Это имеет значение, потому что CSV люди diff являются одними из самых конфиденциальных файлов, которыми владеет бизнес. Списки клиентов, экспорт транзакций, строки расчета заработной платы, таблицы инвентаризации и журналы доступа - все путешествуют как CSV. Инструмент сравнения, который загружает ваши файлы на сервер, какими бы благими намерениями он ни был, превращает две частные электронные таблицы в чужие записи и #39;s записи журнала. Обработка на стороне клиента снимает вопрос: данные никогда не покидают машину, на которой они были запущены. Это по умолчанию является преднамеренным для каждого инструмента на Toolz.dev, и я записал более длинный аргумент в руководство по конфиденциальности данных для онлайн-инструментов для всех, кто хочет полного рассуждения.
Как CSV-дифференциал вписывается в реальный рабочий процесс?
Дифференциал редко представляет собой всю работу; это одна станция в конвейере. Шаблон, по которому я чаще всего попадаю, - это проверка: я запускаю импорт или миграцию, затем различаю экспорт до и после, чтобы подтвердить, что сценарий сделал именно то, что я ожидал, и ничего больше. Чистый дифференциал "три изменены, ноль удален и квотирован; это гораздо лучший знак, что миграция сработала, чем зеленая галочка из сценария, который ее запускал. Когда разница показывает удаление, которое я не собирался, я поймал ошибку до того, как она достигла производства, а не после.
Инструменты вокруг него зависят от того, для чего нужен файл. Если мне нужно просмотреть файл как сортируемую сетку перед сравнением, Просмотрщик CSV отображает тот же анализ RFC 4180, что и таблица. Если сравнение, которое я хочу, на самом деле касается членства, значения которого отображаются в одном файле, но не в другом, а не какие строки изменились, сравнить два списка инструмент устанавливает арифметику на отдельных столбцах и лучше подходит. И когда данные должны стать чем-то, что может потреблять API, Преобразователь CSV в JSON является следующим прыжком. ни один из них не загружать ваши данные, поэтому вы можете связать их в один и тот же частный файл без второй мысли. если вы собираете комплект для такого рода работы с данными, мой Руководство по набору инструментов для разработчиков веб-разработчика проходит через то, как соединяются части.
Часто задаваемые вопросы
Как сравнить два файла CSV? откройте Проверка различий CSV, вставить исходный CSV в первое поле и измененный CSV во второе, подтвердить настройки разделителя и заголовка, выбрать столбец ключа или сопоставление позиций и нажать Сравнить. результат разбивается на добавленные, удаленные и измененные строки, и каждая измененная строка показывает точные ячейки, которые отличаются. все работает в вашем браузере, поэтому файлы никогда не загружаются.
В чем разница между сопоставлением ключей и сопоставлением позиций?
Сопоставление ключей объединяет строки, которые имеют одно и то же значение в выбранном столбце, например id, так запись сравнивается со своим аналогом везде, где она появляется в любом файле. сопоставление позиций сравнивает строку один с строкой один в порядке файлов. используйте сопоставление ключей для экспорта, который можно пересортировать, и сопоставление позиций для файлов фиксированного порядка, таких как журнал только для приложений.
Почему текстовый разметка показывает каждую строку измененной, когда данные почти не перемещаются? Потому что текстовый diff сравнивает файлы строка за строкой и по порядку. если экспорт пересортирован, почти каждая строка попадает в новую позицию, и diff помечает весь файл как измененный, даже если базовые записи одинаковы. CSV diff анализирует файл на строки и столбцы и сравнивает записи по ключам, поэтому повторная сортировка не имеет никакого эффекта, и сообщается только о подлинных изменениях.
Показывает ли он, какая конкретная ячейка изменилась подряд? Да. когда совпадающая строка отличается, инструмент перечисляет каждый измененный столбец по имени и показывает предыдущее значение рядом с новым значением. строка, в которой только столбец состояния перемещался из активных в закрытые отчеты, которые являются одиночной ячейкой, а не помечал всю строку.
Какие разделители он поддерживает? Запятая, точка с запятой, вкладка и канал. разделитель автоматически обнаруживается из первого файла путем выбора разделителя, который создает согласованный счетчик столбцов в первых нескольких строках, и вы можете переопределить его вручную, когда обнаружение неверно для ваших данных.
Что произойдет, если в моем ключевом столбце будут дублированные значения? Инструмент предупреждает вас, что столбец ключа содержит дубликаты и сравнивает только первую строку для каждого ключа. дублировать ключи обычно означает, что столбец не является истинным уникальным идентификатором, поэтому предупреждение является подсказкой выбрать другой ключ или очистить данные, прежде чем доверять diff.
Загружаются ли мои файлы CSV куда-нибудь? Нет. все анализы и сравнения выполняются локально в вашем браузере с простым JavaScript. ничего не передается, не регистрируется и не сохраняется, и вы можете подтвердить это на вкладке сети, где не появляется запрос. инструмент также продолжает работать в автономном режиме после загрузки страницы.
Насколько большой файл может обрабатывать? Сопоставление ключей использует хеш-карты, а не вложенные циклы, поэтому оно масштабируется примерно линейно и удобно обрабатывает десятки тысяч строк. Практическим пределом является то, что ваш браузер отображает очень большой набор результатов, а не само сравнение.



