当前位置: 首页 > 知识库问答 >
问题:

流式插入时更新表模式

邵羽
2023-03-14

我有一个连续接收流插入的表(可能每秒数千个)。

我对使用更新功能(通过API调用)添加列感兴趣。我可以在数据仍在插入时调用Update将列添加到现有表中,而无需担心数据丢失吗?

作为参考,这是我计划用于向表中添加列的代码:

func addColumnToTable(service *bigquery.Service, project, dataset, table string, newCols map[string]string) bool {
    resp, err := service.Tables.Get(project, dataset, table).Do()
    if err != nil {
        fmt.Println(err)
        return false
    }

    for col, col_type := range newCols {
        this_col := &bigquery.TableFieldSchema{}
        this_col.Name = col
        this_col.Type = col_type
        resp.Schema.Fields = append(resp.Schema.Fields, this_col)
    }

    _, err = service.Tables.Update(project, dataset, table, resp).Do()
    if err != nil {
        fmt.Println(err)
        return false
    }

    return true
}

共有1个答案

狄宾实
2023-03-14

您可以使用 tables.update 更新表的架构(唯一允许的更新是添加列并放宽列的必需性)。

模式更新对流式传输可见会有一点延迟。因此,在流式传输包含新列的数据之前,您需要等待少量时间(最多5分钟)(假设您的更新是添加了一列)。旧数据不会丢失。

 类似资料:
  • 我创建了一个用于插入和更新的SQL触发器,它基本上执行以下操作: 从插入的表中获取LineID(表的PrimaryID)和RegionID,并将其存储在INT变量中。然后,它对连接表进行检查,以找到RegionID应该是什么,如果RegionID不等于插入表中应该是什么,那么它应该更新该记录。 我的问题是,它没有更新记录,我猜,这是因为记录还没有插入到PurchaseOrderLine表中,我正在

  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出

  • 我们正在使用Flink表API在Flink应用程序中使用一个Kafka主题。 当我们第一次提交应用程序时,我们首先从我们的自定义注册表中读取最新的模式。然后使用Avro模式创建一个Kafka数据流和表。我的数据序列化器的实现与汇合模式注册表的工作方式类似,方法是检查模式ID,然后使用注册表。因此我们可以在运行时应用正确的模式。

  • 我有一个表,有多条记录具有相同的ID但不同的值。我想从其他表复制记录到这个表。如果记录为空,我想更新到最小位置,或者如果值不存在,插入到下一个位置。 这是我的目标表: ID|职位|价值 1 | 1 | A 2 | 1 | B 2 | 2 |空 2 | 3 |空 2 | 4 | C 3 | 1 | A 4 | 1 | D 4 | 2 | B 源表: ID |值 1 | C 2|N 3 | B 4 |

  • 我找了很长时间,所以在标记为重复之前,请务必阅读。 我有一个函数(),它是用一个参数调用的。我想将该id作为前缀添加到每个日志消息中。每次调用函数时,它都会更改。因此,我想更新记录器模式,将此id添加为前缀。 我读过: 如何配置 如何重新配置 SO和log4j论坛上的许多帖子都在讨论如何在运行时更改配置。它们要么过时,要么根本不起作用。 以下代码基于 log4j2 文档。它打印: 如果我注释掉行然

  • 问题内容: 我使用以下查询在弹性中创建了一个索引: 我想使用.net NEST库将文档插入此索引。我的问题是.net更新方法的签名对我没有任何意义。 Java库对我来说意义更大: 在NEST中,和类来自哪里?我制作的这些C#类代表我的索引吗? 问题答案: 并且是为POCO类型的泛型类型参数 在Elasticsearch()中表示文档,然后 执行部分更新时,在Elasticsearch()中表示文档