数据流 ReadFromBigQuery 转换 - 如何为临时表配置位置
Posted
技术标签:
【中文标题】数据流 ReadFromBigQuery 转换 - 如何为临时表配置位置【英文标题】:Dataflow ReadFromBigQuery transformation - How to configure location for Temporary table 【发布时间】:2021-04-20 16:50:59 【问题描述】:当我们执行 ReadFromBigquery 转换时,Dataflow 会创建一个临时数据集,在读取数据之前它会在其中存储数据。
我的用户只能在欧洲地区(而不是美国)创建数据集,而且数据流似乎默认使用美国地区。如何要求数据流在欧洲创建临时数据集?
重要提示:我正在阅读的表格位于欧洲,并且我在管道选项中指定了“Region = Europe”
请在下面找到:
读取转换:读取 = ( p | 'ReadForVal' >> beam.io.ReadFromBigQuery(query='SELECT id_ligne FROM project.dataset.table', use_standard_sql = True)) 错误: 内容我现在挣扎了几天...... 非常感谢您的帮助!
【问题讨论】:
能否请您分享您的完整 pipelineOptions 和您的管道的启动命令。 当然。 Pipeline_options = PipelineOptions() / 启动命令:python File.py --project=$DEVSHELL_PROJECT_ID --runner=DataflowRunner --staging_location=gs://qod_bucket/staging --temp_location=gs://qod_bucket/temp --output= gs://qod_bucket/results/output --region=europe-west1 --service_account_email=sa-lab-dataflow@iam.gserviceaccount.com --network=default --subnetwork=regions/europe-west1/subnetworks/default - -no_use_public_ips 【参考方案1】:不幸的是,似乎没有办法手动设置临时数据集的位置。 From the code,看来是从查询中的表中获取位置:
def _setup_temporary_dataset(self, bq):
location = bq.get_query_location(
self._get_project(), self.query.get(), self.use_legacy_sql)
bq.create_temporary_dataset(self._get_project(), location)
get_query_location 的文档指出“此方法返回查询中用户的第一个可用引用表的位置”。
目前最简单的解决方法是仅读取欧洲的表,如果可能的话,先从美国复制任何表,然后再从 Dataflow 读取它们。实际上,在 Beam 中添加配置临时数据库的功能可能会受到欢迎,因此我鼓励您在 Beam Jira 上将此作为功能请求报告。
【讨论】:
感谢丹尼尔的反馈。我将与 Beam 团队分享这一见解 嗨@daniel,我在欧盟表中复制了输入表的内容(实际上是一个视图)并运行了这项工作,它奏效了。但我需要直接在 VIEW 上执行作业,它不起作用。知道 VIEW 的数据集在欧盟。请对根本原因有任何想法吗?非常感谢 非常感谢@daniel-oliveira。这对我帮助很大。以上是关于数据流 ReadFromBigQuery 转换 - 如何为临时表配置位置的主要内容,如果未能解决你的问题,请参考以下文章