SnowConvert AI - Vertica - CREATE TABLE

Descrição

Cria uma tabela no esquema lógico. (Referência de linguagem Vertica SQL “create table”.

Aviso

Essa sintaxe é parcialmente suportada no Snowflake. Tradução pendente para estas cláusulas:

DISK_QUOTA quota
SET USING expression
ENCODING encoding-type 
ACCESSRANK integer

Sintaxe da gramática

CREATE TABLE [ IF NOT EXISTS ] [[database.]schema.]table
   ( column-definition[,...] [, table-constraint [,...]] )
   [ ORDER BY column[,...] ]
   [ segmentation-spec ]
   [ KSAFE [safety] ]
   [ partition-clause]
   [ {INCLUDE | EXCLUDE} [SCHEMA] PRIVILEGES ]
   [ DISK_QUOTA quota ]
   
<column-definition> ::= 
column-name data-type
    [ column-constraint ][...]
    [ ENCODING encoding-type ]
    [ ACCESSRANK integer ]
    
<column-constraint> ::=
[ { AUTO_INCREMENT | IDENTITY } [ (args) ] ]
[ CONSTRAINT constraint-name ] {
   [ CHECK (expression) [ ENABLED | DISABLED ] ]
   [ [ DEFAULT expression ] [ SET USING expression } | DEFAULT USING expression ]
   [ NULL | NOT NULL ]
   [ { PRIMARY KEY [ ENABLED | DISABLED ] REFERENCES table [( column )] } ]
   [ UNIQUE [ ENABLED | DISABLED ] ]
}
    
<table-constraint>::=
[ CONSTRAINT constraint-name ]
{
... PRIMARY KEY (column[,... ]) [ ENABLED | DISABLED ]
... | FOREIGN KEY (column[,... ] ) REFERENCES table [ (column[,...]) ]
... | UNIQUE (column[,...]) [ ENABLED | DISABLED ]
... | CHECK (expression) [ ENABLED | DISABLED ]
}

Opções de tabela

Order by

No Vertica, a cláusula ORDER BY especifica como os dados são classificados fisicamente dentro de uma superprojeção, uma estrutura de armazenamento otimizada para uma tabela. Essa ordenação física explícita na criação da tabela não é diretamente suportada no Snowflake. Para mais informações, consulte SSC-EWI-VT0002.

Fonte da amostra

Vertica
CREATE TABLE metrics 
(
  metric_id INT,
  business_unit VARCHAR(100),
  metric_category VARCHAR(50) NOT NULL,
  measurement_date DATE NOT NULL
)
ORDER BY measurement_date, business_unit, metric_category;
Snowflake
CREATE TABLE metrics
(
  metric_id INT,
  business_unit VARCHAR(100),
  metric_category VARCHAR(50) NOT NULL,
  measurement_date DATE NOT NULL
)
!!!RESOLVE EWI!!! /*** SSC-EWI-VT0002 - ORDER BY TABLE OPTION IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
ORDER BY measurement_date, business_unit, metric_category
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "vertica",  "convertedOn": "06/17/2025",  "domain": "no-domain-provided" }}';

Cláusulas de projeções

As projeções do Vertica são um mecanismo para definir e manter a ordem de classificação física dos dados no disco, otimizando assim o desempenho da consulta para padrões de acesso específicos. No entanto, o Snowflake usa uma estratégia de armazenamento e otimização fundamentalmente diferente. Os dados no Snowflake são divididos automaticamente em micropartições imutáveis, que são então organizadas e gerenciadas pelo serviço de nuvem.

Embora possa existir uma ordem inerente dentro dessas micropartições devido à inserção ou a aplicação de chaves de clustering, o otimizador de consulta do Snowflake e sua arquitetura subjacente foram feitos para remover essas micropartições de forma eficiente durante a execução da consulta, independentemente de uma ordem de classificação global pré-definida. Essa abordagem, combinada com cache automático e um formato de armazenamento colunar, permite que o Snowflake tenha alto desempenho sem exigir que os usuários definam e gerenciem manualmente estruturas de dados físicas, como as projeções de Vertica. Isso simplifica o gerenciamento de dados e é uma forma de otimizar para uma gama mais ampla de padrões de consulta sem definições de classificação físicas explícitas.

Por esses motivos, as seguintes cláusulas não são necessárias no Snowflake e são removidas do código original:

[ segmentation-spec ]
[ KSAFE [safety] ]
[ partition-clause]

Cláusula “Inherited Schema Privileges”

INCLUDE SCHEMA PRIVILEGES é um recurso específico do Vertica que controla como os privilégios são herdados, neste caso, potencialmente do nível do esquema. O Snowflake não tem um equivalente direto para essa cláusula na sintaxe CREATE TABLE. No Snowflake, os privilégios são gerenciados explicitamente por meio de instruções GRANT.

Aviso

Essa sintaxe não é compatível com o Snowflake.

Fonte da amostra

Vertica
CREATE TABLE metrics 
(
  metric_id INT,
  business_unit VARCHAR(100),
  metric_category VARCHAR(50) NOT NULL,
  measurement_date DATE NOT NULL
)
INCLUDE SCHEMA PRIVILEGES;
Snowflake
CREATE TABLE metrics
(
  metric_id INT,
  business_unit VARCHAR(100),
  metric_category VARCHAR(50) NOT NULL,
  measurement_date DATE NOT NULL
)
!!!RESOLVE EWI!!! /*** SSC-EWI-VT0001 - INHERITED PRIVILEGES CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
INCLUDE SCHEMA PRIVILEGES
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "vertica",  "convertedOn": "06/17/2025",  "domain": "no-domain-provided" }}';

Restrições

IDENTITY - AUTO_INCREMENT

Cria uma coluna de tabela com valores gerados e gerenciados automaticamente pelo banco de dados. Você não pode alterar ou carregar valores nesta coluna. Essa restrição só pode ser definida em uma coluna da tabela.

Sucesso

Essa sintaxe é totalmente compatível com o Snowflake.

Fonte da amostra

Vertica
CREATE TABLE customers (
  id AUTO_INCREMENT(1, 2),
  name VARCHAR(50)
);

CREATE TABLE customers2 (
  id IDENTITY(1, 2),
  name VARCHAR(50)
);
Snowflake
CREATE TABLE customers (
  id INT AUTOINCREMENT(1, 2) ORDER,
  name VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "vertica",  "convertedOn": "06/17/2025",  "domain": "no-domain-provided" }}';

CREATE TABLE customers2 (
  id INT IDENTITY(1, 2) ORDER,
  name VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "vertica",  "convertedOn": "06/17/2025",  "domain": "no-domain-provided" }}';

Uma restrição CHECK

The CHECK clause in Vertica requires new or updated rows to satisfy a Boolean expression. Snowflake supports CHECK constraints with deterministic, scalar expressions. SnowConvert migrates valid CHECK constraints directly to Snowflake and flags unsupported expressions (user-defined functions, non-deterministic functions) with SSC-EWI-0116.

Vertica-specific constraint options (ENABLED, DISABLED) are handled as follows:

  • ENABLED is converted to Snowflake’s ENABLE

  • DISABLED on CHECK constraints is removed with an FDM annotation

Aviso

This syntax is partially supported in Snowflake. CHECK constraints with user-defined functions or non-deterministic functions are not supported.

Sample Source Patterns

Example 1: Valid CHECK Constraint (Pass-through)
Vertica
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    quantity INT CHECK (quantity >= 0),
    price DECIMAL(10,2),
    CONSTRAINT chk_price CHECK (price > 0)
);
Snowflake
CREATE OR REPLACE TABLE products (
    product_id INT PRIMARY KEY,
    quantity INT CHECK (quantity >= 0),
    price DECIMAL(10, 2),
    CONSTRAINT chk_price CHECK (price > 0)
)
;
Example 2: ENABLED/DISABLED Options
Vertica
CREATE TABLE orders (
    order_id INT CHECK (order_id > 0) ENABLED,
    status VARCHAR(20) CHECK (status IN ('pending', 'shipped')) DISABLED
);
Snowflake
CREATE OR REPLACE TABLE orders (
    order_id INT CHECK (order_id > 0) ENABLE,
    status VARCHAR(20) /*** SSC-FDM-VT0002 - DISABLED CONSTRAINT OPTION REMOVED. CONSTRAINT WILL BE ENFORCED IN SNOWFLAKE. ***/
)
;
Example 3: CHECK Constraint with User-Defined Function
Vertica
CREATE TABLE invoices (
    invoice_id INT PRIMARY KEY,
    total DECIMAL(10,2) CHECK (validate_amount(total) = true)
);
Snowflake
CREATE OR REPLACE TABLE invoices (
    invoice_id INT PRIMARY KEY,
    total DECIMAL(10, 2)
                         !!!RESOLVE EWI!!! /*** SSC-EWI-0116 - CHECK CONSTRAINT WITH user-defined function IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
                         CHECK (validate_amount(total) = true)
)
;

Uma restrição DEFAULT

Aviso

Essa sintaxe é parcialmente compatível com o Snowflake.

A cláusula básica DEFAULT do Vertica é totalmente suportada e é traduzida diretamente para o Snowflake. No entanto, para a cláusula DEFAULT USING do Vertica, a tradução é parcial. O Snowflake aplicará corretamente o valor DEFAULT quando novas linhas forem inseridas, mas o recurso de atualização diferido da porção USING não tem equivalente direto e algumas expressões podem não ser suportadas no Snowflake. Portanto, um aviso é adicionado para destacar essa diferença funcional.

Fonte da amostra

Vertica
CREATE TABLE table1 (
    base_value INT,
    status_code INT DEFAULT 0,
    derived_value INT DEFAULT USING (base_value + 100)
);
Snowflake
CREATE TABLE table1 (
    base_value INT,
    status_code INT DEFAULT 0,
    derived_value INT DEFAULT (base_value + 100) /*** SSC-FDM-VT0001 - EXPRESSION IN USING CONSTRAINT MIGHT NOT BE SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "vertica",  "convertedOn": "06/17/2025",  "domain": "no-domain-provided" }}';

PRIMARY KEY - UNIQUE - FOREIGN KEY

O SnowConvert AI mantém as definições de restrição; entretanto, no Snowflake, essas propriedades são fornecidas para facilitar a migração de outros bancos de dados. Elas não são impostas ou mantidas pelo Snowflake. Isso significa que os padrões podem ser alterados para essas propriedades, mas se os padrões forem alterados, o Snowflake não criará a restrição.

Aviso

Essa sintaxe é parcialmente compatível com o Snowflake.

Fonte da amostra

Vertica
CREATE OR REPLACE TABLE employees (
    emp_id INTEGER,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    CONSTRAINT pk_employees_enabled PRIMARY KEY (emp_id) ENABLED
);
Snowflake
CREATE OR REPLACE TABLE employees (
    emp_id INTEGER,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    CONSTRAINT pk_employees_enabled PRIMARY KEY (emp_id) ENABLE
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "vertica",  "convertedOn": "06/17/2025",  "domain": "no-domain-provided" }}';

CREATE TABLE AS

Descrição

Cria e carrega uma tabela com os resultados de uma consulta. (Referência de linguagem do Vertica SQL “Create Table”).

Aviso

Essa sintaxe é parcialmente suportada no Snowflake. Tradução pendente para as seguintes cláusulas

[ /*+ LABEL */ ]
[ AT epoch ]
[ ENCODED BY column-ref-list ]
[ ENCODING encoding-type ]
[ ACCESSRANK integer ]
[ GROUPED ( column-reference[,...] ) ]

