Sql 如何在BigQuery中从分区表中删除列
对于BigQuery中的分区表,我们不能使用Sql 如何在BigQuery中从分区表中删除列,sql,google-cloud-platform,google-bigquery,Sql,Google Cloud Platform,Google Bigquery,对于BigQuery中的分区表,我们不能使用create或replace table语句。我可以将表导出到GCS,但BigQuery会生成多个JSON文件,这些文件不能一次导入到表中。有没有安全的方法从分区表中删除列?我使用BigQuery的web界面。云控制台、经典的BigQuery web UI、bq命令行工具或API不支持重命名列。如果尝试使用重命名的列更新表架构,将返回以下错误:更新操作中的BigQuery错误:提供的架构与表项目_id:dataset.table不匹配 手动重命名列有两
create或replace table
语句。我可以将表导出到GCS,但BigQuery会生成多个JSON文件,这些文件不能一次导入到表中。有没有安全的方法从分区表中删除列?我使用BigQuery的web界面。云控制台、经典的BigQuery web UI、bq命令行工具或API不支持重命名列。如果尝试使用重命名的列更新表架构,将返回以下错误:更新操作中的BigQuery错误:提供的架构与表项目_id:dataset.table不匹配
手动重命名列有两种方法:
- 使用SELECT*EXCEPT查询排除要删除的列,并使用查询结果覆盖表或创建新的目标表
- 您还可以通过将表数据导出到云存储、删除与要删除的列对应的数据,然后将数据加载到具有不包含已删除列的架构定义的新表中来删除列。还可以使用加载作业覆盖现有表
SELECT *, _PARTITIONTIME as pt FROM `project.dataset.table`
使用上面的代码,您将查询所有表分区中的数据,并创建一个额外的列来显示它来自哪个分区。然后,在执行之前,有两个选项,将视图保存在新的非分区表中或覆盖当前表:
创建新表转到:更多(在查询编辑器下)>查询设置>选中“为查询结果设置目标表”>选择项目、数据集并写入新表的名称>在目标表写入首选项下选中“如果为空则写入”
覆盖当前表:更多(在查询编辑器下)>查询设置>选中“为查询结果设置目标表”>为当前表选择相同的项目和数据集>写入与要覆盖的表相同的表名>在目标表写入首选项下选中覆盖表
您可以只使用
编写视图,除了和NULL
在将来的分区中输出值。@GordonLinoff这种解决方案似乎不能长期持续下去。如果要多次更新架构,则最终将得到一个根表,其中包含不推荐使用的列。此外,使用视图不会删除基础数据。可能是有理由删除实际数据(例如机密信息)。我认为此解决方案对我没有帮助,因为如上所述,我有一个分区表。不支持您所查找的内容。有一个演练,您可以从分区表创建非分区表,并应用我描述的内容。你需要考虑如果这对YHMM来说是可行的,那么你的意思是,我将创建一个非分离的表X,然后将所有数据复制到X中,并创建一个新的分离表Y。然后将数据从X复制到Y。这应该实际工作:“没有其他方法,所以它不像听起来那么糟糕: