2016-04-21 10 views
3

Gibt es eine Möglichkeit, Datentypen anzugeben und Einschränkungen zu halten, wenn eine Redshift CREATE TABLE AS Abfrage ausgeführt wird?Angeben von Datentypen in Redshift 'CREATE TABLE AS' Abfrage

Im folgende Beispiel, würde Ich mag die column1NOT NULL Einschränkung eine Kopie von table1 mit der Säule column2 als NVARCHAR(500) Typ anstatt VARCHAR(255) und hält schaffen können.

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" */ 

Edit: Ich bin mir bewusst, dass ich dies ausdrücklich in zwei Schritten tun konnte test.table2 mit den richtigen Datentypen und Einschränkungen zu schaffen, dann eine INSERT-Anweisung tun, um die Daten in test.table1 verwenden. Ich bin jedoch neugierig, ob dies in einer CREATE TABLE AS-Abfrage durchgeführt werden kann. Alle Umgehungslösungen oder Tipps würden sehr geschätzt werden! :)

Antwort

1

Aus einer SQL-Perspektive ist die Antwort Ja und Nein. Ja, Sie können den Datentyp angeben: Verwenden Sie CAST, um die Spalte in den gewünschten Typ zu konvertieren. Nein, Constraints können nicht angegeben werden, da dies nicht möglich ist: Dafür gibt es keine Syntax.

Wenn Sie Bedenken bezüglich der Einschränkungen einer Tabelle haben, machen Sie sie zum Teil des Schemas. Wenn die Daten das Schema dynamisch bestimmen, ist etwas nicht in Ordnung.

Verwandte Themen