SnowConvert: Funções do Redshift¶
Funções do sistema¶
IDENTITY¶
Descrição ¶
A função IDENTITY é uma função do sistema que opera em uma coluna específica de uma tabela para determinar o valor inicial da identidade. Se o valor inicial não estiver disponível, o padrão será o valor fornecido na função. Isso será convertido em uma Sequência no Snowflake.
Sintaxe da gramática ¶
"identity"(oid_id, oid_table_id, default)
Nota
Essa função não é mais compatível com o Redshift. Ela usa o valor padrão para definir a identidade e se comporta como uma coluna de identidade padrão.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE IF NOT EXISTS table_test
(
id integer,
inventory_combo BIGINT DEFAULT "identity"(850178, 0, '5,3'::text)
);
INSERT INTO table_test (id) VALUES
(1),
(2),
(3),
(4);
SELECT * FROM table_test;
id |
inventory_combo |
---|---|
1 |
5 |
2 |
8 |
3 |
11 |
3 |
14 |
Código de saída:
CREATE TABLE IF NOT EXISTS table_test
(
id integer,
inventory_combo BIGINT IDENTITY(5,3) ORDER
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/13/2024", "domain": "test" }}';
INSERT INTO table_test (id) VALUES
(1),
(2),
(3),
(4);
SELECT * FROM
table_test;
id |
inventory_combo |
---|---|
1 |
5 |
2 |
8 |
3 |
11 |
3 |
14 |
Funções de cadeia de caracteres¶
BTRIM¶
Descrição ¶
A função BTRIM apara uma cadeia de caracteres removendo os espaços em branco à esquerda e à direita ou removendo os caracteres à esquerda e à direita que correspondem a uma cadeia de caracteres especificada opcional. (Função BTRIM de referência da linguagem RedShift SQL)
Sintaxe da gramática ¶
BTRIM(string [, trim_chars ] )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
SELECT ' abc ' AS untrim, btrim(' abc ') AS trim;
SELECT 'setuphistorycassettes' AS untrim, btrim('setuphistorycassettes', 'tes') AS trim;
utrim |
trim |
---|---|
abc |
abc |
untrim |
trim |
---|---|
setuphistorycassettes |
uphistoryca |
Código de saída:
SELECT ' abc ' AS untrim,
TRIM(' abc ') AS trim;
SELECT 'setuphistorycassettes' AS untrim,
TRIM('setuphistorycassettes', 'tes') AS trim;
utrim |
trim |
---|---|
abc |
abc |
untrim |
trim |
---|---|
setuphistorycassettes |
uphistoryca |
Problemas conhecidos
Não foram encontrados problemas.
Related EWIs
Não há problemas conhecidos.
CONCAT
Description
A função CONCAT concatena duas expressões e retorna a expressão resultante. (RedShift Função CONCAT de referência da linguagem SQL).
Grammar Syntax
CONCAT ( expression1, expression2 )
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE test_concat_function (
col1 varchar
);
INSERT INTO test_concat_function
VALUES ('name');
SELECT CONCAT(col1, ' TEST '),
"CONCAT"(col1, ' TEST '),
col1 || ' TEST '
FROM test_concat_function;
CONCAT(col1, ' TEST ') | "CONCAT"(col1, ' TEST ') | col1 || ' TEST ' |
---|---|---|
name TEST | name TEST | name TEST |
Código de saída:
CREATE TABLE test_concat_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_concat_function
VALUES ('name');
SELECT CONCAT(col1, ' TEST '),
CONCAT(col1, ' TEST '),
col1 || ' TEST '
FROM
test_concat_function;
CONCAT(NAME, ' TEST ') | "CONCAT"(NAME, ' TEST ') | NAME || ' TEST ' |
---|---|---|
name TEST | name TEST | name TEST |
EWIs relacionados¶
Não há problemas conhecidos.
LEFT e RIGHT¶
Descrição ¶
Essas funções retornam o número especificado de caracteres mais à esquerda ou mais à direita de uma cadeia de caracteres. (Funções LEFT e RIGHT de referência da linguagem SQL).
Sintaxe da gramática ¶
LEFT( string, integer )
RIGHT( string, integer )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
left_3 |
right_3 |
---|---|
Chi |
ago |
Código de saída:
SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
left_3 |
right_3 |
---|---|
Chi |
ago |
Know Issues
No Snowflake e no Redshift, as funções LEFT
e RIGHT
tratam os valores negativos de forma diferente:
Snowflake: Retorna uma cadeia de caracteres vazia quando o segundo argumento é negativo.
Redshift: Gera um erro de tempo de execução com valores negativos.
Related EWIs
Não há problemas conhecidos.
LOWER
Description
A função LOWER converte uma cadeia de caracteres em minúsculas. (Função Lower de referência da linguagem RedShift SQL )
Grammar Syntax
LOWER ( string )
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE test_lower_function (
col1 varchar
);
INSERT INTO test_lower_function
VALUES ('test'),
('Test'),
('TEST');
SELECT LOWER(COL1),
"LOWER"(COL1),
LOWER('vaLues')
FROM test_lower_function;
LOWER(COL1) | "LOWER"(COL1) | LOWER('vaLues') |
---|---|---|
test | test | values |
test | test | values |
test | test | values |
Código de saída:
CREATE TABLE test_lower_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/21/2024", "domain": "test" }}';
INSERT INTO test_lower_function
VALUES ('test'),
('Test'),
('TEST');
SELECT LOWER(COL1),
LOWER(COL1),
LOWER('vaLues')
FROM
test_lower_function;
LOWER(COL1) |
«LOWER»(COL1) |
LOWER(“vaLues”) |
---|---|---|
test |
test |
values |
test |
test |
values |
test |
test |
values |
EWIs relacionados¶
Não há problemas conhecidos.
QUOTE_IDENT¶
Descrição ¶
A função QUOTE_IDENT retorna a cadeia de caracteres especificada como uma cadeia de caracteres com aspas duplas à esquerda e aspas duplas à direita. (Função QUOTE_IDENT de referência da linguagem RedShift SQL).
Para replicar a funcionalidade dessa função, ela é convertida em uma função CONCAT.
Sintaxe da gramática ¶
QUOTE_IDENT(string)
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
SELECT
QUOTE_IDENT('"CAT"'),
"QUOTE_IDENT"('Foo bar') ;
quote_ident |
quote_ident |
---|---|
«»»CAT»»» |
«Foo bar»»» |
Código de saída:
SELECT
CONCAT('"', REPLACE('"CAT"', '"', '""'), '"'),
CONCAT('"', REPLACE('Foo bar', '"', '""'), '"');
quote_ident |
quote_ident |
---|---|
«»»CAT»»» |
«Foo bar»»» |
Problemas conhecidos
Não foram encontrados problemas.
Related EWIs
Não há problemas conhecidos.
REGEXP_REPLACE
Description
Essas funções procuram um padrão de expressão regular em uma cadeia de caracteres e substituem todas as ocorrências do padrão pela cadeia de caracteres especificada. (Função REGEXP_REPLACE de referência da linguagem SQL).
Grammar Syntax
REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
Aviso
Essa função é parcialmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE my_table (col1 varchar);
SELECT regexp_replace('the fox', 'FOX', 'quick brown fox', 1, 'ip');
SELECT
regexp_replace(d, '[hidden]'),
regexp_replace(d, f)
FROM
(SELECT
regexp_replace('pASswd7','(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+') as d, 'passwd7' as f);
SELECT regexp_replace(col1, 'passwd7', '[hidden]', 1, 'ip') as rp from my_table;
regexp_replace |
regexp_replace |
regexp_replace |
---|---|---|
the quick brown fox |
pASsw7 |
pASsw7 |
Código de saída:
CREATE TABLE my_table (col1 varchar)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "00/00/0000", "domain": "test" }}';
SELECT
REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 0, 'i');
SELECT
REGEXP_REPLACE(d, '[hidden]'),
REGEXP_REPLACE(d,
--** SSC-FDM-0032 - PARAMETER 'regex_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
f)
FROM
(SELECT
REGEXP_REPLACE('pASswd7',
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - regexp_replace FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
'(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+') as d, 'passwd7' as f);
SELECT
REGEXP_REPLACE(col1, 'passwd7', '[hidden]', 1, 0, 'i') as rp from
my_table;
REGEXP_REPLACE |
RESULT |
---|---|
the quick brown fox |
100048 (2201B): Expressão regular inválida: “(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+”, nenhum argumento para o operador de repetição: ? |
Problemas conhecidos¶
Essa função inclui um argumento
parameters
que permite que o usuário interprete o padrão usando o dialeto Perl Compatible Regular Expression (PCRE), representado pelo valorp
, que foi removido para evitar problemas ao corrigir o código.
EWIs relacionados¶
[SSC-EWI-0009](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0020): Regexp_Substr A função suporta apenas expressões regulares POSIX.
SSC-FDM-0032: O parâmetro não é um valor literal, a transformação não pôde ser totalmente aplicada
SSC-FDM- PG0011: O uso da restrição de coluna COLLATE foi desativado para essa condição de correspondência de padrões.
REPLACE¶
Descrição¶
Substitui todas as ocorrências de um conjunto de caracteres em uma cadeia de caracteres existente por outros caracteres especificados. (Função REPLACE de referência da linguagem Redshift SQL).
Essa função é totalmente compatível com o Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Grammar Syntax
REPLACE(string, old_chars, new_chars)
Sample Source Patterns
Input Code:
SELECT REPLACE('Hello World', ' ', '_') AS modified_string,
REPLACE('Apple, Orange, Banana, Grape', ',', '') AS fruits,
REPLACE('http://example.com/path/to/resource', '/path/to', '/new-path') AS updated_url;
MODIFIED_STRING |
FRUITS |
UPDATED_URL |
---|---|---|
Hello_World |
Apple Orange Banana Grape |
http://example.com/new-path/resource |
Código de saída:
SELECT REPLACE('Hello World', ' ', '_') AS modified_string,
REPLACE('Apple, Orange, Banana, Grape', ',', '') AS fruits,
REPLACE('http://example.com/path/to/resource', '/path/to', '/new-path') AS updated_url;
MODIFIED_STRING |
FRUITS |
UPDATED_URL |
---|---|---|
Hello_World |
Apple Orange Banana Grape |
http://example.com/new-path/resource |
Known Issues
Não foram encontrados problemas.
Related EWIs
Não há problemas conhecidos.
SPLIT_PART
Description
Divide uma cadeia de caracteres no delimitador especificado e retorna a parte na posição especificada. (Função SPLIT_PART de referência da linguagem SQL).
Grammar Syntax
SPLIT_PART(string, delimiter, position)
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
select split_part('abc$def$ghi','$',2) AS split_1,
split_part('abc$def$ghi','$',4) AS split_2,
split_part('abc$def$ghi','#',1) AS split_3;
split_1 | split_2 | split_3 |
---|---|---|
def | abc$def$ghi |
Código de saída:
select split_part('abc$def$ghi','$',2) AS split_1,
split_part('abc$def$ghi','$',4) AS split_2,
split_part('abc$def$ghi','#',1) AS split_3;
split_1 | split_2 | split_3 |
---|---|---|
def | abc$def$ghi |
Problemas conhecidos¶
Há uma diferença no comportamento de SPLIT_PART
quando usado com agrupamentos sem distinção entre maiúsculas e minúsculas (CASE_INSENSITIVE
ou en-ci
) no Snowflake e no Redshift.
EWIs relacionados¶
Não há problemas conhecidos.
SUBSTRING¶
Descrição ¶
Retorna o subconjunto de uma cadeia de caracteres com base na posição inicial especificada. (Função RedShift SUBSTRING).
Sintaxe da gramática ¶
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
SUBSTRING(character_string, start_position, number_characters )
SUBSTRING(binary_expression, start_byte, number_bytes )
SUBSTRING(binary_expression, start_byte )
Aviso
Essa função é parcialmente suportada no Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
SELECT SUBSTRING('machine' FROM 3 for 2) AS machien_3_2, SUBSTRING('machine',1,4) AS machine_1_4;
SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_varbyte;
machien_3_2 |
machine_1_4 |
---|---|
ch |
mach |
Código de saída:
SELECT SUBSTRING('machine', 3, 2) AS machien_3_2, SUBSTRING('machine',1,4) AS machine_1_4;
SELECT SUBSTRING('12345':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_varbyte;
machien_3_2 |
machine_1_4 |
---|---|
ch |
mach |
Problemas conhecidos¶
Quando a start_position
no Redshift é 0 ou menos, a função SUBSTRING
executa uma operação matemática (start_position + number_characters
). Se o resultado for 0 ou menos, SUBSTRING
retornará uma cadeia de caracteres vazia. No Snowflake, o comportamento para start_position
quando é 0 ou menos é diferente, levando a resultados diferentes.
EWIs relacionados¶
Não há problemas conhecidos.
TRIM¶
Descrição ¶
A função TRIM corta uma cadeia de caracteres com espaços em branco ou caracteres especificados. (Função TRIM de referência da linguagem RedShift SQL)
No Redshift, é possível especificar onde executar uma operação de corte usando palavras-chave (BOTH
, LEADING
ou TRAILING
). Essa funcionalidade pode ser replicada no Snowflake usando as funções TRIM
, LTRIM
e RTRIM
, respectivamente.
Sintaxe da gramática ¶
TRIM( [ BOTH | LEADING | TRAILING ] [trim_chars FROM ] string )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
SELECT TRIM(' dog ') AS SimpleTrim;
SELECT TRIM(LEADING '"' FROM'"dog"') AS LeadingTrim;
SELECT TRIM(TRAILING '"' FROM'"dog"') AS TrailingTrim;
SELECT TRIM('x' FROM 'xxxHello Worldxxx') AS FromTrim;
SimpleTrim |
---|
dog |
LeadingTrim |
---|
dog» |
TrailingTrim |
---|
«dog |
FromTrim |
---|
Hello World |
Código de saída:
SELECT TRIM(' dog ') AS SimpleTrim;
SELECT
LTRIM('"dog"', '"') AS LeadingTrim;
SELECT
RTRIM('"dog"', '"') AS TrailingTrim;
SELECT
TRIM('xxxHello Worldxxx', 'x') AS FromTrim;
SimpleTrim |
---|
dog |
LeadingTrim |
---|
dog» |
TrailingTrim |
---|
«dog |
FromTrim |
---|
Hello World |
Know Issues
Não foram encontrados problemas.
Related EWIs
Não há problemas conhecidos.
UPPER
Description
A função UPPER converte uma cadeia de caracteres em maiúsculas. (Função Upper de referência da linguagem RedShift SQL)
Grammar Syntax
UPPER ( string )
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE test_upper_function (
col1 varchar
);
INSERT INTO test_upper_function
VALUES ('test'),
('Test'),
('TEST');
SELECT UPPER(COL1),
"UPPER"(COL1),
UPPER('vaLues')
FROM test_upper_function;
UPPER(COL1) | "UPPER"(COL1) | UPPER('vaLues') |
---|---|---|
TEST | TEST | VALUES |
TEST | TEST | VALUES |
TEST | TEST | VALUES |
Código de saída:
CREATE TABLE test_upper_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/21/2024", "domain": "test" }}';
INSERT INTO test_upper_function
VALUES ('test'),
('Test'),
('TEST');
SELECT UPPER(COL1),
UPPER(COL1),
UPPER('vaLues')
FROM
test_upper_function;
UPPER(COL1) |
«UPPER»(COL1) |
UPPER(“vaLues”) |
---|---|---|
TEST |
TEST |
VALUES |
TEST |
TEST |
VALUES |
TEST |
TEST |
VALUES |
EWIs relacionados¶
Não há problemas conhecidos.
Funções de agregação¶
AVG¶
Descrição¶
A função AVG retorna a média (média aritmética) dos valores da expressão de entrada. (Função AVG de referência da linguagem Redshift SQL)
Essa função é totalmente suportada pelo Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Grammar Syntax
AVG ( [ DISTINCT | ALL ] expression )
Sample Source Patterns
Dados de configuração
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column SUPER
);
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column VARIANT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/27/2024", "domain": "test" }}';
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
Input Code:
SELECT
AVG(DISTINCT my_smallint_column) AS type_smallint,
AVG(ALL my_integer_column) AS type_integer,
AVG(my_bigint_column) AS type_bigint,
AVG(my_numeric_column) AS type_numeric,
AVG(my_decimal_column) AS type_decimal,
AVG(my_real_column) AS type_real,
AVG(my_double_precision_column) AS type_double_precision,
AVG(my_super_column) AS type_super
FROM example_table;
type_smallint |
type_integer |
type_bigint |
type_numeric |
type_decimal |
type_real |
type_double_precision |
type_super |
---|---|---|---|---|---|---|---|
3 |
300 |
30000000000 |
345 |
676 |
2.2080000400543214 |
2,40674 |
46779 |
Output Code:
SELECT
AVG(DISTINCT my_smallint_column) AS type_smallint,
AVG(ALL my_integer_column) AS type_integer,
AVG(my_bigint_column) AS type_bigint,
AVG(my_numeric_column) AS type_numeric,
AVG(my_decimal_column) AS type_decimal,
AVG(my_real_column) AS type_real,
AVG(my_double_precision_column) AS type_double_precision,
AVG(my_super_column) AS type_super
FROM example_table;
type_smallint |
type_integer |
type_bigint |
type_numeric |
type_decimal |
type_real |
type_double_precision |
type_super |
---|---|---|---|---|---|---|---|
3,000000 |
300,000000 |
30000000000,000000 |
345,800000 |
676,400000 |
2,208 |
2,40674 |
46779 |
Nota
AVG, dependendo do tipo de dados, pode se comportar de forma diferente em termos de arredondamento e formatação, o que pode resultar em precisão diferente ou casas decimais diferentes ao comparar o Redshift com o Snowflake.
Related EWIs
Não há problemas conhecidos.
COUNT
Description
A função COUNT conta as linhas definidas pela expressão. (Função COUNT de referência da linguagem Redshift SQL)
COUNT
e APPROXIMATE COUNT
são totalmente compatíveis com o Snowflake por COUNT
e APPROX_COUNT_DISTINCT
.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Sintaxe da gramática¶
COUNT ( * | expression )
COUNT ( [ DISTINCT | ALL ] expression )
APPROXIMATE COUNT ( DISTINCT expression )
Amostra de padrões da origem¶
Dados de configuração¶
CREATE TABLE sales (
sale_id INT PRIMARY KEY,
product_id INT,
sale_amount DECIMAL(10, 2),
sale_date DATE,
customer_id INT
);
INSERT INTO sales (sale_id, product_id, sale_amount, sale_date, customer_id) VALUES
(1, 101, 100.00, '2024-01-01', 1001),
(2, 102, 200.00, '2024-01-01', 1002),
(3, 101, 150.00, '2024-01-02', 1001),
(4, 103, 250.00, '2024-01-02', 1003),
(5, 102, 300.00, '2024-01-03', 1002),
(6, 101, 200.00, '2024-01-03', 1004),
(7, 101, 120.00, '2024-01-04', 1001),
(8, 102, 180.00, '2024-01-04', 1005),
(9, 103, 300.00, '2024-01-05', 1003),
(10, 101, 130.00, '2024-01-05', 1006),
(10, 101, 130.00, '2024-01-05', 1006);
Código de entrada:¶
SELECT
product_id,
COUNT(sale_id) AS total_sales,
"COUNT"(DISTINCT sale_id) AS total_sales_distinct,
"count"(ALL sale_id) AS total_sales_all,
COUNT(*) AS total_sales_asterisk,
APPROXIMATE COUNT ( DISTINCT sale_id) AS aprroximate_count_total_sales
FROM
sales
GROUP BY
product_id
ORDER BY
total_sales DESC;
PRODUCT_ID | TOTAL_SALES | TOTAL_SALES_DISTINCT | TOTAL_SALES_ALL | TOTAL_SALES_ASTERISK | APRROXIMATE_COUNT_TOTAL_SALES |
---|---|---|---|---|---|
101 | 6 | 5 | 6 | 6 | 5 |
102 | 3 | 3 | 3 | 3 | 3 |
103 | 2 | 2 | 2 | 2 | 2 |
Código de saída:¶
SELECT
product_id,
COUNT(sale_id) AS total_sales,
COUNT(DISTINCT sale_id) AS total_sales_distinct,
COUNT(ALL sale_id) AS total_sales_all,
COUNT(*) AS total_sales_asterisk,
APPROX_COUNT_DISTINCT ( DISTINCT sale_id) AS aprroximate_count_total_sales
FROM
sales
GROUP BY
product_id
ORDER BY
total_sales DESC;
PRODUCT_ID | TOTAL_SALES | TOTAL_SALES_DISTINCT | TOTAL_SALES_ALL | TOTAL_SALES_ASTERISK | APRROXIMATE_COUNT_TOTAL_SALES |
---|---|---|---|---|---|
101 | 6 | 5 | 6 | 6 | 5 |
102 | 3 | 3 | 3 | 3 | 3 |
103 | 2 | 2 | 2 | 2 | 2 |
Problemas conhecidos ¶
Não foram encontrados problemas.
EWIs relacionados¶
Não há problemas conhecidos.
Funções matemáticas¶
MAX¶
Descrição ¶
A função MAX retorna o valor máximo em um conjunto de linhas. (Referência da linguagem RedShift SQL Função MAX).
Sintaxe da gramática ¶
MAX ( [ DISTINCT | ALL ] expression )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
CREATE TABLE test_max_function (
col1 INT
);
INSERT INTO test_max_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MAX(COL1), MAX(DISTINCT COL1), MAX(ALL COL1) FROM test_max_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
200 |
200 |
200 |
Código de saída:
CREATE TABLE test_max_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_max_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MAX(COL1), MAX(DISTINCT COL1), MAX(ALL COL1) FROM
test_max_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
200 |
200 |
200 |
Related EWIs
Não há problemas conhecidos.
MIN
Description
A função MIN retorna o valor mínimo em um conjunto de linhas (Referência da linguagem RedShift SQL Função MIN).
Grammar Syntax
MIN ( [ DISTINCT | ALL ] expression )
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE test_min_function (
col1 INT
);
INSERT INTO test_min_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MIN(COL1), MIN(DISTINCT COL1), MIN(ALL COL1) FROM test_min_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
2 |
2 |
2 |
Código de saída:
CREATE TABLE test_min_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_min_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MIN(COL1), MIN(DISTINCT COL1), MIN(ALL COL1) FROM
test_min_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
2 |
2 |
2 |
EWIs relacionados¶
Não há problemas conhecidos.
NUMERIC¶
Descrição ¶
A função NUMERIC é uma função do sistema que converte um valor de cadeia de caracteres em um valor numérico.
Essa função é totalmente compatível com o Snowflake.
Grammar Syntax
select "numeric"(VARCHAR);
Sample Source Patterns
Input Code:
SELECT "numeric"('2024');
«numeric» |
---|
2024 |
Código de saída:
SELECT
TO_NUMERIC('2024');
TO_NUMERIC |
---|
2024 |
Related EWIs
Não há problemas conhecidos.
ROUND
Description
A função ROUND arredonda os números para o número inteiro ou decimal mais próximo. (Função ROUND de referência da linguagem RedShift SQL).
Grammar Syntax
ROUND(number [ , integer ] )
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
SELECT 28.05 AS score, ROUND(28.05) AS round_score;
SELECT 15.53969483712 AS comission, ROUND(15.53969483712, 2) AS round_comission;
score |
round_score |
---|---|
28,05 |
28 |
comission |
round_comission |
---|---|
15.53969483712 |
15,54 |
Código de saída:
SELECT 28.05 AS score, ROUND(28.05) AS round_score;
SELECT 15.53969483712 AS comission, ROUND(15.53969483712, 2) AS round_comission;
score |
round_score |
---|---|
28,05 |
28 |
comission |
round_comission |
---|---|
15.53969483712 |
15,54 |
EWIs relacionados¶
Não há problemas conhecidos.
SUM¶
Descrição ¶
A função SUM retorna a soma dos valores da coluna ou da expressão de entrada. (RedShift SQL Função SUM de referência da linguagem)
Sintaxe da gramática ¶
SUM ( [ DISTINCT | ALL ] expression )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
CREATE TABLE test_sum_function (
col1 INT
);
INSERT INTO test_sum_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT SUM(COL1), SUM(DISTINCT COL1), SUM(ALL COL1) FROM test_sum_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
224 |
222 |
224 |
Código de saída:
CREATE TABLE test_sum_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_sum_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT SUM(COL1), SUM(DISTINCT COL1), SUM(ALL COL1) FROM
test_sum_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
224 |
222 |
224 |
Related EWIs
Não há problemas conhecidos.
TRUNC
Description
A função TRUNC trunca os números até o número inteiro ou decimal anterior.
Para obter mais informações, consulte a Função TRUNC.
Grammar Syntax
TRUNC(number [ , integer ])
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE test_trunc_function (
col1 INT,
col2 FLOAT
);
INSERT INTO test_trunc_function
VALUES ('200','111.13'),
('20','111.133444'),
('2','111.1350');
SELECT TRUNC(col1, -1), TRUNC(col2, -1) FROM test_trunc_function;
TRUNC(COL1, -1) |
TRUNC(COL2, -1) |
---|---|
200 |
110 |
20 |
110 |
0 |
110 |
Código de saída:
CREATE TABLE test_trunc_function (
col1 INT,
col2 FLOAT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/30/2024" }}';
INSERT INTO test_trunc_function
VALUES ('200','111.13'),
('20','111.133444'),
('2','111.1350');
SELECT TRUNC(col1, -1), TRUNC(col2, -1) FROM test_trunc_function;
TRUNC(COL1, -1) |
TRUNC(COL2, -1) |
---|---|
200 |
110 |
20 |
110 |
0 |
110 |
EWIs relacionados¶
Não há problemas conhecidos.
Funções de formatação de tipos de dados¶
TO_DATE¶
Descrição¶
TO_DATE converte uma data representada por uma cadeia de caracteres em um tipo de dados DATE. (Função TO_DATE de referência da linguagem Redshift SQL)
Essa função é totalmente compatível com o Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Grammar Syntax
TO_DATE(string, format, [is_strict])
Sample Source Patterns
Input Code:
SELECT TO_DATE('02 Oct 2001', 'DD Mon YYYY');
SELECT TO_DATE('20010631', 'YYYYMMDD', FALSE);
SELECT TO_DATE('20010631', 'YYYYMMDD', TRUE);
SELECT TO_DATE('1,993 12 23', 'Y,YYY MM DD');
SELECT TO_DATE(d, 'YYYY/MM/DD'),
TO_DATE(d, f)
FROM (SELECT '2001-01-01'::date as d, 'DD/MM/YYYY' as f);
to_date |
to_date |
to_date |
---|---|---|
2001-10-02 |
2001-07-01 |
[22008] ERROR: date/time field date value out of range: 2001-6-31 |
Output Code:
SELECT TO_DATE('02 Oct 2001', 'DD Mon YYYY');
SELECT
TRY_TO_DATE(/*** SSC-FDM-RS0004 - INVALID DATES WILL CAUSE ERRORS IN SNOWFLAKE ***/ '20010631', 'YYYYMMDD');
SELECT TO_DATE('20010631', 'YYYYMMDD');
SELECT TO_DATE('1,993 12 23', 'Y,YYY MM DD') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - Y,YYY MM DD FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!;
SELECT TO_DATE(d, 'YYYY/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_DATE(d, f)
FROM (SELECT '2001-01-01'::date as d, 'DD/MM/YYYY' as f);
to_date |
to_date |
to_date |
---|---|---|
2001-10-02 |
NULL |
Não é possível analisar “20010631” como data com o formato “YYYYMMDD” |
Known Issues
A consulta
SELECT TO_DATE('20010631', 'YYYYMMDD')
falha no Snowflake porque junho tem apenas 30 dias, eTO_DATE
do Snowflake não ajusta automaticamente as datas inválidas, ao contrário doTO_DATE
do Redshift comis_strict
definido como false, o que o converteria para 1º de julho. Para evitar erros com cadeias de datas inválidas, você pode usarTRY_TO_DATE
, que retornaNULL
se a conversão falhar. Isso permite uma execução mais suave da consulta e uma identificação mais fácil de datas inválidas.
Related EWIs
SSC-FDM-RS0004: Datas inválidas causarão erros no Snowflake.
SSC-EWI-PG0005: O formato de data ou hora não é compatível com o Snowflake.
SSC-FDM-0032: O parâmetro não é um valor literal, a transformação não pôde ser totalmente aplicada
TO_CHAR
Description
TO_CHAR converte um carimbo de data/hora ou uma expressão numérica em um formato de dados de cadeia de caracteres. (Função TO_CHAR de referência da linguagem Redshift SQL)
Aviso
Essa função é parcialmente suportada no Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Sintaxe da gramática¶
TO_CHAR(timestamp_expression | numeric_expression , 'format')
Amostra de padrões da origem¶
Código de entrada:¶
SELECT TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYYY'),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYY'),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'TH'),
"to_char"(timestamp '2009-12-31 23:15:59', 'MON-DY-DD-YYYY HH12:MIPM'),
TO_CHAR(125.8, '999.99'),
"to_char"(125.8, '999.99');
TO_CHAR |
TO_CHAR |
TO_CHAR |
TO_CHAR |
TO_CHAR |
---|---|---|---|---|
2009 |
009 |
DEC-THU-31-2009 11:15PM |
125,80 |
125,80 |
Código de saída:¶
SELECT
TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYYY'),
PUBLIC.YEAR_PART_UDF(timestamp '2009-12-31 23:15:59', 3),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'TH') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - TH FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
PUBLIC.MONTH_SHORT_UDF(timestamp '2009-12-31 23:15:59', 'uppercase') || '-' || PUBLIC.DAYNAME_SHORT_UDF(timestamp '2009-12-31 23:15:59', 'uppercase') || TO_CHAR(timestamp '2009-12-31 23:15:59', '-DD-YYYY HH12:MI') || PUBLIC.MERIDIAN_INDICATORS_UDF(timestamp '2009-12-31 23:15:59', 'uppercase'),
TO_CHAR(125.8, '999.99'),
TO_CHAR(125.8, '999.99');
TO_CHAR |
TO_CHAR |
---|---|
2009 |
Dec-Thu-31-2009 11:15PM |
Problemas conhecidos ¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-EWI-PG0005: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.
Para valores de data e hora¶
Descrição¶
As cadeias de formato a seguir se aplicam a funções como TO_CHAR. Essas cadeias de caracteres podem conter separadores de data e hora (como “-
”, “/
ou “:
”) e os seguintes «dateparts» e «timeparts». (Página de referência das cadeias de caracteres de formato Datetime do Redshift)
Sintaxe da gramática¶
TO_CHAR (timestamp_expression, 'format')
A tabela a seguir especifica o mapeamento de cada elemento de formato para o Snowflake:
Redshift |
Snowflake |
Notas |
---|---|---|
|
|
|
|
|
|
|
|
|
|
- |
Com suporte direto |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Para que esse UDF funcione corretamente, o parâmetro de sessão do Snowflake |
|
|
|
|
|
|
|
- |
Com suporte direto |
|
|
|
|
- |
Com suporte direto |
|
- |
Com suporte direto |
|
- |
Com suporte direto |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
De acordo com a documentação do redshift, todos os carimbos de data/hora com fuso horário são armazenados em UTC, o que faz com que esse elemento de formato retorne um resultado fixo |
|
|
De acordo com a documentação do redshift, todos os carimbos de data/hora com fuso horário são armazenados em UTC, o que faz com que esse elemento de formato retorne um resultado fixo |
|
|
|
|
Esse é um modificador de padrão de modelo PostgreSQL para «modo de feitiço», mas não faz nada no Redshift, portanto, é removido da saída. |
|
|
Esse é outro modificador de padrão de modelo para «formato fixo»; no entanto, ele não tem uso na função TO_CHAR, portanto, foi removido. |
Amostra de padrões da origem¶
Transformação direta de elementos de formato (sem funções/UDFs)¶
O resultado é preservado como uma única função TO_CHAR
Redshift¶
SELECT TO_CHAR('2013-10-03 13:50:15.456871'::TIMESTAMP, 'DD/MM/YY HH:MI:SS.MS') AS col1;
+----------------------+
|col1 |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+
Snowflake¶
SELECT TO_CHAR('2013-10-03 13:50:15.456871'::TIMESTAMP, 'DD/MM/YY HH12:MI:SS.FF3') AS col1;
+----------------------+
|col1 |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+
Transformação de formato usando funções/UDFs¶
O resultado é uma concatenação de várias funções internas TO_CHAR, UDFs e Snowflake que geram a representação de cadeia de caracteres equivalente do valor datetime
Redshift¶
SELECT TO_CHAR(DATE '2025-07-05', '"Today is " Month DAY DD, "it belongs to the week " IW') AS result;
+-------------------------------------------------------------+
|result |
+-------------------------------------------------------------+
|Today is July SATURDAY 05, it belongs to the week 27 |
+-------------------------------------------------------------+
Snowflake¶
SELECT
'Today is ' ||
TO_CHAR(DATE '2025-07-05', ' ') ||
PUBLIC.FULL_MONTH_NAME_UDF(DATE '2025-07-05', 'firstOnly') ||
' ' ||
PUBLIC.DAYNAME_LONG_UDF(DATE '2025-07-05', 'uppercase') ||
TO_CHAR(DATE '2025-07-05', ' DD, ') ||
'it belongs to the week ' ||
TO_CHAR(DATE '2025-07-05', ' ') ||
WEEKISO(DATE '2025-07-05') AS result;
+-------------------------------------------------------------+
|result |
+-------------------------------------------------------------+
|Today is July SATURDAY 05, it belongs to the week 27 |
+-------------------------------------------------------------+
Texto citado¶
Os elementos de formato no texto entre aspas duplas são adicionados à saída diretamente sem interpretá-los; as aspas duplas com escape são transformadas em seu equivalente com escape no Snowflake.
Redshift¶
SELECT
TO_CHAR(DATE '2025-01-16', 'MM "TESTING DD" DD') AS result1,
TO_CHAR(DATE '2025-01-16', 'MM TESTING \\"DD\\" DD') AS result2,
TO_CHAR(DATE '2025-01-16', 'MM "TESTING \\"DD\\"" DD') AS result3;
+-----------------+-------------------+-------------------+
|result1 |result2 |result3 |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+
Snowflake¶
SELECT
TO_CHAR(DATE '2025-01-16', 'MM ') || 'TESTING DD' || TO_CHAR(DATE '2025-01-16', ' DD') AS result1,
TO_CHAR(DATE '2025-01-16', 'MM TEST') || PUBLIC.ISO_YEAR_PART_UDF(DATE '2025-01-16', 1) || TO_CHAR(DATE '2025-01-16', 'NG ""DD"" DD') AS result2,
TO_CHAR(DATE '2025-01-16', 'MM ') || 'TESTING "DD"' || TO_CHAR(DATE '2025-01-16', ' DD') AS result3;
+-----------------+-------------------+-------------------+
|result1 |result2 |result3 |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+
Problemas conhecidos¶
Modificadores de padrão de modelo não suportados¶
Os seguintes modificadores de modelo de formato:
FM (modo de preenchimento)
TH e th (sufixo de número ordinal em maiúsculas e minúsculas)
TM (modo de conversão)
Não são suportados, incluí-los em um formato gerará SSC-EWI-PG0005
Código de entrada:
SELECT TO_CHAR(CURRENT_DATE, 'FMMonth'),
TO_CHAR(CURRENT_DATE, 'DDTH'),
TO_CHAR(CURRENT_DATE, 'DDth'),
TO_CHAR(CURRENT_DATE, 'TMMonth');
Código de saída:
SELECT
TO_CHAR(CURRENT_DATE(), 'FM') || PUBLIC.FULL_MONTH_NAME_UDF(CURRENT_DATE(), 'firstOnly') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - FMMonth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'DDTH') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DDTH FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'DDth') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DDth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'TM') || PUBLIC.FULL_MONTH_NAME_UDF(CURRENT_DATE(), 'firstOnly') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - TMMonth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!;
Parâmetro de formato passado pela variável
Quando o parâmetro de formato é passado como uma variável em vez de um literal de cadeia de caracteres, a transformação de elementos de formato não pode ser aplicada; um FDM será adicionado aos usos da função alertando sobre isso.
Código de entrada:
SELECT TO_CHAR(d, 'YYYY/MM/DD'),
TO_CHAR(d, f)
FROM (SELECT TO_DATE('2001-01-01','YYYY-MM-DD') as d, 'DD/MM/YYYY' as f);
Código de saída:
SELECT TO_CHAR(d, 'YYYY/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(d, f)
FROM (SELECT TO_DATE('2001-01-01','YYYY-MM-DD') as d, 'DD/MM/YYYY' as f);
EWIs relacionados¶
SSC-EWI-PG0005: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.
SSC-FDM-0032: O parâmetro não é um valor literal, a transformação não pôde ser totalmente aplicada
Funções JSON¶
JSON_EXTRACT_PATH_TEXT¶
Descrição ¶
A função JSON_EXTRACT_PATH_TEXT retorna o valor do par chave-valor referenciado por uma série de elementos de caminho em uma cadeia de caracteres JSON. (RedShift SQL Função _EXTRACT_PATH_TEXT de referência da linguagem JSON)
Sintaxe da gramática ¶
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' as VALID_JSON,
'notvalidjson' as INVALID_JSON,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand') AS VALID_JSON_FLAG_DEFAULT_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand', false) AS VALID_JSON_FLAG_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand', true) AS VALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, 'house', 'appliances', 'washing machine', 'brand', true) AS INVALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, 'house', 'appliances', 'washing machine', 'brand', false) AS INVALID_JSON_FLAG_FALSE
;
VALID_JSON |
INVALID_JSON |
VALID_JSON_FLAG_DEFAULT_OFF |
VALID_JSON_FLAG_OFF |
VALID_JSON_FLAG_TRUE |
INVALID_JSON_FLAG_TRUE |
---|---|---|---|---|---|
- |
notvalidjson |
Any Brand |
Any Brand |
Any Brand |
NULL |
Código de saída:
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' as VALID_JSON,
'notvalidjson' as INVALID_JSON,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_DEFAULT_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_OFF,
JSON_EXTRACT_PATH_TEXT(TRY_PARSE_JSON(VALID_JSON), ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(TRY_PARSE_JSON(INVALID_JSON), ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS INVALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS INVALID_JSON_FLAG_FALSE
;
VALID_JSON |
INVALID_JSON |
VALID_JSON_FLAG_DEFAULT_OFF |
VALID_JSON_FLAG_OFF |
VALID_JSON_FLAG_TRUE |
INVALID_JSON_FLAG_TRUE |
---|---|---|---|---|---|
- |
notvalidjson |
Any Brand |
Any Brand |
Any Brand |
NULL |
Código de entrada usando variáveis como caminhos:
SELECT
'appliances' level_2,
'brand' level_4,
JSON_EXTRACT_PATH_TEXT(
INFO.VALID_JSON,
'house',
level_2,
'washing machine',
level_4
) result
FROM
(
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' AS VALID_JSON
) INFO;
level_2 |
level_4 |
result |
---|---|---|
appliances |
brand |
Any Brand |
Código de saída:
SELECT
'appliances' level_2,
'brand' level_4,
JSON_EXTRACT_PATH_TEXT(
INFO.VALID_JSON, ARRAY_TO_STRING(['house',
level_2, '"washing machine"',
level_4], '.')) result
FROM
(
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' AS VALID_JSON
) INFO;
level_2 |
level_4 |
result |
---|---|---|
appliances |
brand |
Any Brand |
Known Issues
O Redshift trata caracteres diferentes quando eles são newline, tabulação e carriage em comparação com o Snowflake. O Redshift interpreta os caracteres como os próprios caracteres. O Snowflake o aplica.
A função Snowflake recebe dois parâmetros: o primeiro é o literal JSON, e o segundo é o caminho separado por um ponto para acessar os objetos internos. A transformação substitui a lista de caminhos em uma função que unirá os caminhos separados por pontos, mesmo que seja uma referência de coluna.
Quando o caminho é enviado por meio de uma variável e a variável contém espaços, ela deve ser colocada entre aspas.
Related EWIs
Não foram encontrados problemas.
Funções de hash
FNV_HASH
Description
FNV_HASH Calcula a função hash não criptográfica de 64 bits FNV-1a para todos os tipos de dados básicos.\ (Função FNV_HASH de referência da linguagem Redshift SQL).
Nota
No Snowflake, não há função equivalente que forneça o algoritmo FNV, mas a HASH fornece a mesma funcionalidade não criptográfica.
Sintaxe da gramática¶
FNV_HASH(value [, seed])
Amostra de padrões da origem¶
Código de entrada:¶
SELECT FNV_HASH('John Doe') as FNV_HASH,
FNV_HASH('John Doe', 3) as FNV_HASH_SEED;
FNV_HASH |
FNV_HASH_SEED |
---|---|
-1568545727084176168 |
-5484851035903916490 |
Código de saída:¶
SELECT
HASH('John Doe') as FNV_HASH,
HASH('John Doe') as FNV_HASH_SEED;
FNV_HASH |
FNV_HASH_SEED |
---|---|
3199932455444588441 |
3199932455444588441 |
Nota
Na função FNV_HASH do Redshift, o parâmetro seed é opcional, mas não é usado na função Hash do Snowflake, pois o parâmetro seed é usado somente no algoritmo FNV.
Problemas conhecidos ¶
Não há problemas conhecidos.
EWIs relacionados¶
Não há problemas conhecidos.
Funções condicionais¶
COALESCE¶
Descrição ¶
Retorna o valor da primeira expressão que não é nula em uma série de expressões. Quando um valor não nulo é encontrado, as expressões restantes da lista não são avaliadas.
Para obter mais informações, consulte a Função COALESCE.
Sintaxe da gramática ¶
COALESCE( expression, expression, ... )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15));
INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
VALUES(1, 'Company_ABC', NULL, '555-01111'),
(2, 'Company_DEF', '555-01222', NULL),
(3, 'Company_HIJ', '555-01333', '555-01444'),
(4, 'Company_KLM', NULL, NULL);
SELECT COALESCE(phone_region_1, phone_region_2) IF_REGION_1_NULL,
COALESCE(phone_region_2, phone_region_1) IF_REGION_2_NULL
FROM suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
---|---|
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
nulo |
nulo |
Código de saída:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO suppliers (supplier_id, supplier_name, phone_region_1, phone_region_2)
VALUES(1, 'Company_ABC', NULL, '555-01111'),
(2, 'Company_DEF', '555-01222', NULL),
(3, 'Company_HIJ', '555-01333', '555-01444'),
(4, 'Company_KLM', NULL, NULL);
SELECT COALESCE(phone_region_1, phone_region_2) IF_REGION_1_NULL,
COALESCE(phone_region_2, phone_region_1) IF_REGION_2_NULL
FROM
suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
---|---|
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
nulo |
nulo |
Related EWIs
Não há problemas conhecidos.
GREATEST e LEAST
Description
Retorna o maior ou o menor valor de uma lista de qualquer número de expressões. (Função GREATEST e LEAST de referência da linguagem Redshift SQL)
Grammar Syntax
GREATEST (value [, ...])
LEAST (value [, ...])
Essa função é totalmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
SELECT GREATEST(10, 20, NULL, 40, 30) AS greatest, LEAST(10, 20, NULL, 40, 30) AS least, GREATEST(NULL, NULL, NULL) AS nulls;
SELECT LEAST('GERMANY', 'USA') AS LEAST, GREATEST('GERMANY', 'USA') AS GREATEST;
greatest |
least |
nulls |
---|---|---|
40 |
10 |
25 |
least |
greatest |
---|---|
GERMANY |
USA |
Código de saída:
SELECT
GREATEST_IGNORE_NULLS(10, 20, NULL, 40, 30) AS greatest,
LEAST_IGNORE_NULLS(10, 20, NULL, 40, 30) AS least,
GREATEST_IGNORE_NULLS(NULL, NULL, NULL) AS nulls;
SELECT
LEAST_IGNORE_NULLS(RTRIM('GERMANY'), RTRIM('USA')) AS LEAST,
GREATEST_IGNORE_NULLS(RTRIM('GERMANY'), RTRIM('USA')) AS GREATEST;
greatest |
least |
nulls |
---|---|---|
40 |
10 |
NULL |
least |
greatest |
---|---|
GERMANY |
USA |
Problemas conhecidos¶
Não há problemas conhecidos
EWIs relacionados¶
NULLIF¶
Descrição ¶
A expressão NULLIF compara dois argumentos e retorna null se os argumentos forem iguais. Se eles não forem iguais, o primeiro argumento será retornado. No Redshift, NULLIF ignora os espaços em branco à direita ao comparar valores de cadeia de caracteres em determinados cenários. Como resultado, o comportamento pode ser diferente entre o Redshift e o Snowflake. Por esse motivo, na transformação RTRIM será adicionado para obter a equivalência entre o Redshift e o Snowflake (Função NULLIF de referência da linguagem Redshift SQL)
Sintaxe da gramática ¶
NULLIF ( expression1, expression2 )
Essa função é totalmente suportada pelo Snowflake.
Sample Source Patterns
Input Code:
SELECT NULLIF('first', 'second') AS different, NULLIF('first', 'first') AS same;
different |
same |
---|---|
first |
NULL |
Código de saída:
SELECT NULLIF(RTRIM('first'), RTRIM('second')) AS different, NULLIF(RTRIM('first'), RTRIM('first')) AS same;
different |
same |
---|---|
first |
NULL |
Known Issues
Não há problemas conhecidos.
Related EWIs
Não há EWIs conhecidos.
NVL
Description
Retorna o valor da primeira expressão que não é nula em uma série de expressões. Quando um valor não nulo é encontrado, as expressões restantes na lista não são avaliadas. (Referência da linguagem Redshift SQL Função NVL)
No RedShift, NVL pode conter 2 ou mais argumentos, enquanto no Snowflake a função NVL aceita apenas 2 argumentos. Para emular o mesmo comportamento, NVL com 3 ou mais argumentos é transformado na função COALESCE.
Essa função é totalmente suportada pelo Snowflake.
Sintaxe da gramática ¶
NVL( expression, expression, ... )
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15),
phone_region_3 VARCHAR(15));
INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2, phone_region_3)
VALUES(1, 'Company_ABC', NULL, '555-01111', NULL),
(2, 'Company_DEF', '555-01222', NULL, NULL),
(3, 'Company_HIJ', '555-01333', '555-01444', NULL),
(4, 'Company_KLM', NULL, NULL, NULL);
SELECT NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL,
NVL(phone_region_2, phone_region_1, phone_region_3) THREE_ARG_NVL
FROM suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
IF_REGION_3_NULL |
---|---|---|
555-01111 |
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
555-01444 |
nulo |
nulo |
nulo |
Código de saída:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15),
phone_region_3 VARCHAR(15))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/26/2024", "domain": "test" }}';
INSERT INTO suppliers (supplier_id, supplier_name, phone_region_1, phone_region_2, phone_region_3)
VALUES(1, 'Company_ABC', NULL, '555-01111', NULL),
(2, 'Company_DEF', '555-01222', NULL, NULL),
(3, 'Company_HIJ', '555-01333', '555-01444', NULL),
(4, 'Company_KLM', NULL, NULL, NULL);
SELECT NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL,
COALESCE(phone_region_2, phone_region_1, phone_region_3) THREE_ARG_NVL
FROM
suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
|
---|---|---|
555-01111 |
555-01111 |
|
555-01222 |
555-01222 |
|
555-01333 |
555-01444 |
|
nulo |
nulo |
Problemas conhecidos¶
Não há problemas conhecidos.
EWIs relacionados¶
Não há problemas conhecidos.
Funções de data e hora¶
CONVERT_TIMEZONE¶
Descrição¶
A função CONVERT_TIMEZONE
no Amazon Redshift converte um carimbo de data/hora de um fuso horário para outro, onde você especifica o fuso horário original, o fuso horário de destino e o carimbo de data/hora a ser convertido. Tornando-o útil para gerenciar o tempo com precisão em diferentes regiões
Sintaxe da gramática¶
CONVERT_TIMEZONE(source_timezone, target_timezone, timestamp)
Amostra de padrões da origem¶
Código de entrada:¶
SELECT
GETDATE(),
CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
getdate |
londres_time |
tokyo_time |
---|---|---|
2024-10-02 16:14:55.000000 |
2024-10-02 17:14:55.000000 |
2024-10-03 01:14:55.000000 |
Código de saída:¶
SELECT
GETDATE(),
CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
getdate |
londres_time |
tokyo_time |
---|---|---|
2024-10-02 09:18:43.848 |
2024-10-02 10:17:35.351 |
2024-10-02 18:17:35.351 |
EWIs relacionados¶
Não há problemas conhecidos.
CURRENT_DATE¶
Descrição¶
CURRENT_DATE retorna uma data no fuso horário da sessão atual (UTC por padrão) no formato padrão: YYYY-MM-DD. (Função CURRENT_DATE de referência da linguagem RedShift SQL)
Sintaxe da gramática¶
CURRENT_DATE
Amostra de padrões da origem¶
Código de entrada:¶
SELECT CURRENT_DATE;
DATE |
---|
2024-09-22 |
Código de saída:¶
SELECT
CURRENT_DATE();
DATE_T |
---|
2024-09-22 |
Recomendações¶
Não há recomendações.
EWIs relacionados¶
Não há problemas conhecidos.
DATE¶
Descrição¶
Essa função converte uma expressão de entrada em uma data.
Essa função é totalmente compatível com o Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Grammar Syntax
DATE(<expr>)
Sample Source Patterns
Input Code:
SELECT DATE('2024-02-02 04:05:06.789');
SELECT "DATE"("GETDATE"());
SELECT "date"('2024-02-02 04:05:06.789');
DATE(“2024-02-02 04:05:06.789”) |
---|
2024-02-02 |
«DATE»(«GETDATE»()) |
---|
2024-11-20 |
«date»(“2024-02-02 04:05:06.789”) |
---|
2024-02-02 |
Output Code:
SELECT DATE('2024-02-02 04:05:06.789');
SELECT DATE(GETDATE());
SELECT DATE('2024-02-02 04:05:06.789');
DATE(“2024-02-02 04:05:06.789”) |
---|
2024-02-02 |
«DATE»(«GETDATE»()) |
---|
2024-11-20 |
«DATE»(“2024-02-02 04:05:06.789”) |
---|
2024-02-02 |
Known Issues
Não foram encontrados problemas.
Related EWIs
Não há problemas conhecidos.
DATE_ADD
Description
A função DATE_ADD
no Amazon Redshift adiciona um intervalo de tempo especificado a uma data ou carimbo de data/hora. Em que datetimepart
é o tipo de intervalo (como 'day'
ou 'month'
), interval
é o número de unidades a serem adicionadas (positivas ou negativas) e timestamp
é a data original.
DATE_ADD
é convertido para DATEADD
, para obter mais informações sobre essa conversão, clique aqui.
Válidos datepart
no Snowflake para DATE_ADD
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
semana
month, months
quarter, quarters
year, years
Formatos não suportados no Snowflake para DATE_ADD
:
semanas
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATE_ADD( datetimepart, interval, timestamp )
Sample Source Patterns
Input Code:
SELECT DATE_ADD('day', 10, '2024-11-01'), DATE_ADD('month', 3, '2024-11-01');
SELECT "DATE_ADD"('DAYS',18,'2008-02-28');
date_add |
date_add |
---|---|
2024-11-11 00:00:00.000000 |
2025-02-01 00:00:00.000000 |
«date_add» |
---|
2008-03-17 00:00:00.000000 |
Output Code:
SELECT
DATEADD('day', 10, '2024-11-01'),
DATEADD('month', 3, '2024-11-01');
SELECT
DATEADD('DAYS',18,'2008-02-28');
DATEADD |
DATEADD |
---|---|
2024-11-11 00:00:00.000 |
2025-02-01 00:00:00.000 |
DATEADD |
---|
2008-03-17 00:00:00.000 |
Know Issues
Não foram encontrados problemas.
Related EWIs
Não há problemas conhecidos.
DATE_DIFF
Description
DATEDIFF retorna a diferença entre as partes de data de duas expressões de data ou hora.
(Função DATEDIFF de referência da linguagem RedShift SQL)
Válidos datepart
no Snowflake para DATE_DIFF
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
semana
month, months
quarter, quarters
year, years
Formatos não suportados no Snowflake para DATEDIFF
:
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATE_DIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
Essa função é totalmente compatível com o Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
SELECT DATE_DIFF(year,'2009-01-01','2019-12-31') as year,
DATE_DIFF(month,'2009-01-01','2019-12-31') as month,
DATE_DIFF(day,'2009-01-01','2019-12-31') as day,
date_diff('year'::text, '2009-01-01 00:00:00'::timestamp without time zone, '2019-12-31 00:00:00'::timestamp without time zone) AS "year2";
SELECT DATE_DIFF(week,'2009-01-01','2019-12-31') as week,
DATE_DIFF(century,'1009-01-01','2009-12-31') as century,
DATE_DIFF(decade,'1009-01-01','2009-12-31') as decade;
year |
month |
day |
year2 |
---|---|---|---|
10 |
131 |
4016 |
10 |
semana |
century |
decade |
---|---|---|
574 |
10 |
100 |
Código de saída:¶
SELECT
DATEDIFF(year, '2009-01-01', '2019-12-31') as year,
DATEDIFF(month, '2009-01-01', '2019-12-31') as month,
DATEDIFF(day, '2009-01-01', '2019-12-31') as day,
DATEDIFF(year, '2009-01-01 00:00:00':: TIMESTAMP_NTZ, '2019-12-31 00:00:00':: TIMESTAMP_NTZ) AS year2;
SELECT
DATEDIFF(week,'2009-01-01','2019-12-31') as week,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 100 as century,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 10 as decade;
year |
month |
day |
year2 |
---|---|---|---|
10 |
131 |
4016 |
10 |
semana |
century |
decade |
---|---|---|
574 |
10 |
100 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Não há problemas conhecidos.
DATE_PART¶
Descrição ¶
DATE_PART extrai valores de partes de datas de uma expressão. DATE_PART é um sinônimo da função PGDATE_PART.
(Função DATE_PART de referência da linguagem RedShift SQL)
Válidos datepart
no Snowflake para DATE_PART
:
second, seconds
minute, minutes
hour, hours
day, days
semana
dayofweek
dayofyear
month, months
quarter, quarters
year, years
epoch
Formatos inválidos no Snowflake para DATE_PART
:
microsecond, microseconds
millisecond, milliseconds
semanas
decade, decades
century, centuries
millennium, millennia
Sintaxe da gramática ¶
{PGDATE_PART | DATE_PART}(datepart, {date|timestamp})
Aviso
Essa função é parcialmente suportada pelo Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
SELECT DATE_PART(minute, timestamp '2023-01-04 04:05:06.789') AS dateMinute,
PGDATE_PART(dayofweek, timestamp '2022-05-02 04:05:06.789') AS dateDayofweek,
"DATE_PART"('month', date '2022-05-02') AS dateMonth,
pgdate_part('weeks'::text, '2023-02-28'::date::timestamp without time zone) AS wks;
SELECT DATE_PART(weeks, date '2023-02-28') AS wks,
DATE_PART(decade, date '2023-02-28') AS dec,
PGDATE_PART(century, date '2023-02-28') AS cen;
dateMinute |
dateDayofweek |
dateMonth |
wks |
---|---|---|---|
5 |
1 |
5 |
9 |
Código de saída:¶
SELECT
DATE_PART(minute, timestamp '2023-01-04 04:05:06.789') AS dateMinute,
DATE_PART(dayofweek, timestamp '2022-05-02 04:05:06.789') AS dateDayofweek,
DATE_PART('month', date '2022-05-02') AS dateMonth,
DATE_PART(week, '2023-02-28'::date:: TIMESTAMP_NTZ) AS wks;
SELECT
DATE_PART(week, date '2023-02-28') AS wks,
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - decade FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
DATE_PART(decade, date '2023-02-28') AS dec,
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - century FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
DATE_PART(century, date '2023-02-28') AS cen;
dateMinute |
dateDayofweek |
dateMonth |
wks |
---|---|---|---|
5 |
1 |
5 |
9 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-EWI-PGOOO5: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.
DATE_TRUNC¶
Descrição¶
A função DATE_TRUNC trunca uma expressão ou literal de carimbo de data/hora com base na parte da data que você especificar, como hora, dia ou mês.
(Função DATE_TRUNC de referência da linguagem Redshift SQL).
No Snowflake essa função trunca um valor DATE, TIME ou TIMESTAMP com a precisão especificada.
Válidos <datepart> no Snowflake:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
semana
month, months
quarter, quarters
year, years
Formatos inválidos no Snowflake:
Semanas
decade, decades
century, centuries
millennium, millennia
Essa função é totalmente compatível com o Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Grammar Syntax
DATE_TRUNC('datepart', timestamp)
Sample Source Patterns
Partes de data suportadas
Input Code:
SELECT
DATE_TRUNC('second', TIMESTAMP '2024-02-02 04:05:06.789') AS sec,
DATE_TRUNC('hours', TIMESTAMP '2024-02-02 04:05:06.789') AS hrs,
DATE_TRUNC('week', TIMESTAMP '2024-02-02 04:05:06.789') AS wk,
"DATE_TRUNC"('month', TIMESTAMP '2024-02-02 04:05:06.789') AS mth,
"date_trunc"('quarters', TIMESTAMP '2024-02-02 04:05:06.789') AS qtr,
date_trunc('second'::text, '2024-02-02 04:05:06.789'::timestamp without time zone) AS sec2;
SEC | HRS | WK | MTH | QTR | SEC2 |
---|---|---|---|---|---|
2024-02-02 04:05:06.000000 | 2024-02-02 04:00:00.000000 | 2024-01-29 00:00:00.000000 | 2024-02-01 00:00:00.000000 | 2024-01-01 00:00:00.000000 | 2024-02-02 04:05:06.000000 |
Output Code:
SELECT
DATE_TRUNC('second', TIMESTAMP '2024-02-02 04:05:06.789') AS sec,
DATE_TRUNC('hours', TIMESTAMP '2024-02-02 04:05:06.789') AS hrs,
DATE_TRUNC('week', TIMESTAMP '2024-02-02 04:05:06.789') AS wk,
DATE_TRUNC('month', TIMESTAMP '2024-02-02 04:05:06.789') AS mth,
DATE_TRUNC('quarters', TIMESTAMP '2024-02-02 04:05:06.789') AS qtr,
date_trunc('second','2024-02-02 04:05:06.789':: TIMESTAMP_NTZ) AS sec2;
SEC | HRS | WK | MTH | QTR | SEC2 |
---|---|---|---|---|---|
2024-02-02 04:05:06.000 | 2024-02-02 04:00:00.000 | 2024-01-29 00:00:00.000 | 2024-02-01 00:00:00.000 | 2024-01-01 00:00:00.000 | 2024-02-02 04:05:06.000000 |
Partes de data inválidas
Essa transformação é realizada para emular o comportamento do Redshift para as seguintes partes de data
decade, decades
century, centuries
millennium, millennia
Input Code:
SELECT
DATE_TRUNC('weeks', TIMESTAMP '1990-02-02 04:05:06.789') AS wks,
DATE_TRUNC('decade', TIMESTAMP '1990-02-02 04:05:06.789') AS dec,
DATE_TRUNC('century', TIMESTAMP '1990-02-02 04:05:06.789') AS c,
DATE_TRUNC('millennium', TIMESTAMP '1990-02-02 04:05:06.789') AS m;
WKS |
DEC |
C |
M |
---|---|---|---|
1990-01-29 00:00:00.000000 |
1990-01-01 00:00:00.000000 |
1901-01-01 00:00:00.000000 |
1001-01-01 00:00:00.000000 |
Output Code:
SELECT
DATE_TRUNC(week, TIMESTAMP '1990-02-02 04:05:06.789') AS wks,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789')) % 10, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS dec,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789') - 1) % 100, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS c,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789') - 1) % 1000, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS m;
WKS |
DEC |
C |
M |
---|---|---|---|
1990-01-29 00:00:00.000 |
1990-01-01 00:00:00.000 |
1901-01-01 00:00:00.000 |
1001-01-01 00:00:00.000 |
Para obter mais informações, consulte a seguinte documentação no Snowflake:
Known Issues
No Amazon Redshift, a precisão padrão para carimbos de data/hora é de 6 dígitos (microssegundos), enquanto no Snowflake, a precisão padrão é de 9 dígitos (nanossegundos). Devido a essas diferenças de precisão, é importante considerar suas necessidades específicas ao trabalhar com carimbos de data/hora. Se você precisar de precisão diferente em uma das plataformas, poderá usar as seguintes opções.
Use ALTERSESSION:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
Observe que, dependendo do tipo de dados usado para armazenar o valor obtido com DATE_TRUNC(), pode haver limitações de precisão que podem resultar em perda de exatidão.
Related EWIs
Não há problemas conhecidos.
DATEADD
Description
Aumenta o valor de DATE, TIME, TIMETZ ou TIMESTAMP em um intervalo especificado.
(Função DATEADD de referência da linguagem RedShift SQL)
A função DATEADD
no Amazon Redshift adiciona um intervalo de tempo especificado a uma data ou carimbo de data/hora. Em que datepart
é o tipo de intervalo (como «dia» ou «mês»), interval
é o número de unidades a serem adicionadas (positivas ou negativas) e date
é a data original.
Válidos datepart
no Snowflake para DATEADD
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
semana
month, months
quarter, quarters
year, years
Formatos não suportados no Snowflake para DATEADD
:
semanas
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATEADD(datepart, interval, date)
Sample Source Patterns
Partes de data suportadas:
Input Code:
SELECT dateadd(year, 1, '2024-02-29') AS D1, dateadd(year, 1, '2023-02-28') AS D2
date_add('year'::text, 1::bigint, '2024-02-29 00:00:00'::timestamp without time zone) AS D3;
D1 |
D2 |
D3 |
---|---|---|
2025-03-01 00:00:00.000000 |
2024-02-28 00:00:00.000000 |
2025-03-01 00:00:00.000000 |
Output Code:
SELECT
DATEADD(day, 1, dateadd(year, 1, '2024-02-29')) AS D1,
DATEADD(year, 1, '2023-02-28') AS D2,
DATEADD('year', 1, '2024-02-29 00:00:00':: TIMESTAMP_NTZ) AS D3;
D1 |
D2 |
D3 |
---|---|---|
2025-03-01 00:00:00.000 |
2024-02-28 00:00:00.000 |
2025-03-01 00:00:00.000000 |
Partes de data não suportadas
Essa transformação é realizada para emular o comportamento do Redshift para as seguintes partes de data
semanas é convertido em sua parte de data suportada equivalente,
week
.
As seguintes partes da data são transformadas em seu equivalente em years
:
decade, decades : converted to year times ten.
century, centuries: converted to year times one hundred.
millennium, millennia: converted to year times one thousand.
Input Code:
SELECT DATEADD(weeks, 1, '2023-02-28') AS wks,
DATEADD(decade, 1, '2023-02-28') AS dec,
DATEADD(century, 1, '2023-02-28') AS cen,
DATEADD(millennium, 1, '2023-02-28') AS mill;
SELECT
DATEADD(millennium, num_interval, '2023-02-28') AS result
FROM (
SELECT 5 AS num_interval
);
wks |
dec |
cen |
mill |
---|---|---|---|
2023-03-07 00:00:00.000000 |
2033-02-28 00:00:00.000000 |
2123-02-28 00:00:00.000000 |
3023-02-28 00:00:00.000000 |
Output Code:
SELECT
DATEADD(week, 1, '2023-02-28') AS wks,
DATEADD(YEAR, 1 * 10, '2023-02-28') AS dec,
DATEADD(YEAR, 1 * 100, '2023-02-28') AS cen,
DATEADD(YEAR, 1 * 1000, '2023-02-28') AS mill;
SELECT
DATEADD(YEAR, num_interval * 1000, '2023-02-28') AS result
FROM (
SELECT 5 AS num_interval
);
wks |
dec |
cen |
mill |
---|---|---|---|
2023-03-07 00:00:00.000000 |
2033-02-28 00:00:00.000000 |
2123-02-28 00:00:00.000000 |
3023-02-28 00:00:00.000000 |
Notas
No Amazon Redshift, quando você usa DATEADD
para adicionar anos a 29 de fevereiro de um ano bissexto, ele rola para 1º de março do ano seguinte porque o ano seguinte não é bissexto. O Redshift lida com a aritmética de datas movendo-se para a data válida mais próxima. Como o dia 29 de fevereiro não existe em anos não bissextos, o padrão é 1º de março. Por exemplo, adicionar um ano a 29 de fevereiro de 2020 resulta em 1º de março de 2021.
Related EWIs
Não há problemas conhecidos.
DATEDIFF
Description
DATEDIFF retorna a diferença entre as partes de data de duas expressões de data ou hora.
(Função DATEDIFF de referência da linguagem RedShift SQL)
Válidos datepart
no Snowflake para DATEDIFF
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
semana
month, months
quarter, quarters
year, years
Formatos não suportados no Snowflake para DATEDIFF
:
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
Essa função é totalmente compatível com o Snowflake.
Amostra de padrões da origem¶
Código de entrada:¶
SELECT DATEDIFF(year,'2009-01-01','2019-12-31') as year,
DATEDIFF(month,'2009-01-01','2019-12-31') as month,
DATEDIFF(day,'2009-01-01','2019-12-31') as day;
SELECT DATEDIFF(week,'2009-01-01','2019-12-31') as week,
DATEDIFF(century,'1009-01-01','2009-12-31') as century,
DATEDIFF(decade,'1009-01-01','2009-12-31') as decade;
year |
month |
day |
---|---|---|
10 |
131 |
4016 |
semana |
century |
decade |
---|---|---|
574 |
10 |
100 |
Código de saída:¶
SELECT DATEDIFF(year,'2009-01-01','2019-12-31') as year,
DATEDIFF(month,'2009-01-01','2019-12-31') as month,
DATEDIFF(day,'2009-01-01','2019-12-31') as day;
SELECT DATEDIFF(week,'2009-01-01','2019-12-31') as week,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 100 as century,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 10 as decade;
year |
month |
day |
---|---|---|
10 |
131 |
4016 |
semana |
century |
decade |
---|---|---|
574 |
10 |
100 |
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Não há problemas conhecidos.
GETDATE¶
Descrição¶
GETDATE retorna a data e a hora atuais no fuso horário da sessão atual (UTC por padrão). Retorna a data ou a hora de início da instrução atual, mesmo que esteja em um bloco de transação. (Função GETDATE de referência da linguagem Redshift SQL).
No Snowflake, essa função fornece a data e a hora atuais com precisão de nanossegundos (até 9 dígitos) e é sensível ao fuso horário.
Essa função é totalmente compatível com o Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Grammar Syntax
GETDATE()
Sample Source Patterns
Input Code:
CREATE TABLE table1 (
id INTEGER,
date_t DATE DEFAULT getdate(),
time_t TIME DEFAULT "getdate"(),
timestamp_t TIMESTAMP DEFAULT "GETDATE"(),
timestamptz_t TIMESTAMPTZ DEFAULT getdate()
);
INSERT INTO table1(id) VALUES (1);
SELECT * FROM table1;
ID |
DATE_T |
TIME_T |
TIMESTAMP_T |
TIMESTAMPTZ_T |
---|---|---|---|---|
1 |
2024-11-20 |
17:51:00 |
2024-11-20 17:51:00.000000 |
2024-11-20 17:51:00.000000 +00:00 |
Output Code:
CREATE TABLE table1 (
id INTEGER,
date_t DATE DEFAULT getdate() :: DATE,
time_t TIME DEFAULT GETDATE() :: TIME,
timestamp_t TIMESTAMP DEFAULT GETDATE(),
timestamptz_t TIMESTAMP_TZ DEFAULT getdate()
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO table1 (id) VALUES (1);
SELECT * FROM
table1;
ID |
DATE_T |
TIME_T |
TIMESTAMP_T |
TIMESTAMPTZ_T |
---|---|---|---|---|
1 |
2024-11-20 |
17:51:00 |
2024-11-20 17:51:00.000 |
2024-11-20 17:51:00.000 +0000 |
Known Issues
No Amazon Redshift, a precisão padrão para carimbos de data/hora é de 6 dígitos (microssegundos), enquanto no Snowflake, a precisão padrão é de 9 dígitos (nanossegundos). Devido a essas diferenças de precisão, é importante considerar suas necessidades específicas ao trabalhar com carimbos de data/hora. Se você precisar de precisão diferente em uma das plataformas, poderá usar as seguintes opções.
Use ALTERSESSION:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
Observe que, dependendo do tipo de dados usado para armazenar o valor obtido com GETDATE(), pode haver limitações de precisão que podem resultar em perda de exatidão.
Related EWIs
Não há problemas conhecidos.
TIMESTAMP
Description
A função TIMESTAMP é uma função do sistema que converte um valor de cadeia de caracteres em um carimbo de data/hora.
Essa função é totalmente compatível com o Snowflake.
Sintaxe da gramática ¶
select "timestamp"(VARCHAR);
Amostra de padrões da origem¶
Código de entrada:¶
select "timestamp"('2024-03-01 3:22:33');
«timestamp» |
---|
2024-03-01 03:22:33.000000 |
Código de saída:
select
TO_TIMESTAMP('2024-03-01 3:22:33');
TO_TIMESTAMP |
---|
2024-03-01 03:22:33.000 |
Problemas conhecidos¶
No Amazon Redshift, a precisão padrão para carimbos de data/hora é de 6 dígitos (microssegundos), enquanto no Snowflake, a precisão padrão é de 9 dígitos (nanossegundos). Devido a essas diferenças de precisão, é importante considerar suas necessidades específicas ao trabalhar com carimbos de data/hora. Se você precisar de precisão diferente em uma das plataformas, poderá usar as seguintes opções.
Use ALTERSESSION:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
Observe que, dependendo do tipo de dados usado para armazenar o valor obtido com GETDATE(), pode haver limitações de precisão que podem resultar em perda de exatidão.
EWIs relacionados¶
Não há problemas conhecidos.
TRUNC¶
Descrição ¶
Trunca um TIMESTAMP
e retorna um DATE
.
Para obter mais informações, consulte a Função TRUNC.
Sintaxe da gramática ¶
TRUNC(timestamp)
Nota
Essa função é suportada pelo Snowflake. Entretanto, no Snowflake, ela trunca um valor DATE, TIME ou TIMESTAMP para a precisão especificada.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE test_date_trunc (
mytimestamp TIMESTAMP,
mydate DATE,
mytimestamptz TIMESTAMPTZ
);
INSERT INTO test_date_trunc VALUES (
'2024-05-09 08:50:57.891 -0700',
'2024-05-09',
'2024-05-09 08:50:57.891 -0700');
SELECT TRUNC(mytimestamp) AS date1,
TRUNC(mydate) AS date2,
TRUNC(mytimestamptz::TIMESTAMP) AS date3,
TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP) AS date4,
TRUNC('2024-05-09 08:50:57.891 -0700'::DATE) AS date5,
CAST(TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP) AS TIMESTAMP) AS date6
FROM test_date_trunc;
DATE1 |
DATE2 |
DATE3 |
DATE4 |
DATE5 |
DATE6 |
---|---|---|---|---|---|
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 00:00:00.000 |
Código de saída:
CREATE TABLE test_date_trunc (
mytimestamp TIMESTAMP,
mydate DATE,
mytimestamptz TIMESTAMP_TZ
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/13/2024", "domain": "test" }}';
INSERT INTO test_date_trunc
VALUES (
'2024-05-09 08:50:57.891 -0700',
'2024-05-09',
'2024-05-09 08:50:57.891 -0700');
SELECT
DATE( TRUNC(mytimestamp, 'day')) AS date1,
DATE(
TRUNC(mydate, 'day')) AS date2,
DATE(
TRUNC(mytimestamptz::TIMESTAMP, 'day')) AS date3,
DATE(
TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP, 'day')) AS date4,
DATE(
TRUNC('2024-05-09 08:50:57.891 -0700'::DATE, 'day')) AS date5,
CAST(DATE(TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP, 'day')) AS TIMESTAMP) AS date6
FROM
test_date_trunc;
DATE1 |
DATE2 |
DATE3 |
DATE4 |
DATE5 |
DATE6 |
---|---|---|---|---|---|
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 00:00:00.000 |
EWIs relacionados¶
Não há problemas conhecidos.
Funções de janela¶
AVG¶
Descrição¶
A função de janela AVG retorna a média (média aritmética) dos valores de expressão de entrada.
(Função AVG de referência da linguagem Redshift SQL)
Essa função é totalmente compatível com o Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Grammar Syntax
AVG ( [ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list
frame_clause ]
)
Sample Source Patterns
Setup data
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column SUPER
);
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column VARIANT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/27/2024", "domain": "test" }}';
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
Input Code:
SELECT
my_smallint_column,
AVG(my_integer_column) OVER (PARTITION BY my_smallint_column) AS avg_integer_column,
AVG(my_numeric_column) OVER () AS avg_numeric_column_all,
AVG(my_decimal_column) OVER (PARTITION BY my_smallint_column ORDER BY my_integer_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_avg_decimal_column
FROM
example_table
ORDER BY my_smallint_column
LIMIT 3;
my_smallint_column | avg_integer_column | avg_numeric_column_all | cumulative_avg_decimal_column |
---|---|---|---|
1 | 100 | 345 | 679 |
2 | 200 | 345 | 789 |
3 | 300 | 345 | 890 |
Output Code:
SELECT
my_smallint_column,
AVG(my_integer_column) OVER (PARTITION BY my_smallint_column) AS avg_integer_column,
AVG(my_numeric_column) OVER () AS avg_numeric_column_all,
AVG(my_decimal_column) OVER (PARTITION BY my_smallint_column ORDER BY my_integer_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_avg_decimal_column
FROM
example_table
ORDER BY my_smallint_column
LIMIT 3;
my_smallint_column | avg_integer_column | avg_numeric_column_all | cumulative_avg_decimal_column |
---|---|---|---|
1 | 100 | 345 | 679 |
2 | 200 | 345 | 789 |
3 | 300 | 345 | 890 |
Note
AVG, dependendo do tipo de dados, pode se comportar de forma diferente em termos de arredondamento e formatação, o que pode resultar em precisão diferente ou casas decimais diferentes ao comparar o Redshift com o Snowflake.
Related EWIs
Não há problemas conhecidos.
COUNT
Description
A função de janela COUNT conta as linhas definidas pela expressão.
(Função COUNT de referência da linguagem Redshift SQL)
Essa função é totalmente compatível com o Snowflake.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Sintaxe da gramática¶
COUNT ( * | [ ALL ] expression) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
Amostra de padrões da origem¶
Dados de configuração¶
CREATE TABLE sales_data (
sale_id INT,
product_id INT,
sale_date DATE,
amount DECIMAL(10, 2)
);
INSERT INTO sales_data (sale_id, product_id, sale_date, amount) VALUES
(1, 101, '2024-01-01', 200.00),
(2, 102, '2024-01-02', 150.00),
(3, 101, '2024-01-03', 300.00),
(4, 101, '2024-01-03', 250.00),
(5, 103, '2024-01-04', 450.00),
(6, 102, '2024-01-05', 100.00),
(7, 104, '2024-01-05', 500.00),
(8, 101, '2024-01-06', 350.00);
Código de entrada:¶
SELECT
product_id,
COUNT(ALL amount) OVER (PARTITION BY product_id) AS count_all_amount,
"count"(*) OVER() AS total_sales,
"COUNT"(*) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count
FROM
sales_data
ORDER BY product_id;
PRODUCT_ID | COUNT_ALL_AMOUNT | TOTAL_SALES | CUMULATIVE_COUNT |
---|---|---|---|
101 | 4 | 8 | 1 |
101 | 4 | 8 | 2 |
101 | 4 | 8 | 3 |
101 | 4 | 8 | 4 |
102 | 2 | 8 | 1 |
102 | 2 | 8 | 2 |
103 | 1 | 8 | 1 |
104 | 1 | 8 | 1 |
Código de saída:¶
SELECT
product_id,
COUNT(ALL amount) OVER (PARTITION BY product_id) AS count_all_amount,
COUNT(*) OVER() AS total_sales,
COUNT(*) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count
FROM
sales_data
ORDER BY product_id;
PRODUCT_ID | COUNT_ALL_AMOUNT | TOTAL_SALES | CUMULATIVE_COUNT |
---|---|---|---|
101 | 4 | 8 | 1 |
101 | 4 | 8 | 2 |
101 | 4 | 8 | 3 |
101 | 4 | 8 | 4 |
102 | 2 | 8 | 1 |
102 | 2 | 8 | 2 |
103 | 1 | 8 | 1 |
104 | 1 | 8 | 1 |
Problemas conhecidos ¶
Não foram encontrados problemas.
EWIs relacionados¶
Não há problemas conhecidos.
DENSE_RANK¶
Descrição ¶
A função de janela DENSE_RANK determina a classificação de um valor em um grupo de valores, com base na expressão ORDER BY na cláusula OVER. A função DENSE_RANK difere da RANK em um aspecto: se duas ou mais linhas empatarem, não haverá lacuna na sequência de valores classificados.
Para obter mais informações, consulte a Função DENSE_RANK.
Sintaxe da gramática ¶
DENSE_RANK() OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
Nota
Essa função é suportada pelo Snowflake. No entanto, a cláusula ORDER BY
é obrigatória no Snowflake. Caso não exista, um ORDER BY 1
será adicionado para garantir a equivalência total.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
);
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT DENSE_RANK() OVER (ORDER BY bushels DESC) AS rank1,
DENSE_RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
DENSE_RANK() OVER () AS rank3,
DENSE_RANK() OVER (PARTITION BY state) AS rank4
FROM corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
4 |
2 |
1 |
1 |
Código de saída:
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT DENSE_RANK() OVER (ORDER BY bushels DESC) AS rank1,
DENSE_RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
DENSE_RANK()
OVER (
ORDER BY 1) AS rank3,
DENSE_RANK()
OVER (PARTITION BY state
ORDER BY 1) AS rank4
FROM
corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
4 |
2 |
1 |
1 |
EWIs relacionados¶
Não há problemas conhecidos.
LEAD¶
Descrição¶
A função de janela LEAD retorna os valores de uma linha em um determinado deslocamento abaixo (depois) da linha atual na partição.
(Função LEAD de referência da linguagem Redshift SQL)
Aviso
Essa função é parcialmente suportada no Snowflake. No Redshift, o deslocamento pode ser um número inteiro constante ou uma expressão que é avaliada como um número inteiro. No Snowflake, ele tem a limitação de poder ser apenas uma constante.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Sintaxe da gramática¶
LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
Amostra de padrões da origem¶
Dados de configuração¶
CREATE TABLE sales (
sale_id INT,
customer_id INT,
sale_date DATE,
sale_amount DECIMAL(10, 2)
);
INSERT INTO sales (sale_id, customer_id, sale_date, sale_amount)
VALUES
(1, 301, '2024-01-01', 150.00),
(2, 301, '2024-01-02', NULL),
(3, 301, '2024-01-03', 250.00),
(4, 301, '2024-01-04', 350.00),
(5, 302, '2024-02-01', 100.00),
(6, 302, '2024-02-02', 200.00),
(7, 302, '2024-02-03', NULL),
(8, 302, '2024-02-04', 300.00);
Código de entrada:¶
SELECT
LEAD(sale_amount) OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead,
LEAD(sale_amount, 2) RESPECT NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_respect_null,
LEAD(sale_amount, 1) IGNORE NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_ignore_nulls
FROM sales;
LEAD |
LEAD_RESPECT_NULL |
LEAD_IGNORE_NULLS |
---|---|---|
200,00 |
nulo |
200,00 |
nulo |
300,00 |
300,00 |
300,00 |
nulo |
300,00 |
nulo |
nulo |
nulo |
nulo |
250,00 |
250,00 |
250,00 |
350,00 |
250,00 |
350,00 |
nulo |
350,00 |
nulo |
nulo |
nulo |
Código de saída:¶
SELECT
LEAD(sale_amount) OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead,
LEAD(sale_amount, 2) RESPECT NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_respect_null,
LEAD(sale_amount, 1) IGNORE NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_ignore_nulls
FROM sales;
LEAD |
LEAD_RESPECT_NULL |
LEAD_IGNORE_NULLS |
---|---|---|
200,00 |
nulo |
200,00 |
nulo |
300,00 |
300,00 |
300,00 |
nulo |
300,00 |
nulo |
nulo |
nulo |
nulo |
250,00 |
250,00 |
250,00 |
350,00 |
250,00 |
350,00 |
nulo |
350,00 |
nulo |
nulo |
nulo |
Problemas conhecidos ¶
Não foram encontrados problemas.
EWIs relacionados¶
Não há problemas conhecidos.
RANK¶
Descrição ¶
A função de janela RANK determina a classificação de um valor em um grupo de valores, com base na expressão ORDER BY na cláusula OVER. Se a cláusula opcional PARTITION BY estiver presente, as classificações serão redefinidas para cada grupo de linhas.
Para obter mais informações, consulte a função RANK.
Sintaxe da gramática ¶
RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
Nota
Essa função é suportada pelo Snowflake. No entanto, a cláusula ORDER BY
é obrigatória no Snowflake. Caso não exista, um ORDER BY 1
será adicionado para garantir a equivalência total.
Amostra de padrões da origem¶
Código de entrada:¶
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
);
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT RANK() OVER (ORDER BY bushels DESC) AS rank1,
RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
RANK() OVER () AS rank3,
RANK() OVER (PARTITION BY state) AS rank4
FROM corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
5 |
2 |
1 |
1 |
Código de saída:
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT RANK() OVER (ORDER BY bushels DESC) AS rank1,
RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
RANK()
OVER (
ORDER BY 1) AS rank3,
RANK()
OVER (PARTITION BY state
ORDER BY 1) AS rank4
FROM
corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
5 |
2 |
1 |
1 |
EWIs relacionados¶
Não há problemas conhecidos.
ROW_NUMBER¶
Descrição ¶
A função ROW_NUMBER window atribui um número ordinal da linha atual em um grupo de linhas, contando a partir de 1, com base na expressão ORDER BY na cláusula OVER. (RedShift SQL Função ROW_NUMBER window de referência da linguagem)
Sintaxe da gramática ¶
ROW_NUMBER() OVER(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
Essa função é totalmente compatível com o Snowflake.
A cláusula ORDER BY
é obrigatória no Snowflake. Caso não exista, um ORDER BY 1
será adicionado para garantir a equivalência total.
Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.
Sample Source Patterns
Setup data
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
);
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
Input Code:
SELECT ROW_NUMBER() OVER ( ORDER BY bushels DESC) AS row1,
ROW_NUMBER() OVER ( PARTITION BY state ORDER BY bushels DESC) AS row2,
ROW_NUMBER() OVER () AS row3,
ROW_NUMBER() OVER ( PARTITION BY state) AS row4
FROM corn_production;
ROW1 |
ROW2 |
ROW3 |
ROW4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
4 |
3 |
3 |
3 |
3 |
1 |
4 |
1 |
5 |
2 |
5 |
2 |
Código de saída:
SELECT ROW_NUMBER() OVER ( ORDER BY bushels DESC) AS row1,
ROW_NUMBER() OVER ( PARTITION BY state ORDER BY bushels DESC) AS row2,
ROW_NUMBER()
OVER (
ORDER BY
1) AS row3,
ROW_NUMBER()
OVER ( PARTITION BY state
ORDER BY
1) AS row4
FROM
corn_production;
ROW1 |
ROW2 |
ROW3 |
ROW4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
4 |
3 |
3 |
3 |
3 |
1 |
4 |
1 |
5 |
2 |
5 |
2 |
Known Issues
Não foram encontrados problemas.
Related EWIs
Não há problemas conhecidos.