CRIAR TABELA - Amazon Redshift

CRIAR TABELA

Cria uma nova tabela no banco de dados atual. Você define uma lista de colunas, cada uma contendo dados de um tipo distinto. O proprietário desta tabela é o emissor do comando CREATE TABLE.

Privilégios obrigatórios

A seguir estão os privilégios obrigatórios para CREATE TABLE:

  • Superusuário

  • Usuários com o privilégio CREATE TABLE

Sintaxe

CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE [ IF NOT EXISTS ] table_name ( { column_name data_type [column_attributes] [ column_constraints ] | table_constraints | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] ) [ BACKUP { YES | NO } ] [table_attributes] where column_attributes are: [ DEFAULT default_expr ] [ IDENTITY ( seed, step ) ] [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ] [ ENCODE encoding ] [ DISTKEY ] [ SORTKEY ] [ COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE ] and column_constraints are: [ { NOT NULL | NULL } ] [ { UNIQUE | PRIMARY KEY } ] [ REFERENCES reftable [ ( refcolumn ) ] ] and table_constraints are: [ UNIQUE ( column_name [, ... ] ) ] [ PRIMARY KEY ( column_name [, ... ] ) ] [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ] and table_attributes are: [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ] [ DISTKEY ( column_name ) ] [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ] ] [ ENCODE AUTO ]

Parâmetros

LOCAL

Opcional. Embora a instrução aceite esta palavra-chave, ela não tem efeito no Amazon Redshift.

TEMPORARY | TEMP

Palavra-chave que cria uma tabela temporária visível somente na sessão atual. A tabela é automaticamente descartada no final da sessão na qual é criada. A tabela temporária pode ter o mesmo nome de uma tabela permanente. A tabela temporária é criada em um esquema separado e específico da sessão. (Não é possível especificar um nome para este esquema.) Este esquema temporário se torna o primeiro no caminho de pesquisa. Dessa forma, a tabela temporária tem precedência sobre a tabela permanente a menos que você qualifique o nome da tabela com o nome do esquema para acessar a tabela permanente. Para obter mais informações sobre esquemas e precedência, consulte search_path.

nota

Por padrão, os usuários do banco de dados têm permissão para criar tabelas temporárias por associação automática ao grupo PUBLIC. Para negar esse privilégio a um usuário, revogue o privilégio TEMP do grupo PUBLIC, e explicitamente conceda o privilégio TEMP somente a usuários ou grupos específicos de usuários.

IF NOT EXISTS

Cláusula que indica que, se a tabela especificada já existir, o comando não deverá fazer alterações e deverá retornar uma mensagem informando que a tabela existe, em vez de parar com um erro. Observe que a tabela existente pode não parecer em nada com aquela que seria criada; somente o nome da tabela é comparado.

Esta cláusula é útil para realizar scripting para que o script não falhe se o comando CREATE TABLE tentar criar uma tabela que já existe.

table_name

Nome da tabela a ser criada.

Importante

Se você especificar um nome de tabela que comece com “#”, a tabela será criada como temporária. Veja um exemplo a seguir:

create table #newtable (id int);

Você também faz referência à tabela com “# ”. Por exemplo:

select * from #newtable;

O tamanho máximo de um nome de tabela é 127 bytes; nomes mais longos são truncados para ter no máximo 127 bytes. É possível usar caracteres multibyte UFT-8 até um máximo de quatro bytes. O Amazon Redshift aplica uma cota do número de tabelas por cluster por tipo de nó, incluindo tabelas temporárias definidas pelo usuário e tabelas temporárias criadas pelo Amazon Redshift durante o processamento de consultas ou a manutenção do sistema. Como opção, é possível qualificar o nome da tabela com o nome do banco de dados e do esquema. No exemplo a seguir, o nome do banco de dados é tickit, o nome do esquema é public e o nome da tabela é test.

create table tickit.public.test (c1 int);

Se o banco de dados ou o esquema não existir, a tabela não será criada e a instrução retornará um erro. Você não pode criar tabelas ou exibições nos bancos de dados do sistema template0, template1, padb_harvest ou sys:internal.

Se um nome de esquema for fornecido, a nova tabela será criada naquele esquema (presumindo que o criador tenha acesso ao esquema). O nome da tabela deve ser exclusivo para aquele esquema. Se nenhum esquema for especificado, a tabela será criada usando o esquema atual do banco de dados. Se estiver criando uma tabela temporária, você não poderá especificar um nome de esquema, porque as tabelas temporárias existem em um esquema especial.

