如何使用在数据流执行期间计算出的架构写入BigQuery?

Luk*_*wik 4 google-cloud-dataflow

我有以下情况:

  1. 管道A在BigQuery中查找表A,进行一些计算并返回列名列表。
  2. 此列名称列表用作管道B输出的BigQuery架构。

您能否让我知道实现此目标的最佳选择是什么?

管道A可以使用TextIO将列名列表写入临时文件或暂存位置文件中,然后由管道执行器读取以定义管道B的架构。如果这种方法看起来不错,请告诉我是否存在数据流实用程序,用于从临时位置或暂存位置或是否应使用GCS API读取文件。

Luk*_*wik 5

您需要执行以下操作:

  1. 构造管道A以写入某些位置,例如GCS(构造管道B时可以引用的任何持久位置都可以使用)。
  2. 使用BlockingDataflowPipelineRunner运行并等待直到管道A完成。
  3. 通过读取您在步骤1中定义的位置,使用架构信息来构造管道B。
  4. 运行管道B。

我不会使用该临时位置,因为在您开始构建管道B之前,我们可能会对其进行清理。可以使用暂存位置(如果与临时位置不同)。我还建议使用唯一的文件名,这样,如果管道A多次运行,就不会在管道B中读入过时的结果。

这应该可以帮助您读取和写入GCS:https : //github.com/GoogleCloudPlatform/DataflowJavaSDK/blob/master/sdk/src/main/java/com/google/cloud/dataflow/sdk/util/GcsUtil.java

您可以从PipelineOptions对象获取GcsUtil的实例:https//github.com/GoogleCloudPlatform/DataflowJavaSDK/blob/master/sdk/src/main/java/com/google/cloud/dataflow/sdk/options/GcsOptions。 java#L43