问题描述
我有一个bigquery存储过程,该过程将在某些GCS对象上运行并发挥作用。该程序可以手动完美运行,但是我想从Nifi调用该程序。我已经与HANA合作,并且知道我需要JDBC驱动程序来连接和执行查询。
我可以使用executeprocess处理器,也可以使用executesql处理器。我不老实
我不确定如何使用bigquery存储过程在Nifi中实现这一目标。有人可以帮我吗?
提前谢谢!
如果有人可以提供帮助,则更新为新错误
解决方法
选项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进行分发。