Вопрос о дизайне базы данных ETL - PullRequest
0 голосов
/ 07 июня 2011

Набор данных, который я получаю для регулярного обновления, содержит поле даты, которое фактически является VARCHAR.

Поскольку это будет индексированное / искомое поле, у меня останется ...
1) Преобразованиеполе DATETIME и проверка и нормализация значений данных при обновлении
или ...
2) Оставление данных как есть и формирование моих запросов для согласования с различными действительными форматами даты, т. е. WHERE DateField = 'CCYYMMDD' ИЛИDateField = 'MM / DD / CCYY' ИЛИ ​​....

Обновление будет происходить ежемесячно;«очистка» данных добавит около 35% времени к циклу ETL.Мои запросы в поле даты будут равны;Мне не нужно дальнего поиска.Кроме того, я работаю в одном магазине, поэтому, чем больше будет общего решения, тем лучше.

Так какой сценарий мне лучше сделать?Все мнения приветствуются.

Ответы [ 4 ]

3 голосов
/ 07 июня 2011

Я думаю, что это отличный вопрос.Вот мое мнение:

Я твердо верю в идею, что в конечном итоге вы сэкономите больше времени и будете иметь меньше головной боли, используя типы данных для тех целей, для которых они предназначены.Это означает даты в полях даты, символы в символьных полях и т. Д. Если вы выберете вариант 2, вам нужно будет не забывать кодировать все возможные форматы даты каждый раз, когда вы запрашиваете таблицу .Если вы установите это и вернетесь через год, вспомните ли вы?

В отличие от этого, если вы используете поле даты и выполняете предварительную работу в процессе ETL по правильному обращению с датами,Вы всегда будете знать, как взаимодействовать с полем.И я даже не буду вдаваться в последствия для производительности.

И в этом случае я не уверен, что вы даже увидите краткосрочную выгоду.Если, например, в исходных данных есть 5 различных возможных форматов даты, вам нужно будет так или иначе учесть их;либо в ETL, либо в выходных запросах.Код для преобразования этих 5 форматов в ETL не является существенно более сложным, чем код для управления этими 5 форматами в выходных запросах.

И если данные могут буквально поступать в бесконечном числеформатов, у вас есть большие проблемы в любом случае.Либо ваш ETL сломается, либо ваши запросы сломаются.В определенной степени это неснижаемая сложность.

Я бы посоветовал вам уделить время кодированию правильных преобразований в ваш ETL.Но сделайте себе одолжение и закодируйте шаг предварительной обработки, который определяет даты в форматах, которые не будут должным образом преобразованы, и предупреждает вас о них.Если вы видите шаблоны;то есть, если какой-либо формат появляется более одного раза, закодируйте преобразование для него.Со временем вам придется вручную чистить все меньше и меньше этих неприятных дат.При удаче ваши 35% упадут до 5% или менее.

Удачи!

2 голосов
/ 07 июня 2011

Вам лучше очистить данные.Первые даты, которые не являются хорошими, не имеют смысла, поэтому хранить их бессмысленно.Во-вторых, исправить неправильный выбор типа данных позже труднее, чем никогда его не делать.Запросы не только будут проще, но и быстрее, чем при использовании varchar.И такие вещи, как порядок, будут работать правильно, как и функции даты.В-третьих, я не могу себе представить, что очистка это добавит так много к вашему импорту, я очищаю данные все время без проблем.Но если это произойдет, то очистите данные в промежуточной таблице, которую не использует другой процесс (чтобы вы не влияли на пользователей Prod), а затем загрузите таблицы Prod из хороших чистых данных.

1 голос
/ 07 июня 2011

Очистите данные заранее и сохраните даты как даты.

Я работаю с системами, в которых даты хранятся в виде строк, и существует множество способов хранения дат.Это очень затрудняет создание запроса, который будет работать с будущим новым форматом даты.

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

0 голосов
/ 06 июня 2012

Определенно лучше очищать данные и загружать их в столбец даты, поскольку это обеспечит целостность.

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