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

问题描述 投票:0回答:3

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

谢谢

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

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

python google-cloud-storage etl google-cloud-sql apache-nifi
3个回答
0
投票

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


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捆绑在一起的驱动程序来验证连接。

0
投票

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

this tutorial,您可以逐步找到如何实现这一目标。它描述了如何设置连接所需的配置文件(here你也可以找到这个文件的一个例子)。

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

© www.soinside.com 2019 - 2024. All rights reserved.