Podem existir várias tabelas temporárias com o mesmo nome ao mesmo tempo no mesmo banco de dados se elas forem criadas em sessões separadas, uma vez que as tabelas são atribuídas a esquemas diferentes. Para obter mais informações sobre nomes válidos, consulte Nomes e identificadores.

column_name

Nome de uma coluna a ser criada na nova tabela. O tamanho máximo de um nome de coluna é 127 bytes; nomes mais longos são truncados para ter no máximo 127 bytes. É possível usar caracteres multibyte UFT-8 até um máximo de quatro bytes. O número máximo de colunas que você pode definir em uma única tabela é 1.600. Para obter mais informações sobre nomes válidos, consulte Nomes e identificadores.

nota

Se você estiver criando uma “tabela ampla”, tome cuidado para que sua lista de colunas não exceda o limite de largura de linha para resultados intermediários durante cargas e processamento de consultas. Para obter mais informações, consulte Observações de uso.

data_type

Tipo de dados da coluna que está sendo criada. Para as colunas CHAR e VARCHAR, é possível usar a palavra-chave MAX em vez de declarar o tamanho máximo. MAX define o tamanho máximo de CHAR para 4.096 bytes ou de VARCHAR para 65.535 bytes. O tamanho máximo de um objeto GEOMETRY é 1.048.447 bytes.

Para obter mais informações sobre os tipos de dados que o Amazon Redshift aceita, consulte Tipos de dados.

DEFAULT default_expr

Cláusula que atribui um valor de dados padrão à coluna. O tipo de dados expr_padrão deve ser compatível com o tipo de dados da coluna. O valor DEFAULT deve ser uma expressão sem variáveis. Não são permitidas subconsultas, referências cruzadas de outras colunas na tabela atual e funções definidas pelo usuário.

A expressão default_expr é usada em qualquer operação INSERT que não especifique um valor para a coluna. Se não houver um valor padrão especificado, o valor padrão da coluna é nulo.

Se uma operação COPY com uma lista de colunas definida omitir uma coluna com um valor DEFAULT, o comando COPY deve inserir o valor default_expr.

IDENTITY(seed, step)

Cláusula que especifica que a coluna é uma coluna IDENTITY. Uma coluna IDENTITY contém valores exclusivos gerados automaticamente. O tipo de dados para uma coluna IDENTITY deve ser INT ou BIGINT.

Quando você adicionar linhas usando uma instrução INSERT ou INSERT INTO [tablename] VALUES(), esses valores são iniciados com o valor especificado como seed e o incremento com o número especificado como step.

Quando você carrega a tabela usando uma instrução INSERT INTO [tablename] SELECT * FROM ou COPY, os dados são carregados em paralelo e distribuídos para as fatias do nó. Para garantir que os valores de identidade sejam exclusivos, o Amazon Redshift ignora diversos valores ao criar valores de identidade. Os valores de identidade são exclusivos, mas a ordem pode não corresponder à ordem nos arquivos de origem.

GENERATED BY DEFAULT AS IDENTITY (seed, step)

Cláusula que especifica que a coluna é IDENTITY padrão e permite que você atribua automaticamente um valor exclusivo à coluna. O tipo de dados para uma coluna IDENTITY deve ser INT ou BIGINT. Quando você adicionar linhas sem valores, esses valores serão iniciados com o valor especificado como seed e o incremento com o número especificado como step. Para obter informações sobre como os valores são gerados, consulte IDENTITY.

Além disso, durante INSERT, UPDATE ou COPY é possível fornecer um valor sem EXPLICIT_IDS. O Amazon Redshift usa esse valor para inseri-lo na coluna de identidade em vez de usar o valor gerado pelo sistema. O valor pode ser uma duplicação, um valor inferior ao da semente ou um valor entre os valores das etapas. O Amazon Redshift não verifica a exclusividade dos valores na coluna. O fornecimento de um valor não afeta o próximo valor gerado pelo sistema.

nota

Se você precisar de exclusividade na coluna, não adicione um valor duplicado. Adicione um valor exclusivo menor do que a semente ou entre os valores das etapas.

