Google bigquery 使用Apache Beam/Dataflow从BigQuery读取数据时使用fastavro

Google bigquery 使用Apache Beam/Dataflow从BigQuery读取数据时使用fastavro,google-bigquery,google-cloud-dataflow,apache-beam,Google Bigquery,Google Cloud Dataflow,Apache Beam,我的项目正在运行Python 2.7(是的,我知道…),在Google数据流上运行Apache Beam 2.19。我们以Apache Beam教程中指定的相同方式连接到BigQuery: p | 'Get data from BigQuery' >> beam.io.Read(beam.io.BigQuerySource( query=get_query(limit), use_standard_sql=True))) 但是,此管道的读取步骤非常慢-很可能是由于读

我的项目正在运行Python 2.7(是的,我知道…),在Google数据流上运行Apache Beam 2.19。我们以Apache Beam教程中指定的相同方式连接到BigQuery:

p | 'Get data from BigQuery' >> beam.io.Read(beam.io.BigQuerySource(
    query=get_query(limit),
    use_standard_sql=True)))

但是,此管道的读取步骤非常慢-很可能是由于读取了.avro文件。不过,
fastavro
似乎并没有被实际使用。好的,在Python上运行时,您需要显式设置
use\u fastavro
标志您正在运行哪个版本的beam?在beam版本2.6+中,您可以启用use_fastavro,如下所示:

对于最近的beam SDK,如果您使用的是python 3+,fastavro默认为true,但您仍然可以手动启用它


对于以前的python版本,我没有看到任何关于不使用此设置的警告,因此您可能希望尝试一下,看看这是否有效。

我使用的是Beam 2.19。我已经看过了你提供的链接,但是如果我没有弄错的话,我会认为我是在直接阅读Avro文件吗?在我们的管道中,我将BigQuerySource与io.Read一起使用,因此我不认为fastavro的用法是公开的。正确的,该功能仅提供给直接读取avro文件的TextIO。您知道在使用BigQuerySource进行读取时,Python3是否默认使用fastavro吗?或者它也只是用于TextIO?不幸的是,我还不认为有一个助手可以从BigQuery中读取Avro行。然而,有一位作家使用快速avro。您可以尝试编写一个类似的AvroRowReader实现。或者如果您将数据以字节形式存储在BigQuery中。然后您可以读出它并在下游ParDo中手动解析它。您可以为此手动调用fastavro。