使用JDBC连接连接到Teradata

使用JDBC连接连接到Teradata,jdbc,teradata,airflow,Jdbc,Teradata,Airflow,我正在尝试使用到Teradata数据库的连接在Airflow中执行SqlSensor任务。连接配置如下: 我特别提供了两条以“,”分隔的驱动程序路径,但我不确定这是否是正确的方法 /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

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

我特别提供了两条以“,”分隔的驱动程序路径,但我不确定这是否是正确的方法

  • /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
[2017-08-02 02:32:45162]{models.py:1342}INFO-于2017-08-02 02:32:12执行
[2017-08-02 02:32:45179]{base_hook.py:67}信息-使用连接到:jdbc:teradata://myservername.mycompanyname.org/database=MYDBNAME,TMODE=ANSI,CHARSET=UTF8
[2017-08-02 02:32:45313]{sensors.py:109}INFO-Poking:从MYDBNAME.AUDIT\u BATCH中选择BATCH\u KEY,其中BATCH\u OWNER='ARO\u TEST'和AUDIT\u STATUS\u KEY=1;
[2017-08-02 02:32:45316]{base_hook.py:67}信息-使用连接到:jdbc:teradata://myservername.mycompanyname.org/database=MYDBNAME,TMODE=ANSI,CHARSET=UTF8
[2017-08-02 02:32:45497]{models.py:1417}错误-java.lang.RuntimeException:未找到类com.teradata.jdbc.TeraDriver

我做错了什么?

我的团队成员提供的解决方案是将两个jar合并到一个jar文件中。在执行此操作并在驱动程序路径中指示新的jar文件后,它按预期工作

以下是指向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)

我的团队成员提供的解决方案是将两个jar合并到一个jar文件中。在执行此操作并在驱动程序路径中指示新的jar文件后,它按预期工作

以下是指向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)

在connections页面中输入多个JAR的适当方法是使用逗号分隔两个完全限定的路径,就像上面所做的那样

我可以确认这是我所采取的方法,并且有效(10.1.1和10.1.2)

见:


好处:如果您在数据分析中使用特殊查询来测试它,您会注意到,在发送SELECT语句时会出现错误,因为它包含在TD不支持的LIMIT子句中。

在connections页面中输入多个JAR的适当方法是用逗号分隔两个完全限定的路径,就像上面所做的那样

我可以确认这是我所采取的方法,并且有效(10.1.1和10.1.2)

见:


额外好处:如果您在数据分析中使用特别查询来测试它,您会注意到,当您发送SELECT语句时,您会得到一个错误,因为它将它包装在一个限制子句中,而TD不支持该子句。

它似乎不像给定了一个“,”这样的分隔符,是的,它似乎只接受驱动程序路径的一个值,而JayDeBeAPI接受Python列表。我该怎么办?你必须把隔板后面的空隙去掉。例如:path/a.jar、path/bjar。。。否则,第二个jar路径以空格开始,气流将找不到它……它似乎没有像“,”这样的分隔符,是的,它似乎只接受驱动程序路径的一个值,而JayDeBeAPI接受Python列表。我该怎么办?你必须把隔板后面的空隙去掉。例如:path/a.jar、path/bjar。。。否则,第二条jar路径将以空格开始,气流将无法找到……Alexis,您介意发布如何将两个TD驱动程序合并为一个的步骤吗?我没有在这里设置java环境,我已经在网上尝试这样做了……@XiushiLe很抱歉回复太晚了。我不知道JAR文件是如何合并的,但是如果您想使用它,我已经在这里发布了合并版本:您是否可以通过包括如何使用conn_id来扩展您的示例代码?我不知道如何为Teradata创建自定义运算符。@XiushiLe我不确定是否可以在自定义运算符中使用气流连接,您可能需要用谷歌搜索。我在上面发布了一个如何在
SQLSensor
操作符中使用连接的示例。您只需在操作员参数中提供
连接id
。如果您想在代码中创建自定义连接,您也可以这样做:Alexis,您介意发布如何将两个TD驱动程序合并为一个的步骤吗?我没有在这里设置java环境,我已经在网上尝试这样做了……@XiushiLe很抱歉回复太晚了。我不知道JAR文件是如何合并的,但是如果您想使用它,我已经在这里发布了合并版本:您是否可以通过包括如何使用conn_id来扩展您的示例代码?我不知道如何为Teradata创建自定义运算符。@XiushiLe我不确定是否可以在自定义运算符中使用气流连接,您可能需要用谷歌搜索。我在上面发布了一个如何在
SQLSensor
操作符中使用连接的示例。您只需在操作员参数中提供
连接id
。如果要在代码中创建自定义连接,也可以使用以下方法: