在管道中,是否可以在另一个云项目中从/向云存储文件执行TextIO?
使用" my-project:output.output_table"可以在另一个项目中访问BigQuery表。并正确设置服务帐户。
但是,使用TextIO,我无法找到一种方法来指定项目ID以及我的文件模式" gs://some/inputData.txt"。
答案 0 :(得分:4)
是的,这是可能的。您需要确保存在适当的访问权限(计算引擎帐户,cloudservices帐户,详见下文)。
要更改存储区权限,您可以使用gsutil。您需要添加以下帐户:
您可以使用此命令:
gsutil acl ch -r -u <email address of service account>:FC gs://<BUCKET>
检查存储区权限:
gsutil getacl gs://<your bucket>
请注意,云存储存储桶存在于全局命名空间中:https://cloud.google.com/storage/docs/bucket-naming#requirements
权限详情:
当您在本地运行Cloud Dataflow时(使用DirectPipelineRunner),您的管道将作为您使用gcloud可执行文件配置的Google Cloud帐户运行(使用gcloud auth登录)。因此,本地运行的Cloud Dataflow SDK操作可以访问您的Google Cloud帐户可以访问的文件和资源。
当Cloud Dataflow管道在云中运行时(使用DataflowPipelineRunner或BlockingDataflowPipelineRunner),它将作为cloudservices帐户运行([project-number] @ cloudservices.gserviceaccount.com)。创建Cloud Dataflow项目时会自动创建此帐户,并且默认具有对项目资源的读/写访问权限。 cloudservices帐户执行“元数据”操作:不在本地客户端或Google Compute Engine工作人员上运行的操作,例如确定输入大小,访问云存储文件以及启动Compute Engine工作程序。例如,如果您的项目是云存储桶的所有者(具有对存储桶的读/写访问权限),则与您的项目关联的云服务帐户也具有对存储桶的所有者(读/写)访问权限。
Google Compute Engine(GCE)实例(或工作人员)执行在云中执行Dataflow SDK操作的工作。这些工作人员使用您项目的Google Compute Engine服务帐户来访问管道的文件和其他资源。当您为项目启用Google Compute Engine API时,会自动创建GCE服务帐户(-compute@developer.gserviceaccount.com)(来自Google Developers Console API和项目的auth页面)。