Python GoogleCloudDataflow表查询返回的数据比表返回的数据多

Python GoogleCloudDataflow表查询返回的数据比表返回的数据多,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我的数据流管道中的第一步包括从bigquery上存储的表中读取数据。我使用Apache Beam Python SDK 2.3.0,并将此步骤定义为: p | "Read Table" >> beam.io.Read(beam.io.BigQuerySource(query=query)) 我的查询只是从表中读取一些列,根本不进行筛选或值处理 我的表总共容纳大约275GB的数据,但是我的管道报告这一步骤输出的数据接近650GB。为什么数据量如此之大 读入的每个元素都包含作为字符串的

我的数据流管道中的第一步包括从bigquery上存储的表中读取数据。我使用Apache Beam Python SDK 2.3.0,并将此步骤定义为:

p | "Read Table" >> beam.io.Read(beam.io.BigQuerySource(query=query))
我的查询只是从表中读取一些列,根本不进行筛选或值处理


我的表总共容纳大约275GB的数据,但是我的管道报告这一步骤输出的数据接近650GB。为什么数据量如此之大

读入的每个元素都包含作为字符串的列名,这会增加每行的大小

在中,直接加载到POJO中,而不使用列名


不幸的是,这在python中不可用。但是,请确保您没有传递从源检索的PCollection中返回的相同元素。您可能希望将元素移动到一个没有字符串名的python对象中,这样可以减小大小。这不会解决在管道中创建的第一个Pcollection的大小问题,但可以帮助处理下游Pcollection。

读入的每个元素都以字符串形式包含列名,这会增加每行的大小

在中,直接加载到POJO中,而不使用列名


不幸的是,这在python中不可用。但是,请确保您没有传递从源检索的PCollection中返回的相同元素。您可能希望将元素移动到一个没有字符串名的python对象中,这样可以减小大小。这不会解决管道中创建的第一个Pcollection的大小问题,但可以帮助处理下游Pcollection。

谢谢。这会有一点帮助,但从BigQuery中读取是目前为止我编写过程中最慢的一步。希望Python能很快推出这个功能。事实上,我刚刚意识到,列名的别名可能会大大减少传输的数据量。只需编写查询,如
选择col1作为a,col2作为b…
并传递一个将新名称映射到原始名称的字典。这一更改将传输的数据减少到大约1/3。然而,它对步进计时几乎没有影响。看起来阅读,而不是传输数据是这里的瓶颈。谢谢。这会有一点帮助,但从BigQuery中读取是目前为止我编写过程中最慢的一步。希望Python能很快推出这个功能。事实上,我刚刚意识到,列名的别名可能会大大减少传输的数据量。只需编写查询,如
选择col1作为a,col2作为b…
并传递一个将新名称映射到原始名称的字典。这一更改将传输的数据减少到大约1/3。然而,它对步进计时几乎没有影响。看起来读取而不是传输数据是这里的瓶颈。