Google bigquery 更新第三级嵌套表以追加记录

Google bigquery 更新第三级嵌套表以追加记录,google-bigquery,gcp,Google Bigquery,Gcp,根据在中找到的示例,我们提出了一种方法,可以更新表specifications.dimensions的第三级: UPDATE sd97dwo.DetailedInventory SET specifications.dimensions = STRUCT<depth FLOAT64, height FLOAT64, width FLOAT64>(1, 2, 3) WHERE product like '%washer%' AND EXISTS(select

根据在中找到的示例,我们提出了一种方法,可以更新表specifications.dimensions的第三级:

UPDATE sd97dwo.DetailedInventory
SET specifications.dimensions = 
    STRUCT<depth FLOAT64, height FLOAT64, width FLOAT64>(1, 2, 3)
WHERE 
    product like '%washer%'
    AND EXISTS(select 1 from unnest(comments) as c where c.comment like '%comment%')
我们现在要做的是更新表,将一条记录附加到相同的维度结构中。然而,我们正在尝试的各种方法都没有成功。想看看有没有人有什么想法。我们得到的最接近的结果是下面的,但当然会将所有记录作为specifications.dimensions的多个结果返回,因此我们得到了由多个元素生成的错误标量子查询

UPDATE sd97dwo.DetailedInventory
SET specifications.dimensions
    = (SELECT specifications.dimensions
    UNION ALL
    SELECT STRUCT<depth FLOAT64, height FLOAT64, width FLOAT64>(4.0,5.0,6.0))
WHERE 
    product like '%washer%'
    AND EXISTS(select 1 from unnest(comments) as c where c.comment like '%comment%')
我们现在要做的是更新表,将一条记录附加到相同的维度结构中

你的模式是什么? 如果您使用与DML文档中相同的模式,那么规范和维度都不是重复的字段。所以你不能附加到它。但您可以直接更新它们,如:

UPDATE sd97dwo.DetailedInventory
SET specifications.dimensions.depth = 1,
     specifications.dimensions.height = 2,
     specifications.dimensions.width = 3
WHERE 
    product like '%washer%'
    AND EXISTS(select 1 from unnest(comments) as c where c.comment like '%comment%')
我们现在要做的是更新表,将一条记录附加到相同的维度结构中

你的模式是什么? 如果您使用与DML文档中相同的模式,那么规范和维度都不是重复的字段。所以你不能附加到它。但您可以直接更新它们,如:

UPDATE sd97dwo.DetailedInventory
SET specifications.dimensions.depth = 1,
     specifications.dimensions.height = 2,
     specifications.dimensions.width = 3
WHERE 
    product like '%washer%'
    AND EXISTS(select 1 from unnest(comments) as c where c.comment like '%comment%')

其他,但可能是相关的,您是如何克服每个表每天最多48条UPDATE/DELETE语句的硬限制的?还是试着处理它?我们的总体想法是,当我们真正达到这个更新水平时,谷歌将愿意像其他大多数事情一样提高配额。然而,只要幕后的工作是用更新的字段构建一个完整的新表,我们就不会因为成本/时间而大量使用。我只是想证明优点/缺点并理解语法。另外,请注意,它是更新操作,而不是字段更新,因此如果您可以通过使用联接或w/e在一次过程中更新大多数记录,那么您可能不需要在每个表的基础上更新那么多记录。我担心这仍然不合适,因为查询限制是256K,如果您想将值放入语句中,这一限制有点小。另外,如果您将更改后的值放入一个表中,并使用该表中的联接发布更新,这有点棘手,并且会限制使用。我明白了,只是担心。其他的,但可能是相关的,您是如何克服每个表每天最多48条更新/删除语句的硬限制的?还是试着处理它?我们的总体想法是,当我们真正达到这个更新水平时,谷歌将愿意像其他大多数事情一样提高配额。然而,只要幕后的工作是用更新的字段构建一个完整的新表,我们就不会因为成本/时间而大量使用。我只是想证明优点/缺点并理解语法。另外,请注意,它是更新操作,而不是字段更新,因此如果您可以通过使用联接或w/e在一次过程中更新大多数记录,那么您可能不需要在每个表的基础上更新那么多记录。我担心这仍然不合适,因为查询限制是256K,如果您想将值放入语句中,这一限制有点小。另外,如果您将更改后的值放入一个表中,并使用该表中的联接发布更新,这有点棘手,并且会限制使用。我明白了。为什么不像问题的第一部分那样简单地设置specifications.dimensions=STRUCT1,2,3呢?具体地调用每个元素有什么好处吗?!谢谢你的回答,亚历克斯。正如你提到的,我正在使用文档中的结构,实际上我只是在想我将来可能想做的不同的事情。一个更具体的用例是在销售事务中实现缓慢变化的维度。我们希望在交易中包含有关SKU的历史详细信息。我们将有一个类似于此的模式:{TRANS_KEY,{[TRANS_LINE,SKU,SLS,{[SKU_CLASS,SKU_DEPT,EFF_DT]}}如果一个项目更改了CLASS/DEPT,我想在现有的TRANS_KEY/TRANS_LINE中添加一条记录,显示旧的{CLASS/DEPT/DT}和新的.run out-out-out-of-characters,所以如果您需要更清晰的信息,请告诉我。为了运行更新,我将加入一个SKU表,该表包含SKU的新详细信息。指出模式后,在将其更改为重复字段后,我可以将其追加到第三个嵌套结构中。这就是我想要的:更新temp.DetailedInventory SET specifications=数组选择为结构s.color、s.warranty、数组\u CONCATs.dimensions、数组[9.0、9.0、9.0、5.0、5.0、5.0]作为来自UNNESTspecifications AS s的维度,其中产品(如“%垫圈%”)为什么不简单地设置specifications.dimensions=STRUCT1、2、3,就像问题的第一部分一样?具体地调用每个元素有什么好处吗?!谢谢你的回答,亚历克斯。正如你提到的,我正在使用文档中的结构,实际上我只是在想我将来可能想做的不同的事情。更具体的用例
正在销售交易中实现缓慢变化的维度。我们希望在交易中包含有关SKU的历史详细信息。我们将有一个类似于此的模式:{TRANS_KEY,{[TRANS_LINE,SKU,SLS,{[SKU_CLASS,SKU_DEPT,EFF_DT]}}如果一个项目更改了CLASS/DEPT,我想在现有的TRANS_KEY/TRANS_LINE中添加一条记录,显示旧的{CLASS/DEPT/DT}和新的.run out-out-out-of-characters,所以如果您需要更清晰的信息,请告诉我。为了运行更新,我将加入一个SKU表,该表包含SKU的新详细信息。指出模式后,在将其更改为重复字段后,我可以将其追加到第三个嵌套结构中。这就是我想要的:更新temp.DetailedInventory SET specifications=数组选择为STRUCT s.color,s.warranty,ARRAY_CONCATs.dimensions,数组[9.0,9.0,5.0,5.0,5.0]作为UNNESTspecifications中的尺寸,如产品“%water%”