流式播放缓冲 - 谷歌的BigQuery(Streaming buffer - Google Big

2019-11-05 06:45发布

我正在开发一个Python程序使用像谷歌的数据流模板。

我在做什么是PubSub的写在BigQuery中的数据:

 pipeline_options.view_as(StandardOptions).streaming = True
    p = beam.Pipeline(options=pipeline_options)

    (p
     # This is the source of the pipeline.
     | 'Read from PubSub' >> beam.io.ReadFromPubSub('projects/.../topics/...')
     #<Transformation code if needed>
     # Destination
     | 'String To BigQuery Row' >> beam.Map(lambda s: dict(Trama=s))
     | 'Write to BigQuery' >> beam.io.Write(
                beam.io.BigQuerySink(
                    known_args.output,
                    schema='Trama:STRING',
                    create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
                    write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND
                ))
     )
    p.run().wait_until_finish()

该代码是在本地运行,而不是在谷歌数据流还

这个“作品”,但不是我想要的,因为目前的数据都存储在缓冲区的BigQuery溪和我无法看到它(即使在等待一段时间后)的方式。

当要提供BigQuery中的? 为什么存储缓冲区流,而不是“正常”的表中?

Answer 1:

在您的例子中,你创建一个数据流,其流数据至BigQuery。 流媒体是指 - 为你写的 - 这些数据没有得到其永久的地方在瞬间,但经过一段时间(长达2小时),其状态实际上是流缓冲。 有一个在跑步者之间的这种情况下没有什么区别 - 你本地运行(DirectRunner)或云(DataflowRunner) - 因为这两个解决方案使用云资源(写入到云的BigQuery直接)。 如果您使用的模拟器为当地的发展,这是另一种情况(但据我所知BQ没有一个至今)。

在这里,你可以找到在此架构上的样子,以及如何流进的BigQuery在深工作的一个相当不错的文章: https://cloud.google.com/blog/products/gcp/life-of-a-bigquery-streaming-insert 。

为什么你不能看到你的数据的原因立刻是因为预览按钮和柱状永久储存BQ的作品可能。

如果你想看到在缓冲区中的数据使用的查询,如:

SELECT * FROM `project_id.dataset_id.table_id` WHERE _PARTITIONTIME IS NULL

查询缓存是免费的,顺便说一句。

我希望这有助于有点明确的事情了。



Answer 2:

这就是问题所在:

 beam.io.Write(beam.io.BigQuerySink

它应该是:

 beam.io.WriteToBigQuery

第一个工作做好,而我是从文件中读取,第二个当我从发布/订阅阅读



文章来源: Streaming buffer - Google BigQuery