首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法更改大查询中的列数据类型

无法更改大查询中的列数据类型
EN

Stack Overflow用户
提问于 2022-05-16 14:05:16
回答 2查看 2.9K关注 0票数 2

我们将数据库导入到BigQuery中,但是许多列没有正确的数据类型,其中许多列都是以字符串形式存储的。我想通过更改BigQuery中的数据类型来修复它们

代码语言:javascript
复制
ALTER TABLE my.data_set.my_table ALTER COLUMN create_date SET DATA TYPE DATE;

但我有

代码语言:javascript
复制
ALTER TABLE ALTER COLUMN SET DATA TYPE requires that the existing column type (STRING) is assignable to the new type (DATE)

如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-16 15:23:59

不幸的是,据我所知,没有办法使用STRING将数据类型转换为DATE,而是使用所需的模式再次创建数据类型。

代码语言:javascript
复制
CREATE OR REPLACE TABLE testset.tbl AS 
SELECT 'a' AS col1, '2022-05-16' AS create_date
 UNION ALL
SELECT 'a' AS col1, '2022-05-14' AS create_date
;

-- ALTER TABLE testset.tbl ALTER COLUMN create_date SET DATA TYPE DATE;

-- Query error: ALTER TABLE ALTER COLUMN SET DATA TYPE requires that
-- the existing column type (STRING) is assignable to the new type (DATE) at [7:25]


-- Create it again. 
CREATE OR REPLACE TABLE testset.tbl AS
SELECT * REPLACE(SAFE_CAST(create_date AS DATE) AS create_date) 
  FROM testset.tbl;
票数 3
EN

Stack Overflow用户

发布于 2022-09-23 09:23:02

按照以下步骤执行:

  1. 重命名现有列

将表mydataset.mytable将列create_date重命名为create_date_to_drop;

  1. 使用所需的数据类型添加列。

更改表mydataset.mytable,添加列create_date日期;

  1. 删除重命名的列。

更改表mydataset.mytable删除列create_date_to_drop; 注意:到目前为止,DROP列将无法处理受客户管理的加密密钥保护的表。

或者,您可以删除beta版本中的现有列,并将其添加到新的数据类型中,但您需要等到时间旅行窗口(默认情况下为7天)才能添加同名的列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72260516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档