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

用_PARTITIONTIME从现有表在BigQuery中创建一个聚集表

谷德本
2023-03-14

我试图创建一个新的聚集表< code>db.new_table,它与BigQuery中的现有表< code>db.old_table具有相同的数据和模式。现有表有一个伪列< code>_PARTITIONTIME,我希望新表也有这个< code>_PARTITIONTIME伪列。

我尝试过使用DDL,查询如下:

CREATE TABLE `db.new_table`
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY field1, field2
AS SELECT * FROM `db.old_table`
WHERE _PARTITIONTIME > '1990-01-01'

但是它失败了,因为我们无法使用按日期分区(_PARTITIONTIME),后跟AS SELECT ...。如 https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language 所述

有没有办法做到这一点?(创建一个新的集群表,该表使用相同的精确模式和由伪列_PARTITIONTIME分区的旧表中的数据。)

感谢任何回答和评论。

注意:我可以创建一个类似的表,而无需_PARTITIONTIME类似的查询:

CREATE TABLE `db.new_table`
PARTITION BY partition_date
CLUSTER BY field1, field2
AS SELECT DATE(_PARTITIONTIME) AS partition_date, * FROM `db.old_table`
WHERE _PARTITIONTIME > '1990-01-01'

然而,因为系统中的许多东西都依赖于<code>db。old_table,分区字段从<code>_PARTITIONTIME更改为<code>partition_date

共有1个答案

宗政天逸
2023-03-14

您只需预先创建一个名为<code>db的日分区集群表(在任何字段上)。new_table使用BQ UI或<code>BQ

表存在后,您可以将“for day day”填充为:

bq query --allow_large_results --append_table --noflatten_results --destination_table 'db.new_table$19900101' "select field1, field2, field3 from db.old_table where _PARTITIONTIME = '1990-01-01'";

注意两件事:

  • 您必须每天单独运行此查询(这将花费您几乎相同的费用,因此不必担心)。
  • db.new_table$19900101指向db.new_table 1990-01-01的分区。
 类似资料:
  • 我有两个BigQuery数据集:和 这些数据集中的每一个都包含一个表,例如和 包含流数据,我想将数据从流式传输到。 我有类型的架构。如何将流行从一个表复制到另一个表并保留现有架构? 到目前为止,我已经研究了BigQuery的insertAll方法,但是我有点不确定在哪个数据结构中获取行,以及在插入新表时如何指定TableSchema。 我希望能就如何做到这一点提供一些指导。谢谢

  • 问题内容: 我有许多排序后的集合用作系统上的二级索引,用户查询可能会碰到其中的一些。 要使用这些索引来使所有30岁以下且得分> 2的用户 但这意味着我已将所有数据从redis复制到我的应用服务器以执行交叉,是否有更有效的方法来执行此操作,而不是通过网络传输所有匹配范围,而是在Rediss中进行交叉? 我想要的是 ZRANGEBYSCORESTORE在其中执行ZRANGEBYSCORE操作并将结果存

  • 我有一个列表,我想创建一个名为的扩展。 我不想覆盖,因此不能使用append、extend或insert。我想知道是否有一个快速的方法来完成这项工作(比使用理解列表或Deep.copy更快)

  • 一个应用程序引擎应用程序使用驱动API创建了一个Google驱动表(来自XLS),并带有默认的服务帐户。新创建的文档已与个人共享,文件访问权限已确认。 现在我想从这个Google表单创建一个BigQuery表。所以我已经为上一步启用了驱动API。我已调整BigQuery服务,以创建具有必要作用域的凭据: 但当我调用控制器接收带有以下代码的工作表时,仍然没有运气: 我得到的错误表明范围没有提供给凭据

  • 在这个例子中,我们将引入from()函数。使用这个特殊的“创建”函数,我们可以从一个列表中创建一个Observable。Observable将发射出列表中的每一个元素,我们可以通过订阅它们来对这些发出的元素做出响应。 为了实现和第一个例子同样的结果,我们在每一个onNext()函数更新我们的适配器,添加元素并通知插入。 我们将复用和第一个例子同样的结构。主要的不同的是我们不再检索已安装的应用列表。

  • 问题内容: 我正在使用MS SQL Server Management Studio。我有桌子- 我想从该表创建另一个包含2列的表,以便column_1在Num_ID中提供唯一值(即1,2,3,4等),而column_2在Alpha_ID中提供唯一值(A,B,C等) 。 但是,如果已经出现一个字母,则不应再次出现。所以输出将是这样的- 希望这是有道理的。我想澄清一下,输入表中的ID不是我所显示的数