日期:2014-05-18  浏览次数:20689 次

求个方案,合适的话可以请你代工
目标数据库,需要定时的执行任务。每个小时执行一次,对前一个小时的数据进行整理,整理结果存入新的表。
应该是用job实现了。

业务逻辑:
1、知道目标数据库
2、知道目标表
3、定时执行任务整理数据
4、按照天、周、月、年整理数据
5、数据存入新的表供查

请各位出个方案,有能力有空合作者,可以请代工。谢谢。呵呵。


------解决方案--------------------
作业处理了。如果对于数据表的连接查询比较大的话。最好还是插入到临时表处理。
------解决方案--------------------
这个肯定得涉及到作业问题。
现在有个疑问:
1、知道目标数据库
2、知道目标表
你的这两部是什么意思?

是不知道目标数据库和目标表的情况下执行你的操作还是知道的情况下?知道的话就比较简单了
------解决方案--------------------
探讨

不好意思,可能我没讲清楚。就是说在这个事情里面,以下这几个条件都是知道的。
1、知道目标数据库
2、知道目标表
我这个数据库是每天一个的。所以这个job的执行,首先要定位到目标数据库,然后定位到目标表,然后执行需要的操作。当然,如何确定数据库和表的规则都是明确的。

当然,job不止一个,是项目当中的一个环节,处理的任务还是蛮多的。所以想找个伙伴一起合作来做。

请各位达达指导,如……

------解决方案--------------------
“数据库是每天一个的”,那就是动态目标表,根据目标表的命名规则动态定位到当天的目标表上,如楼上所说,动态语句指定到相应的目标表上,其他操作都好办了
------解决方案--------------------
SQL code


--基础数据表:
IF OBJECT_ID('[WSO_GN_PDP_CONTEXT_CREATE]','P')IS NOT 

NULL
DROP TABLE [WSO_GN_PDP_CONTEXT_CREATE]
GO
CREATE TABLE [WSO_GN_PDP_CONTEXT_CREATE](

    [SessionID] [bigint] NULL,
    [ProbeID] [smallint] NULL,
    [State] [smallint] NULL,
    [Attempt] [int] NULL,
    [IMSI] [bigint] NULL,
    [MSISDN] [bigint] NULL,
    [IMEI] [bigint] NULL,
    [IMEI_TAC] [int] NULL,
    [IMEI_SNR] [int] NULL,
    [Current_LAC] [int] NULL,
    [Current_CELL] [int] NULL,
    [timeBegin] [bigint] NULL,
    [timeACC] [int] NULL,
    [APN] [varchar](32) NULL,
    [UserIP] [int] NULL,
    [NSAPI] [smallint] NULL,
    [RATType] [smallint] NULL,
    [ChargingId] [int] NULL,
    [ChargeGateWay] [int] NULL,
    [SGSN_CONTROL] [int] NULL,
    [SGSN_DATA] [int] NULL,
    [GGSN_CONTROL] [int] NULL,
    [GGSN_DATA] [int] NULL,
    [Cause] [smallint] NULL
    
)
GO
--保存整理数据表结构:
IF OBJECT_ID

('[WSO_GN_PDP_CONTEXT_CREATE_STATS_TYPE1]','P')IS NOT 

NULL
DROP TABLE [WSO_GN_PDP_CONTEXT_CREATE_STATS_TYPE1]
GO
CREATE TABLE [WSO_GN_PDP_CONTEXT_CREATE_STATS_TYPE1](

    [timeBegin] [bigint] NULL,
    [ProbeID] [smallint] NULL,
    [RATType] [smallint] NULL,
    [SGSN_CONTROL] [int] NULL,
    [CURRENT_LAC] [int] NULL,
    [CURRENT_CELL] [int] NULL,
    [UserCount] [bigint] NULL,
    [TOTAL_HITS] [bigint] NULL,
    [PDP_ACT_SUCC] [bigint] NULL,
    [PDP_ACT_FAIL] [bigint] NULL,
    [PDP_ACT_TO] [bigint] NULL,
    [PDP_ACT_DELAY_AVG] [int] NULL,
    [PDP_ACT_DELAY_MIN] [int] NULL,
    [PDP_ACT_DELAY_MAX] [int] NULL
    
)
 

declare @date1 datetime
set @date1=GETDATE()
SELECT 
    (timeBegin/1000/300)*300*1000 AS timeBegin,
    ProbeID,
    RATType,
    SGSN_CONTROL,
    CURRENT_LAC,
    CURRENT_CELL,
    COUNT_BIG(DISTINCT IMSI) AS UserCount,
    COUNT_BIG(*) AS TOTAL_HITS,
    SUM(cast(case when [State]=1 then 1 else 0 end as 

bigint)) AS PDP_ACT_SUCC,
    SUM(cast(case when [State]=2 or [State]=3 then 1 

else 0 end AS bigint)) AS PDP_ACT_FAIL,
    SUM(cast(case when [State]=3 then 1 else 0 end as 

bigint)) AS PDP_ACT_TO,
    AVG(case when [State]=1 then timeACC else NULL end) 

AS PDP_ACT_DELAY_AVG,
    MIN(case when [State]=1 then timeACC else NULL end) 

AS PDP_ACT_DELAY_MIN,
    MAX(case when [State]=1 then timeACC else NULL end) 

AS PDP_ACT_DELAY_MAX
--into WSO_GN_PDP_CONTEXT_CREATE_STATS_TYPE1
FROM 
    WSO_GN_PDP_CONTEXT_CREATE
GROUP BY 
    (timeBegin/1000/300)*300*1000,
    ProbeID,
    RATType,
    SGSN_CONTROL,
    CURRENT_LAC,
    CURRENT_CELL 
declare @date2 datetime
set @date2=GETDATE()
print DATEDIFF(MS,@date1,@date2)
--创建索引:
CREATE CLUSTERED INDEX WSO_GN_PDP_CONTEXT_IDX 
ON [WSO_GN_PDP_CONTEXT_CREATE]

(timeBegin,ProbeID,RATType,
SGSN_CONTROL,CURRENT_LAC,CURRENT_CELL)



DROP INDEX WSO_GN_PDP_CONTEXT_IDX ON 

[WSO_GN_PDP_CONTEXT_CREATE]
--JOB每小时执行一次,对上一个小时的数据整理,把整理的结果

存入TYPE1表。 
--每天目标数据的名称为:WSO20120602,就是WSO + 日期。 
--举个例子