Sintaxe da gramática

CREATE TABLE [ IF NOT EXISTS ] [[database.]schema.]table
[ ( column-name-list ) ]
[ {INCLUDE | EXCLUDE} [SCHEMA] PRIVILEGES ]
AS  [ /*+ LABEL */ ] [ AT epoch ] query [ ENCODED BY column-ref-list ] [ segmentation-spec ]

<column-name-list> ::=
column-name-list
    [ ENCODING encoding-type ]
    [ ACCESSRANK integer ]
    [ GROUPED ( column-reference[,...] ) ]

Opções de tabela

Cláusula de segmentação

Essa sintaxe não é necessária no Snowflake e é removida do código original. Para mais informações, consulte as cláusulas de projeção.

Nota

Essa sintaxe não é necessária no Snowflake.

Cláusula “Inherited Schema Privileges”

INCLUDE SCHEMA PRIVILEGES é um recurso específico do Vertica que controla como os privilégios são herdados, neste caso, potencialmente do nível do esquema. O Snowflake não tem um equivalente direto para essa cláusula na sintaxe CREATE TABLE. Para mais informações, consulte a cláusula “Schema Privileges” herdada.

Aviso

Essa sintaxe não é compatível com o Snowflake.

EWIs relacionados

  1. SSC-EWI-VT0001: A cláusula de privilégios herdados não é suportada no Snowflake.

