所以,我正在做一个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中编写任何代码?我做了类似的过程,我使用GetFile
(本地)读取CSV文件,解析并转换它,然后使用ExecuteSQLRecord
将行插入SQL服务器(在云提供程序上运行)。 DBCPConnectionPool
需要根据其连接说明引用您的云提供商。这意味着URL可能引用something.google.com
,您可能需要使用云提供商管理打开防火墙规则。
您可以通过Public IP(公共意义可通过公共互联网访问)直接连接到Cloud SQL实例,这与本地数据库大致相同。默认情况下,通过公共IP连接需要某种形式的授权。这里有3个(可能是4 *)选项:
任何这些选项都适用于您直接连接到数据库。如果你仍然需要Python的细节,我建议查看SQLAlchemy并在这里使用这些snippets作为参考。
要使用Python连接到Cloud SQL实例,您需要Cloud SQL Proxy。您还必须设置配置文件。
在this tutorial,您可以逐步找到如何实现这一目标。它描述了如何设置连接所需的配置文件(here你也可以找到这个文件的一个例子)。
在教程中还有一些示例向您展示如何使用Python与数据库进行交互。