BigQuery 删除表列 - DDL 错误

2023-12-15

通过以下方式从表中删除列后:

ALTER TABLE MyTable
DROP COLUMN IF EXISTS MyColumn

在 BigQuery UI 中,我可以看到该列已成功删除,并且无法查询特定列,但是当我查询 DDL 时,我可以看到该列仍然存在于方案中:

SELECT DDL FROM MyDataSet.INFORMATION_SCHEMA.TABLES
WHERE DDL LIKE '%MyTable%'

我究竟做错了什么?


这是 Bigquery 的一个令人讨厌的、未记录的副作用时间旅行。时间旅行使其使用不安全ALTER TABLEbigquery 中的语句。

问题演示:

create table apu.time_travel_problem 
( id int64
, name string
);

select column_name, data_type 
FROM apu.INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'time_travel_problem';
column_name data_type
id INT64
name STRING

到目前为止这一切都是正常的,但经过一段时间后ALTER TABLE一切都变得奇怪:

alter table apu.time_travel_problem drop column name;

select column_name, data_type 
FROM apu.INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'time_travel_problem';
column_name data_type
id INT64
name STRING

我们刚刚删除的专栏仍然存在!

现在试试这个:

alter table apu.time_travel_problem add column name string;
Column `name` was recently deleted in the table `time_travel_problem`. Deleted column name is reserved for up to the time travel duration, use a different column name instead.

解决方案:

不使用ALTER TABLE在大查询中。反而DROP and reCREATE使用临时表。

这是一个jinja我使用的模板:

/* {{TABLE}} */

ALTER TABLE {{DATASET}}.{{TABLE}} RENAME TO {{TABLE}}_migration;

ALTER TABLE {{DATASET}}.{{TABLE}}_migration
SET OPTIONS (expiration_timestamp = timestamp_add(CURRENT_TIMESTAMP(), INTERVAL 8 HOUR))l


CREATE TABLE {{DATASET}}.{{TABLE}}
(
{{COLUMN_DDL}}
);

INSERT INTO {{DATASET}}.{{TABLE}}
(
{{COLUMN_LIST}}
)
SELECT
{{COLUMN_LIST}}
FROM {{DATASET}}.{{TABLE}}_migration;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BigQuery 删除表列 - DDL 错误 的相关文章

