bigquery是我的新手。 我已经从gcp控制台创建了bigquery表,其中GCS CSV文件用作数据源。我认为,当我删除任何行时,也应从GCS文件中删除该行。但是实际上这是没有发生的。
iCMS 回答:具有GCS数据源的Bigquery表不会影响已更改为gcs的数据
使用BigQuery时,您有两种从GCS CSV文件加载数据的方式。
- 最常见的是将perform a load job. This means that your CSV data加载(复制)到BigQuery本机表中。加载后,文件与BigQuery数据之间不再保持链接。
在这种情况下,将数据删除到BigQuery中时文件通常不会更改
- 您可以定义external table and query directly the data into your file hosted in GCS。它可以防止数据重复,但查询速度较慢。此外,外部表不支持DML (Data Manipulation Language) statements (INSERT,UPDATE,DELETE)。
解决方法
作为解决方法,您可以使用解决方案1:
- 将数据从CSV文件加载到BigQuery本机表
- 删除所需的行
- Export the BigQuery table to CSV。
如下图所示,BigQuery
支持三种类型的表:本地,外部和视图
创建本机表时,您的数据已完全导入BigQuery
的存储系统中并进行了转换,以便针对查询进行优化。
外部表基本上是指向源文件的指针。换句话说,每次您对外部表执行查询时,BigQuery
都会访问原始数据源(GCS中的某些文件,Google驱动程序等)。
鉴于此,我可以直接转到您的问题:当您运行一些DML语句时,BigQuery不会更新源文件。 如果您对本机表运行DML语句(DELETE,UPDATE),则BigQuery存储系统中的数据将被更改,但文件不会被触及。
此外,外部表不支持DML。如果尝试再次运行DELETE语句(例如外部表),则会收到错误:表'project.dataset.table'上的DML不被支持。
我强烈建议您看看此documentation