我有以下情况:
请告诉我,实现这一目标的最佳选择是什么?
管道A可以使用TextIO将列名列表写入临时或临时位置文件,然后由管道执行器读取以定义管道B的架构。如果这种方法看起来不错,请告诉我是否可以告诉我有一个Dataflow实用程序可以从临时或临时位置读取文件,或者是否应该使用GCS API。
答案 0 :(得分:5)
您需要执行以下操作:
我不会使用临时位置,因为我们可能会在您构建管道B之前将其清理干净。可以使用暂存位置(如果与临时位置不同)。我还建议使用一个唯一的文件名,这样如果Pipeline 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
答案 1 :(得分:1)
最新版本的Apache Beam可以实现这一点。请在Writing different values to different BigQuery tables in Apache Beam处通过自我回答查看我的更一般性问题。