繁体   English   中英

Apache Beam - 将 BigQuery TableRow 写入 Cassandra

[英]Apache Beam - Write BigQuery TableRow to Cassandra

我正在尝试从 BigQuery 读取数据(使用 TableRow)并将 output 写入 Cassandra。该怎么做?

这是我试过的。 这有效:

/* Read BQ */
PCollection<CxCpmMapProfile> data =  p.apply(BigQueryIO.read(new SerializableFunction<SchemaAndRecord, CxCpmMapProfile>() {
    public CxCpmMapProfile apply(SchemaAndRecord record) {
        GenericRecord r = record.getRecord();
        return new CxCpmMapProfile((String) r.get("channel_no").toString(), (String) r.get("channel_name").toString());
    }
}).fromQuery("SELECT channel_no, channel_name FROM `dataset_name.table_name`").usingStandardSql().withoutValidation());

/* Write to Cassandra */
data.apply(CassandraIO.<CxCpmMapProfile>write()
    .withHosts(Arrays.asList("<IP addr1>", "<IP addr2>"))
    .withPort(9042)
    .withUsername("cassandra_user").withPassword("cassandra_password").withKeyspace("cassandra_keyspace")
    .withEntity(CxCpmMapProfile.class));

但是当我像这样使用 TableRow 更改Read BQ部分时:

/* Read from BQ using readTableRow */
PCollection<TableRow> data = p.apply(BigQueryIO.readTableRows()
    .fromQuery("SELECT channel_no, channel_name FROM `dataset_name.table_name`")
    .usingStandardSql().withoutValidation());

写入 Cassandra 时出现以下错误

The method apply(PTransform<? super PCollection<TableRow>,OutputT>) in the type PCollection<TableRow> is not applicable for the arguments (CassandraIO.Write<CxCpmMacProfile>)

该错误是由于输入 PCollection 包含TableRow元素,而 CassandraIO 读取需要CxCpmMacProfile元素。 您需要从 BigQuery 读取元素作为CxCpmMacProfile元素。 BigQueryIO 文档有一个从表中读取行并将它们解析为自定义类型的示例,通过read(SerializableFunction)方法完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM