Exemplos - Amazon Redshift

Exemplos

Os exemplos a seguir demonstram vários atributos de coluna e tabela nas instruções CREATE TABLE do Amazon Redshift. Para obter mais informações sobre CREATE TABLE, incluindo definições de parâmetros, consulte CRIAR TABELA.

Muitos dos exemplos usam tabelas e dados do conjunto de dados de amostra TICKIT. Para obter mais informações, consulte Banco de dados de amostra.

Você pode prefixar o nome da tabela com o nome do banco de dados e o nome do esquema em um comando CREATE TABLE. Por exemplo, dev_database.public.sales. O nome do banco de dados deve ser o banco de dados ao qual você se conectou. Qualquer tentativa de criar objetos de banco de dados em outro banco de dados falha com um erro de operação inválida.

Criar uma tabela com uma chave de distribuição, uma chave composta de classificação e compactação

O exemplo a seguir cria uma tabela SALES no banco de dados TICKIT com a compactação definida para várias colunas. O LISTID é declarado como a chave de distribuição, e o LISTID e o SELLERID são declarados como chave de classificação composta com várias colunas. As restrições de chave primária e de chave externa também são definidas para a tabela. Antes de criar a tabela no exemplo, talvez seja necessário adicionar uma restrição UNIQUE a cada coluna referenciada por uma chave estrangeira, caso não existam restrições.

create table sales( salesid integer not null, listid integer not null, sellerid integer not null, buyerid integer not null, eventid integer not null encode mostly16, dateid smallint not null, qtysold smallint not null encode mostly8, pricepaid decimal(8,2) encode delta32k, commission decimal(8,2) encode delta32k, saletime timestamp, primary key(salesid), foreign key(listid) references listing(listid), foreign key(sellerid) references users(userid), foreign key(buyerid) references users(userid), foreign key(dateid) references date(dateid)) distkey(listid) compound sortkey(listid,sellerid);

Os resultados são os seguintes:

schemaname | tablename | column | type | encoding | distkey | sortkey | notnull -----------+-----------+------------+-----------------------------+----------+---------+---------+-------- public | sales | salesid | integer | lzo | false | 0 | true public | sales | listid | integer | none | true | 1 | true public | sales | sellerid | integer | none | false | 2 | true public | sales | buyerid | integer | lzo | false | 0 | true public | sales | eventid | integer | mostly16 | false | 0 | true public | sales | dateid | smallint | lzo | false | 0 | true public | sales | qtysold | smallint | mostly8 | false | 0 | true public | sales | pricepaid | numeric(8,2) | delta32k | false | 0 | false public | sales | commission | numeric(8,2) | delta32k | false | 0 | false public | sales | saletime | timestamp without time zone | lzo | false | 0 | false

O exemplo a seguir cria a tabela t1 com uma coluna col1 que não diferencia maiúsculas e minúsculas.

create table T1 ( col1 Varchar(20) collate case_insensitive ); insert into T1 values ('bob'), ('john'), ('Tom'), ('JOHN'), ('Bob');

Consulte a tabela:

select * from T1 where col1 = 'John'; col1 ------ john JOHN (2 rows)

Criar uma tabela usando uma chave de classificação intercalada

O exemplo a seguir cria a tabela CUSTOMER com uma chave de classificação intercalada.

create table customer_interleaved ( c_custkey integer not null, c_name varchar(25) not null, c_address varchar(25) not null, c_city varchar(10) not null, c_nation varchar(15) not null, c_region varchar(12) not null, c_phone varchar(15) not null, c_mktsegment varchar(10) not null) diststyle all interleaved sortkey (c_custkey, c_city, c_mktsegment);

Criar uma tabela usando IF NOT EXISTS

O exemplo a seguir cria a tabela CITIES ou não realiza ação nenhuma e retorna uma mensagem se a tabela já existir:

create table if not exists cities( cityid integer not null, city varchar(100) not null, state char(2) not null);

Criar uma tabela com a distribuição ALL

O exemplo a seguir cria a tabela VENUE com a distribuição ALL.

create table venue( venueid smallint not null, venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer, primary key(venueid)) diststyle all;

Criar uma tabela com a distribuição EVEN

O exemplo a seguir cria uma tabela denominada MYEVENT com três colunas.

create table myevent( eventid int, eventname varchar(200), eventcity varchar(30)) diststyle even;

A tabela é distribuída de maneira uniforme e não é classificada. A tabela não tem qualquer coluna DISTKEY ou SORTKEY declarada.

select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'myevent'; column | type | encoding | distkey | sortkey -----------+------------------------+----------+---------+--------- eventid | integer | lzo | f | 0 eventname | character varying(200) | lzo | f | 0 eventcity | character varying(30) | lzo | f | 0 (3 rows)

Criar uma tabela temporária que se seja LIKE em relação a outra tabela

O exemplo a seguir cria uma tabela temporária denominada TEMPEVENT, que herda as colunas da tabela EVENT.

create temp table tempevent(like event);

Essa tabela também herda os atributos DISTKEY e SORTKEY da tabela pai:

select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'tempevent'; column | type | encoding | distkey | sortkey -----------+-----------------------------+----------+---------+--------- eventid | integer | none | t | 1 venueid | smallint | none | f | 0 catid | smallint | none | f | 0 dateid | smallint | none | f | 0 eventname | character varying(200) | lzo | f | 0 starttime | timestamp without time zone | bytedict | f | 0 (6 rows)

Criar uma tabela com uma coluna IDENTITY

O exemplo a seguir cria uma tabela denominada VENUE_IDENT, com uma coluna IDENTITY denominada VENUEID. A coluna inicia com 0 e é incrementada por 1 para cada registro. VENUEID é também declarada como a chave primária da tabela.

create table venue_ident(venueid bigint identity(0, 1), venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer, primary key(venueid));

Criar uma tabela com uma coluna IDENTITY padrão

O exemplo a seguir cria uma tabela chamada t1. Essa tabela tem uma coluna IDENTITY denominada hist_id e uma coluna IDENTITY padrão denominada base_id.

CREATE TABLE t1( hist_id BIGINT IDENTITY NOT NULL, /* Cannot be overridden */ base_id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, /* Can be overridden */ business_key varchar(10) , some_field varchar(10) );

A inserção de uma linha na tabela mostra que os valores hist_id e base_id foram gerados.

INSERT INTO T1 (business_key, some_field) values ('A','MM');
SELECT * FROM t1; hist_id | base_id | business_key | some_field ---------+---------+--------------+------------ 1 | 1 | A | MM

A inserção de uma segunda linha mostra que o valor padrão de base_id foi gerado.

INSERT INTO T1 (base_id, business_key, some_field) values (DEFAULT, 'B','MNOP');
SELECT * FROM t1; hist_id | base_id | business_key | some_field ---------+---------+--------------+------------ 1 | 1 | A | MM 2 | 2 | B | MNOP

A inserção de uma terceira linha mostra que o valor de base_id não precisa ser exclusivo.

INSERT INTO T1 (base_id, business_key, some_field) values (2,'B','MNNN');
SELECT * FROM t1; hist_id | base_id | business_key | some_field ---------+---------+--------------+------------ 1 | 1 | A | MM 2 | 2 | B | MNOP 3 | 2 | B | MNNN

Criar uma tabela com valores DEFAULT de coluna

O exemplo a seguir cria uma tabela CATEGORYDEF que declara valores padrão para cada coluna:

create table categorydef( catid smallint not null default 0, catgroup varchar(10) default 'Special', catname varchar(10) default 'Other', catdesc varchar(50) default 'Special events', primary key(catid)); insert into categorydef values(default,default,default,default);
select * from categorydef; catid | catgroup | catname | catdesc -------+----------+---------+---------------- 0 | Special | Other | Special events (1 row)

Opções DISTSTYLE, DISTKEY e SORTKEY

O exemplo a seguir mostra como as opções DISTKEY, SORTKEY e DISTSTYLE funcionam. Neste exemplo, COL1 é a chave de distribuição. Portanto, o estilo de distribuição deve ser definido como KEY ou não deve ser definido. Por padrão, a tabela não tem chave de classificação e, portanto, não é classificada:

create table t1(col1 int distkey, col2 int) diststyle key;
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't1'; column | type | encoding | distkey | sortkey -------+---------+----------+---------+--------- col1 | integer | az64 | t | 0 col2 | integer | az64 | f | 0

No exemplo, a mesma coluna é definida como a chave de distribuição e a chave de classificação. Além disso, o estilo de distribuição deve ser definido como KEY ou não deve ser definido.

create table t2(col1 int distkey sortkey, col2 int);
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't2'; column | type | encoding | distkey | sortkey -------+---------+----------+---------+--------- col1 | integer | none | t | 1 col2 | integer | az64 | f | 0

No exemplo, nenhuma coluna é definida como chave de distribuição, COL2 é definida como chave de classificação e o estilo de distribuição é definido como ALL:

create table t3(col1 int, col2 int sortkey) diststyle all;
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't3'; Column | Type | Encoding | DistKey | SortKey -------+---------+----------+---------+-------- col1 | integer | az64 | f | 0 col2 | integer | none | f | 1

No exemplo, o estilo de distribuição é definido como EVEN e nenhuma chave de classificação é explicitamente definida. Portanto, a tabela é distribuída de maneira uniforme, mas não é classificada.

create table t4(col1 int, col2 int) diststyle even;
select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 't4'; column | type |encoding | distkey | sortkey --------+---------+---------+---------+-------- col1 | integer | az64 | f | 0 col2 | integer | az64 | f | 0

Criar uma tabela com a opção ENCODE AUTO

O exemplo a seguir cria a tabela t1 com codificação de compactação automática. ENCODE AUTO é o padrão para tabelas quando você não especifica um tipo de codificação para qualquer coluna.

create table t1(c0 int, c1 varchar);

O exemplo a seguir cria a tabela t2 com codificação de compactação automática especificando ENCODE AUTO.

create table t2(c0 int, c1 varchar) encode auto;

O exemplo a seguir cria a tabela t3 com codificação de compactação automática especificando ENCODE AUTO. A coluna c0 é definida com um tipo de codificação inicial de DELTA. O Amazon Redshift pode alterar a codificação se outra codificação fornecer melhor performance de consulta.

create table t3(c0 int encode delta, c1 varchar) encode auto;

O exemplo a seguir cria a tabela t4 com codificação de compactação automática especificando ENCODE AUTO. A coluna c0 é definida com uma codificação inicial de DELTA, e coluna c1 é definida com uma codificação inicial de LZO. O Amazon Redshift pode alterar a codificação se outra codificação fornecer melhor performance de consulta.

create table t4(c0 int encode delta, c1 varchar encode lzo) encode auto;