Lembre-se do seguinte sobre colunas de identidade padrão:

  • As colunas de identidade padrão são NOT NULL. NULL não pode ser inserido.

  • Para inserir um valor gerado em uma coluna de identidade padrão, use a palavra-chave DEFAULT.

    INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  • A substituição de valores de uma coluna de identidade padrão não afeta o próximo valor gerado.

  • Não é possível associar uma coluna de identidade padrão com a instrução ALTER TABLE ADD COLUMN.

  • É possível associar uma coluna de identidade padrão com a instrução ALTER TABLE APPEND.

ENCODE encoding

Codificação de compactação de uma coluna. ENCODE AUTO é o padrão para tabelas. O Amazon Redshift gerencia automaticamente a codificação de compactação para todas as colunas da tabela. Se você especificar a codificação de compactação para qualquer coluna da tabela, a tabela não será mais definida como ENCODE AUTO. O Amazon Redshift não gerencia mais automaticamente a codificação de compactação para todas as colunas da tabela. Você pode especificar a opção ENCODE AUTO para a tabela para permitir que o Amazon Redshift gerencie automaticamente a codificação de compactação para todas as colunas da tabela.

O Amazon Redshift atribui automaticamente uma codificação de compactação inicial a colunas para as quais você não especifica a codificação de compactação da seguinte maneira:

  • Todas as colunas nas tabelas temporárias são atribuídas à compactação RAW como padrão.

  • Colunas que são definidas como chaves de classificação são designadas a compactação RAW.

  • Colunas que são definidas como tipos de dados BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY ou GEOGRAPHY recebem a compactação RAW.

  • As colunas definidas como SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ recebem a compactação AZ64.

  • As colunas definidas como CHAR, VARCHAR ou VARBYTE recebem a compactação LZO.

nota

Se você não quiser que uma coluna seja compactada, especifique explicitamente codificação RAW.

Os seguintes compression encodings são compatíveis:

  • AZ64

  • BYTEDICT

  • DELTA

  • DELTA32K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (sem compactação)

  • RUNLENGTH

  • TEXT255

  • TEXT32K

  • ZSTD

DISTKEY

Palavra-chave que especifica que a coluna é a chave de distribuição da tabela. Somente uma coluna da tabela pode ser a chave de distribuição. Você pode usar a palavra-chave DISTKEY depois do nome de uma coluna ou como parte da definição da tabela usando a sintaxe DISTKEY (nome_coluna). Qualquer dos métodos tem o mesmo efeito. Para obter mais informações, consulte o parâmetro DISTSTYLE mais adiante neste tópico.

O tipo dos dados de uma coluna de chave de distribuição pode ser: BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ e CHAR ou VARCHAR.

SORTKEY

Palavra-chave que especifica que a coluna é a chave de classificação da tabela. Quando carregados na tabela, os dados são classificados em uma ou mais colunas designadas como chaves de classificação. Você pode usar a palavra-chave SORTKEY depois de um nome de coluna para especificar uma chave de classificação única, ou especificar uma ou mais colunas como colunas de chave de classificação para a tabela usando a sintaxe SORTKEY (nome_coluna [, ...]). Somente chaves de classificação compostas são criadas com essa sintaxe.

Você pode definir um máximo de 400 colunas SORTKEY por tabela.

O tipo dos dados de uma coluna de chave de classificação pode ser: BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ e CHAR ou VARCHAR.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

Uma cláusula que especifica se a pesquisa ou comparação de string na coluna é CASE_SENSITIVE ou CASE_INSENSITIVE. O valor padrão é o mesmo da configuração atual de diferenciação de maiúsculas e minúsculas do banco de dados.

Para localizar as informações de agrupamento de banco de dados, use o seguinte comando:

SELECT db_collation(); db_collation ---------------- case_sensitive (1 row)
NOT NULL | NULL

NOT NULL especifica que a coluna não deve conter valores nulos. NULL, o padrão, especifica que a coluna aceita valores nulos. As colunas IDENTITY são declaradas como NOT NULL por padrão.

UNIQUE

Palavra-chave que especifica que a coluna somente pode conter valores exclusivos. O comportamento da restrição exclusiva de tabela é o mesmo das restrições de coluna, com capacidade adicional para abranger diversas colunas. Para definir uma restrição exclusiva de tabela, use a sintaxe UNIQUE ( nome_coluna [, …] ).

