【问题标题】:connect google cloud sql postgres instance from beam pipeline从梁管道连接谷歌云 sql postgres 实例
【发布时间】:2017-11-06 03:55:10
【问题描述】:

我想从在谷歌数据流上运行的 apache 梁管道连接谷歌云 sql postgres 实例。
我想使用 Python SDK 执行此操作。
我无法为此找到适当的文档。
在云 SQL 中如何指导我没有看到任何有关数据流的文档。
https://cloud.google.com/sql/docs/postgres/

有人可以提供文档链接/github 示例吗?

【问题讨论】:

    标签: python postgresql google-cloud-sql apache-beam


    【解决方案1】:

    您可以使用来自beam-nuggetsrelational_db.Writerelational_db.Read 转换,如下所示:

    首先安装梁块:

    pip install beam-nuggets
    

    阅读:

    import apache_beam as beam
    from apache_beam.options.pipeline_options import PipelineOptions
    from beam_nuggets.io import relational_db
    
    with beam.Pipeline(options=PipelineOptions()) as p:
        source_config = relational_db.SourceConfiguration(
            drivername='postgresql+pg8000',
            host='localhost',
            port=5432,
            username='postgres',
            password='password',
            database='calendar',
        )
        records = p | "Reading records from db" >> relational_db.Read(
            source_config=source_config,
            table_name='months',
        )
        records | 'Writing to stdout' >> beam.Map(print)
    

    写作:

    import apache_beam as beam
    from apache_beam.options.pipeline_options import PipelineOptions
    from beam_nuggets.io import relational_db
    
    with beam.Pipeline(options=PipelineOptions()) as p:
        months = p | "Reading month records" >> beam.Create([
            {'name': 'Jan', 'num': 1},
            {'name': 'Feb', 'num': 2},
        ])
        source_config = relational_db.SourceConfiguration(
            drivername='postgresql+pg8000',
            host='localhost',
            port=5432,
            username='postgres',
            password='password',
            database='calendar',
            create_if_missing=True,
        )
        table_config = relational_db.TableConfiguration(
            name='months',
            create_if_missing=True
        )
        months | 'Writing to DB' >> relational_db.Write(
            source_config=source_config,
            table_config=table_config
        )
    

    【讨论】:

    • 要使用 Python SDK 从 Dataflow 工作人员连接到 Cloud SQL 数据库,我必须在所有工作人员上安装并运行 cloud_sql_proxy CLI(或将数据库的所有 IP 列入白名单,这不是理想的)。我知道 Java SDK 内置了一些代理/套接字功能;你知道 Python @mohaseeb 有什么类似的技巧吗?顺便说一句,我正在使用 beam_nuggets,除了那个单独的代理问题外,它工作得很好:)
    • @chmod_007 我不知道类似的功能。但是,您可以通过在 Cloud SQL DB 上启用“私有 IP”连接,并确保 Cloud SQL DB 和 Dataflow工作人员位于同一个谷歌云区域(并使用其私有 IP 连接到数据库)。欲了解更多信息,请查看cloud.google.com/sql/docs/postgres/private-ip
    • @chmod_007 很高兴看到您发现 beam_nuggets 很有用;我会在假期里抽出一些时间来处理它。
    【解决方案2】:

    Java SDK 包含JdbcIO,它允许连接到可以通过标准Java JDBC 机制访问的任何数据库。目前 Beam Python SDK 中没有类似的功能。如果有,我想它会使用 Python DB-API。随意提交 a feature request 或贡献 - 它应该是相当简单的开发(例如通过模仿 Java JdbcIO 的源代码)但非常有用:)

    【讨论】:

    • 谢谢@jkff 我正在尝试使用 java sdk 进行连接。我能够使用代理连接到 postgres 实例并在本地运行 pipline。但是有没有什么办法可以在部署到数据流之后直接连接到云 sql postgres。我尝试按照cloud.google.com/appengine/docs/flexible/java/… 中给出的步骤操作,但它给了我未知的谷歌主机。能否请您指出将数据流连接到 postgres cloud sql 的文档?
    • 您能否发布一个新问题,详细说明当您尝试采用在本地工作的同一管道并在数据流上运行时出现的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2020-04-02
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多