Google bigquery 使用ApacheBeam的数据流批量加载的性能问题

Google bigquery 使用ApacheBeam的数据流批量加载的性能问题,google-bigquery,google-cloud-dataflow,apache-beam,Google Bigquery,Google Cloud Dataflow,Apache Beam,我正在对数据流批处理负载进行性能基准测试,发现与Bigquery命令行工具上的相同负载相比,这些负载太慢了 文件大小约为20MB,包含数百万条记录。我尝试了不同的机器类型,并在加载目标BQ表时获得了最佳加载性能,加载时间约为8分钟 当通过在命令行实用程序上运行BQ命令应用相同的表加载时,处理和加载相同数量的数据几乎不需要2分钟。 关于使用数据流作业的这种低负载性能有什么见解吗?如何提高性能,使其与BQ命令行实用程序相媲美 最有可能的情况是,启动和关闭虚拟机花费了几分钟时间。如果您正在做一些可以使

我正在对数据流批处理负载进行性能基准测试,发现与Bigquery命令行工具上的相同负载相比,这些负载太慢了

文件大小约为20MB,包含数百万条记录。我尝试了不同的机器类型,并在加载目标BQ表时获得了最佳加载性能,加载时间约为8分钟

当通过在命令行实用程序上运行BQ命令应用相同的表加载时,处理和加载相同数量的数据几乎不需要2分钟。
关于使用数据流作业的这种低负载性能有什么见解吗?如何提高性能,使其与BQ命令行实用程序相媲美

最有可能的情况是,启动和关闭虚拟机花费了几分钟时间。如果您正在做一些可以使用BQ CLI直接完成的事情,那么使用数据流来实现这一目的可能有些过头了。但是,您可以使用更多详细信息(例如,您的代码和数据流作业id)更新您的问题-可能还有其他低效的问题。

最有可能的情况是,启动和关闭虚拟机花费了几分钟时间。如果您正在做一些可以使用BQ CLI直接完成的事情,那么使用数据流来实现这一目的可能有些过头了。但是,您可以用更多的细节更新您的问题(例如,您的代码和数据流作业id)-可能还有其他问题。

谢谢@jkff。周末后我会在办公室分享更多细节(工作ID和代码片段)。不过,我可以解释确切的过程。首先,我的代码使用
TextIO/AvroIO.read()
Text/Avro
文件读取数据。然后,我根据一些键比较表中的现有记录和PCollection中的新条目,以使表中的新元素列表成为
Upsert
过程的一部分。在这个过程之后,它只需使用
BigqueryIO.write()
在目标表中推送
TableRows
的新PCollection。这是我试图在数据流中实现的三步流程。请查找作业ID:
2017-11-24\u 03\u 41\u 00-13093050104159263095
,以帮助我分析我面临的延迟问题。这是同一作业的作业ID,完成该作业需要16分钟。早些时候,使用相同的机器类型,我的工作在8分钟内完成。该作业的作业ID为
2017-11-24\u 02\u 47\u 19-15366595440306710005
。该作业似乎包括一个“读取配置”步骤,该步骤占用了大部分时间。你能包含一些代码吗?另外,您是否查看了DataflowWebUI中的转换计时以及那里的日志?他们可能会给出一个关于发生了什么的提示。谢谢@jkff!!!我还发现了占用大部分时间的片段。”“读取配置”是我使用“NestedValueProvider”查找“FileName”的运行时值的步骤,通过将该值传递给简单的“select”命令,我获取一些配置值,如“table name”、“schema”等。此过程包括
BigqueryIO.Read().fromQuery()
操作。我观察到一些显著延迟的另一部分是我的
Upsert
逻辑,我在其中提取现有的表记录,比较新记录并最终合并PCollections以加载目标。通过查看PCollections上的
转换
部分,我认为就处理转换的时间而言,没有发生意外情况,但“读取配置”是一个简单的Bigquery读取操作。你知道为什么要花很多时间吗?明天一到办公室,我会用示例片段更新我的问题。谢谢@jkff。周末后我会在办公室分享更多细节(工作ID和代码片段)。不过,我可以解释确切的过程。首先,我的代码使用
TextIO/AvroIO.read()
Text/Avro
文件读取数据。然后,我根据一些键比较表中的现有记录和PCollection中的新条目,以使表中的新元素列表成为
Upsert
过程的一部分。在这个过程之后,它只需使用
BigqueryIO.write()
在目标表中推送
TableRows
的新PCollection。这是我试图在数据流中实现的三步流程。请查找作业ID:
2017-11-24\u 03\u 41\u 00-13093050104159263095
,以帮助我分析我面临的延迟问题。这是同一作业的作业ID,完成该作业需要16分钟。早些时候,使用相同的机器类型,我的工作在8分钟内完成。该作业的作业ID为
2017-11-24\u 02\u 47\u 19-15366595440306710005
。该作业似乎包括一个“读取配置”步骤,该步骤占用了大部分时间。你能包含一些代码吗?另外,您是否查看了DataflowWebUI中的转换计时以及那里的日志?他们可能会给出一个关于发生了什么的提示。谢谢@jkff!!!我还发现了占用大部分时间的片段。”“读取配置”是我使用“NestedValueProvider”查找“FileName”的运行时值的步骤,通过将该值传递给简单的“select”命令,我获取一些配置值,如“table name”、“schema”等。此过程包括
BigqueryIO.Read().fromQuery()
操作。我观察到一些显著延迟的另一部分是我的
Upsert
逻辑,我在其中提取现有的表记录,比较新记录并最终合并PCollections以加载目标。通过查看PCollections上的
转换
部分,我认为就处理转换的时间而言,没有发生意外情况,但“读取配置”是一个简单的Bigquery读取操作。你知道为什么要花很多时间吗?明天一到办公室,我就用示例片段更新我的问题。