Google cloud platform 通过数据流从Google扳手到PubSub
使用谷歌数据流,我需要从谷歌扳手读取数据并作为批处理写入PubSub,我在扳手中有超过100000条记录,因此我需要使用PubSub批处理读取这些记录并发布到PubSub主题,每次发布迭代的限制是1000条记录Google cloud platform 通过数据流从Google扳手到PubSub,google-cloud-platform,google-cloud-functions,google-cloud-dataflow,google-cloud-pubsub,google-cloud-spanner,Google Cloud Platform,Google Cloud Functions,Google Cloud Dataflow,Google Cloud Pubsub,Google Cloud Spanner,使用谷歌数据流,我需要从谷歌扳手读取数据并作为批处理写入PubSub,我在扳手中有超过100000条记录,因此我需要使用PubSub批处理读取这些记录并发布到PubSub主题,每次发布迭代的限制是1000条记录 请在这方面帮助我一种方法是使用数据流连接器 从云扳手读取数据 要从Cloud Paner读取,请应用span.read()转换。使用span.read类中的方法配置读取。应用转换将返回一个PCollection,其中集合中的每个元素表示读取操作返回的单个行。根据所需的输出,您可以使用或不
请在这方面帮助我一种方法是使用数据流连接器 从云扳手读取数据 要从Cloud Paner读取,请应用span.read()转换。使用span.read类中的方法配置读取。应用转换将返回一个PCollection,其中集合中的每个元素表示读取操作返回的单个行。根据所需的输出,您可以使用或不使用特定的SQL查询从Cloud Panner读取数据 应用span.read()转换通过执行强读取返回一致的数据视图。除非另行指定,否则读取结果将在开始读取时进行快照。有关云扳手可以执行的不同读取类型的更多信息,请参阅读取 见:
这个线程似乎解释了如何将数据流写入PubSub:我想了解确切的用例,以及您试图用它来完成什么 您可以在发布子发布级别使用以下命令从扳手读取和批处理。它在发布时对pubsub消息进行批处理。(此处1行作为一条pubsub消息发布) 管道工艺
CustomPipelineOptions options = PipelineOptionsFactory.fromArgs(pipelineArgs).as(CustomPipelineOptions.class);
Pipeline pipeline = Pipeline.create(options);
SpannerConfig spannerConfig = SpannerConfig.create()
.withDatabaseId(options.getSpannerDatabaseId())
.withProjectId(options.getSpannerProjectId())
.withInstanceId(options.getSpannerInstanceId());
pipeline.apply(SpannerIO.read()
.withTable("TestTable")
.withSpannerConfig(spannerConfig)
.withColumns(Arrays.asList("TestColumn")))
.apply( ParDo.of(new StructToPubSubConverter()))
.apply(PubsubIO.writeMessages()
.to(options.getPubsubWriteTopic())
.withMaxBatchSize(1000)); // Batch Size
pipeline.run();
扳手至副转换器
public static class StructToPubSubConverter extends DoFn<Struct, PubsubMessage> {
@ProcessElement
public void processElement(ProcessContext context, OutputReceiver<PubsubMessage> out){
Struct struct =context.element();
String testColumn = struct.getString(0);
context.output(new PubsubMessage(testColumn.getBytes(),new HashMap<>()));
}
公共静态类StructToPubSubConverter扩展了DoFn{
@过程元素
public void processElement(ProcessContext上下文,OutputReceiver out){
Struct Struct=context.element();
String testColumn=struct.getString(0);
output(新的PubsubMessage(testColumn.getBytes(),新的HashMap());
}
}
不确定,这是否解决了您的问题,但应该提供一个公平的想法。分享更多细节会很有帮助。您的错误是什么?你目前的破译密码是什么?你能分享更多细节吗?是的,我们可以使用pubsub io编写,但我不想一次发布所有记录,因为我可能有大量数据,所以我需要拆分数据并作为多个发布请求发送,我没有找到用于此的文档,有没有任何方法可以做到这一点。我知道你不想在一条pubsub消息中发布100k+行。我说得对吗?如果是,是否要逐行发布到PubSub?或者逐块(每个块大约1000行)?是的,你是对的,我想逐块1000行。你的查询输出中有行号吗?你能添加一个吗?我认为@wild正在寻求一种方法来开始这项工作,这就是高层次的答案。我很想知道你为什么认为这不正确。:)这是正确的,但问题太宽泛了,你的答案也太宽泛了。这不是stackoverflow的目的。