SnowConvert AI - Vertica - CREATE TABLE

Description

Crée une table dans le schéma logique. (Langage de référence Vertica SQL : Create Table).

Avertissement

Cette syntaxe est partiellement prise en charge dans Snowflake. Traduction en attente pour ces clauses :

DISK_QUOTA quota
SET USING expression
ENCODING encoding-type 
ACCESSRANK integer

Grammar Syntax

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 ]
}

Tables Options

Order By

Dans Vertica, cette clause ORDER BY spécifie comment les données sont physiquement triées dans une super projection, une structure de stockage optimisée pour une table. Cet ordre physique explicite lors de la création de la table n’est pas directement pris en charge dans Snowflake. Pour plus d’informations, veuillez vous référer à SSC-EWI-VT0002..

Échantillon source

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" }}';

Clauses Projections

Les projections de Vertica sont un mécanisme permettant de définir et de maintenir l’ordre de tri physique des données sur le disque, optimisant ainsi les performances des requêtes pour des modèles d’accès spécifiques. Snowflake, cependant, utilise une stratégie de stockage et d’optimisation fondamentalement différente. Les données dans Snowflake sont automatiquement réparties en micro-partitions immuables, qui sont ensuite organisées et gérées par le service Cloud.

Bien qu’un ordre inhérent puisse exister dans ces micro-partitions en raison de l’insertion ou de l’application de clés de clustering, l’optimiseur de requêtes de Snowflake et son architecture sous-jacente sont conçus pour élaguer efficacement ces micro-partitions lors de l’exécution de la requête, indépendamment d’un ordre de tri global pré-défini. Cette approche, combinée à la mise en cache automatique et à un format de stockage en colonnes, permet à Snowflake d’atteindre des performances élevées sans que les utilisateurs aient à définir et à gérer manuellement des structures de données physiques telles que les projections de Vertica, simplifiant ainsi la gestion des données et optimisant un plus large éventail de modèles de requêtes sans définitions physiques explicites de tri.

Pour ces raisons, les clauses suivantes ne sont pas nécessaires dans Snowflake et sont supprimées du code original :

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

Clause Inherited Schema Privileges

INCLUDE SCHEMA PRIVILEGES est une fonctionnalité spécifique à Vertica qui régit la manière dont les privilèges sont hérités. En l’occurrence, ils peuvent être hérités au niveau du schéma. Snowflake ne possède pas d’équivalent direct pour cette clause dans sa syntaxe CREATE TABLE. Les privilèges dans Snowflake sont gérés explicitement par des instructions GRANT.

Avertissement

Cette syntaxe n’est pas prise en charge par Snowflake.

Échantillon source

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" }}';

Contraintes

IDENTITY - AUTO_INCREMENT

Crée une colonne de table dont les valeurs sont automatiquement générées et gérées par la base de données. Vous ne pouvez pas modifier ou charger des valeurs dans cette colonne. Vous pouvez définir cette contrainte sur une seule colonne de la table.

Succès

Cette syntaxe est entièrement prise en charge par Snowflake.

Échantillon source

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" }}';

Contrainte 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

Avertissement

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)
)
;

Contrainte DEFAULT

Avertissement

Cette syntaxe est partiellement prise en charge par Snowflake.

La clause DEFAULT de base de Vertica est entièrement prise en charge et se traduit directement dans Snowflake. Pour la clause DEFAULT USING de Vertica, cependant, la traduction est partielle. Snowflake appliquera correctement la valeur DEFAULT lorsque de nouvelles lignes seront insérées, mais la capacité d’actualisation différée de la portion USING ne possède pas d’équivalent direct, et certaines expressions peuvent ne pas être prises en charge par Snowflake. Par conséquent, un avertissement est ajouté pour mettre en évidence cette différence fonctionnelle.

Échantillon source

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

SnowConvert AI conserve les définitions de contraintes ; cependant, dans Snowflake, ces propriétés sont fournies pour faciliter la migration à partir d’autres bases de données. Elles ne sont pas appliquées de force ni gérées par Snowflake. Cela signifie que les valeurs par défaut peuvent être modifiées pour ces propriétés, mais si vous modifiez les valeurs par défaut, Snowflake ne créera pas de contrainte.

Avertissement

Cette syntaxe est partiellement prise en charge par Snowflake.

Échantillon source

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

Description

Crée et charge une table à partir des résultats d’une requête. ([Langage de référence Vertica SQL : Create Table (https://docs.vertica.com/23.3.x/en/sql-reference/statements/create-statements/create-table/)).

Avertissement

Cette syntaxe est partiellement prise en charge dans Snowflake. Traduction en attente pour les clauses suivantes :

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

Grammar Syntax

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[,...] ) ]

Tables Options

Clause Segmentation

Cette syntaxe n’est pas requise dans Snowflake et est supprimée du code original. Pour plus d’informations, veuillez vous référer à Clauses Projections.

Note

Cette syntaxe n’est pas requise dans Snowflake.

Clause Inherited Schema Privileges

INCLUDE SCHEMA PRIVILEGES est une fonctionnalité spécifique à Vertica qui régit la manière dont les privilèges sont hérités. En l’occurrence, ils peuvent être hérités au niveau du schéma. Snowflake ne possède pas d’équivalent direct pour cette clause dans sa syntaxe CREATE TABLE. Pour plus d’informations, veuillez vous référer à Clause Inherited Schema Privileges. .

Avertissement

Cette syntaxe n’est pas prise en charge par Snowflake.

EWIs connexes

  1. SSC-EWI-VT0001 : La clause Inherited privileges n’est pas prise en charge dans Snowflake.

CREATE TABLE LIKE

Description

Crée la table en répliquant une table existante. (Langage de référence Vertica SQL : Create Table).

Avertissement

Cette syntaxe est partiellement prise en charge dans Snowflake. Traduction en attente pour la clause suivante :

DISK_QUOTA quota

Grammar Syntax

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

Tables Options

Projections

Cette syntaxe n’est pas requise dans Snowflake et est supprimée du code original. Pour plus d’informations, veuillez vous référer à Clauses Projections.

Avertissement

Cette syntaxe n’est pas requise dans Snowflake.

Clause Inherited Schema Privileges

INCLUDE SCHEMA PRIVILEGES est une fonctionnalité spécifique à Vertica qui régit la manière dont les privilèges sont hérités. En l’occurrence, ils peuvent être hérités au niveau du schéma. Snowflake ne possède pas d’équivalent direct pour cette clause dans sa syntaxe CREATE TABLE. Pour plus d’informations, veuillez vous référer à Clause Inherited Schema Privileges. .

Avertissement

Cette syntaxe n’est pas prise en charge par Snowflake.

EWIs connexes

  1. SSC-EWI-VT0001 : La clause Inherited privileges n’est pas prise en charge dans Snowflake.