Importante

As restrições exclusivas são informativas e não são aplicadas pelo sistema.

PRIMARY KEY

Palavra-chave que especifica que a coluna é a chave primária para a tabela. Somente uma coluna pode ser definida como a chave primária usando uma definição de coluna. Para definir uma restrição de tabela com uma chave primária de várias colunas, use a sintaxe PRIMARY KEY ( nome_coluna [, ... ] ).

Identificar uma coluna como a chave primária fornece metadados sobre o design do esquema. Uma chave primária implica que outras tabelas podem se basear nesse conjunto de colunas como um identificador exclusivo de linhas. Uma chave primária pode ser especificada para uma tabela, como uma restrição de coluna ou de tabela. A restrição de chave primária deve denominar um conjunto de colunas diferente de outros conjuntos denominados por qualquer restrição exclusiva definida para a mesma tabela.

As colunas PRIMARY KEY também são definidas como NOT NULL.

Importante

As restrições de chave primária são somente informativas. Elas não são impostas pelo sistema, mas são usadas pelo planejador.

References tabelaref [ ( colunaref ) ]

Cláusula que especifica uma restrição de chave externa, que significa que a coluna deve conter somente valores que correspondam a valores na referida coluna de alguma linha na referida tabela. As colunas referidas devem ser as colunas de uma restrição exclusiva ou de chave primária na tabela referida.

Importante

As restrições de chave externa são somente informativas. Elas não são impostas pelo sistema, mas são usadas pelo planejador.

LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ]

Cláusula que especifica uma tabela existente da qual uma nova tabela copia automaticamente nomes de colunas, tipos de dados e restrições NOT NULL. A nova tabela e a tabela pai são desacopladas, e nenhuma alteração realizada na tabela pai é aplicada na nova tabela. As expressões padrão para as definições de colunas copiadas são copiadas somente se INCLUDING DEFAULTS for especificado. O comportamento padrão é excluir expressões padrão para que todas as colunas da nova tabela tenham padrões nulos.

As tabelas criadas com a opção LIKE não herdam restrições de chave primária e externa. O estilo de distribuição, as chaves de classificação e as propriedades BACKUP e NULL são herdados pelas tabelas LIKE, mas você não pode defini-los explicitamente na instrução CREATE TABLE... LIKE.

BACKUP { YES | NO }

Cláusula que especifica se uma tabela deve ser incluída em snapshots de cluster manuais ou automatizadas. Para tabelas como as de preparação, que não contêm dados críticos, especifique BACKUP NO para economizar tempo de processamento ao criar snapshost, restaurar de snapshots e reduzir o uso de espaço de armazenamento no Amazon Simple Storage Service. A configuração BACKUP NO não tem efeito em replicação automática de dados para outros nós no cluster. Portanto, tabelas com BACKUP NO especificada são restauradas em um erro de nó. O padrão é BACKUP YES.

DISTSTYLE { AUTO | EVEN | KEY | ALL }

Palavra-chave que define o estilo de distribuição de dados para toda a tabela. O Amazon Redshift distribui as linhas de uma tabela para cada um dos nós de computação de acordo com o estilo de distribuição especificado para a tabela. O padrão é AUTO.

