0

更新 BigQuery 表中的嵌套字段或结构的正确方法。

SQL 语句:

UPDATE myTable
SET Employee.name = 'some string'
WHERE id = 10

这是我的代码:

ctx := context.Background()
client, err := bigquery.NewClient(ctx, projectID)
if err != nil {
    return fmt.Errorf("bigquery.NewClient: %v", err)
}
defer client.Close()

q := client.Query("UPDATE myTable SET Employee.name = 'some string' WHERE id = @id  ")
q.Parameters = []bigquery.QueryParameter{
  { 
   Name: "id",
    Value: 10
  },
}

job, err := q.Run(ctx)
if err != nil {
    return err
}

status, err := job.Wait(ctx)
if err != nil {
    return err
}

if err := status.Err(); err != nil {
    return err
}

我的桌子: 在此处输入图像描述

如何更新此结构或嵌套字段?

4

2 回答 2

1

遗憾的是,BigQuery 不支持更新查询的单独字段或嵌套字段。不支持以下语法:

UPDATE myTable
SET Employee.name = 'some string'
WHERE id = 10

我们只能整体更新结构:

UPDATE myTable
SET Employee = STRUCT('aaa', 'bbb')
WHERE id = 10
于 2021-03-02T03:34:59.370 回答
1

MERGE 语句在 BigQuery 中非常强大,您可以使用它执行许多操作,包括 UPDATE 任何行的任何字段。

在下面试试这个

merge into `myTable` as dest
using (
  SELECT 
    * EXCEPT(Employee),
    STRUCT(
      name = 'some string',
      salary = Employee.salary,
      position = Employee.position
    ) AS Employee
  FROM `myTable`
  WHERE id = @id 
) AS source
ON source.id = dest.id
WHEN MATCHED THEN UPDATE SET
      col_1 = source.col_1, col_2 = source.col_2 ...
于 2021-03-02T04:59:31.690 回答