
рдЯреАрдПрд▓; рдбреАрдЖрд░;
рд▓реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдлреА рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ QlikView рдкрд░ рдирд┐рд░реНрдорд┐рдд рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЕрджреНрдпрддрди рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЕрдкрд╛рдЪреЗ рдПрдпрд░рдлрд╝реНрд▓реЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдирд┐рд░реНрднрд░рддрд╛ рдирд░рдХ (рдЕрдВрдЧреНрд░реЗрдЬреА рдирд┐рд░реНрднрд░рддрд╛ рдирд░рдХ) рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рд╣реИ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЧреНрд░рд╛рдл рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░, рдЬреЛ рдирдП рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреБрд░рд╛рдиреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдХрдард┐рдирд╛рдИ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛
, 2018 , BIA-Technologies.
QlikView " ".
Qlik QlikSense, QlikView, 12.4, .
, , .
QlikView "" (application) тАФ , "QVW" ( ), , , .
, .
-- , , - QV. . , , . , "", ETL- , .
QV QVW , : , , . .
, , QVD. QlikView , , .
, ETL- , , QVD, , .
Qlik , , , (), - . QlikView QVD- . , QlikView, , , , .
, Qlik тАФ NPrinting, , , , , SSRS, , QlikView, .
, QlikView:
- , , QlikView Server (QVS). .QVW .
- QlikView Distribution Service (QDS). Publisher , Reload Engine, QlikView, : , QVS, " ", , , , . , , , QlikView, , .
- , QlikView Management Service (QMS) тАФ .
- , , - тАФ
, MS SQL, ETL QlikView .
( ) , .QVW , . , . , , , QVD.
:
- , , .
- , - , 8-9 , . , , - , - 4 , , .
QMS , , , . , ( Reload Engine, . Publisher , rusbaron , ).
QMS :

, , .
, QMS . (, ).
, , , .
, .
, .
, .
, , , ( ), , , - , ..
, .
- , , , . , , .
, , ETL-, , , . , , , ETL- .
.
, тАФ , , ,- тАФ , .
- , , .
, . - , -. .
, . , , , . , , , . , , тАФ .
, QDS . , - .
, . : , .
? . . ? .
, QlikView , , , .
, , , QlikView, . , , Hadoop ETL- .
QlikView , . , , .
QlikView : QMS QlikView Management Service API, . EDX (Event Driven Execution). , , QMS .
, " ", , , , , NPrinting.
, , тАФ (Workflow management systems). , Apache Airflow.
Airflow тАФ , . , , :

тАФ , -.
Airflow , , Airflow QMS, Airflow тАФ , , . , , : -> Airflow тАФ QlikView.
API QMS . , .
Airflow тАФ , . , , , , .
Airflow . , (, , ), QlikView, , , .
Airflow . , , - . , , : , . , , , , , , .
Airflow (DAG тАФ directed acyclic graph), , тАФ .
, "Application 7" "ETL_4" "ETL_5". "ETL_3" "TimeSensor_6_30" тАФ , 6:30.

