Хорошие соглашения для встраивания схемы плоского файла - PullRequest
0 голосов
/ 21 марта 2010

Мы получаем много данных в виде плоских файлов: с разделителями или просто с фиксированной длиной записи.Иногда трудно выяснить, что на самом деле содержат файлы.

Существуют ли какие-либо устоявшиеся практики для встраивания схемы файла в начало или конец файла, чтобы сделать файл самоочевидным?

Просто чтобы получить представление, представьте что-то вроде этого:

<data name=test records=2 type=fixed>
   <field name=foo start=0 length=2 type=numeric>
   <field name=bar start=2 length=4 type=text>
</data>
11test
12ing 

Мы бы сначала проанализировали xml и использовали его для чтения записей.

Ответы [ 3 ]

1 голос
/ 21 марта 2010

Насколько я знаю, нет - или, по крайней мере, не очень.

Единственное, что мне известно (с точки зрения общепринятого стандарта), это то, что первая строка файла данных будет именами столбцов - по крайней мере, для записей с разделителями, для фиксированной длины сложнее, особенно если ваши данные может содержать несколько типов записей (которые, как я обнаружил, гораздо более вероятны с фиксированной длиной, чем с разделителями).

С того места, где я сижу, я бы предположил, что вы не можете встроить определение в файл. Я предполагаю, что вы получаете данные из внешних источников, поэтому вы вряд ли получите от них помощь, и даже если вы это сделаете вы немедленно создаете проблемы, поскольку вы не можете (например) легко открывать файлы в Excel при необходимости.

Немного подумав, вы могли бы - при использовании XML - потенциально встроить файл в определение (большой кусок CDATA). Это немного более практичное решение, так как оно помещает оболочку в ваши внешние данные, не требуя изменения самих данных. Не уверен, насколько это практично, но мне кажется, что это лучше, чем наоборот.

1 голос
/ 21 марта 2010

вы смотрели на протокол буфера для вдохновения?

0 голосов
/ 04 апреля 2011

Я не знаю ни о какой устоявшейся практике, но ваша идея просто добавить схему к данным кажется хорошей. Apache Avro - это инструмент сериализации данных, похожий на Protocol Buffers и Thrift. Я полагаю, что типичное использование Avro подразумевает сохранение схемы с данными (я полагаю, что при добавлении ее в поток).

Я хотел бы также упомянуть проект PADS . У них есть язык схемы, позволяющий вам описывать «специальные» форматы данных. В настоящее время я считаю, что они имеют только реализации C и ML, что может быть проблемой. С другой стороны, их язык схемы был разработан для работы с широким спектром форматов, так что все же, возможно, стоит использовать его поверх собственных вещей на основе XML.

...