CREATE TABLE LIKE

Descrição

Cria a tabela replicando uma tabela existente. (Referência de linguagem do Vertica SQL “Create Table”).

Aviso

Essa sintaxe é parcialmente suportada no Snowflake. Tradução pendente para a seguinte cláusula:

DISK_QUOTA quota

Sintaxe da gramática

CREATE TABLE [ IF NOT EXISTS ] [[database.]schema.]table
  LIKE [[database.]schema.]existing-table
  [ {INCLUDING | EXCLUDING} PROJECTIONS ]
  [ {INCLUDE | EXCLUDE} [SCHEMA] PRIVILEGES ]
  [ DISK_QUOTA quota ]

Opções de tabela

Projeções

Essa sintaxe não é necessária no Snowflake e é removida do código original. Para mais informações, consulte as cláusulas de projeção.

Aviso

Essa sintaxe não é necessária no Snowflake.

Cláusula “Inherited Schema Privileges”

INCLUDE SCHEMA PRIVILEGES é um recurso específico do Vertica que controla como os privilégios são herdados, neste caso, potencialmente do nível do esquema. O Snowflake não tem um equivalente direto para essa cláusula na sintaxe CREATE TABLE. Para mais informações, consulte a cláusula “Schema Privileges” herdada.

Aviso

Essa sintaxe não é compatível com o Snowflake.

EWIs relacionados

  1. SSC-EWI-VT0001: A cláusula de privilégios herdados não é suportada no Snowflake.