如何使用可重复对象中的嵌套必填字段将数据从一个表复制到另一个表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用可重复对象中的嵌套必填字段将数据从一个表复制到另一个表相关的知识,希望对你有一定的参考价值。

我正在尝试将数据从一个表复制到另一个表。模式是相同的,只是源表在需要时将字段设置为可为空。大查询抱怨字段为空。我99%肯定问题是在许多条目中没有可重复的字段,这在使用我们的正常过程插入表时不会引起任何问题。

我正在复制的表具有完全相同的模式,但在使用不同的分区方案重新创建表时意外丢失了必需的字段。

据我所知,没有办法在现有表中将字段从可空变为必需。在我看来,您必须创建一个新表,然后使用选择查询来复制数据。

我尝试启用“允许大结果”并取消选中“展平结果”,但我看到了同样的问题。写入首选项是“附加到表”

(注意:请参阅下面的编辑,因为我在这里不正确 - 这是一个数据问题)我尝试构建一个查询以更好地确认我的理论(而不是记录存在但是为空)但我正在努力构建查询。我可以在预览中看到一些重复字段为空是一个真实的用例,所以我认为转换为嵌套的必填字段也是空的。我们在将表转换为新分区之前备份了表,并且它具有与我要复制到的表所需的模式相同的模式。备份中遗留sql中的简单select count(*) where this.nested.required.field is null表示有相当多的列符合此条件。

用于选择插入的SQL:

select * from my_table

编辑:在表上进行分区更改时,还将某些字段设置为空值。看来,select查询以某种方式创建了所有字段为null的对象,而不是简单的null对象。我使用条件将嵌套对象设置为null或选择其现有值。仍在调查,但此时我认为我正在尝试做的事情通常是基于玩一些玩具表/查询而得到支持。

答案

尝试从一个表复制到另一个表,并使用SELECT AS STRUCT时,运行如下所示的空检查:

IF(foo.bar is null, null, (SELECT AS STRUCT foo.bar.* REPLACE(...))

这可以防止空嵌套结构变成充满空值的结构。

要通过select语句修复它,请对需要的值使用条件检查,如下所示:

IF (bar.req is null, null, bar)

当然,真正的查询比这更复杂。好消息是修复查询看起来应该与混淆格式的原始查询类似

以上是关于如何使用可重复对象中的嵌套必填字段将数据从一个表复制到另一个表的主要内容,如果未能解决你的问题,请参考以下文章

带有嵌套可选对象和必填字段的猫鼬模式

android中的必填字段[重复]

如何使用嵌套的“类型”属性在 Mongoose 模式中定义非必填字段?

JQ 过滤嵌套对象中的字段

从字典列表中创建嵌套的 json 对象

ReactJS:仅更新嵌套状态对象中的特定字段[重复]