【发布时间】:2011-11-26 22:19:08
【问题描述】:
我正在开展一个需要使用 SSAS 分析 Apache 日志的项目。我已经将数据加载到临时表中。我创建了维度表(主键和 attibute_name)、空事实表(每个维度表和 fact_attribute 的外键)并在它们之间创建了关系。然后我使用
将该表中的数据拆分为维度表INSERT INTO DimIP (IP) SELECT DISTINCT RemoteHostName FROM tmp
...等等。
现在我需要使用外键填充 Fact 表,但我不知道如何使用单个查询来执行此操作。我尝试过这样的事情:
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 行受影响”但没有插入任何内容。
我将感谢您的帮助,因为我已经扯掉了一半的头发,并且不知道如何使用维度表中的外键填充事实表。
【问题讨论】:
标签: sql-server ssis ssas