因此,我正在执行一个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)
将执行查询。那么我该如何创建这种执行器呢?
答案 0 :(得分:0)
我不明白为什么您需要用Python编写任何代码?我执行了类似的过程,其中使用GetFile
(本地)读取CSV文件,进行解析和转换,然后使用ExecuteSQLRecord
将行插入SQL Server(在云上运行)提供者)。 DBCPConnectionPool
需要根据他们的连接说明来引用您的云提供商。这意味着该URL可能引用something.google.com
,并且您可能需要使用云提供商的管理来打开防火墙规则。
答案 1 :(得分:0)
您可以通过Public IP(公共含义,可以通过公共互联网访问)直接连接到Cloud SQL实例,与本地数据库基本相同。默认情况下,通过公共IP进行的连接需要某种形式的授权。这里有3个(也许是4 *)选项:
Cloud SQL Proxy-这是一个可执行文件,可在本地端口或Unix套接字上侦听,并使用IAM permissions进行身份验证,加密并将连接转发到数据库。
Self-managed SSL/TLS-创建一个SSL / TLS密钥对,为NiFi提供客户端密钥作为身份验证的证明。
Whitelisting an IP-允许连接的IP列入白名单(因此,NiFi公开使用的IP)。由于多种原因,这是最不安全的选择。
这些选项中的任何一个都应该可以使您直接连接到数据库。如果您仍然需要Python的详细信息,建议您研究SQLAlchemy,并在此处使用这些snippets作为参考。
答案 2 :(得分:0)
要使用Python连接到Cloud SQL实例,您需要Cloud SQL Proxy。另外,您还必须设置一个配置文件。
在this tutorial中,您可以逐步找到实现此目标的方法。描述了如何设置连接所需的配置文件(here也可以找到该文件的示例)。
在本教程中,还有一些示例向您展示了如何使用Python与数据库进行交互。