Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 通过数据流从Google扳手到PubSub_Google Cloud Platform_Google Cloud Functions_Google Cloud Dataflow_Google Cloud Pubsub_Google Cloud Spanner - Fatal编程技术网

Google cloud platform 通过数据流从Google扳手到PubSub

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,其中集合中的每个元素表示读取操作返回的单个行。根据所需的输出,您可以使用或不

使用谷歌数据流,我需要从谷歌扳手读取数据并作为批处理写入PubSub,我在扳手中有超过100000条记录,因此我需要使用PubSub批处理读取这些记录并发布到PubSub主题,每次发布迭代的限制是1000条记录


请在这方面帮助我

一种方法是使用数据流连接器

从云扳手读取数据

要从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的目的。