Ejemplos de CTAS
En el siguiente ejemplo, se crea una tabla denominada EVENT_BACKUP para la tabla EVENT:
create table event_backup as select * from event;
La tabla resultante hereda las claves de distribución y ordenación de la tabla EVENT.
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'event_backup'; column | type | encoding | distkey | sortkey ----------+-----------------------------+----------+---------+-------- catid | smallint | none | false | 0 dateid | smallint | none | false | 1 eventid | integer | none | true | 0 eventname | character varying(200) | none | false | 0 starttime | timestamp without time zone | none | false | 0 venueid | smallint | none | false | 0
El siguiente comando crea una tabla nueva denominada EVENTDISTSORT al seleccionar cuatro columnas de la tabla EVENT. La tabla nueva es distribuida por EVENTID y ordenada por EVENTID y DATEID:
create table eventdistsort distkey (1) sortkey (1,3) as select eventid, venueid, dateid, eventname from event;
El resultado es el siguiente.
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'eventdistsort'; column | type | encoding | distkey | sortkey ---------+------------------------+----------+---------+------- eventid | integer | none | t | 1 venueid | smallint | none | f | 0 dateid | smallint | none | f | 2 eventname | character varying(200)| none | f | 0
Podría crear exactamente la misma tabla al utilizar nombres de columnas para las claves de distribución y ordenación. Por ejemplo:
create table eventdistsort1 distkey (eventid) sortkey (eventid, dateid) as select eventid, venueid, dateid, eventname from event;
La siguiente instrucción aplica una distribución uniforme a la tabla, pero no define una clave de ordenación explícita:
create table eventdisteven diststyle even as select eventid, venueid, dateid, eventname from event;
La tabla no hereda la clave de ordenación de la tabla EVENT (EVENTID) porque la distribución EVEN está especificada para la tabla nueva. La tabla nueva no tiene clave de ordenación ni clave de distribución.
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'eventdisteven'; column | type | encoding | distkey | sortkey ----------+------------------------+----------+---------+--------- eventid | integer | none | f | 0 venueid | smallint | none | f | 0 dateid | smallint | none | f | 0 eventname | character varying(200) | none | f | 0
La siguiente instrucción aplica distribución uniforme y define una clave de ordenación:
create table eventdistevensort diststyle even sortkey (venueid) as select eventid, venueid, dateid, eventname from event;
La tabla resultante tiene una clave de ordenación pero no tiene una clave de distribución.
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'eventdistevensort'; column | type | encoding | distkey | sortkey ----------+------------------------+----------+---------+------- eventid | integer | none | f | 0 venueid | smallint | none | f | 1 dateid | smallint | none | f | 0 eventname | character varying(200) | none | f | 0
La siguiente instrucción redistribuye la tabla EVENT en una columna de clave diferente de los datos entrantes, que está ordenada en la columna EVENTID, y no define una columna SORTKEY. Por lo tanto, la tabla no se ordena.
create table venuedistevent distkey(venueid) as select * from event;
El resultado es el siguiente.
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'venuedistevent'; column | type | encoding | distkey | sortkey ----------+-----------------------------+----------+---------+------- eventid | integer | none | f | 0 venueid | smallint | none | t | 0 catid | smallint | none | f | 0 dateid | smallint | none | f | 0 eventname | character varying(200) | none | f | 0 starttime | timestamp without time zone | none | f | 0