Данные и таблицы · CSV Очиститель
Почему пустые строки, NULL и отсутствующие поля — это не одно и то же в CSV
· Почему это важно
csv JSON форматы данных
CSV не может сказать «нет значения»; там есть только текст. В этом посте объясняется, чем отличаются пустые поля, пустые строки в кавычках, литерал NULL и короткие строки, почему загрузчики не согласны с ними и как преобразование в JSON вызывает вопрос.
Одна и та же пустая ячейка становится NULL в одной системе и пустой строкой в другой — почему это меняет объединение, подсчет и усреднение
Пустые на вид исходные ячейки могут содержать несколько историй, но вывод JSON ToolAcre намеренно сужает их до одного представления. Пустое поле, пустое поле в кавычках и короткая строка, дополненная анализатором, становятся пустой строкой под существующим ключом. Никакой нуль не выводится из внешнего вида.
Такая последовательность полезна только тогда, когда потребитель знает об этом. Тестирование кода специально на значение null не заменит значение по умолчанию для «». Определите контракт недостающего значения на границе приема вместо того, чтобы предполагать, что преобразователь сохранил различия, которые не сохранил синтаксис CSV или выбранная им модель анализа.
В ToolAcre пустая и дополненная недостающая ячейка становятся пустыми строками, если потребитель не интерпретирует их заново.
CSV может содержать два разделителя, между которыми ничего нет, пустую строку в явно кавычках, буквенный текст, например NULL или NA, и строку, заканчивающуюся до ширины заголовка. ToolAcre анализирует первые две как пустые строки и оставляет литеральные токены нетронутыми, как обычный текст.
Для короткой строки он выдает предупреждение `RAGGED_ROW` и дополняет отсутствующие конечные ячейки пустыми строками. Для длинной строки сохраняются дополнительные ячейки в таблице, но преобразование JSON не имеет для них ключа заголовка и опускает их. Именно из-за этой асимметрии структурное предупреждение требует действий перед преобразованием.
Как обычные загрузчики интерпретируют каждый из них — разные значения по умолчанию в электронных таблицах, базах данных и библиотеках кадров данных.
Различные клиенты баз данных и библиотеки анализа предоставляют свои собственные настраиваемые нулевые токены и политики пустых полей. Этот репозиторий не может установить эти значения по умолчанию, поэтому в статье не утверждается, что все электронные таблицы или загрузчики согласны. Он документирует одну реализацию, исходный код и тесты которой доступны.
При передаче файла в другую систему прочитайте настройки этого импортера и создайте фикстуры для ``, `""`, NULL и короткой строки. На фактической границе демонстрируется надежный контракт. Общие сведения о том, что обычно означает «CSV», слишком слабы для пропуска значений.
Настройки загрузчика по умолчанию различаются; в этой статье документируется ToolAcre, а не обобщается поведение электронных таблиц или баз данных.
Текст NULL особенно опасен, поскольку может быть подлинным контентом или сигналом отправителя. ToolAcre не имеет настроенного списка дозорных и поэтому сохраняет его как четырехсимвольную строку «NULL». То же самое верно для NA, N/A, нуля и любого другого токена, который может использовать производитель.
Не заменяйте такие строки глобально без правила для конкретного поля. Столбец примечаний может законно содержать «NULL», а столбец кода может использовать NA. Решите значение с помощью документации производителя или схемы, а затем преобразуйте только соответствующие проверяемые столбцы.
JSON заставляет вас принять решение: нулевая, пустая строка и отсутствующий ключ — это три разные вещи после преобразования файла.
JSON различает ноль, пустую строку и отсутствующее свойство, но ToolAcre выбирает существующие ключи со строковыми значениями для каждого столбца заголовка. Отсутствующие или дополненные ячейки становятся "". Преобразователь не создает JSON null и не пропускает ключ только потому, что ячейка пуста.
С лишней ячейкой дело обстоит иначе: без соответствующего заголовка нет ключа, который можно назначить, поэтому он отсутствует в сгенерированных объектах. Предупреждение строки сообщает вам, что возможна потеря. Исправьте ширину заголовка или строки перед загрузкой, а не считывайте отсутствие как значимую нулевую политику.
ToolAcre выдает пустые строки и присутствуют ключи, а не нулевые или отсутствующие ключи.
Используйте идентификатор заголовка, примечание, код и четыре записи: `1,,A`, `2,"",NULL`, `3,hello` и `4,world,B,extra`. Первые две ноты становятся пустыми строками; код во второй строке остается «NULL». Третья строка получает код «» после заполнения, а четвертая строка предупреждает, что дополнительная ячейка не имеет ключа.
Полученные объекты явно содержат одни и те же три ключа для представленных столбцов. Этот проработанный случай более информативен, чем снимок экрана с пустыми ячейками, поскольку он связывает предупреждения синтаксического анализа с фигурой JSON. Это также показывает, почему буквальные токены требуют отдельного решения домена.
Что это не охватывает — вменение и бизнес-правила, определяющие, какое значение по умолчанию должно принимать отсутствующее значение.
Вменение находится за пределами маршрута. Конвертер не заполняет недостающие цены, не копирует предыдущие значения и не выводит значения по умолчанию из соседних строк. Эти изменения зависят от бизнес-значения и должны происходить после того, как схема различает неизвестные, неприменимые и намеренно пустые значения.
Он также не сохраняет синтаксическое различие между пустым полем без кавычек и `""`; оба анализируют одну и ту же строку ячеек. Если это различие имеет значение, CSV не передает его через табличную модель этого парсера. Выберите представление с явным состоянием или сохраните необработанный источник вместе с производными данными.
Прежде чем загружать, решите, что означает пробел — как ToolAcre CSV Уборщица CSV-к-JSON преобразование делает представление видимым
Решите, что означает пробел, прежде чем загружать JSON в набранный код. ToolAcre предоставляет прозрачную базовую линию: повсюду строковые значения, пустые строки для отсутствующих представленных ячеек, буквальные контрольные слова без изменений и предупреждения, когда форма строки превышает доступные ключи.
Изучите эти предупреждения и задокументируйте любое последующее принуждение. Преобразователь не может создать семантику пропущенных значений только из текста, но он может избежать сокрытия собственного выбора. Такое предсказуемое поведение делает следующую границу ответственной за политику, которую она действительно способна обеспечить.