1
resposta

Google BigQuery: Dominando String e Data - Aula 7 - Generate_Date_Array

Boa noite, no desafio que o professor mostrou, ele cria uma tabela de datas entre os dias 1 de janeiro de 2021 e a data atual, para depois procurar os dias nos quais não houve venda.

Se eu quiser não usar datas fixas, mas ao inves disso, criar uma lista entre a data inicial (ou menor data) da tabela de vendas, e a data final (ou maior data) da tabela de vendas, independentemente de quais forem essas datas, eu pensei fazer isto:

WITH
MINMAX AS (
    SELECT
        MIN(VEN.data) AS DATAINICIAL,
        MAX(VEN.data) AS DATAFINAL
    FROM
      `beleza_verde_vendas.vendas` AS VEN
),
LISTADIAS AS (
    SELECT
        DIA
    FROM
        UNNEST(GENERATE_DATE_ARRAY(DATAINICIAL,DATAFINAL)) AS DIA
)
SELECT
    *
FROM
    LISTADIAS
    /* aqui continuaria com o INNER JOIN e etc */;

Porem recebo o erro:

Query error: Unrecognized name: DATAINICIAL at [xxx]

onde xxx é a linha do código

FROM UNNEST(GENERATE_DATE_ARRAY(DATAINICIAL,DATAFINAL)) AS DIA

O que estou fazendo errado?

Obrigado

1 resposta

Oi Pablo, tudo bem?

Parece que você está no caminho certo, mas o erro que você está enfrentando ocorre porque as variáveis DATAINICIAL e DATAFINAL não estão sendo reconhecidas dentro da função GENERATE_DATE_ARRAY. Isso pode estar ocorrendo porque as variáveis podem não estarem sendo passadas corretamente do WITH para o UNNEST.

Para corrigir isso, tente pode ajustar sua consulta, utilizando uma subquery no SELECT que passa as variáveis DATAINICIAL e DATAFINAL para a função GENERATE_DATE_ARRAY.

WITH
MINMAX AS (
    SELECT
        MIN(VEN.data) AS DATAINICIAL,
        MAX(VEN.data) AS DATAFINAL
    FROM
      `beleza_verde_vendas.vendas` AS VEN
)
SELECT
    DIA
FROM
    MINMAX,
    UNNEST(GENERATE_DATE_ARRAY(MINMAX.DATAINICIAL, MINMAX.DATAFINAL)) AS DIA

Teste e me diga se funciona.

Reforço que esse código é apenas uma sugestão, e como não tenho acesso ao seu ambiente, pode ser necessário alguns ajustes para que funcione corretamente.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado