Cloud Spanner - 插入或更新和增量 DML?

Cloud Spanner - Insert or Update and Increment DML?

有没有办法在 Google Cloud Spanner 中对 "insert or (update and increment)" 行使用 DML?

这行不通:

INSERT INTO table (key, value) VALUES ('ABC', 1) 
       ON DUPLICATE KEY UPDATE value = value + 1
# Syntax error: Unexpected keyword ON

根据文档 Data Manipulation Language syntax 告知:

If the statement attempts to insert a duplicate row, as determined by the primary key, then the entire statement fails.

因此,很遗憾,无法使用您正在尝试的此类函数进行插入。

我建议您查看此文档 - Inserting, updating, and deleting data using Data Manipulation Language - 以获取有关将 DML 与 Cloud Spanner 结合使用的更多信息。

如果这些信息对您有帮助,请告诉我!

你不能用 DML 做到这一点,但你可以用 Spanner 突变来做到这一点 API。每个范例中可用的功能集的比较:https://cloud.google.com/spanner/docs/dml-versus-mutations#feature_comparison_between_dml_and_mutations

例如,使用 Go 客户端库:

func write(w io.Writer, db string) error {
        ctx := context.Background()
        client, err := spanner.NewClient(ctx, db)
        if err != nil {
                return err
        }
        defer client.Close()

        singerColumns := []string{"SingerId", "FirstName", "LastName"}
        m := []*spanner.Mutation{
                spanner.InsertOrUpdate("Singers", singerColumns, []interface{}{1, "Marc", "Richards"}),
                spanner.InsertOrUpdate("Singers", singerColumns, []interface{}{2, "Catalina", "Smith"}),
        }
        _, err = client.Apply(ctx, m)
        return err
}