如何在Nifi中调用Bigquery存储过程 选项1:Executeprocess 选项2:ExecuteSQL 哪个选项更好?

问题描述

我有一个bigquery存储过程,该过程将在某些GCS对象上运行并发挥作用。该程序可以手动完美运行,但是我想从Nifi调用该程序。我已经与HANA合作,并且知道我需要JDBC驱动程序来连接和执行查询

我可以使用executeprocess处理器,也可以使用executesql处理器。我不老实

我不确定如何使用bigquery存储过程在Nifi中实现这一目标。有人可以帮我吗?

提前谢谢!

如果有人可以提供帮助,则更新为新错误

enter image description here

解决方法

选项1:Executeprocess

最接近“手动执行”的方法是安装Google Cloud SDK,并在“ executeprocess”中执行:

bq query 'CALL STORED_PROCEDURE(ARGS)'

bq query 'SELECT STORED_PROCEDURE(ARGS)'

选项2:ExecuteSQL

如果您想将ExecuteSQL与Nifi一起使用来调用存储过程,则将使用BigQuery JDBC Driver

BigQuery可以同时使用'select'和'call'方法。

哪个选项更好?

我相信ExecuteSQL比Executeprocess更容易。

为什么?因为您需要在可能运行executecommand的所有系统上安装GCloud SDK,所以必须将google cloud凭据传递给它们。 这意味着分担工作并不容易。

此外,这可能涉及所有计算机的管理员权限。

在ExecuteSQL情况下,您需要:

1-将jdbc驱动程序复制到Nifi安装中的lib目录中

2-使用预先生成的访问/刷新令牌连接到BigQuery-请参阅JDBC Driver for Google BigQuery Install and Configuration guide-Oauth类型2。

好处是,当您导出流时,凭据已嵌入其中:无需弄乱凭据.json文件等(从安全角度来看也可能很糟糕)。

分发jdbc jar比安装GCloud SDK容易:只需将文件放在lib文件夹中。如果需要在多个节点中使用它,则可以对它进行scp / sftp,或使用Ambari进行分发。