Я работаю с SQL Server уже 4 месяца, и большая часть моей работы связана с созданием хранилища данных для моей компании. Обычно мы используем метод звездообразной схемы, но поскольку измерений слишком много, я обычно запускаю запросы UPDATE, чтобы позже заполнить столбцы измерений. При повторном тестировании моих запросов я столкнулся со странной ошибкой, которую абсолютно не могу объяснить и которая меня очень пугает. В моих данных был столбец Registered_on
, типизированный как DateTime. Я создал измерение под названием HOUR с 24 строками, по одной на каждый час дня и целое число для сопоставления. Итак, первая строка — полночь и имеет столбец с 0.
Когда я запустил запрос
SELECT HourDimension.Hour
,DATEPART(Hour, AdmissionLogs.Registered_on)
FROM FactTable
INNER JOIN AdmissionLogs ON AdmissionLogs.ID = FactTable.LogID
INNER JOIN HourDimension ON HourDimension.HourNumber = DATEPART(Hour, AdmissionLogs.Registered_on)
Все совпало идеально, как на этом изображении.
Поэтому я сделал запрос на обновление как:
UPDATE FactTable
SET FactTable.IdfHourDimension = HourDimension.IdfHourDimension
FROM FactTable
INNER JOIN AdmissionLogs ON AdmissionLogs.ID = FactTable.LogID
INNER JOIN HourDimension ON HourDimension.HourNumber = DATEPART(Hour, AdmissionLogs.Registered_on)
И после просмотра результатов таблицы фактов через:
SELECT HourDimension.Hour
,HourDimension.HourNumber
,DatePart(Hour, AdmissionLogs.Registered_on)
FROM FactTable
INNER JOIN HourDimension ON HourDimension.IdfHourDimension = FactTable.IdfHourDimension
INNER JOIN AdmissionLogs ON AdmissionLogs.ID = FactTable.LogID
Я получил это:
Часы АБСОЛЮТНО не совпадают! Я не знаю, что происходит, но я серьезно сомневаюсь во всем, что знаю.