使用Airflow JDBC连接连接到Teradata

时间:2017-08-02 02:43:37

标签: jdbc teradata airflow

我尝试使用与Teradata数据库的连接在Airflow中执行SqlSensor任务。连接配置如下:

Connection

我特别提供了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

我做错了什么?

2 个答案:

答案 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)