Dataflow 上的 Apache Beam - 加载外部文件
Apache Beam on Dataflow - Load external file
我正在 运行根据我创建的模板在 Dataflow 上执行 Apache Beam ETL 作业。我想添加一个额外的步骤,将处理后的数据上传到 BigQuery 并在需要时创建 table,因此我需要声明 table 架构。
架构实际上非常大,所以也许最好的选择是将其写入 .json 文件并使用简单的导入:
with open('filename.json', 'r') as f:
schema = json.load(f)
但是,我如何在我的模板上声明这个外部文件,以便在部署作业时 运行 工作人员可以找到该文件?我可以在我的 setup.py
上设置任何类似的选项,以便文件与模板一起保存吗?
我想到的其他选择是:
- 将文件保存到 GCS 存储桶并使用云存储客户端读取它并将其作为辅助输入传递给我的函数
- 在我的管道文件上手动写入模式,即使它变脏了
最好的方法是什么?
对于大文件,我会存储在 GCS 存储桶中(备选方案 1)。如果这不适用,您可以创建 a flex template for your pipeline 并将架构添加到容器中。
我正在 运行根据我创建的模板在 Dataflow 上执行 Apache Beam ETL 作业。我想添加一个额外的步骤,将处理后的数据上传到 BigQuery 并在需要时创建 table,因此我需要声明 table 架构。
架构实际上非常大,所以也许最好的选择是将其写入 .json 文件并使用简单的导入:
with open('filename.json', 'r') as f:
schema = json.load(f)
但是,我如何在我的模板上声明这个外部文件,以便在部署作业时 运行 工作人员可以找到该文件?我可以在我的 setup.py
上设置任何类似的选项,以便文件与模板一起保存吗?
我想到的其他选择是:
- 将文件保存到 GCS 存储桶并使用云存储客户端读取它并将其作为辅助输入传递给我的函数
- 在我的管道文件上手动写入模式,即使它变脏了
最好的方法是什么?
对于大文件,我会存储在 GCS 存储桶中(备选方案 1)。如果这不适用,您可以创建 a flex template for your pipeline 并将架构添加到容器中。