Snowflake DATEADD: Um guia completo com exemplos práticos
Aprenda a usar a função DATEADD do Snowflake para manipulação de datas com exemplos reais. Domine os cálculos de tempo, lide com casos extremos e otimize o desempenho de suas consultas SQL.
A função Snowflake DATEADD é um método relativamente simples, mas poderoso, de realizar qualquer tipo de aritmética de data, que permite aos profissionais de dados adicionar ou subtrair o intervalo de tempo específico de um valor de data, hora ou carimbo de data/hora.
Saber como usar o site DATEADD permitirá que os analistas de dados e/ou engenheiros realizem análises úteis calculando períodos de tempo de assinatura, criem projeções para qualquer data futura e até mesmo gerem conjuntos de dados de séries temporais para análise posterior .
Neste tutorial, você aprenderá sobre a sintaxe da função, como ela pode ser aplicada na prática e o potencial geral da função DATEADD no seu arsenal de manipulação de datas no Snowflake SQL.
Configuração de um banco de dados de amostra para prática
Antes de nos aprofundarmos nos detalhes do site DATEADD, vamos criar um banco de dados de amostra com dados ricos em datas para tornar nossos exemplos mais práticos e práticos. Trabalhar com dados reais ajudará a reforçar os conceitos à medida que você aprende os recursos da função.
1. Criando uma conta Snowflake (para novos usuários)
Se você for novo no Snowflake, precisará criar uma conta de avaliação gratuita que fornece créditos por 30 dias. Para que você tenha uma introdução abrangente à plataforma, confira este curso de Introdução ao Snowflake, que aborda os conceitos básicos e fundamentais.
2. Configurando sua planilha
No Snowflake, as consultas SQL são executadas em "Planilhas" (semelhantes a notebooks). Para criar uma nova planilha:
Para obter mais detalhes sobre a criação de tabelas, incluindo diferentes tipos de tabelas e práticas recomendadas, consulte Criação de tabelas no Snowflake.
Dica: Você deve excluir todas as consultas existentes da planilha depois que elas forem executadas com êxito.
5. Preenchendo tabelas com dados de amostra
Vamos inserir dados de amostra com uma variedade de valores de data e hora:
Agora você tem um banco de dados de amostra funcional com três tabelas contendo diferentes formatos de data e carimbo de data/hora. Esse conjunto de dados servirá de base para que você explore a funçãoDATEADD durante o restante deste tutorial.
Entendendo o Snowflake DATEADD: Sintaxe e parâmetros
A função DATEADD é essencial para operações aritméticas de data no Snowflake. Ele permite que você adicione ou subtraia intervalos de tempo específicos de valores de data, hora ou carimbo de data/hora. Vamos detalhar como essa função funciona, começando com sua sintaxe e parâmetros.
O Snowflake oferece suporte a várias partes de data que podem ser usadas com DATEADD:
-- Examples of different date partsSELECT
DATEADD(YEAR,1,'2023-02-28')AS add_one_year,
DATEADD(QUARTER,2,'2023-01-31')AS add_two_quarters,
DATEADD(MONTH,3,'2023-01-31')AS add_three_months,
DATEADD(WEEK,2,'2023-03-15')AS add_two_weeks,
DATEADD(DAY,10,'2023-03-21')AS add_ten_days,
DATEADD(HOUR,12,'2023-03-10 08:30:00')AS add_twelve_hours,
DATEADD(MINUTE,45,'2023-03-10 08:30:00')AS add_forty_five_minutes,
DATEADD(SECOND,30,'2023-03-10 08:30:00')AS add_thirty_seconds;Tecnologia
Outras partes de data compatíveis incluem MILLISECOND,MICROSECOND,NANOSECOND e CENTURY.
Observe que, em anos bissextos e para datas de fim de mês, o Snowflake faz os ajustes apropriados. Por exemplo, adicionar um ano a 28 de fevereiro de 2023 resulta em 29 de fevereiro de 2024 (ano bissexto).
Usando valores negativos para subtração
A funçãoDATEADD também pode subtrair intervalos de tempo usando valores negativos:
-- Subtracting time intervals with negative valuesSELECT
DATEADD(MONTH,-3,'2023-03-15')AS three_months_ago,
DATEADD(DAY,-7,CURRENT_DATE())AS one_week_ago,
DATEADD(HOUR,-48,CURRENT_TIMESTAMP())AS two_days_ago_time;Tecnologia
Explicação:
A primeira expressão subtrai 3 meses de 15 de março de 2023
A segunda expressão subtrai 7 dias da data de hoje
A terceira expressão subtrai 48 horas (2 dias) do registro de data e hora atual
O tipo de retorno de DATEADD depende do tipo de expressão de entrada:
Quando aplicado a um DATE, ele retorna umDATE
Quando aplicado a um TIMESTAMP, ele retorna umTIMESTAMP
Quando aplicado a um TIME, ele retorna umTIME
DATEADD preserva o tipo de dados original de sua entrada. É importante entender esse comportamento porque ele afeta a forma como você pode usar o resultado em operações subsequentes.
Por exemplo, se você adicionar horas a um valor DATE, o resultado ainda será um DATE (o que significa que a parte da hora será truncada), enquanto que adicionar horas a um TIMESTAMP manterá os componentes de data e hora.
A compreensão desses parâmetros e comportamentos principais da funçãoDATEADD fornecerá a base para os casos de uso mais avançados que exploraremos nas seções seguintes.
Exemplos práticos de DATEADD e casos de uso
Agora que entendemos a sintaxe e o comportamento do DATEADD, vamos explorar os aplicativos práticos usando nossos dados de amostra. Nesta seção, demonstraremos como oDATEADD pode resolver problemas reais de negócios e aprimorar os recursos de análise de dados.
Cálculo das datas de renovação da assinatura
Um requisito comercial comum é determinar quando as assinaturas serão renovadas com base em seu ciclo de faturamento:
Explicação: Essa consulta calcula a primeira data de renovação de cada assinatura com base em seu ciclo de faturamento. Usamos o siteDATEADD com diferentes partes de data (MONTH ou YEAR ) e valores (1, 3 ou 1), dependendo do ciclo de faturamento.
Saída:
Observe como o Snowflake lida corretamente com a transição de 28 de fevereiro para 28 de fevereiro (ano bissexto).
Previsão de janelas de entrega
Vamos usar o DATEADD para calcular as janelas de entrega estimadas para os pedidos:
-- Calculate delivery windows based on order timestampsSELECT
order_id,
customer_id,
order_timestamp,
delivery_estimate,
DATEADD(HOUR,-12, delivery_estimate)AS delivery_window_start,
delivery_estimate AS delivery_window_end,
DATEDIFF('HOUR', order_timestamp, delivery_estimate)AS estimated_hours_to_delivery
FROM orders
ORDERBY order_id;Tecnologia
Explicação: Essa consulta:
Cria uma janela de entrega de 12 horas, subtraindo 12 horas do tempo de entrega estimado
Mostra o início e o fim da janela de entrega
Calcula o tempo total de entrega estimado em horas
Saída:
Criando uma tabela de dimensão de data
A análise de séries temporais geralmente requer uma tabela de dimensão de data. Vamos criar um usando DATEADD:
-- Generate a date dimension table for analysisWITH date_dimension AS(SELECT
DATEADD(DAY, seq4(),'2023-01-01')AS calendar_date
FROMTABLE(GENERATOR(ROWCOUNT=>365)))SELECT
calendar_date,YEAR(calendar_date)ASyear,MONTH(calendar_date)ASmonth,
MONTHNAME(calendar_date)AS month_name,DAY(calendar_date)ASday,
DAYOFWEEK(calendar_date)AS day_of_week,
DAYNAME(calendar_date)AS day_name,CASEWHEN DAYOFWEEK(calendar_date)IN(0,6)THENTRUEELSEFALSEENDAS is_weekend,
QUARTER(calendar_date)AS quarter
FROM date_dimension
WHERE calendar_date <='2023-03-31'ORDERBY calendar_date
LIMIT10;Tecnologia
Explicação: Essa consulta:
Você usa o siteDATEADD com um gerador de sequência para criar uma série de datas para 2023
Extrai atributos de data úteis para cada data do calendário
Filtra para o 1º trimestre de 2023 e mostra os primeiros 10 dias para fins de brevidade
Saída:
As tabelas de dimensão de data melhoram significativamente o desempenho da análise, pois pré-calculam os atributos de data em vez de computá-los repetidamente nas consultas. Eles padronizam a lógica de datas em uma organização, garantindo definições consistentes de trimestres, fins de semana e outros períodos de tempo.
Essa abordagem reduz os erros e torna as análises complexas baseadas no tempo mais acessíveis aos usuários corporativos. As dimensões de data também permitem a filtragem e o agrupamento eficientes por várias hierarquias de tempo, como ano, trimestre, mês e dia.
A função DATEADD com geração de sequência oferece um método simples para você preencher essas tabelas de dimensões sem a entrada manual de dados.
Essa técnica pode ser ampliada para criar calendários de vários anos ou dimensões de tempo especializadas, como calendários fiscais ou cálculos de dias úteis. As colunas adicionais podem incluir sinalizadores de feriados, números de semanas ou designações personalizadas de períodos comerciais essenciais para a geração de relatórios precisos.
Uma vez criada, essa tabela de dimensão pode se unir a tabelas de fatos para permitir recursos avançados de inteligência de tempo em dashboards e relatórios.
Análise de eventos programados
Vamos usar o siteDATEADD para analisar os próximos eventos de manutenção programada:
-- Find upcoming events and calculate preparation timeSELECT
event_id,
event_name,
event_timestamp,
duration_minutes,
DATEADD(DAY,-3, event_timestamp)AS preparation_start,
DATEADD(MINUTE, duration_minutes, event_timestamp)AS event_end,
DATEDIFF('MINUTE',CURRENT_TIMESTAMP(), event_timestamp)AS minutes_until_event
FROM events
WHERE event_timestamp >CURRENT_TIMESTAMP()ORDERBY event_timestamp;Tecnologia
Explicação: Essa consulta:
Localiza eventos futuros (aqueles que estão no futuro)
Calcula quando a preparação deve começar (3 dias antes do evento)
Calcula quando o evento terminará com base em sua duração
Mostra quantos minutos faltam para o início do evento
Como todos os nossos dados de amostra são de 2023, essa consulta normalmente não mostraria resultados em 2025, mas demonstra conceitualmente como analisar eventos programados.
Cálculo dos períodos de faturamento
Para empresas baseadas em assinaturas, é essencial calcular períodos de faturamento precisos:
-- Generate next 6 billing periods for monthly subscriptionsWITH billing_periods AS(SELECT
subscription_id,
customer_id,
plan_name,
start_date,
seq AS billing_period_number,
DATEADD(MONTH, seq, start_date)AS billing_period_start,
DATEADD(DAY,-1, DATEADD(MONTH, seq +1, start_date))AS billing_period_end
FROM subscriptions
CROSSJOIN(SELECT seq4()AS seq FROMTABLE(GENERATOR(ROWCOUNT=>6)))WHERE billing_cycle ='Monthly')SELECT
subscription_id,
customer_id,
plan_name,
billing_period_number,
billing_period_start,
billing_period_end,
DATEDIFF('DAY', billing_period_start, billing_period_end)+1AS days_in_period
FROM billing_periods
ORDERBY subscription_id, billing_period_number;Tecnologia
Explicação: Essa consulta:
Gera os próximos 6 períodos de cobrança para assinaturas mensais usando um CROSS JOIN com um gerador de sequência (seq4() )
Calcula a data de início adicionando meses com base no número do período usando DATEADD(MONTH, seq, start_date)
Calcula a data final como um dia antes do início do próximo período com DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)) . Isso garante o tratamento adequado de diferentes durações de meses (28/29/30/31 dias).
Conta o número de dias em cada período de faturamento usando DATEDIFF('DAY', billing_period_start, billing_period_end) + 1O +1 é necessário porque DATEDIFF retorna a diferença entre as datas, não incluindo a data final
Filtros para incluir apenas assinaturas mensais com a cláusula WHERE
Pedidos de resultados por subscription_id e período de faturamento para uma apresentação lógica
Saída:
Observe como o siteDATEADD lida corretamente com diferentes durações de meses, garantindo cálculos precisos do período de faturamento.
Esses exemplos demonstram como o site DATEADD pode ser aplicado para resolver problemas comerciais comuns que envolvem a manipulação de datas. Ao combinar oDATEADD com outras funções SQL, você pode criar consultas poderosas para análise baseada em tempo e processamento de dados no Snowflake.
Comparando DATEADD com funções Snowflake relacionadas
Vamos examinar agora como afunção DATEADDse compara a algumas das outras funções do Snowflake.
DATEADD vs DATEDIFF e DATE_TRUNC
Enquanto oDATEADD adiciona ou subtrai um intervalo de tempo específico a uma data, o DATEDIFF calcula a diferença entre duas datas em uma unidade especificada. O DATEDIFF retorna um número inteiro que representa o número de unidades completas entre as datas, o que o torna ideal para calcular durações, como duração de assinaturas ou dias desde a colocação do pedido .
DATE_TRUNCO recurso de arredondamento de data/hora, por outro lado, remove a precisão de um valor de data/hora definindo as partes menores da data como seus valores padrão, arredondando efetivamente para uma unidade especificada.
-- Comparing the three functionsSELECT
DATEADD(MONTH,3,'2023-01-15'::DATE)AS added_three_months,
DATEDIFF(DAY,'2023-01-15'::DATE,'2023-04-15'::DATE)AS days_between,
DATE_TRUNC(MONTH,'2023-01-15'::DATE)AS truncated_to_month;Tecnologia
Saída:
Quando usar cada função (critérios de decisão)
Use o site DATEADD quando você precisar adiantar ou retroceder datas em intervalos de tempo específicos, como no cálculo de datas de renovação futuras, janelas de entrega ou programações de pagamento .
Escolha DATEDIFF ao medir o tempo decorrido entre duas datas, como calcular idade, duração ou métricas baseadas em tempo para relatórios.
DATE_TRUNC é mais adequado quando você precisa agrupar dados por períodos de tempo (diários, mensais, trimestrais), padronizar carimbos de data/hora para um nível consistente de precisão ou criar hierarquias baseadas em tempo para análise.
-- Function usage by scenarioSELECT-- Scenario: Calculate next month's billing date
DATEADD(MONTH,1, start_date)AS next_billing_date,-- Scenario: Find how many days the subscription has been active
DATEDIFF(DAY, start_date,CURRENT_DATE())AS subscription_age_days,-- Scenario: Group by month for analysis
DATE_TRUNC(MONTH, start_date)AS billing_month
FROM subscriptions
LIMIT3;Tecnologia
Tratamento de casos extremos e solução de problemas
Se você tiver problemas ao usar a função, aqui estão algumas dicas que podem ajudá-lo a se livrar de problemas.
Ajustes de final de mês e ano bissexto
O Snowflake trata de forma inteligente as datas de fim de mês quando você usa o site DATEADD. Quando você adiciona meses a uma data de fim de mês, o Snowflake retorna o último dia do mês resultante, independentemente do número de dias. Esse comportamento preserva o conceito de "fim de mês" mesmo quando os meses têm durações diferentes.
-- Month-end handling examplesSELECT
DATEADD(MONTH,1,'2023-01-31')AS jan_to_feb,-- January 31 + 1 month = February 28
DATEADD(MONTH,1,'2023-02-28')AS feb_to_mar,-- February 28 + 1 month = March 31
DATEADD(MONTH,1,'2024-01-31')AS jan_to_feb_leap,-- January 31 + 1 month in leap year = February 29
DATEADD(YEAR,1,'2023-02-28')AS normal_to_leap;-- February 28, 2023 + 1 year = February 29, 2024Tecnologia
Considerações sobre o fuso horário e o horário de verão
Ao trabalhar com dados de registro de data e hora que incluem fusos horários (TIMESTAMP_TZ ), o DATEADD considera automaticamente as transições do horário de verão. Isso garante que os cálculos permaneçam precisos em todas as mudanças de horário, mas às vezes pode produzir resultados inesperados ao adicionar intervalos específicos em torno dos limites do horário de verão.
-- Time zone handling with DST transitionSELECT
event_timestamp,
DATEADD(HOUR,24, event_timestamp)AS add_24h,
DATEADD(DAY,1, event_timestamp)AS add_1d
FROM(SELECT CONVERT_TIMEZONE('America/Los_Angeles','2023-03-12 01:30:00')::TIMESTAMP_TZ AS event_timestamp
);-- During spring forward DST transitionTecnologia
Ao trabalhar com carimbos de data/hora em transições de horário de verão, você deve estar ciente de que adicionar 24 horas pode não ser igual a adicionar 1 dia. A abordagem "add_1d" geralmente produz resultados mais intuitivos em aplicativos comerciais.
Erros comuns e suas soluções
Normalmente, os erros de DATEADD decorrem de incompatibilidades de tipos ou entradas inválidas. Aqui estão os problemas e as soluções mais comuns:
-- Common error: Invalid date part-- Error: "Invalid date part 'DATE'"SELECT DATEADD(DATE,1,'2023-01-15');-- Incorrect: 'DATE' is not a valid date partSELECT DATEADD(DAY,1,'2023-01-15');-- Correct: use 'DAY' instead-- Common error: Type mismatch-- Error: "Numeric value 'abc' is not recognized"SELECT DATEADD(DAY,'abc','2023-01-15');-- Incorrect: second parameter must be numericSELECT DATEADD(DAY,10,'2023-01-15');-- Correct: use numeric value-- Common error: Invalid date format-- Error: "Date 'January 15, 2023' is not recognized"SELECT DATEADD(DAY,1,'January 15, 2023');-- Incorrect: unrecognized date formatSELECT DATEADD(DAY,1,'2023-01-15');-- Correct: use YYYY-MM-DD formatTecnologia
Dicas de otimização de desempenho
Para obter o melhor desempenho ao usar o siteDATEADD em operações de larga escala, você deve ter um sistema de gerenciamento de dados que permita a você usar o site em operações de larga escala:
Aplique oDATEADD em estágios de transformação em vez de filtragem, quando possível.
Pré-computar cálculos de datas comuns em tabelas temporárias ou CTEs quando usados várias vezes.
Considere o uso de DATE_TRUNC antes de DATEADD para cálculos baseados em intervalos para melhorar o uso do índice.
Para operações em lote, como a geração de intervalos de datas, use geradores de sequência (como mostrado no exemplo de dimensão de data) em vez de CTEs recursivos.
-- Inefficient pattern (calculating same value repeatedly)SELECT*FROM large_table
WHERE DATEADD(MONTH,1, event_date)<CURRENT_DATE();-- More efficient approach (calculate once)WITH calc_dates AS(SELECT*, DATEADD(MONTH,1, event_date)AS next_month_date
FROM large_table
)SELECT*FROM calc_dates
WHERE next_month_date <CURRENT_DATE();Tecnologia
A compreensão desses casos extremos e das técnicas de otimização ajudará você a escrever uma lógica de manipulação de datas mais robusta no Snowflake, evitando armadilhas comuns e maximizando o desempenho.
Conclusão
A função Snowflake DATEADD é uma ferramenta essencial para a manipulação de datas que permite que os profissionais de dados realizem aritmética de tempo em várias partes da data. Ele lida com datas de fim de mês, anos bissextos, fusos horários e transições de horário de verão com comportamento previsível. Vimos como o DATEADD pode ser aplicado ao gerenciamento de assinaturas, rastreamento de entregas, criação de dimensões de datas e cálculos de faturamento. Quando usado junto com DATEDIFF e DATE_TRUNC, ele se torna um componente essencial para a análise baseada em tempo no Snowflake.
A função Snowflake DATEADD é usada para realizar operações aritméticas de data, adicionando ou subtraindo intervalos de tempo específicos (como dias, meses ou anos) de valores de data, hora ou carimbo de data/hora. É comumente usado para calcular datas futuras, renovações de assinaturas e análise de séries temporais.
Como o DATEADD lida com datas de fim de mês e anos bissextos?⌄
DATEADD trata de forma inteligente as datas de fim de mês, preservando o conceito de "fim de mês". Quando você adiciona meses a uma data de fim de mês, ele retorna o último dia do mês resultante. Para anos bissextos, ele ajusta automaticamente as datas de acordo (por exemplo, adicionar um ano a 28 de fevereiro de 2023 resulta em 29 de fevereiro de 2024).
Quais são as partes de data compatíveis com DATEADD?⌄
DATEADD Você tem suporte para várias peças de data, incluindo YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, and CENTURY. Cada parte da data permite que você adicione ou subtraia essa unidade de tempo específica de um valor de data.
O DATEADD pode ser usado com diferentes tipos de carimbo de data/hora?⌄
Sim, o site DATEADD funciona com todos os tipos de registro de data e hora do Snowflake: TIMESTAMP_NTZ (Sem fuso horário), TIMESTAMP_TZ (Com fuso horário) e TIMESTAMP_LTZ (Fuso horário local). Ele preserva o tipo de carimbo de data/hora e lida automaticamente com as conversões de fuso horário.
Como DATEADD difere de DATEDIFF e DATE_TRUNC?⌄
Enquanto o DATEADD modifica as datas adicionando ou subtraindo intervalos de tempo, o DATEDIFF calcula a diferença entre duas datas em uma unidade especificada e o DATE_TRUNC remove a precisão de um valor de data/hora arredondando para uma unidade especificada. Eles servem a propósitos diferentes, mas complementares, na manipulação de datas.
Saiba como usar os acionadores SQL para automatizar tarefas, manter a integridade dos dados e melhorar o desempenho do banco de dados. Experimente exemplos práticos como os comandos CREATE, ALTER e DROP no MySQL e no Oracle.
Aprenda na prática com Snowflake! Aprenda a consultar, modelar e gerenciar dados nesta introdução interativa para engenheiros de dados, analistas e profissionais de BI.
Aprenda a projetar, consultar e desenvolver no Snowflake — domine o Snowflake SQL para transformação e modelagem e prepare-se para atuar como engenheiro de dados.
A função Snowflake
DATEADDé um método relativamente simples, mas poderoso, de realizar qualquer tipo de aritmética de data, que permite aos profissionais de dados adicionar ou subtrair o intervalo de tempo específico de um valor de data, hora ou carimbo de data/hora.Saber como usar o site
DATEADDpermitirá que os analistas de dados e/ou engenheiros realizem análises úteis calculando períodos de tempo de assinatura, criem projeções para qualquer data futura e até mesmo gerem conjuntos de dados de séries temporais para análise posterior .Neste tutorial, você aprenderá sobre a sintaxe da função, como ela pode ser aplicada na prática e o potencial geral da função
DATEADDno seu arsenal de manipulação de datas no Snowflake SQL.Se você está apenas começando a usar o Snowflake, não deixe de conferir nosso programa de habilidades Snowflake Foundations.
Configuração de um banco de dados de amostra para prática
Antes de nos aprofundarmos nos detalhes do site
DATEADD, vamos criar um banco de dados de amostra com dados ricos em datas para tornar nossos exemplos mais práticos e práticos. Trabalhar com dados reais ajudará a reforçar os conceitos à medida que você aprende os recursos da função.1. Criando uma conta Snowflake (para novos usuários)
Se você for novo no Snowflake, precisará criar uma conta de avaliação gratuita que fornece créditos por 30 dias. Para que você tenha uma introdução abrangente à plataforma, confira este curso de Introdução ao Snowflake, que aborda os conceitos básicos e fundamentais.
2. Configurando sua planilha
No Snowflake, as consultas SQL são executadas em "Planilhas" (semelhantes a notebooks). Para criar uma nova planilha:
Se você é completamente novo na interface do Snowflake, este tutorial do Snowflake para iniciantes fornece um passo a passo útil da plataforma.
3. Escolha de um banco de dados e de um esquema
Para este tutorial, usaremos apenas o banco de dados e o esquema público do Snowflake Learning:
4. Geração de tabelas e dados sintéticos
Criaremos três tabelas com dados relacionados a datas para que você possa demonstrar o "DATEADD" em vários cenários:
Observação: Use "Command + Shift + Enter"/"Ctrl + Shift + Enter" para executar os seguintes comandos de uma só vez em sua planilha:
Para obter mais detalhes sobre a criação de tabelas, incluindo diferentes tipos de tabelas e práticas recomendadas, consulte Criação de tabelas no Snowflake.
Dica: Você deve excluir todas as consultas existentes da planilha depois que elas forem executadas com êxito.
5. Preenchendo tabelas com dados de amostra
Vamos inserir dados de amostra com uma variedade de valores de data e hora:
6. Validação dos dados de amostra
Vamos executar algumas consultas básicas para verificar se nossos dados foram carregados corretamente:
Agora você tem um banco de dados de amostra funcional com três tabelas contendo diferentes formatos de data e carimbo de data/hora. Esse conjunto de dados servirá de base para que você explore a função
DATEADDdurante o restante deste tutorial.Entendendo o Snowflake DATEADD: Sintaxe e parâmetros
A função
DATEADDé essencial para operações aritméticas de data no Snowflake. Ele permite que você adicione ou subtraia intervalos de tempo específicos de valores de data, hora ou carimbo de data/hora. Vamos detalhar como essa função funciona, começando com sua sintaxe e parâmetros.Sintaxe e parâmetros da função
A sintaxe básica da função
DATEADDé a seguinte:Vamos examinar cada parâmetro:
Explicação: Essa consulta adiciona 3 meses a 15 de janeiro de 2023. Os parâmetros funcionam da seguinte forma:
date_part (MONTH): Especifica a unidade de tempo que está sendo adicionada ou subtraídavalue (3): O número de unidades a serem adicionadas (positivo) ou subtraídas (negativo)date_or_timestamp_expression('2023-01-15'): A data inicial a ser modificadaSaída:
Peças de data suportadas
O Snowflake oferece suporte a várias partes de data que podem ser usadas com
DATEADD:Outras partes de data compatíveis incluem
MILLISECOND,MICROSECOND,NANOSECONDeCENTURY.Observe que, em anos bissextos e para datas de fim de mês, o Snowflake faz os ajustes apropriados. Por exemplo, adicionar um ano a 28 de fevereiro de 2023 resulta em 29 de fevereiro de 2024 (ano bissexto).
Usando valores negativos para subtração
A função
DATEADDtambém pode subtrair intervalos de tempo usando valores negativos:Explicação:
Saída:
Comportamento do tipo de retorno
O tipo de retorno de
DATEADDdepende do tipo de expressão de entrada:DATE, ele retorna umDATETIMESTAMP, ele retorna umTIMESTAMPTIME, ele retorna umTIMEDATEADDpreserva o tipo de dados original de sua entrada. É importante entender esse comportamento porque ele afeta a forma como você pode usar o resultado em operações subsequentes.Por exemplo, se você adicionar horas a um valor DATE, o resultado ainda será um DATE (o que significa que a parte da hora será truncada), enquanto que adicionar horas a um
TIMESTAMPmanterá os componentes de data e hora.A compreensão desses parâmetros e comportamentos principais da função
DATEADDfornecerá a base para os casos de uso mais avançados que exploraremos nas seções seguintes.Exemplos práticos de DATEADD e casos de uso
Agora que entendemos a sintaxe e o comportamento do
DATEADD, vamos explorar os aplicativos práticos usando nossos dados de amostra. Nesta seção, demonstraremos como oDATEADDpode resolver problemas reais de negócios e aprimorar os recursos de análise de dados.Cálculo das datas de renovação da assinatura
Um requisito comercial comum é determinar quando as assinaturas serão renovadas com base em seu ciclo de faturamento:
Explicação: Essa consulta calcula a primeira data de renovação de cada assinatura com base em seu ciclo de faturamento. Usamos o site
DATEADDcom diferentes partes de data (MONTHouYEAR) e valores (1, 3 ou 1), dependendo do ciclo de faturamento.Saída:
Observe como o Snowflake lida corretamente com a transição de 28 de fevereiro para 28 de fevereiro (ano bissexto).
Previsão de janelas de entrega
Vamos usar o DATEADD para calcular as janelas de entrega estimadas para os pedidos:
Explicação: Essa consulta:
Saída:
Criando uma tabela de dimensão de data
A análise de séries temporais geralmente requer uma tabela de dimensão de data. Vamos criar um usando DATEADD:
Explicação: Essa consulta:
DATEADDcom um gerador de sequência para criar uma série de datas para 2023Saída:
As tabelas de dimensão de data melhoram significativamente o desempenho da análise, pois pré-calculam os atributos de data em vez de computá-los repetidamente nas consultas. Eles padronizam a lógica de datas em uma organização, garantindo definições consistentes de trimestres, fins de semana e outros períodos de tempo.
Essa abordagem reduz os erros e torna as análises complexas baseadas no tempo mais acessíveis aos usuários corporativos. As dimensões de data também permitem a filtragem e o agrupamento eficientes por várias hierarquias de tempo, como ano, trimestre, mês e dia.
A função
DATEADDcom geração de sequência oferece um método simples para você preencher essas tabelas de dimensões sem a entrada manual de dados.Essa técnica pode ser ampliada para criar calendários de vários anos ou dimensões de tempo especializadas, como calendários fiscais ou cálculos de dias úteis. As colunas adicionais podem incluir sinalizadores de feriados, números de semanas ou designações personalizadas de períodos comerciais essenciais para a geração de relatórios precisos.
Uma vez criada, essa tabela de dimensão pode se unir a tabelas de fatos para permitir recursos avançados de inteligência de tempo em dashboards e relatórios.
Análise de eventos programados
Vamos usar o site
DATEADDpara analisar os próximos eventos de manutenção programada:Explicação: Essa consulta:
Como todos os nossos dados de amostra são de 2023, essa consulta normalmente não mostraria resultados em 2025, mas demonstra conceitualmente como analisar eventos programados.
Cálculo dos períodos de faturamento
Para empresas baseadas em assinaturas, é essencial calcular períodos de faturamento precisos:
Explicação: Essa consulta:
seq4())DATEADD(MONTH, seq, start_date)DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)). Isso garante o tratamento adequado de diferentes durações de meses (28/29/30/31 dias).DATEDIFF('DAY', billing_period_start, billing_period_end) + 1O +1 é necessário porque DATEDIFF retorna a diferença entre as datas, não incluindo a data finalsubscription_ide período de faturamento para uma apresentação lógicaSaída:
Observe como o site
DATEADDlida corretamente com diferentes durações de meses, garantindo cálculos precisos do período de faturamento.Esses exemplos demonstram como o site
DATEADDpode ser aplicado para resolver problemas comerciais comuns que envolvem a manipulação de datas. Ao combinar oDATEADDcom outras funções SQL, você pode criar consultas poderosas para análise baseada em tempo e processamento de dados no Snowflake.Comparando DATEADD com funções Snowflake relacionadas
Vamos examinar agora como afunção
DATEADDse compara a algumas das outras funções do Snowflake.DATEADD vs DATEDIFF e DATE_TRUNC
Enquanto o
DATEADDadiciona ou subtrai um intervalo de tempo específico a uma data, oDATEDIFFcalcula a diferença entre duas datas em uma unidade especificada. ODATEDIFFretorna um número inteiro que representa o número de unidades completas entre as datas, o que o torna ideal para calcular durações, como duração de assinaturas ou dias desde a colocação do pedido .DATE_TRUNCO recurso de arredondamento de data/hora, por outro lado, remove a precisão de um valor de data/hora definindo as partes menores da data como seus valores padrão, arredondando efetivamente para uma unidade especificada.Saída:
Quando usar cada função (critérios de decisão)
Use o site
DATEADDquando você precisar adiantar ou retroceder datas em intervalos de tempo específicos, como no cálculo de datas de renovação futuras, janelas de entrega ou programações de pagamento .Escolha
DATEDIFFao medir o tempo decorrido entre duas datas, como calcular idade, duração ou métricas baseadas em tempo para relatórios.DATE_TRUNCé mais adequado quando você precisa agrupar dados por períodos de tempo (diários, mensais, trimestrais), padronizar carimbos de data/hora para um nível consistente de precisão ou criar hierarquias baseadas em tempo para análise.Tratamento de casos extremos e solução de problemas
Se você tiver problemas ao usar a função, aqui estão algumas dicas que podem ajudá-lo a se livrar de problemas.
Ajustes de final de mês e ano bissexto
O Snowflake trata de forma inteligente as datas de fim de mês quando você usa o site
DATEADD. Quando você adiciona meses a uma data de fim de mês, o Snowflake retorna o último dia do mês resultante, independentemente do número de dias. Esse comportamento preserva o conceito de "fim de mês" mesmo quando os meses têm durações diferentes.Considerações sobre o fuso horário e o horário de verão
Ao trabalhar com dados de registro de data e hora que incluem fusos horários (
TIMESTAMP_TZ), o DATEADD considera automaticamente as transições do horário de verão. Isso garante que os cálculos permaneçam precisos em todas as mudanças de horário, mas às vezes pode produzir resultados inesperados ao adicionar intervalos específicos em torno dos limites do horário de verão.Ao trabalhar com carimbos de data/hora em transições de horário de verão, você deve estar ciente de que adicionar 24 horas pode não ser igual a adicionar 1 dia. A abordagem "add_1d" geralmente produz resultados mais intuitivos em aplicativos comerciais.
Erros comuns e suas soluções
Normalmente, os erros de DATEADD decorrem de incompatibilidades de tipos ou entradas inválidas. Aqui estão os problemas e as soluções mais comuns:
Dicas de otimização de desempenho
Para obter o melhor desempenho ao usar o site
DATEADDem operações de larga escala, você deve ter um sistema de gerenciamento de dados que permita a você usar o site em operações de larga escala:DATEADDem estágios de transformação em vez de filtragem, quando possível.DATEADDpara cálculos baseados em intervalos para melhorar o uso do índice.A compreensão desses casos extremos e das técnicas de otimização ajudará você a escrever uma lógica de manipulação de datas mais robusta no Snowflake, evitando armadilhas comuns e maximizando o desempenho.
Conclusão
A função Snowflake
DATEADDé uma ferramenta essencial para a manipulação de datas que permite que os profissionais de dados realizem aritmética de tempo em várias partes da data. Ele lida com datas de fim de mês, anos bissextos, fusos horários e transições de horário de verão com comportamento previsível. Vimos como oDATEADDpode ser aplicado ao gerenciamento de assinaturas, rastreamento de entregas, criação de dimensões de datas e cálculos de faturamento. Quando usado junto comDATEDIFFeDATE_TRUNC, ele se torna um componente essencial para a análise baseada em tempo no Snowflake.Para obter mais conhecimento sobre o Snowflake, confira a trilha de habilidades Snowflake Foundations ou explore Creating Tables in Snowflake para desenvolver suas habilidades de modelagem de dados. O guia Using Snowflake Time Travel complementa a compreensão que você tem das operações temporais. Você deve começar com o Snowflake Tutorial for Beginners (Tutorial de floco de neve para iniciantes).