Cloud SQL / NiFi:使用python和NiFi连接到云SQL数据库

时间:2019-04-28 15:35:57

标签: python google-cloud-storage etl google-cloud-sql apache-nifi

因此,我正在执行一个etl流程,在该流程中,我将Apache NiFi用作etl工具以及来自Google云sql的postgresql数据库,以从GCS读取csv文件。作为该过程的一部分,我需要编写查询以转换从csv文件读取的数据并将其插入到云sql数据库中的表中。因此,基于NIFi,我需要编写python以每天自动执行sql查询。但是这里的问题是,我该如何编写python与云sql数据库连接?应该做什么配置?我已经阅读了一些有关Cloud sql代理的信息,但是我可以只使用Cloud sql实例的内部IP地址并将其放在一些配置文件中并从中创建一些dbconnector吗?

谢谢

编辑:我可以使用psql -h [CLOUD_SQL_PRIVATE_IP_ADDR] -U postgres从我的虚拟机连接到云sql数据库,但是我需要为etl进程运行python脚本,并且该进程的一部分需要执行sql。我要问的是如何编写用于执行sql的python文件

例如在python中,query = 'select * from table ....'然后运行 postgres.run_sql(query)将执行查询。那么我该如何创建这种执行器呢?

3 个答案:

答案 0 :(得分:0)

我不明白为什么您需要用Python编写任何代码?我执行了类似的过程,其中使用GetFile(本地)读取CSV文件,进行解析和转换,然后使用ExecuteSQLRecord将行插入SQL Server(在云上运行)提供者)。 DBCPConnectionPool需要根据他们的连接说明来引用您的云提供商。这意味着该URL可能引用something.google.com,并且您可能需要使用云提供商的管理来打开防火墙规则。

答案 1 :(得分:0)

您可以通过Public IP(公共含义,可以通过公共互联网访问)直接连接到Cloud SQL实例,与本地数据库基本相同。默认情况下,通过公共IP进行的连接需要某种形式的授权。这里有3个(也许是4 *)选项:

  1. Cloud SQL Proxy-这是一个可执行文件,可在本地端口或Unix套接字上侦听,并使用IAM permissions进行身份验证,加密并将连接转发到数据库。

  2. Self-managed SSL/TLS-创建一个SSL / TLS密钥对,为NiFi提供客户端密钥作为身份验证的证明。

  3. Whitelisting an IP-允许连接的IP列入白名单(因此,NiFi公开使用的IP)。由于多种原因,这是最不安全的选择。

这些选项中的任何一个都应该可以使您直接连接到数据库。如果您仍然需要Python的详细信息,建议您研究SQLAlchemy,并在此处使用这些snippets作为参考。

  • 另一个可能的选择:NiFi似乎正在使用Java,并允许您将jar指定为驱动程序,因此您还可以提供与Cloud SQL JDBC SocketFactory捆绑在一起的驱动程序,以对连接进行身份验证。
  • li>

答案 2 :(得分:0)

要使用Python连接到Cloud SQL实例,您需要Cloud SQL Proxy。另外,您还必须设置一个配置文件。

this tutorial中,您可以逐步找到实现此目标的方法。描述了如何设置连接所需的配置文件(here也可以找到该文件的示例)。

在本教程中,还有一些示例向您展示了如何使用Python与数据库进行交互。