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

2024-09-24 00:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我正在做一个etl过程,在这个过程中,我使用apachenifi作为etl工具,以及googlecloudsql中的postgresql数据库,从GCS读取csv文件。作为过程的一部分,我需要编写一个查询来转换从csv文件读取的数据并将其插入到cloudsql数据库的表中。因此,基于NIFi,我需要编写一个python来每天自动执行sql查询。但这里的问题是,我如何编写一个python来连接云sql数据库?应该做什么配置?我读过一些关于云sql代理的文章,但是我能不能使用一个云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),它将执行查询。那么我怎么才能创造出这样的执行者呢?在


Tags: 文件工具csv数据数据库sql进程过程
3条回答

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

this tutorial中,您可以一步一步地找到如何实现这一点。它描述了如何设置连接所需的配置文件(here您也可以找到该文件的一个示例)。在

本教程还提供了一些示例,演示如何使用Python与数据库交互。在

我不明白为什么要用Python编写代码?我已经完成了一个类似的过程,我使用GetFile(本地)来读取CSV文件,解析并转换它,然后使用ExecuteSQLRecord将这些行插入到SQL server(在云提供程序上运行)。DBCPConnectionPool需要根据连接说明引用云提供商。这意味着URL可能引用something.google.com,您可能需要使用云提供商管理打开防火墙规则。在

您可以通过Public IP(公共意思是可以通过公共互联网访问)直接连接到云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捆绑在一起的驱动程序来验证连接。在

相关问题 更多 >