随机推荐

  • 静态上下文中的本地类实例创建表达式

    The JLS 15 9 2告诉我们如何确定封闭实例 令 C 为正在实例化的类 并令 i 为正在创建的实例 如果 C 是一个内部类 那么我可能有一个直接封闭的 实例 8 1 3 确定如下 如果 C 是本地类 则 如果 C 出现在静态上下文中
  • 詹金斯文本查找器无法成功我的构建

    我使用 SSH 插件在 Linux 服务器上运行命令 我使用 SSH 启动了一个脚本 该脚本需要超过 1 小时的时间才能运行 我不想等待那么多时间 所以我在 Exec 超时处设置了 30 秒的时间 但它显示错误 错误 发布时出现异常 异常消
  • 在 kubernetes 中使用 mongoose 连接到 mongodb

    我有一个使用 docker compose 开发和测试的微服务 现在我想将它部署到kubernetes 我的 docker compose 文件的一部分如下所示 tasksdb container name tasks db image m
  • 如何处理无法加载的页面并在 Watir-Webdriver 中继续测试

    我已经寻找其他问题的答案 但找不到 我的问题是 我有许多需要测试的结果 但当我点击不加载页面的 URL 时 我的脚本不断失败 以下网址无法加载 当此 URL 未加载时 我想继续测试 我尝试过使用 begin Timeout timeout
  • Java - Spark SQL DataFrame 映射功能不起作用

    在 Spark SQL 中 当我尝试在 DataFrame 上使用映射函数时 出现以下错误 DataFrame 类型中的方法 map Function1 ClassTag 不适用于参数 new Function 我也在关注 Spark 1
  • 还有比“打开类型”更好的选择吗?

    看来 C 不能switch在类型上 我收集的没有作为特殊情况添加 因为is关系意味着不止一种不同的case可能适用 除此之外还有更好的方法来模拟打开类型吗 void Foo object o if o is A A o Hop else i
  • 在 Cmake 中,如何在不清理目标文件的情况下使用新源文件更新 makefile

    我正在使用 cmake 我刚刚添加了新的源文件 我想将新的源文件包含在 cmake 生成的 makefile 中以包含在构建中 我尝试了rebuild cache但没有任何反应 Thanks 这取决于您的 cmake 文件是如何构建的 如果
  • 设置像素格式

    有人告诉我打电话getWindow setFormat PixelFormat XXXX 应将活动中窗口的像素格式设置为 XXXX 例如RGBA 8888 我试过打电话getWindow setFormat PixelFormat XXXX
  • cmd.exe 重定向运算符的顺序和位置

    首先关于顺序 以下作品用于重定向stdout and strerr to nul command 1 gt nul 2 gt 1 以下则没有 command 2 gt 1 1 gt nul 为什么顺序很重要 如何用人类可以理解的语言来解读这
  • 将 CSV 文件转换为 JSON 字典?

    我需要将大型 CSV 数据集转换为 JSON 但输出应该是这样的 JSON 字典 var products crystal description This is a crystal price 2 95 emerald descripti
  • 动态 UITableViewCell 高度

    我试图让我的单元格根据单元格中的文本量动态改变高度 目前我有文字换行 但是一旦单元格内容太多 如果它转到第三行 你看不到第二行之后的任何内容 这就是我到目前为止所拥有的 希望有人能看到我是否遗漏了什么或做错了什么 任何帮助将不胜感激 UIT
  • 如何在 Windows 上的 Jenkins 配置中设置 PATH 环境变量?

    当我在 Windows Server 2008 上运行构建过程时 它失败并显示如下错误消息 无法运行程序 foo CreateProcess error 2 系统找不到指定的文件 我已经在 Ubuntu Server 上遇到了类似的问题 并
  • AJAX ModalPopup 在页面内容后面(下方)弹出(负 z-index)

    我在 AJAX Control Toolkit 版本 40412 中遇到 AJAX ModalPopupExtender 问题 http ajaxcontroltoolkit codeplex com releases view 43475
  • 如何找到pandas中2个不同数据帧中2个点之间的距离?

    我有两个数据框 每个数据框都有一组坐标 Dataframe 1是生物量站点列表 坐标位于 lat 和 lng 列中 Dataframe 2是邮政编码坐标列表 链接到销售价格 坐标位于 pc lat 和 pc lng 列中 我用过这个计算器问
  • 需要将Ghostscript安装到Mac PATH

    Camelot 出现错误 未安装 Ghostscript 尝试了一切 问题是它没有添加到路径中 gs安装在机器上 Camelot 安装页面的以下检查失败https camelot py readthedocs io en master us
  • 如何在Python中打印不带空格的变量字符串(最少的编码!)[重复]

    这个问题在这里已经有答案了 我有类似的东西 print n id var1 var2 var3 var4 它为每个变量打印空格 1 john h johnny mba 我想要这样的东西 1 john h johnny mba 我有 20 个
  • XML 架构导致 xml 元素没有命名空间

    我在一个非常简单的模式上遇到了一些麻烦 在架构指定的 xml 正文中 根元素的第一个子元素被指定为具有 xmlns 这给我带来了验证问题 我反复搜索并尝试找出发生这种情况的原因 但没有取得任何成功 这对我的服务器代码造成了更大的问题 因为我
  • Hibernate 映射异常无法确定以下类型:java.nio.file.Path

    我有一张实体照片如下 Entity class Photo Path imagePath public Path getImagePath return imagePath setter 在这个实体中 我必须 nio Path 我怎样才能解
  • 向 ggplot 添加自定义颜色

    我的主要目标是在我的情节中对元素进行不同的着色 为此 我manually添加了一个额外的列 其中每个列都有所需的颜色category mtcars color mtcars carb 4 F98866 mtcars color mtcars
  • BigQuery 删除表列 - DDL 错误

    通过以下方式从表中删除列后 ALTER TABLE MyTable DROP COLUMN IF EXISTS MyColumn 在 BigQuery UI 中 我可以看到该列已成功删除 并且无法查询特定列 但是当我查询 DDL 时 我可以