首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将BigQuery视图作为csv文件传输到存储桶

如何将BigQuery视图作为csv文件传输到存储桶
EN

Stack Overflow用户
提问于 2022-09-07 19:07:56
回答 2查看 287关注 0票数 0

我需要将BigQuery视图的内容导出到GCP中的csv文件,并使用气流数据集。要导出烧烤表的内容,我可以使用BigQueryToCloudStorageOperator。但在我的例子中,我需要使用一个现有的视图,而BigQueryToCloudStorageOperator在检查日志以查找失败的DAG时,会发现这个错误导致了失败:

BigQuery作业失败:此操作不允许my_view,因为它当前是一个视图

那么,我在这里有什么选择?我不能使用普通的表,所以可能会有另一个操作符来处理存储在BQ中的视图数据,而不是表?或者可能是同一个操作符会使用一些加法选项(虽然我在这里看不到任何有用的BigQueryToCloudStorageOperator的Apache文档)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-07 20:11:03

我认为Bigquery客户端没有提供将视图导出到GCS文件的可能性。

这并不完美,但我提出了两种解决方案

第一解决方案(更多原生于现有运算符) :

  • 创建一个暂存表以将其导出到GCS
  • 在DAG的开头,创建一个任务,该任务将truncate这个暂存表
  • 在视图中添加带有select的任务,在暂存表(insert/select)中添加insert
  • 使用暂存表中的bigquery_to_gcs运算符

第二种解决方案(不太原生于Python和PythonOperator) :

  • 使用PythonOperator
  • 在这个操作符中,使用Bigquery Python将视图中的数据作为Dict加载,使用storage Python从这个Dict向GCS生成一个文件。

我喜欢第一种解决方案,即使它迫使我创建一个暂存表。

票数 1
EN

Stack Overflow用户

发布于 2022-09-27 15:13:29

最后,我得到了一种组合解决方案,部分就是Mazlum在他的回答中所建议的:在我的DAG中,我增加了一个额外的第一步,一个DataLakeKubernetesPodOperator,它运行一个Python文件。在该Python文件中,有对SQL文件的调用,其中包含简单的查询(放入await asyncio.wait(...)块并使用bq_execute()执行):截断现有表(为新数据做准备),然后将(插入)数据从视图复制到截断表(正如Mazlum建议的那样)。

在这一步之后,其余的内容与以前一样:我使用BigQueryToCloudStorageOperator将数据从常规表(现在包含视图中的数据)复制到,现在它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73640412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档