在 Redshift 'CREATE TABLE AS' 查询中指定数据类型
Posted
技术标签:
【中文标题】在 Redshift \'CREATE TABLE AS\' 查询中指定数据类型【英文标题】:Specify Data Types in Redshift 'CREATE TABLE AS' Query在 Redshift 'CREATE TABLE AS' 查询中指定数据类型 【发布时间】:2016-04-21 13:24:45 【问题描述】:在进行 Redshift CREATE TABLE AS
查询时,有没有办法指定数据类型并保持约束?
在下面的示例中,我希望能够创建 table1 的副本,其中列 column2
为 NVARCHAR(500)
类型而不是 VARCHAR(255)
并保留 column1
NOT NULL
约束。
CREATE TABLE test.table1 (column1 INT NOT NULL, column2 VARCHAR(255));
INSERT INTO test.table1
SELECT 1,'foo';
CREATE TABLE test.table2 AS
SELECT column1,CAST(column2 AS NVARCHAR(500))
FROM test.table1;
/* query executes successfully but still creates column2 as VARCHAR(255) and column1 is NULLABLE. */
CREATE TABLE test.table2 (
column1 INT NOT NULL
,column2 NVARCHAR(500)
) AS
SELECT column1
,column2
FROM test.table1;
/* ERROR: 42601: syntax error at or near "as" */
编辑:我知道我可以通过使用正确的数据类型和约束显式创建 test.table2
,然后使用 test.table1
中的数据执行 INSERT 语句分两步完成此操作.我很好奇这是否可以在一个 CREATE TABLE AS 查询中完成。任何解决方法或提示将不胜感激! :)
【问题讨论】:
【参考方案1】:从 SQL 的角度来看,答案是 Yes 和 No。是的,您可以指定数据类型:使用 CAST
将列转换为您想要的类型。不,你不能指定约束,因为你不能:没有语法可以做到这一点。
如果您担心表的约束,请将其作为架构的一部分。如果数据动态地确定模式,则有问题。
【讨论】:
以上是关于在 Redshift 'CREATE TABLE AS' 查询中指定数据类型的主要内容,如果未能解决你的问题,请参考以下文章
通过阅读 Python 中的 Oracle DDL 语句为 Redshift 创建 Create Table 语句
哪个在 redshift 中性能更高 - 截断后跟 Insert Into 或 Drop and Create Table As?
Redshift 中的 CREATE SCHEMA 无法创建架构
Psycopg2 是不是允许使用 Python 在 redshift 上运行 udf create 查询?
Amazon Redshift CREATE FUNCTION ERROR: 42601: 在“默认”或接近“默认”时出现语法错误