SQL Server-使用R Scipts运行日常作业

时间:2018-06-19 20:13:04

标签: r sql-server jobs

我想知道是否有人对如何设置SQL Server作业以运行r脚本有任何想法?到目前为止,这是有关SQL代码的内容:我必须从数据库(ETL)中提取数据,并希望R在指定日期之前对这些数据进行汇总/分析。之后,数据库将自动运行。是否有人对SQL ETL代码(来自数据库)将去向何处以及最终将自动运行的R脚本过程去向何处有任何想法?谢谢!

DATABASE->数据库中的ETL代码(生成自己的数据集)->仅使用R脚本可以对其进行操作/转换的数据集。

DECLARE @job_name NVARCHAR(128),             @description NVARCHAR(512),             @owner_login_name NVARCHAR(128),             @database_name NVARCHAR(128);

SET @job_name = N'Some Title';
SET @description = N'Periodically do something';
SET @owner_login_name = N'login';
SET @database_name = N'DATABASE';

-- Delete job if it already exists:
IF EXISTS(SELECT job_id FROM msdb.dbo.sysjobs WHERE (name = @job_name))
BEGIN
    EXEC msdb.dbo.sp_delete_job
        @job_name = @job_name;
END

EXEC  msdb.dbo.sp_add_job
    @job_name=@job_name, 
    @enabled=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name;

 -- Add server:
 EXEC msdb.dbo.sp_add_jobserver @job_name=@job_name;

 -- Add step to execute SQL:
 EXEC msdb.dbo.sp_add_jobstep
     @job_name=@job_name,
     @step_name=N'Execute SQL', 
     @step_id=1, 
     @cmdexec_success_code=0, 
     @on_success_action=1, 
     @on_fail_action=2, 
     @retry_attempts=0, 
     @retry_interval=0, 
     @os_run_priority=0, 
     @subsystem=N'TSQL', 
     @command=N'EXEC my_stored_procedure; -- OR ANY SQL STATEMENT', 
     @database_name=@database_name, 
     @flags=0;

-- Update job to set start step:
   EXEC msdb.dbo.sp_update_job
       @job_name=@job_name, 
       @enabled=1, 
       @start_step_id=1, 
       @notify_level_eventlog=0, 
       @notify_level_email=2, 
       @notify_level_netsend=2, 
       @notify_level_page=2, 
       @delete_level=0, 
       @description=@description, 
       @category_name=N'[Uncategorized (Local)]', 
       @owner_login_name=@owner_login_name, 
       @notify_email_operator_name=N'', 
       @notify_netsend_operator_name=N'', 
       @notify_page_operator_name=N'';

  -- Schedule job:
   EXEC msdb.dbo.sp_add_jobschedule
       @job_name=@job_name,
       @name=N'Daily',
       @enabled=1,
       @freq_type=4,
       @freq_interval=1, 
       @freq_subday_type=1, 
       @freq_subday_interval=0, 
       @freq_relative_interval=0, 
       @freq_recurrence_factor=1, 
       @active_start_date=20170101, --YYYYMMDD
       @active_end_date=99991231, --YYYYMMDD (this represents no end date)
       @active_start_time=010000, --HHMMSS
       @active_end_time=235959; --HHMMSS

1 个答案:

答案 0 :(得分:0)

自sql-server 2014起,sql-server支持运行R和python。请看this

sql-server 2014之前的方法

但是,如果您使用的是2014年之前的版本,则需要采用其他方法。我的建议是使用R启动SQL(如果可以的话)。

使用类似taskscheduleR的库。首先,您需要执行R的计划任务来计算数据。然后通过诸如obdc, dbi, etc.之类的库连接到您的sql-server,以更新所需的内容。

ps。我以前没有尝试过,但是如果您还有其他问题,可以进行一些测试。