SnowConvert: Tipos de dados do Redshift

Tipos de dados

O Snowflake oferece suporte à maioria dos tipos de dados SQL mais básicos (com algumas restrições) para uso em colunas, variáveis locais, expressões, parâmetros e quaisquer outros locais apropriados/adequados.

Tipos de dados numéricos

Redshift

Snowflake

Notas

INT

INT

INT do Snowflake é um alias de NUMBER.

INT2

SMALLINT

INT2 do Snowflake é um alias de NUMBER.

INT4

INTEGER

INT4 do Snowflake é um alias de NUMBER.

INT8

INTEGER

INT8 do Snowflake é um alias de NUMBER.

INTEGER

INTEGER

INTEGER do Snowflake é um alias de NUMBER.

BIGINT

BIGINT

BIGINT do Snowflake é um alias de NUMBER.

DECIMAL

DECIMAL

DECIMAL do Snowflake é um alias de NUMBER.

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLEPRECISION do Snowflake é um alias de FLOAT.

NUMERIC​

NUMERIC

NUMERIC do Snowflake é um alias de NUMBER.

SMALLINT

SMALLINT

SMALLINT do Snowflake é um alias de NUMBER.

FLOAT

FLOAT

O Snowflake utiliza números de ponto flutuante de precisão dupla (64 bits) IEEE 754.

FLOAT4

FLOAT4

FLOAT4 do Snowflake é um alias de FLOAT.

FLOAT8

FLOAT8

FLOAT8 do Snowflake é um alias de FLOAT.

REAL

REAL​

REAL do Snowflake é um alias de FLOAT.

Tipos de caracteres

Redshift

Snowflake

Notas

VARCHAR

VARCHAR

VARCHAR contém caracteres Unicode UTF-8. Se nenhum comprimento for especificado, o padrão é o comprimento máximo permitido (16.777.216).

CHAR

CHAR

CHAR do Snowflake é um alias de VARCHAR.

CHARACTER

CHARACTER

CHARACTER do Snowflake é um alias de VARCHAR.

NCHAR

NCHAR

NCHAR do Snowflake é um alias de VARCHAR.

BPCHAR

VARCHAR

O tipo de dados BPCHAR não é suportado no Snowflake. VARCHAR é usado em seu lugar. Para obter mais informações, consulte SSC-FDM-PG0002.

NVARCHAR

NVARCHAR

NVARCHAR do Snowflake é um alias de VARCHAR.

CHARACTER VARYING

CHARACTER VARYING

CHARACTERVARYING do Snowflake é um alias de VARCHAR.

NATIONAL CHARACTER

NCHAR

NCHAR do Snowflake é um alias de VARCHAR.

NATIONAL CHARACTER VARYING

NCHAR VARYING

NCHARVARYING do Snowflake é um alias de VARCHAR.

TEXT

TEXT

TEXT do Snowflake é um alias de VARCHAR.

NAME (Tipo de caractere especial)

VARCHAR

VARCHAR contém caracteres Unicode UTF-8. Se nenhum comprimento for especificado, o padrão é o comprimento máximo permitido (16.777.216).

Nota

Quando o argumento MAX precision está presente nos tipos de dados do Redshift, eles são transformados para a precisão máxima padrão suportada pelo Snowflake.

Tipos boolianos

Redshift

Snowflake

Notas

BOOL

BOOLEAN

BOOLEAN

BOOLEAN

Tipos de dados binários

Redshift

Snowflake

Notas

VARBYTE

VARBINARY

VARBINARY é sinônimo de BINARY.

VARBINARY

VARBINARY

VARBINARY é sinônimo de BINARY.

BINARY

BINARY

O comprimento máximo é de 8 MB (8.388.608 bytes).

BINARY VARYING

BINARY VARYING

BINARYVARYING é sinônimo de BINARY.

Aviso

O comprimento máximo dos tipos binários no Redshift é 16 MB (16.777.216 bytes), mas no Snowflake é 8 MB (8.388.608 bytes). Considere essa redução no comprimento máximo.

Tipos de dados de data/hora

Redshift

Snowflake

Notas

DATE

DATE

DATE aceita datas nas formas mais comuns (YYYY-MM-DD, DD-MON-YYYY, etc.)

TIME

TIME

Armazenamento de horários na forma de HH:MI:SS. A precisão do tempo pode variar de 0 (segundos) a 9 (nanossegundos). A precisão padrão é 9.

TIMETZ

TIME

O fuso horário não é compatível com o tipo de dados de hora. Para obter mais informações, consulte SSC-FDM-0005.

