Google cloud dataflow 使用MySQL作为输入源并写入GoogleBigQuery

Google cloud dataflow 使用MySQL作为输入源并写入GoogleBigQuery,google-cloud-dataflow,apache-beam,apache-beam-io,Google Cloud Dataflow,Apache Beam,Apache Beam Io,我有一个ApacheBeam任务,它使用JDBC从MySQL源读取数据,并将数据原样写入BigQuery表。此时不执行任何转换,这将在稍后进行,目前我只希望将数据库输出直接写入BigQuery 这是尝试执行此操作的主要方法: publicstaticvoidmain(字符串[]args){ Options Options=PipelineOptionsFactory.fromArgs(args).withValidation().as(Options.class); Pipeline p=Pip

我有一个ApacheBeam任务,它使用JDBC从MySQL源读取数据,并将数据原样写入BigQuery表。此时不执行任何转换,这将在稍后进行,目前我只希望将数据库输出直接写入BigQuery

这是尝试执行此操作的主要方法:

publicstaticvoidmain(字符串[]args){
Options Options=PipelineOptionsFactory.fromArgs(args).withValidation().as(Options.class);
Pipeline p=Pipeline.create(选项);
//为输出表构建表架构。
列表字段=新的ArrayList();
add(new TableFieldSchema().setName(“phone”).setType(“STRING”);
add(new TableFieldSchema().setName(“url”).setType(“STRING”);
TableSchema schema=new TableSchema().setFields(字段);
p、 apply(JdbcIO.read()
.withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
“com.mysql.jdbc.Driver”,“jdbc:mysql://host:3306/db_name")
.withUsername(“用户”)
.withPassword(“pass”))
.withQuery(“选择电话号码、身份、个人资料、来自联系人的图像、来电者身份限制100”)
.withRowMapper(新的JdbcIO.RowMapper(){
public KV mapRow(ResultSet ResultSet)引发异常{
返回KV.of(resultSet.getString(1),resultSet.getString(2));
}
})
.apply(BigQueryIO.Write
.to(options.getOutput())
.withSchema(schema)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE如果需要)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.Write_TRUNCATE));
p、 run();
}
但是,当我使用maven执行模板时,会出现以下错误:

java:[184,6]找不到symbol:method 应用(com.google.cloud.dataflow.sdk.io.BigQueryIO.Write.Bound)
位置:class org.apache.beam.sdk.io.jdbc.JdbcIO.Read

似乎我没有通过BigQueryIO。写下预期的数据收集,这就是我目前正在努力解决的问题


在这种情况下,如何使来自MySQL的数据满足BigQuery的期望?

我认为您需要向BigQueryIO.Write提供一个PCollection,而不是RowMapper正在输出的PCollection类型

另外,在设置TableRow时,请使用正确的列名和值对。 注意:我认为您的KVs是电话和url值(例如{“555-555-1234”:“}),而不是列名和值对(例如{“电话”:“555-555-1234”,“url”:“})

请参见此处的示例:


请你试试看,让我知道它是否适合你?希望这有帮助。

我认为您需要向BigQueryIO.Write提供一个PCollection,而不是RowMapper正在输出的PCollection类型

另外,在设置TableRow时,请使用正确的列名和值对。 注意:我认为您的KVs是电话和url值(例如{“555-555-1234”:“}),而不是列名和值对(例如{“电话”:“555-555-1234”,“url”:“})

请参见此处的示例:

请你试试看,让我知道它是否适合你?希望这有帮助