【问题标题】:Connect to SQL Server instance in GCP Cloud from Apache Beam从 Apache Beam 连接到 GCP Cloud 中的 SQL Server 实例
【发布时间】:2021-09-09 12:56:35
【问题描述】:

我正在尝试从 Apache Beam Java 代码连接到托管在 GCP 云上的 SQL Server 实例。光束管道从源表读取到目标表。源表托管在 SQL Server 中,而目标表托管在 MySQL 服务器中。该管道将​​由 Google Cloud Dataflow 执行。 类似于here的问题,但我需要基于Java SDK的SQL Server。

为了连接到云实例,我偶然发现了Cloud SQL Socket Library,它允许具有适当权限的用户连接到 Cloud SQL 数据库。但是,它似乎只适用于 MySQL 和 Postgres。

我编写了以下代码来连接 MySQL 实例,它可以工作。

private static JdbcIO.DataSourceConfiguration getMySQLDataSourceConfiguration() throws PropertyVetoException {
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    String password = System.getenv("MYSQL_USER_PASSWORD");
    String userName = System.getenv("MYSQL_USER_NAME");
    String databaseName = System.getenv("MYSQL_DATABASE_NAME");
    String instanceConnectionName = System.getenv("MYSQL_INSTANCE_CONNECTION_NAME");

    String dbUrl = String.format("jdbc:mysql://google/%s?cloudSqlInstance=%s" +
            "&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false" +
            "&user=%s&password=%s&rewriteBatchedStatements=true", databaseName, instanceConnectionName, userName, password);

    dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
    dataSource.setJdbcUrl(dbUrl);
    dataSource.setMaxPoolSize(10);
    dataSource.setInitialPoolSize(6);

    return JdbcIO.DataSourceConfiguration.create(dataSource);
}

对于 MySQL,我知道连接字符串的结构,但是,我无法为 SQL Server 找到类似的结构。

如何从 Apache Beam 代码连接到 SQL Server 类型的实例?

【问题讨论】:

  • 您考虑过使用 Beam 的 JDBCIO 连接器吗? github.com/apache/beam/blob/master/sdks/java/io/jdbc/src/main/… 它提供了标准化的 API,因此可能更易于配置/使用。
  • 我正在使用 JDBCIO 连接器进行连接。只是我希望连接字符串从连接器直接连接到云实例。
  • 似乎您的问题更多是关于为 SQL Server 实例创建“javax.sql.DataSource”。这有帮助吗? stackoverflow.com/questions/1080354/…
  • 没有。数据流需要连接到云实例。它必须通过 SocketFactory。我实际上可以使用 DirectRunner 在本地连接到 SQL Server,问题出在 DataflowRunner。
  • 你能澄清一下吗? JDBCIO.Read 是一个 Beam 转换,因此它连接到数据库的方式对于所有跑步者来说应该是相同的。您只需确保运行程序(Dataflow)启动的 VM 可以访问数据库。

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


【解决方案1】:

到目前为止,Dataflow 中不支持云 SQL。但是您可以尝试使用 Java 的 jdbc 连接器

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 2022-03-09
    • 1970-01-01
    • 2020-08-31
    • 2020-07-01
    • 2019-10-28
    • 2020-08-02
    • 1970-01-01
    • 2019-07-23
    相关资源
    最近更新 更多