10.3.?用法示例

10.3.1. 创建定时任务
10.3.2. 元数据表

10.3.1.?创建定时任务

加载插件成功后,会在数据库中创建一个uxagent的schema,里面包含一些定时任务需要的接口和元数据表,创建一个新的job就是操作这些表,插入job的配置信息到对应的表中,如下所示:

uxdb=#\d
				关联列表

架构模式?|		  名称		| 类型 |?拥有者

----------+--------------------------+--------+--------

uxagent	 |?uxa_exception		|?数据表?|?uxdb
uxagent  |?uxa_exception_jexid_seq	|?序列数?|?uxdb
uxagent  |?uxa_job			|?数据表?|?uxdb
uxagent  |?uxa_job_jobid_seq		|?序列数?|?uxdb
uxagent  |?uxa_jobagent		|?数据表?|?uxdb
uxagent  |?uxa_jobclass		|?数据表?|?uxdb
uxagent  |?uxa_jobclass_jclid_seq	|?序列数?|?uxdb
uxagent  |?uxa_joblog			|?数据表?|?uxdb
uxagent  |?uxa_joblog_jlgid_seq	|?序列数?|?uxdb
uxagent  |?uxa_jobstep			|?数据表?|?uxdb
uxagent  |?uxa_jobstep_jstid_seq	|?序列数?|?uxdb
uxagent	 |?uxa_jobsteplog		|?数据表?|?uxdb
uxagent  |?uxa_jobsteplog_jslid_seq	|?序列数?|?uxdb
uxagent	 |?uxa_schedule		|?数据表?|?uxdb
uxagent	 |?uxa_schedule_jscid_seq	|?序列数?|?uxdb
(15?行记录)
uxdb=#\df
		函数列表
?
架构模式?|		名称		|???结果数据类型???|?参数数据类型 | 类型??
----------+------------------------+--------------------------+------------------------
uxagent  |?uxa_exception_trigger |?trigger	|		| 触发器
uxagent	 |?uxa_is_leap_year	  |?boolean	|?smallint | 常规
uxagent	 |?uxa_job_trigger	  |?trigger	|		|?触发器
uxagent  |?uxa_next_schedule     |integer,?timestamp?with time?zone| integer,?timestamp?with time?zone,?timestamp?with?time?zone,?boolean[],?boolean[],?boolean[],?boolean[],boolean[]?|?常规
uxagent	 |?uxa_schedule_trigger  |?trigger	|		|?触发器
uxagent  |?uxagent_schema_version|?smallint	|		|?常规
(6?行记录)
		uxdb=#
		

在uxsql命令行中,可以操作uxAgent的元数据库表来添加一个定时任务。创建一个新的定时任务一般需要三个步骤:

  1. 创建一个新的定时任务job;

  2. 创建执行步骤steps;

  3. 创建作业调度schedules。

