我需要将BigQuery视图的内容导出到GCP中的csv文件,并使用气流数据集。要导出烧烤表的内容,我可以使用BigQueryToCloudStorageOperator。但在我的例子中,我需要使用一个现有的视图,而BigQueryToCloudStorageOperator在检查日志以查找失败的DAG时,会发现这个错误导致了失败:
BigQuery作业失败:此操作不允许my_view,因为它当前是一个视图
那么,我在这里有什么选择?我不能使用普通的表,所以可能会有另一个操作符来处理存储在BQ中的视图数据,而不是表?或者可能是同一个操作符会使用一些加法选项(虽然我在这里看不到任何有用的BigQueryToCloudStorageOperator的Apache文档)?
发布于 2022-09-07 20:11:03
我认为Bigquery客户端没有提供将视图导出到GCS文件的可能性。
这并不完美,但我提出了两种解决方案
第一解决方案(更多原生于现有运算符) :
GCStruncate这个暂存表select的任务,在暂存表(insert/select)中添加insertbigquery_to_gcs运算符第二种解决方案(不太原生于Python和PythonOperator) :
PythonOperatorBigquery Python将视图中的数据作为Dict加载,使用storage Python从这个Dict向GCS生成一个文件。我喜欢第一种解决方案,即使它迫使我创建一个暂存表。
发布于 2022-09-27 15:13:29
最后,我得到了一种组合解决方案,部分就是Mazlum在他的回答中所建议的:在我的DAG中,我增加了一个额外的第一步,一个DataLakeKubernetesPodOperator,它运行一个Python文件。在该Python文件中,有对SQL文件的调用,其中包含简单的查询(放入await asyncio.wait(...)块并使用bq_execute()执行):截断现有表(为新数据做准备),然后将(插入)数据从视图复制到截断表(正如Mazlum建议的那样)。
在这一步之后,其余的内容与以前一样:我使用BigQueryToCloudStorageOperator将数据从常规表(现在包含视图中的数据)复制到,现在它工作得很好。
https://stackoverflow.com/questions/73640412
复制相似问题