我尝试使用与Teradata数据库的连接在Airflow中执行SqlSensor
任务。连接配置如下:
我特别提供了2个以","分隔的驱动程序路径;但我不确定它是否是正确的方法呢?
/home/airflow/java_sample/tdgssconfig.jar
/home/airflow/java_sample/terajdbc4.jar
当DAG执行时,它会触发错误消息
[2017-08-02 02:32:45,162] {models.py:1342} INFO - Executing <Task(SqlSensor): check_running_batch> on 2017-08-02 02:32:12
[2017-08-02 02:32:45,179] {base_hook.py:67} INFO - Using connection to: jdbc:teradata://myservername.mycompanyname.org/database=MYDBNAME,TMODE=ANSI,CHARSET=UTF8
[2017-08-02 02:32:45,313] {sensors.py:109} INFO - Poking: SELECT BATCH_KEY FROM MYDBNAME.AUDIT_BATCH WHERE BATCH_OWNER='ARO_TEST' AND AUDIT_STATUS_KEY=1;
[2017-08-02 02:32:45,316] {base_hook.py:67} INFO - Using connection to: jdbc:teradata://myservername.mycompanyname.org/database=MYDBNAME,TMODE=ANSI,CHARSET=UTF8
[2017-08-02 02:32:45,497] {models.py:1417} ERROR - java.lang.RuntimeException: Class com.teradata.jdbc.TeraDriver not found
我做错了什么?
答案 0 :(得分:2)
在连接页面中输入多个jar的适当方法是用逗号分隔两个完全限定的路径,如上所示。
我可以确认这是我采用的方法,并且一直有效(Airflow 10.1.1和10.1.2)。
请参阅:https://github.com/apache/airflow/blob/master/airflow/hooks/jdbc_hook.py#L51
奖金:如果在数据性能分析中使用临时查询进行测试,您会发现发送SELECT语句时会收到错误消息,因为Airflow将其包装在TD不支持的LIMIT子句中
答案 1 :(得分:0)
我的团队成员提供的解决方案是将两个jar合并到一个jar文件中。执行此操作并在驱动程序路径中指示新的jar文件后,它按预期工作。
以下是JAR文件的链接:https://github.com/alexisrolland/linux-setup/blob/master/teradataDriverJdbc.jar
以下是在SQLSensor
任务中使用连接的代码段示例:
CheckRunningBatch = SqlSensor(
task_id='check_running_batch',
conn_id='ed_data_quality_edw_dev',
sql="SELECT CASE WHEN MAX(BATCH_KEY) IS NOT NULL THEN 0 ELSE 1 END FROM DATABASE.AUDIT_BATCH WHERE STATUS_KEY=1;",
poke_interval=300,
dag=dag)