TIME WITH TIME ZONE

TIME

O fuso horário não é compatível com o tipo de dados de hora. Para obter mais informações, consulte SSC-FDM-0005.

TIME WITHOUT TIME ZONE

TIME

O Snowflake oferece suporte a apenas um tipo de dados de TIME para armazenamento de hora no formato de HH:MI:SS.

TIMESTAMP

TIMESTAMP

A precisão do carimbo de data/hora pode variar de 0 (segundos) a 9 (nanossegundos).

TIMESTAMPTZ

TIMESTAMP_TZ

TIMESTAMP_TZ armazena internamente a hora UTC juntamente com um deslocamento de fuso horário associado.

TIMESTAMP WITH TIME ZONE

TIMESTAMP_TZ

TIMESTAMP_TZ armazena internamente a hora UTC juntamente com um deslocamento de fuso horário associado.

TIMESTAMP WITHOUT TIME ZONE

TIMESTAMP_NTZ

TIMESTAMP_NTZ armazena internamente a hora do «relógio de parede» com uma precisão especificada.

INTERVAL YEAR TO MONTH

VARCHAR

O tipo de dados de intervalo não é compatível com o Snowflake. Transformado em VARCHAR.

INTERVAL DAY TO SECOND

VARCHAR

O tipo de dados de intervalo não é compatível com o Snowflake. Transformado em VARCHAR.

Outros tipos de dados

Redshift

Snowflake

Notas

GEOMETRY

GEOMETRY

As coordenadas são representadas como pares de números reais (x, y). Atualmente, apenas coordenadas em 2D são suportadas.

GEOGRAPHY

GEOGRAPHY

O tipo de dados GEOGRAPHY segue o padrão WGS 84.

HLLSKETCH

N/A

Tipo de dados não suportado no Snowflake. Para obter mais informações, consulte SSC-EWI-RS0004.

SUPER

VARIANT

Pode conter um valor de qualquer outro tipo de dados, inclusive valores OBJECT e ARRAY.

Tipo de dados INTERVALDAYTOSECOND

Descrição

INTERVAL DAY TO SECOND especifique um literal de intervalo para definir uma duração em dias, horas, minutos e segundos. (Tipo de dados Interval da referência de linguagem RedShift SQL)

Não há equivalente para esse tipo de dados no Snowflake; atualmente, ele é transformado em VARCHAR.

Sintaxe da gramática

 INTERVAL day_to_second_qualifier [ (fractional_precision) ]

day_to_second_qualifier:
{ DAY | HOUR | MINUTE | SECOND | DAY TO HOUR | DAY TO MINUTE | DAY TO SECOND | 
HOUR TO MINUTE | HOUR TO SECOND | MINUTE TO SECOND }
Copy

Aviso

O uso do tipo de dados Interval está planejado para ser implementado em atualizações futuras.

Amostra de padrões da origem

Interval Day to Second em Create Table

Entrada
 CREATE TABLE interval_day_to_second_table
(
	interval_day_col1 INTERVAL DAY TO HOUR,
	interval_day_col2 INTERVAL DAY TO SECOND(4)
);

INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ( INTERVAL '1 2' DAY TO HOUR ); 
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ( INTERVAL '1 2:3:4.56' DAY TO SECOND(4));
Copy
Saída
 CREATE TABLE interval_day_to_second_table
(
	interval_day_col1 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO HOUR DATA TYPE CONVERTED TO VARCHAR ***/!!!,
	interval_day_col2 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND(4) DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"redshift"}}'
;

INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ('1days, 2hours');

INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ('1days, 2hours, 3mins, 4secs, 56ms');
Copy

O valor do intervalo é transformado em um formato compatível com o Snowflake e, em seguida, inserido como texto dentro da coluna. Como o Snowflake não oferece suporte a Interval como um tipo de dados, ele só é compatível com operações aritméticas. Para usar o valor, ele precisa ser extraído e usado como uma constante de intervalo (se possível).

Valor original Oracle: INTERVAL '1 2:3:4.567' DAY TO SECOND

Valor armazenado na coluna Snowflake: '1days, 2hours, 3mins, 4secs, 56ms'

Valor como constante de intervalo do Snowflake: INTERVAL '1days, 2hours, 3mins, 4secs, 56ms'

Recuperação de dados de uma coluna Interval Day to Second

Entrada
 SELECT * FROM interval_day_to_second_table;
Copy

interval_day_col1

interval_day_col2

1 days 2 hours 0 mins 0.0 secs