O estilo de distribuição selecionado para as tabelas afeta a performance geral do seu banco de dados. Para obter mais informações, consulte Trabalhar com estilos de distribuição de dados. Estilos de distribuição possíveis são os seguintes:

  • AUTO: o Amazon Redshift atribui um estilo de distribuição ideal com base nos dados da tabela. Por exemplo, se o estilo de distribuição AUTO for especificado, o Amazon Redshift inicialmente vai atribuir o estilo de distribuição ALL a uma tabela pequena. Quando a tabela crescer, o Amazon Redshift poderá alterar o estilo de distribuição para KEY, escolhendo a chave primária (ou uma coluna da chave primária composta) como DISTKEY. Se a tabela crescer e nenhuma das colunas for adequada para ser DISTKEY, o Amazon Redshift vai alterar o estilo de distribuição para EVEN. A mudança no estilo de distribuição ocorre em segundo plano com impacto mínimo nas consultas do usuário.

    Para visualizar o estilo de distribuição aplicado a uma tabela, consulte a tabela de catálogo de sistema PG_CLASS. Para obter mais informações, consulte Visualização dos estilos de distribuição.

  • EVEN: Os dados na tabela são espalhados de maneira uniforme pelos nós em um cluster, em uma distribuição de ida e volta. Os IDs de linha são usados para determinar a distribuição e aproximadamente o mesmo número de linhas é distribuído para cada nó.

  • KEY: Os dados são distribuídos pelos valores na coluna DISTKEY. Quando você define as colunas de junção das tabelas de junção como chaves de distribuição, as linhas de junção de ambas as tabelas são dispostas nos nós de computação. Quando os dados são dispostos, o otimizador pode realizar junções de maneira mais eficiente. Se você especificar DISTSTYLE KEY, deve denominar uma coluna DISTKEY, seja para a tabela ou como parte da definição de coluna. Para obter mais informações, consulte o parâmetro DISTKEY mencionado anteriormente neste tópico.

  • ALL: Uma cópia de toda a tabela é distribuída para cada nó. Este estilo de distribuição garante que todas as linhas necessárias para qualquer junção estejam disponíveis em cada nó, mas multiplica os requisitos de armazenamento e aumenta a carga e os tempos de manutenção da tabela. A distribuição ALL pode melhorar o tempo de execução quando usada com determinadas tabelas de dimensão nas quais a distribuição KEY não é apropriada, mas as melhorias de performance devem ser comparadas aos custos de manutenção.

DISTKEY ( nome_coluna )

Restrição que especifica a coluna a ser usada como a chave de distribuição da tabela. Você pode usar a palavra-chave DISTKEY depois do nome de uma coluna ou como parte da definição da tabela usando a sintaxe DISTKEY (nome_coluna). Qualquer dos métodos tem o mesmo efeito. Para obter mais informações, consulte o parâmetro DISTSTYLE mencionado anteriormente neste tópico.

[COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ]

Especifica uma ou mais chaves de classificação da tabela. Quando carregados na tabela, os dados são classificados pelas colunas designadas como chaves de classificação. Você pode usar a palavra-chave SORTKEY depois de um nome de coluna para especificar uma chave de classificação única, ou especificar uma ou mais colunas como colunas de chave de classificação para a tabela usando a sintaxe SORTKEY (column_name [ , ... ] ).

Como opção, você pode especificar um estilo de classificação COMPOUND ou INTERLEAVED. Se você especificar SORTKEY com colunas, o padrão será COMPOUND. Para obter mais informações, consulte Trabalhar com chaves de classificação.

Se você não especificar nenhuma opção de chave de classificação, o padrão será AUTO.

Você pode definir um máximo de 400 colunas COMPOUND SORTKEY ou 8 colunas INTERLEAVED SORTKEY por tabela.

AUTO

Especifica que o Amazon Redshift atribui uma chave de classificação ideal com base nos dados da tabela. Por exemplo, se a chave de classificação AUTO for especificada, o Amazon Redshift inicialmente não atribuirá nenhuma chave de classificação a uma tabela. Se o Amazon Redshift determinar que uma nova chave de classificação melhorará a performance das consultas, o Amazon Redshift poderá alterar a chave de classificação da sua tabela. A classificação real da tabela é feita pela classificação automática da tabela. Para obter mais informações, consulte Classificação automática de tabela.

O Amazon Redshift não modifica tabelas que possuem chaves de classificação ou distribuição existentes. Com uma exceção, se uma tabela tiver uma chave de distribuição que nunca foi usada em um JOIN, a chave poderá ser alterada se o Amazon Redshift determinar que há uma chave melhor.

Para exibir a chave de classificação de uma tabela, consulte a visualização do catálogo do sistema SVV_TABLE_INFO. Para obter mais informações, consulte SVV_TABLE_INFO. Para exibir as recomendações do Amazon Redshift Advisor para tabelas, consulte a visualização do catálogo do sistema SVV_ALTER_TABLE_RECOMMENDATIONS. Para obter mais informações, consulte SVV_ALTER_TABLE_RECOMMENDATIONS. Para exibir as ações executadas pelo Amazon Redshift, consulte a visualização do catálogo do sistema SVL_AUTO_WORKER_ACTION. Para obter mais informações, consulte SVL_AUTO_WORKER_ACTION.

COMPOUND

