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 ( |
TIME |
TIME |
Armazenamento de horários na forma de |
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 |
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 }
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));
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');
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;
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;
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¶
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}
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 );
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');
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;
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;
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
;
multiple_nines | exact_zeros | decimals | fill_mode | currency |
---|---|---|---|---|
9423 | 9423 | 123.456 | 123031.30 | 1254.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
;
multiple_nines | exact_zeros | decimals | fill_mode | currency |
---|---|---|---|---|
9423 | 9423 | 123.456 | 123031.300 | 12454.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
;
currency_L | signed_number_end | plus_sign | minus_sign | signed_number |
---|---|---|---|---|
12454.8 | -123 | 1254.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
;
currency_L | signed_number_end | plus_sign | minus_sign | signed_number |
---|---|---|---|---|
12454.8 | -123 | 1254.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
;
signed_number | decimal_number | negative | minus_sign | plus_sign | multiple_ninesmultiple_nines | exact_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
;
signed_number | decimal_number | negative | minus_sign | plus_sign | multiple_ninesmultiple_nines | exact_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')
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. ***/!!!
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')
EWIs relacionados¶
SSC-EWI-PG0005: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.