Узнайте тип поля на основе данных - PullRequest
0 голосов
/ 07 апреля 2009

Я делаю процедуру однократного импорта из одной системы в другую. Первым шагом является импорт большого количества данных из множества csv-файлов. Первая строка в каждом csv-файле - это разделенные табуляцией имен полей. Остальные данные также разделены табуляцией и строки разделены символом CR.

Я написал подпрограмму из 20 строк, которая создает таблицы и считывает данные в базу данных sql. Я установил все поля, которые содержат только числовые данные и имеют «ID» в своем имени поля как INT, а остальные как NVARCHAR (255).

Теперь я хочу уточнить его, чтобы он посмотрел на данные и попытался выяснить, какие данные он содержит в каждом столбце. Здесь есть время, даты, поля id, текстовые поля и числовые поля.

Я знаю, как это сделать, это довольно просто, но я хочу знать, есть ли какая-то работа, проделанная в этой области, и есть ли классы, которые справляются с этим.

Узнать предпочтительный размер сложнее. Я думаю, что я должен 1. Просматривая все строки и узнайте самые длинные данные для каждого столбца. 2. Ищите таблицу поиска, где я отображаю, например, длину 0-50 на 100, длину 51-255 на 255 и т. Д.

У кого-нибудь есть какой-нибудь умный вклад в это? Как я уже сказал, это не является чем-то особенно сложным, но было бы неплохо создать из этого умную библиотеку, чтобы позже использовать ее в других сценариях импорта.

Ответы [ 2 ]

1 голос
/ 07 апреля 2009

Рассматривали ли вы ADO.NET? Вы можете прочитать данные в набор данных?

Строка подключения будет выглядеть так: "Поставщик = Microsoft.Jet.OLEDB.4.0; Источник данных = C: \ TxtFile \; Расширенные свойства = 'текст; HDR = Да; FMT = с разделителями'" Обратите внимание на HDR = YES, который вам понадобится.

А затем, когда у вас есть соединение с каталогом, вы можете использовать оператор выбора, например:

«ВЫБРАТЬ * ИЗ data.txt»

Существуют дополнительные настройки для настройки количества строк для определения типа и т. Д. Вы можете посмотреть в файле schema.ini, чтобы вручную настроить типы. Кроме того, вы можете установить ключ реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text в: ImportMixedTypes = Текст по умолчанию «Тип большинства»

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

1 голос
/ 07 апреля 2009

Я бы запустил этап предварительной обработки - проанализировал данные в файлах CSV, чтобы определить разумные возможности для nvarchar - например, nvarchar (20) или nvarchar (2000). Я хотел бы напечатать отчет с примером записи для каждого столбца - даже генерировать оператор SQL «создать таблицу», который можно вручную отредактировать перед запуском. Если каждая запись в столбце форматируется как число, сделайте его целым числом и т. Д.

Как единовременная вещь, я полностью ожидаю, что вы должны визуально проверить каждую таблицу, которую вы создадите, прежде чем выполнять импорт данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...