Especifica que os dados sejam classificados usando uma chave composta por todas as colunas listadas, na ordem em que estão listadas. Uma chave de classificação composta é mais útil quando uma consulta faz a varredura de linhas de acordo com a ordem das colunas classificadas. Os benefícios de performance da classificação com uma chave composta diminuem quando as consultas se baseiam em colunas de classificação secundárias. Você pode definir um máximo de 400 colunas COMPOUND SORTKEY por tabela.

INTERLEAVED

Especifica que os dados sejam classificados usando uma chave de classificação intercalada. Um máximo de oito colunas pode ser especificado para uma chave de classificação intercalada.

Uma classificação intercalada concede peso igual a todas as colunas, ou subconjuntos de colunas, na chave de classificação para que as consultas não dependam da ordem das colunas na chave de classificação. Quando uma consulta usa uma ou mais colunas de classificação secundárias, a classificação intercalada apresenta uma melhoria significativa de performance de consulta. A classificação intercalada carrega um pequeno custo de sobrecarga para operações de carregamento de dados e limpeza de operações.

Importante

Não use uma chave de classificação intercalada em colunas com atributos que aumentam monotonicamente, como colunas de identidade, datas ou timestamps.

ENCODE AUTO

Permite que o Amazon Redshift ajuste automaticamente o tipo de codificação de todas as colunas da tabela para otimizar a performance da consulta. O ENCODE AUTO preserva os tipos de codificação iniciais especificados na criação da tabela. Em seguida, se o Amazon Redshift determinar que um novo tipo de codificação pode melhorar a performance da consulta, o Amazon Redshift poderá alterar o tipo de codificação das colunas da tabela. ENCODE AUTO é o padrão se você não especificar um tipo de codificação em qualquer coluna na tabela.

UNIQUE ( nome_coluna [,...] )

Restrição que especifica que um grupo contendo uma ou mais colunas de uma tabela pode conter somente valores exclusivos. O comportamento da restrição exclusiva de tabela é o mesmo das restrições de coluna, com capacidade adicional para abranger diversas colunas. No contexto de restrições exclusivas, valores nulos não são considerados iguais. Cada restrição de tabela exclusiva deve denominar um conjunto de colunas diferente do conjunto de colunas denominado por qualquer restrição exclusiva ou de chave primária definida para a tabela.

Importante

As restrições exclusivas são informativas e não são aplicadas pelo sistema.

PRIMARY KEY ( nome_coluna [,...] )

Restrição que especifica que uma ou mais colunas de uma tabela pode conter somente valores exclusivos (não copiados) não nulos. Identificar um conjunto de colunas como a chave primária também fornece metadados sobre o design do esquema. Uma chave primária implica que outras tabelas podem se basear nesse conjunto de colunas como um identificador exclusivo de linhas. Uma chave primária pode ser especificada para uma tabela, como uma restrição única de coluna ou de tabela. A restrição de chave primária deve denominar um conjunto de colunas diferente de outros conjuntos denominados por qualquer restrição exclusiva definida para a mesma tabela.

Importante

As restrições de chave primária são somente informativas. Elas não são impostas pelo sistema, mas são usadas pelo planejador.

FOREIGN KEY ( nome_coluna [, ... ] ) REFERENCES tabelaref [ ( colunaref ) ]

Restrição que especifica uma restrição de chave externa, que exige que um grupo contendo uma ou mais colunas da nova tabela deve apresentar somente valores que correspondam aos valores na(s) coluna(s) mencionada(s) de alguma linha na tabela referida. Se colunaref for omitido, a chave primária de tabelaref será usada. As colunas mencionadas devem ser as colunas de uma restrição exclusiva ou de chave primária na tabela referida.

Importante

As restrições de chave externa são somente informativas. Elas não são impostas pelo sistema, mas são usadas pelo planejador.

Observações de uso

As restrições de exclusividade, chave primária e chave estrangeira são apenas informativas; elas não são impostas pelo Amazon Redshift quando você preenche uma tabela. Por exemplo, se você inserir dados em uma tabela com dependências, a inserção poderá ser bem-sucedida mesmo que viole a restrição. Apesar disso, chaves primárias e chaves estrangeiras são usadas como sugestões de planejamento e devem ser declaradas se seu processo de ETL ou algum outro processo em seu aplicativo reforçar sua integridade. Para obter informações sobre como descartar uma tabela com dependências, consulte DESCARTAR TABELA.