下面是一个具体的示例,每分钟向test表中插入一条数据。

  1. 创建job

    uxdb=#INSERT INTO uxagent.uxa_job(jobjclid, jobname, jobdesc, jobhostagent, jobenabled) 
    VALUES (1::integer, 'job-test'::text, 'a example for job schedule within uxsql'::text, ''::text, true);
    INSERT 0 1
    uxdb=#
    		

    jobjclid字段是本次创建的job的类型(job class),共有5种,可以查看元数据表中的uxa_jobclass

    jobhostagent字段指定运行job的主机,空表示所有主机都可运行,一般设置为空即可。

    查询jobid,在创建step和schedule时会使用到。

    uxdb=#SELECT?jobid?FROM?uxa_job;
    jobid
    -------
    ?4
    (1?行记录)
    uxdb=#
    		
  2. 创建step

    uxdb=#INSERT?INTO?uxagent.uxa_jobstep?(jstjobid,?jstname,?jstenabled,?jstkind,jstconnstr,?jstdbname,?jstonerror,jstcode,?jstdesc)?VALUES?(4,?'step-for-job-test'::text,?true,
    		's'::character(1),''::text,?'uxdb'::name,?'f'::character(1),'insert?into?uxagent.test?select?now();'::text,?'the?steps?of?job-test?torun'::text);
    INSERT?0?1
    uxdb=#
    		

    values从句中的值4,就是创建job步骤中查询的jobid。这个step执行如下命令:

    create?table?uxagent.test(a?timestamp);
    insert?into?uxagent.test?select?now();
  3. 创建作业调度

    uxdb=#INSERT?INTO?uxagent.uxa_schedule(jscjobid,?jscname,?jscdesc,?jscenabled, jscstart, jscminutes,?jschours,?jscweekdays,?jscmonthdays,?jscmonths)?VALUES?(4,?'schedule-for-job-test'::text,?'a?schedule?of?job-test'::text,?true,'2019-08-29?16:15:00+08'::timestamp?with?time?zone,
    --?MinutesARRAY[true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,
    true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,
    true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,
    true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,?true,
    true,?true,?true,?true,?true,?true,?true]::boolean[],
    --?Hours?ARRAY[false,?false,?false,?false,?false,?false,?false,?false,?false,?false,
    false,?false,?false,?false,?false,?false,?false,?false,?false,?false,?false,?false,
    false,?false]::boolean[],--?Week?days?ARRAY[false,?false,?false,?false,?false,?false,?false]::boolean[],
    --?Month?daysARRAY[false,?false,?false,?false,?false,?false,?false,?false,?false,?false,
    false,?false,?false,?false,?false,?false,?false,?false,?false,?false,?false,?false,
    false,?false,?false,?false,?false,?false,?false,?false,?false,?false]::boolean[],
    --?MonthsARRAY[false,?false,?false,?false,?false,?false,?false,?false,?false,?false,
    false,?false]::boolean[]);
    INSERT?0?1
    uxdb=#
    		

    同样,values从句的值4表示jobid。这里需要注意一下日期和时间字段,这是定时任务设置调度的部分,SQL中使用布尔类型的数组来表示日期和时间的各域,数组的长度就是各域的有效取值范围,如日期部分的month域,因为一年有12个月,所以其数组长度为12,其他域同理。true和false分别表示选择和不选在这个时间执行job。

    执行结果:

    uxdb=#?select?now();
    		now??????????????
    -------------------------------
    2019-08-29?16:22:16.178407+08
    (1?行记录)
    uxdb=#select?*?from?test;
    		a??????????????
    -------------------------------
    2019-08-29?15:48:00.67718+08
    2019-08-29?16:15:02.700994+08
    2019-08-29?16:16:02.758783+08
    2019-08-29?16:17:02.846406+08
    2019-08-29?16:18:02.914731+08
    2019-08-29?16:19:02.993701+08
    2019-08-29?16:20:03.07522+08
    2019-08-29?16:21:03.150455+08
    2019-08-29?16:22:03.234137+08
    (9?行记录)
    uxdb=#
    		

