在Bigquery中单独复制表结构

Tha*_*sha 7 google-bigquery

在Google的Big查询中,有没有一种方法可以克隆(仅复制结构)不包含数据的表?

bq cp似乎没有复制没有数据的结构的选项。具有过滤器(例如“ 1 = 2”)的“创建表为选择表(CTAS)”确实会创建不包含数据的表。但是,它不会复制分区/集群属性。

Dim*_*gns 30

BigQuery 现在明确支持CREATE TABLE LIKE此目的。

请参阅下面链接的文档:

https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_table_like

  • 这对我来说非常有效。!谢谢 (2认同)

Mik*_*ant 8

如果您想克隆表的结构以及分区/集群属性,而无需知道这些分区/集群属性究竟是什么 - 请按照以下步骤操作:

第 1 步:只需复制your_table到新表 - 比方说your_table_copy。这显然会复制整个表,包括所有属性(包括诸如描述、分区的到期等)和数据。注意:复制是免费操作

第 2 步:删除新创建的表中的数据 - 在查询语句下面运行

SELECT * FROM `project.dataset.your_table_copy` LIMIT 0    
Run Code Online (Sandbox Code Playgroud)

在上面运行时,请确保将project.dataset.your_table_copy“覆盖表”设置为目标表作为“写入首选项”。注意:这也是免费步骤(因为 LIMIT 0)

您可以从 Web UI 或命令行或 API 或您选择的任何客户端轻松完成上述两个步骤 - 无论您最喜欢什么

  • 我懂了。你是说这个 SELECT 语句作为复制的源;对于覆盖,这意味着删除目标。 (2认同)

Pen*_*m10 5

您可以使用DDL并限制为0,但是您还需要在查询中表示分区和聚类

#standardSQL
 CREATE TABLE mydataset.myclusteredtable
 PARTITION BY DATE(timestamp)
 CLUSTER BY
   customer_id
 AS SELECT * FROM mydataset.myothertable LIMIT 0
Run Code Online (Sandbox Code Playgroud)


Dat*_*eek 5

这可以通过 BQ CLI 实现。

首先下载现有表的架构:

bq show --format=prettyjson project:dataset.table | jq '.schema.fields' > table.json
Run Code Online (Sandbox Code Playgroud)

然后,使用提供的架构和所需的分区创建一个新表:

bq mk \
  --time_partitioning_type=DAY \
  --time_partitioning_field date_field \
  --require_partition_filter \
  --table dataset.tablename \
  table.json
Run Code Online (Sandbox Code Playgroud)

查看有关bq mk选项的更多信息:https : //cloud.google.com/bigquery/docs/tables

使用以下命令安装jqnpm install node-jq

  • 绝对比公认的解决方案更好,竖起大拇指 (2认同)