Limites e cotas

Considere os seguintes limites ao criar uma tabela.

  • Há um limite para o número máximo de tabelas em um cluster por tipo de nó. Para obter mais informações, consulte “Limites” no Guia de gerenciamento de clusters do Amazon Redshift.

  • O número máximo de caracteres para um nome de tabela é 127.

  • O número máximo de colunas que você pode definir em uma única tabela é 1.600.

  • O número máximo de colunas SORTKEY que você pode definir em uma única tabela é 400.

Resumo de configurações de nível de coluna e de nível de tabela

Diversos atributos e configurações podem ser definidos no nível da coluna ou no nível da tabela. Em alguns casos, configurar um atributo ou restrição no nível da coluna ou da tabela tem o mesmo efeito. Em outros casos, produz resultados diferentes.

A lista a seguir resume configurações nos níveis da coluna e da tabela::

DISTKEY

Não há diferenças no efeito, seja definido no nível da coluna ou no nível da tabela.

Se DISTKEY for definido, no nível da coluna ou no nível da tabela, DISTSTYLE deve ser definido como KEY ou não ser definido. DISTSTYLE pode ser definido somente no nível da tabela.

SORTKEY

Se definido no nível de coluna, SORTKEY deve ser uma coluna única. Se SORTKEY for definido no nível da tabela, uma ou mais colunas podem gerar uma chave de classificação composta ou intercalada.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

O Amazon Redshift não suporta a alteração da configuração de diferenciação de maiúsculas e minúsculas para uma coluna. Quando você anexa uma nova coluna à tabela, o Amazon Redshift usa o valor padrão para diferenciação de maiúsculas e minúsculas. O Amazon Redshift não oferece suporte à palavra-chave COLLATE ao anexar uma nova coluna.

Para obter informações sobre como criar banco de dados usando o agrupamento de banco de dados, consulte CREATE DATABASE.

Para obter mais informações sobre funções COLLATE, consulte Função COLLATE.

UNIQUE

No nível de coluna, uma ou mais chaves podem ser definidas como UNIQUE; a restrição UNIQUE se aplica a cada coluna individualmente. Se UNIQUE for definida no nível da tabela, uma ou mais colunas podem gerar uma restrição UNIQUE composta.

PRIMARY KEY

Se definida no nível de coluna, PRIMARY KEY deve ser uma coluna única. Se PRIMARY KEY for definida no nível da tabela, uma ou mais colunas podem gerar uma chave primária composta.

FOREIGN KEY

Não há diferenças no efeito seja a FOREIGN KEY definida no nível da coluna ou no nível da tabela. No nível da coluna, a sintaxe é simplesmente REFERENCES tabelaref [ ( colunaref )].

Distribuição de dados de entrada

Quando o esquema de distribuição de hash de dados de entrada corresponder aos dados da tabela de destino, nenhuma distribuição física de dados é realmente necessária quando os dados são carregados. Por exemplo, se uma chave de distribuição for definida para a nova tabela e os dados estiverem sendo introduzidos a partir de outra tabela que é distribuída na mesma coluna chave, os dados serão carregados no local, usando os mesmos nós e fatias. No entanto, se as tabelas de origem e de destino forem definidas com a distribuição EVEN, os dados serão redistribuídos em uma tabela de destino.

Tabelas largas

Você pode conseguir criar uma tabela muito larga, mas não conseguir realizar processamento de consultas, como as instruções INSERT ou SELECT, na tabela. A largura máxima de uma tabela com colunas de largura fixa, como CHAR, é de 64 KB - 1 (ou 65.535 bytes). Se a tabela incluir colunas VARCHAR, ela poderá ter uma largura declarada maior sem retornar um erro, pois as colunas VARCHARS não contribuem com sua largura total declarada para o limite de processamento de consulta calculado. O limite de processamento de consultas efetivo em colunas VARCHAR varia com base em diversos fatores.

Se uma tabela for muito larga para ser inserida ou selecionada, você receberá o erro a seguir.

ERROR: 8001 DETAIL: The combined length of columns processed in the SQL statement exceeded the query-processing limit of 65535 characters (pid:7627)

Exemplos

Para exemplos que mostram como usar o comando CREATE TABLE, confira o tópico Exemplos.