如何更新 Bigquery 表中的数据类型?

Posted

技术标签:

【中文标题】如何更新 Bigquery 表中的数据类型?【英文标题】:How to update datatype in Big query table? 【发布时间】:2017-10-02 14:15:54 【问题描述】:

我刚刚在 Big Query 中开始了我的 POC。我想知道如何更新/修改现有表中的列定义/模式。

bq mk -t market.cust custid:integer,grp:integer,odate:string bq update -t​​ market.cust custid:string,grp:integer,odate:string

**Error:
spanda2040@instance-3:~/data$ bq update -t market.cust custid:string,grp:integer,odate:string
BigQuery error in update operation: Provided Schema does not match Table arboreal-height-175822:market.cust. Field custid has changed type from INTEGER to STRING**

表架构:

最后修改的架构 Total Rows Total Bytes Expiration Time 分区标签


02 Oct 13:38:29 |- custid: 整数 0 0 |- grp: 整数 |- 日期:字符串

【问题讨论】:

【参考方案1】:

使用 SELECT 会产生一些成本,因为您需要扫描整个表

下面是超级简单的方法,只需 0.00 美元

    将现有表导出到 GCS 中 从 GCS 加载到与原始表具有相同架构的新表,但该列是固定类型的除外 你完成了。 0元的费用!!

我这样做只是为了进行健全性检查,它可以作为一种魅力

当您对这种方法感到满意时 - 您甚至可以加载到同一个表中 - 将 WRITE_TRUNCATE 用于 writeDisposition 属性

【讨论】:

这是一种方法。但是cloud.google.com/bigquery/docs/tables#append-overwrite 说发出 bq update 命令并提供架构定义:bq update [DATASET].[TABLE] [SCHEMA]。我想知道为什么它不起作用。 您可以通过向现有表添加新字段来更新其架构。新字段必须为 NULLABLE 或 REPEATED。您不能将 REQUIRED 字段添加到现有表模式。 - 因此,当文档中提到更新架构时,它们看起来意味着添加新字段。 - cloud.google.com/bigquery/docs/tables#update-schema 我看到了.bq mk -t market.cust1 custid:string,grp:integer,odate:string bq update market.cust1 custid:string,grp:integer,odate:string,custid1:string 工作对我来说,但 bq update market.cust3 custid:string,grp:string,odate:string,custid1:string 抛出错误。我相信它应该允许。再次非常感谢。【参考方案2】:

运行一个查询,将现有表替换为根据需要转换数据的查询结果:

#standardSQL
SELECT a, b, c, CAST(d as INT64) AS d
FROM `p.t.d`

根据评论更新 - 如果我想将整数更改为字符串:

#standardSQL
SELECT a, b, c, CAST(d as STRING) AS d
FROM `p.t.d`

【讨论】:

我想更新表结构。让我的列是整数,但我想将其更改为字符串。在普通 sql 中,我们编写了 alter table.. 我添加了一个关于如何在 BigQuery 中将整数更改为字符串的示例。只需用此查询的结果覆盖您的表即可。 参见 market.cust custid:integer。我无法将字符串值插入客户 ID(值为 CU101)。所以我必须改变表的结构。传统 SQL:ALTER TABLE 表名。 ALTER COLUMN column_name 数据类型;大查询:bq update -t​​ market.cust custid:string,grp:integer,odate:string.. 它抛出错误 是的。不要那样做。 bq update 不适用于这种情况。相反,如答案所示执行SELECT ...,并实现这些结果。那会奏效的。

以上是关于如何更新 Bigquery 表中的数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:查找 ID 类型为 RECORD 的数组并使用 SQL 连接辅助表中的数据

如何更改 BigQuery 中列的数据类型

如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值

从 Bigquery 中的原始表主动创建洞察表

bigquery 自动更新表

如何使用 Google Natural Language API 丰富 Bigquery 表中的数据?