Python.
tasksDict = {
u'ETL_1.qvw': {},
u'ETL_2.qvw': {
'Pool': 'Heavy_ETL_pool',
},
u'ETL_3.qvw': {
'StartTime': [6, 30]},
u'ETL_4.qvw': {
'Priority': -5,
'Dep': [
u'ETL_1.qvw',
u'ETL_3.qvw', ]},
u'ETL_5.qvw': {
'Dep': [
u'ETL_2.qvw', ]},
u'Application_6.qvw': {
'Dep': [
u'ETL_1.qvw',
u'ETL_5.qvw', ]},
u'Application_7.qvw': {
'Dep': [
u'ETL_4.qvw',
u'ETL_5.qvw',
]},
}
Airflow Python, , , . QlikView . , ( , , ) DAG. , , DAG .
: (5 ), (1 ) (100 ). . Airflow тАФ тАФ , , , , , , , , .
, DAG,from datetime import datetime, timedelta
from airflow import DAG
from airflow.sensors.time_delta_sensor import TimeDeltaSensor
from airflow.contrib.operators.qds_operator import QDSReloadApplicationOperator
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2018, 1, 19),
'email': ['Airflow.Administrator@mycompany.ru'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 0,
'retry_delay': timedelta(minutes=5),
'pool': 'default_pool',
}
dag = DAG('example_qds_operator',
description='Reload applications at QlikView Distribution Service',
catchup=False,
schedule_interval='0 21 * * 5',
default_args=default_args)
tasksDict = {
u'ETL_1.qvw': {},
u'ETL_2.qvw': {
'Pool': 'Heavy_ETL_pool',
},
u'ETL_3.qvw': {
'StartTime': [6, 30]},
u'ETL_4.qvw': {
'Priority': -5,
'Dep': [
u'ETL_1.qvw',
u'ETL_3.qvw', ]},
u'ETL_5.qvw': {
'Dep': [
u'ETL_2.qvw', ]},
u'Application_6.qvw': {
'Dep': [
u'ETL_1.qvw',
u'ETL_5.qvw', ]},
u'Application_7.qvw': {
'Dep': [
u'ETL_4.qvw',
u'ETL_5.qvw',
]},
}
airflowTasksDict = {}
for task in tasksDict.keys():
task_id = task.replace(" ", "_").replace("'", "").replace("/", "_").replace("(", "_").replace(")", "_").replace(",", "_").replace(".qvw", "").replace("__",
"_")
AirflowTask = QDSReloadApplicationOperator(document_name=task, task_id=task_id, qv_conn_id='qv_connection', dag=dag)
airflowTasksDict[task] = AirflowTask
for task in tasksDict.keys():
if 'Dep' in tasksDict[task]:
for dep in tasksDict[task]['Dep']:
airflowTasksDict[task].set_upstream(airflowTasksDict[dep])
if 'Pool' in tasksDict[task]:
airflowTasksDict[task].pool = tasksDict[task]['Pool']
if 'Priority' in tasksDict[task]:
airflowTasksDict[task].priority_weight = tasksDict[task]['Priority']
if 'StartTime' in tasksDict[task]:
hour = tasksDict[task]['StartTime'][0]
minute = tasksDict[task]['StartTime'][1]
sensorTime = timedelta(hours=hour, minutes=minute)
sensorTaskID = u'TimeSensor_{}_{}'.format(hour, minute)
if sensorTaskID not in airflowTasksDict:
SensorTask = TimeDeltaSensor(delta=sensorTime, task_id=sensorTaskID, pool='Sensors', dag=dag)
airflowTasksDict[sensorTaskID] = SensorTask
airflowTasksDict[task].set_upstream(airflowTasksDict[sensorTaskID])
if __name__ == '__main__':
dag.clear(reset_dag_runs=True)
dag.run()
, Airflow QlikView:

Airflow .
.
- , - , .
, ETL- , , .
, Airflow . .
, , .
, тАФ 1 . , -, .
. , , , . , .
.
рдПрдпрд░рдлреНрд▓реЛ рдХрд╛рд░реНрдп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдиреМрдХрд░реА рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рд░рд┐рдкреЛрд░реНрдЯ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреИрдВрдЯ рдЪрд╛рд░реНрдЯ:

рдХреЙрдореНрдмреИрдЯ рдПрдпрд░рдлреНрд▓реЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рджреЛ рдХреЛрд░ рдФрд░ 4 рдЬреАрдмреА рдХреА рд░реИрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реЗрд╡рд╛ рдХреЗ рд╕реБрдЪрд╛рд░реВ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдордиреЗ QlikView рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдПрдпрд░рдлреНрд▓реЛ рдиреЗ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдЕрдореВрд▓реНрдп рдорджрдж рдХреАред