NULL

NULL

1 days 2 hours 3 mins 4.56 secs

Saída
 SELECT * FROM
interval_day_to_second_table;
Copy

interval_day_col1

interval_day_col2

1d, 2h

NULL

NULL

1d, 2h, 3m, 4s, 56ms

Problemas conhecidos

1. Only arithmetic operations are supported

Os intervalos do Snowflake têm várias limitações. Somente operações aritméticas entre DATE ou TIMESTAMP e constantes de intervalo são suportadas; qualquer outro cenário não é suportado.

EWIs relacionados

  1. SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.

Tipo de dados INTERVALYEARTOMONTH

Descrição

INTERVAL YEAR TO MONTH especifique um tipo de dados de intervalo para armazenar uma duração de tempo em anos e meses. (Tipo de dados Interval da referência de linguagem RedShift SQL)

Não há equivalente para esse tipo de dados no Snowflake; atualmente, ele é transformado em VARCHAR.

Sintaxe da gramática

 INTERVAL {YEAR | MONTH | YEAR TO MONTH}
Copy

Aviso

O uso do tipo de dados Interval está planejado para ser implementado em atualizações futuras.

Amostra de padrões da origem

Interval Year To Month em Create Table

Entrada:
 CREATE TABLE interval_year_to_month_table
(
	interval_year_col1 INTERVAL YEAR,
	interval_year_col2 INTERVAL MONTH,
 	interval_year_col3 INTERVAL YEAR TO MONTH
);

INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ( INTERVAL '12' YEAR);
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ( INTERVAL '5' MONTH);
INSERT INTO interval_year_to_month_table(interval_year_col3) VALUES ( INTERVAL '1000-11' YEAR TO MONTH );
Copy
Saída
 CREATE TABLE interval_year_to_month_table
(
	interval_year_col1 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR DATA TYPE CONVERTED TO VARCHAR ***/!!!,
	interval_year_col2 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
	interval_year_col3 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"redshift"}}'
;

INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ('12year, 0mons');

INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ('0year, 5mons');

INSERT INTO interval_year_to_month_table(interval_year_col3) VALUES ('1000year, 11mons');
Copy

O valor do intervalo é transformado em um formato compatível com o Snowflake e, em seguida, inserido como texto dentro da coluna. Como o Snowflake não oferece suporte a Interval como um tipo de dados, ele só é compatível com operações aritméticas. Para usar o valor, ele precisa ser extraído e usado como uma constante de intervalo (se possível).

Valor original do Redshift: INTERVAL '1-2' YEAR TO MONTH

Valor armazenado na coluna Snowflake: '1y, 2m'

Valor como constante do Snowflake Interval: INTERVAL '1y, 2m'

Recuperação de dados de uma coluna Interval Year To Month

Entrada
 SELECT * FROM interval_year_to_month_table;
Copy

interval_year_col1

interval_year_col2

interval_year_col2

12 years 0 mons

NULL

NULL

NULL

0 years 5 mons

NULL

NULL

NULL

1000 years 11 mons

Saída
 SELECT * FROM
interval_year_to_month_table;
Copy

interval_year_col1

interval_year_col2

interval_year_col2

12 y 0 mm

NULL

NULL

NULL

0 y 5 mm

NULL

NULL

NULL

1000 y 11 mons

Problemas conhecidos

1. Only arithmetic operations are supported

Os intervalos do Snowflake têm várias limitações. Somente operações aritméticas entre DATE ou TIMESTAMP e constantes de intervalo são suportadas; qualquer outro cenário não é suportado.

EWIs relacionados

  • SSC-EWI-0036: Tipo de dados convertido em outro tipo de dados.

Modelos de formato numérico

Descrição

Esses são os diferentes formatos numéricos suportados pelo Redshift e seu equivalente no Snowflake.

Redshift

Snowflake

Comentários

0

0

9

9

. (ponto), D

. (ponto), D

, (vírgula)

, (vírgula)

CC

Atualmente, não há equivalente ao Century Code no Snowflake.

FM

FM

PR

Atualmente, não há equivalente para esse formato no Snowflake.

S

S

Sinal numérico explícito.

L

$

Espaço reservado para o símbolo da moeda.

G

G

MI

MI

Sinal de menos (para números negativos)

PL

S

Atualmente, não há equivalente ao sinal de mais no Snowflake. Portanto, ele é convertido para o sinal numérico explícito.

SG

S

Sinal numérico explícito na posição especificada.

RN

Atualmente, não há equivalente para algarismos romanos no Snowflake.

