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
}
有没有办法在 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
}