10.3.2.?元数据表

  • uxa_job

    记录job定义的元数据。

    uxdb=#select?*?from?uxa_job;
    jobid?|?jobjclid?|?jobname | jobdesc?| jobhostagent?|?jobenabled?|?jobcreated?|?jobchanged?|?jobagentid |?jobnextrun|?joblastrun
    -------+----------+----------+-----------------------------------------+--------------+------------+----------------------------------------------
    4?|	1?|?job-test|a?example?for?job?schedule?within?uxsql | |?t?|?2019-08-29?15:54:06.89931+08?|?2019-08-29?15:54:06.89931+08?|?| 2019-08-29?16:36:00+08?|?2019-08-29?16:35:04.209332+08??
    (1?行记录)
    uxdb=#
    		
  • uxa_jobstep

    记录每个job执行的step的元数据。

     
    uxdb=#select?*?from?uxa_jobstep;
    jstid?|?jstjobid?|?jstname | jstdesc?| jstenabled?|?jstkind?|?jstcode?|?jstconnstr?|?jstdbname |?jstonerror|?jscnextrun
    -------+----------+----------+-----------------------------------------+--------------+------------+-----------------------------------------
    4?|	4?|?step-for-job-test |the?steps?of?job-test?to?run | t |?s?|?insert?into?uxagent.test?select?now(); |?|uxdb?| f?|??
    (1?行记录)
    uxdb=#
    		
  • uxa_schedule

    记录每个job的调度的元数据。

     
    uxdb=#select?*?from?uxa_schedule;
    jscid?|?jscjobid?|?jscname | jscdesc?| jscenabled?|?jscstart?|?jscend?|?jscminutes?| jschours?|?jscweekdays |?jscmonthdays |?jscmonths
    -------+----------+----------+-----------------------------------------+--------------+------------+-----------------------------------------------------
    4? | 4?|?schedule-for-job-test |a?schedule?of?job-test | t |?2019-08-29?16:15:00+08?|?| {t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,
    t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t}?|{f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}?| {f,f,f,f,f,f,f}?|?|
    {f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}?|?{f,f,f,f,f,f,f,f,f,f,f,f}?
    (1?行记录)
    uxdb=#
    		
  • uxa_jobagent

    记录uxagent守护进程的信息。

     
    uxdb=#select?*?from?uxa_jobagent;
    jagpid??|?	jaglogintime????|?jagstation 
    --------+-------------------------------+-------------------
    2143?   |?2019-08-29?15:23:13.776622+08?|?localhost
    (1?行记录)
    uxdb=#
    		
  • uxa_jobclass

    元数据,5种job类型。

     
    uxdb=#select?*?from?uxa_jobagent;
    jclid?|	?jclname??????
    -------+-----------------------------
    1?|?Routine?Maintenance
    2?|?Data?Import
    3?|?Data?Export
    4?|?Data?Summarisation
    5?|?Miscellaneous
    (5?行记录)
    uxdb=#
    		
  • uxa_joblog

    每个job运行状态的日志。

     
    uxdb=#select?*?from?uxa_joblog;
    jlgid?|?jlgjobid?|?jlgstatus?|	jlgstart	|???jlgduration??
    -------+----------+-----------+-------------------------------+-----------------
    ???99 |	4?|?s	|?2019-08-29?16:15:02.672584+08?|?00:00:00.03865
    ??100?|	4?|?s	|?2019-08-29?16:16:02.737795+08?|?00:00:00.030618
    ??101?|	4?|?s	|?2019-08-29?16:17:02.820218+08?|?00:00:00.03422
    ??102?|	4?|?s	|?2019-08-29?16:18:02.893128+08?|?00:00:00.030145
    ??103?|	4?|?s	|?2019-08-29?16:19:02.973116+08?|?00:00:00.02985
    ??104?|	4?|?s	|?2019-08-29?16:20:03.053281+08?|?00:00:00.029872
    ??105?|	4?|?s	|?2019-08-29?16:21:03.129232+08?|?00:00:00.02937
    ??106?|	4?|?s	|?2019-08-29?16:22:03.206437+08?|?00:00:00.038498
    ??107?|	4?|?s	|?2019-08-29?16:23:03.279988+08?|?00:00:00.029533
    ??108?|	4?|?s	|?2019-08-29?16:24:03.360594+08?|?00:00:00.029433
    ??109?|	4?|?s	|?2019-08-29?16:25:03.427083+08?|?00:00:00.01847
    ??110?|	4?|?s	|?2019-08-29?16:26:03.541442+08?|?00:00:00.023226
    ??111?|	4?|?s	|?2019-08-29?16:27:03.60231+08   |?00:00:00.033018
    ??112?|	4?|?s	|?2019-08-29?16:28:03.687327+08?|?00:00:00.03721
    ??113?|	4?|?s	|?2019-08-29?16:29:03.760368+08?|?00:00:00.029912
    ??114?|	4?|?s	|?2019-08-29?16:30:03.841993+08?|?00:00:00.030117
    ??115?|	4?|?s	|?2019-08-29?16:31:03.923883+08?|?00:00:00.03032
    ......
    ......
    ......
    		
  • uxa_jobsteplog

    每个job的step的执行日志。

     
    uxdb=#select?*?from?uxa_jobsteplog;
    jslid?|?jsljlgid |?jsljstid?| jslstatus?|?jslresult?| jslstart | jslduration |?jsloutput??
    -------+----------+-----------+-------------------------------+-----------------------+------------------- 
    99?  |	99   |	4?|?s	| 1?|?2019-08-29?16:15:02.68332+08 |?00:00:00.024913?|
    100? |	100? |	4?|?s	| 1?|?2019-08-2916:16:02.744372+08?|?00:00:00.021121?|
    101? |	101? |	4?|?s	| 1?|?2019-08-29?16:17:02.82876+08 |?00:00:00.02325   |
    102? |	102? |	4?|?s	| 1?|?2019-08-29 16:18:02.899348+08 |?00:00:00.020938?|
    103? |	103? |	4?|?s	| 1?|?2019-08-2916:19:02.979277+08?|?00:00:00.019616?|
    104? |	104? |	4?|?s	| 1?|?2019-08-2916:20:03.060626+08?|?00:00:00.019836?|
    ......
    ......
    ......
    		
  • uxa_exception

    记录job执行的异常信息。

     
    uxdb=#select?*?from?uxa_exception?;
    jexid?|?jexscid?|?jexdate?|?jextime
    -------+---------+---------+---------
    (0?行记录)
    uxdb=#
    		
XML 地图 | Sitemap 地图