TH

Atualmente, não há equivalente para o sufixo Ordinal no Snowflake

Amostra de padrões da origem

Usos na função To_Number

Entrada:
 select to_number('09423', '999999999') as multiple_nines
    , to_number('09423', '00000') as exact_zeros
    , to_number('123.456', '999D999') as decimals
    , to_number('123,031.30', 'FM999,999D999') as fill_mode
    , to_number('$ 12,454.88', '$999,999.99') as currency
;
Copy
multiple_ninesexact_zerosdecimalsfill_modecurrency
94239423123.456123031.301254.88
Saída
 select to_number('09423', '999999999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999999999'' NODE ***/!!! as multiple_nines
    , to_number('09423', '00000') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''00000'' NODE ***/!!! as exact_zeros
    , to_number('123.456', '999D999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999D999'' NODE ***/!!! as decimals
    , to_number('123,031.30', 'FM999,999D999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''FM999,999D999'' NODE ***/!!! as fill_mode
    , to_number('$ 12,454.88', '$999,999.99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''$999,999.99'' NODE ***/!!! as currency
;
Copy
multiple_ninesexact_zerosdecimalsfill_modecurrency
94239423123.456123031.30012454.88
Entrada:
 select to_number('$ 12,454.88', 'FML99G999D99') as currency_L
    , to_number('123-', '999S') as signed_number_end
    , to_number('+12454.88', 'PL99G999D99') as plus_sign
    , to_number('-12,454.88', 'MI99G999D99') as minus_sign
    , to_number('-12,454.88', 'SG99G999D99') as signed_number
;
Copy
currency_Lsigned_number_endplus_signminus_signsigned_number
12454.8-1231254.88-12454.88-12454.88
Saída:
 select to_number('$ 12,454.88', 'FML99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - 'FML99G999D99' FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! as currency_L
    , to_number('123-', '999S') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999S'' NODE ***/!!! as signed_number_end
    , to_number('+12454.88', 'PL99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - 'PL99G999D99' FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! as plus_sign
    , to_number('-12,454.88', 'MI99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''MI99G999D99'' NODE ***/!!! as minus_sign
    , to_number('-12,454.88', 'SG99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''SG99G999D99'' NODE ***/!!! as signed_number
;
Copy
currency_Lsigned_number_endplus_signminus_signsigned_number
12454.8-1231254.88-12454.88-12454.88

Usos na função To_Char

Entrada:
 select to_char(-123, '999S') as signed_number
    , to_char(12454.88, 'FM99G999D99') as decimal_number
    , to_char(-12454.88, '99G999D99') as negative
    , to_char(-12454.88, 'MI99G999D99') as minus_sign
    , to_char(+12454.88, 'PL99G999D99') as plus_sign
    , to_char(09423, '999999999') as multiple_nines
    , to_char(09423, '00000') as exact_zeros
;
Copy
signed_numberdecimal_numbernegativeminus_signplus_signmultiple_ninesmultiple_ninesexact_zerosexact_zeros
'123-''12,454.88''-12,454.88''12454.88''-12,454.88''09423''09423'
Saída:
 select
    TO_CHAR(-123, '999S') as signed_number,
    TO_CHAR(12454.88, 'FM99G999D99') as decimal_number,
    TO_CHAR(-12454.88, '99G999D99') as negative,
    TO_CHAR(-12454.88, 'MI99G999D99') as minus_sign,
    TO_CHAR(+12454.88, 'S99G999D99') as plus_sign,
    TO_CHAR(09423, '999999999') as multiple_nines,
    TO_CHAR(09423, '00000') as exact_zeros
;
Copy
signed_numberdecimal_numbernegativeminus_signplus_signmultiple_ninesmultiple_ninesexact_zerosexact_zeros
'123-''12,454.88''-12,454.88''12454.88''-12,454.88''09423''09423'

Formato não suportado

O formato a seguir não é compatível e, por isso, será marcado com um EWI.

Entrada:
 SELECT to_char(123031, 'th999,999')
Copy
Saída:
 SELECT
TO_CHAR(123031, 'th999,999') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - th999,999 FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
Copy

Problemas conhecidos

1. Using numeric signs inside the number not supported.

Quando qualquer formato de sinal numérico (MI, SG ou PL) é usado dentro do número, em vez de no início ou no final do número, não há suporte no Snowflake

Exemplo

 select to_number('12,-454.88', '99GMI999D99')
Copy

EWIs relacionados

  • SSC-EWI-PG0005: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.