【问题标题】:Creating cloud sql tables from Dataflow job从 Dataflow 作业创建云 sql 表
【发布时间】:2021-09-20 08:55:54
【问题描述】:

有一个管道可以将表数据从 BigQuery 复制到 CloudSql。

Cloud SQL 表创建发生在数据流之外。

现在我们需要在 Dataflow 中创建表。

我有要在 GCS 存储桶中创建为 .sql 文件的表。

下面是sn-p的代码,将表从BQ复制到sql。

        p.apply(BigQueryIO.readTableRows()
                    .from(source_table)
                    .withTemplateCompatibility()
                    .withoutValidation())
           
            .apply(JdbcIO.<TableRow>write()
                    .withDataSourceConfiguration(
                            JdbcIO.DataSourceConfiguration.create(
                                    "org.postgresql.Driver",
                                    base_url
                            )
                    )
                    .withStatement("INSERT INTO " + target_table.split("\\.")[1] + " VALUES " + insert_query)
                    .withPreparedStatementSetter(new StatementSetter(some_map)));
    p.run();

有没有办法可以使用 JDBCIO 执行 .sql 文件?

【问题讨论】:

    标签: java google-cloud-dataflow apache-beam google-cloud-sql


    【解决方案1】:

    Apache Beam 中的JdbcIO 只能用于读取和写入 JDBC 数据源。不幸的是,.sql 文件无法使用 JdbcIO 执行。因为,JdbcIO 要求在写入数据之前创建数据库和表。这同样适用于像 CREATE 这样的 DDL 命令。

    自动创建表的解决方法是将Cloud Build 与 Dataflow 结合使用。可以将端到端流程创建为 Cloud Build 作业,使用云客户端创建表,然后可以触发 Dataflow 作业。有关 Cloud Build-Dataflow 设置示例,请参阅此 Medium article

    如果此功能是您管道中的重要元素,请通过 Beam 项目下的JIRA 向 Apache Beam 团队提出功能请求。为此,JIRA 需要登录。

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 1970-01-01
      • 2020-11-11
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多