Я работаю над проектом, в котором мне нужно анализировать журналы Apache с использованием SSAS. Я уже загрузил данные во временную таблицу. Я создал таблицы измерений (первичный ключ и attibute_name), пустую таблицу фактов (внешние ключи для каждой таблицы измерений и fact_attribute) и создал отношения между ними. Затем я разделяю данные из этой таблицы на таблицы измерений, используя
INSERT INTO DimIP (IP) SELECT DISTINCT RemoteHostName FROM tmp
... и так далее.
Теперь мне нужно заполнить таблицу фактов внешними ключами, но я понятия не имею, как это сделать с помощью одного запроса. Я пробовал что-то вроде этого:
INSERT INTO Facts (DimDateID, DimIPID, DimRefererID, DimRequestID, DimStatusCodeID, DimUserAgentID)
SELECT DimDate.ID WHERE (DimDate.Data = tmp.DateTime)
SELECT DimIP.ID WHERE (DimIP.IP = tmp.RemoteHostName)
SELECT DimReferer.ID WHERE (DimReferer.Referer = tmp.Referer)
SELECT DimRequest.ID WHERE (DimRequest.Request = tmp.Request)
SELECT DimStatusCode.ID WHERE (DimStatusCode.StatusCode = tmp.StatusCode)
SELECT DimUserAgent.ID WHERE (DimUserAgent.UserAgent = tmp.UserAgent)
Но это не работает (говорит, что список вставок содержит меньше элементов, чем список выбора), возможно, я не могу использовать такой синтаксис.
Я пытался сделать это один за другим, вот так:
INSERT INTO Facts (DimDateID)
SELECT DimDate.ID WHERE (DimDate.Data = tmp.DateTime)
Но иногда он говорит, что другой столбец не может быть NULL (например, DimUserAgentID), поэтому запрос не выполняется, иногда он выполняет запрос, говорит «806000 строк затронуто», но ничего не вставлено.
Буду признателен за вашу помощь, потому что я уже вырвал половину своих волос из головы и не знаю, как заполнить таблицу фактов внешними ключами из таблиц измерений.