Log de desenvolvimento: o que uma planilha de 120.000 linhas realmente quebra
Uma sessão de trabalho em uma planilha de 121.254 linhas e 1,8 milhão de células, e as cinco coisas separadas que tiveram que mudar antes que uma grande análise de tabelas cruzadas pudesse ser concluída, verificar sua saída e retornar um relatório formatado utilizável.
A maioria dos recursos de planilha são testados em dados que cabem na tela. Este registro abrange uma sessão de trabalho em uma pasta de trabalho de vendas com 121.254 linhas em 15 colunas — aproximadamente 1,8 milhão de células — e uma solicitação que parece comum: combine as tabelas de produto, cliente, pedido e vendas e, em seguida, sinalize produtos em declínio, riscos de reabastecimento e clientes de baixo valor.
Nada nesse pedido é exótico. De qualquer forma, falhou várias vezes, por razões que quase nada tinham a ver com a análise em si. O que se segue é o que realmente quebrou e o que mudou.
Um limite de plataforma, não uma consulta lenta
A primeira falha parecia um bug no sistema de trabalho durável. A verdadeira causa foi uma regra no Google Apps Script: um complemento de editor não pode criar um gatilho controlado por tempo que seja acionado com mais frequência do que uma vez por hora.
O design do trabalho em segundo plano assumiu um gatilho de um minuto. Essa suposição foi mantida durante o desenvolvimento, onde um script vinculado a um contêiner pode ser agendado livremente, e parou de ser mantida no momento em que o mesmo código foi executado como um complemento instalado. A solicitação para instalar o gatilho não foi degradada - ela foi lançada e antes o trabalho foi criado, portanto o trabalho nunca foi iniciado.
Duas mudanças se seguiram. Instalar um gatilho agora é o melhor esforço: ele tenta uma cadência de um minuto, volta para a cadência horária e, finalmente, para nenhum gatilho e nunca dispara. E a primeira etapa de processamento agora é executada dentro da mesma execução que criou a tarefa, em vez de em uma segunda chamada que precisa procurar a tarefa novamente.
Esse segundo detalhe importava mais do que parece. As propriedades do Apps Script não lêem suas gravações de maneira confiável nas execuções, portanto, uma tarefa escrita momentos antes pode retornar como "tarefa não encontrada" na próxima chamada.
Relatar o progresso não é o mesmo que terminar
Com o trabalho finalmente começando, ele ainda não terminou. A ferramenta executou uma etapa e depois retornou um status dizendo que o trabalho “continua em segundo plano”.
Essa frase era falsa. Sem nenhum acionador sub-horário disponível, nada continua em segundo plano. O assistente leu o status, transmitiu uma porcentagem ao usuário e parou – deixando um trabalho estacionado em 34.000 de 121.253 linhas indefinidamente.
O tempo de execução agora conduz o trabalho até a conclusão, dentro de um orçamento limitado, e cada chamada de status subsequente avança o trabalho em vez de apenas lê-lo. Se o orçamento estiver esgotado, o texto da situação diz claramente que a tarefa está inacabada e que nada mais a fará avançar.
Vale a pena declarar diretamente o princípio: um relatório de progresso não é um produto final. Um usuário solicitou uma tabela, não uma porcentagem.
Uma solicitação só pode ser atendida por ferramentas que o modelo pode ver
Para manter a seleção de ferramentas precisa, GetSheetAI divulga um subconjunto de suas ferramentas por turno com base na solicitação. Esse mecanismo foi construído em torno do conjunto de ferramentas Excel, e o complemento Google Sheets registra 22 ferramentas que existem apenas lá. Essas ferramentas estavam sendo filtradas de cada solicitação.
O efeito foi específico e fácil de passar despercebido. A solicitação de um gráfico de barras revelou 6 das 44 ferramentas, estando a ferramenta de gráfico entre as ocultas. Pedir para classificar um intervalo divulgado 5 de 44, sem a ferramenta de classificação. O assistente não recusou – ele realmente não conseguia ver a ferramenta que fazia o trabalho.
O Planilhas agora tem seu próprio mapeamento de ferramenta para pacote, espelhando cada contraparte Excel, e o filtro passa por qualquer ferramenta sobre a qual não tenha opinião, em vez de descartá-la. Um teste agora lê os nomes das ferramentas registradas diretamente da fonte, portanto, adicionar uma ferramenta sem classificá-la falha na construção, em vez de torná-la silenciosamente inacessível.
A mesma classe de lacuna apareceu no fraseado. Uma solicitação chinesa que significa “criar uma nova planilha” não correspondia a nenhuma regra, porque o padrão reconhecia apenas uma das duas palavras comuns para uma planilha. A ferramenta de criação de planilhas permaneceu oculta e o assistente relatou que era impossível criar uma planilha. Não foi.
Mensagens de erro fazem parte do produto
Várias falhas se resumiram a uma mensagem que declarava um problema sem indicar a saída.
Gravar em uma planilha que não existe retornou "O recurso solicitado não existe." Isso parece um suplemento quebrado. Agora diz que a planilha não existe, que a ferramenta de gravação não cria planilhas e que duas chamadas o fazem.
Recusar a classificação em nível de linha em um intervalo muito grande retornou uma recusa pura. Rotular um resultado agregado funciona em qualquer tamanho, portanto a mensagem agora nomeia esse caminho: agrupe primeiro e depois aplique regras de classificação ao resultado agrupado.
Um protetor de substituição não retornou nada além de blocked: true, que é considerado falha. Agora explica que o destino já contém dados e como proceder.
Nada disso é cosmético. Em cada caso, a mensagem anterior encerrou uma tarefa que ainda podia ser concluída.
Expressões determinísticas precisavam de mais aritmética
Derivar um ano-mês como 201707 a partir de uma chave de data inteira como 20170702 requer floor(x / 100) ou um módulo. Nenhum dos dois existia. Duas tentativas falharam e a coluna derivada foi abandonada.
A camada de expressão agora inclui floor, round, abs e mod, e o erro de função não suportada lista o conjunto completo e fornece a expressão exata, em vez de apenas nomear o que foi rejeitado.
Onde está
Na mesma pasta de trabalho, o caminho durável agora é concluído: todas as 121.253 linhas processadas, agrupadas, gravadas e formatadas, com cada parte do resultado verificada. Em Excel, a mesma solicitação produziu uma classificação em todos os 397 produtos – 132 sem vendas recentes, 101 sinalizados para risco de reabastecimento, 99 em declínio, 65 normais – calculado com SUMIFS nativo na tabela de origem, em vez de mover os dados para qualquer lugar.
Os valores operacionais que vale a pena conhecer:
- limite de roteamento durável: mais de 100.000 células;
- chunking de origem: leituras limitadas, verificadas por chunk no writeback;
- cobertura de regressão: 826 testes em todo o tempo de execução compartilhado;
- execução em segundo plano nos complementos do Planilhas Google: por hora, na melhor das hipóteses, para que a barra lateral conduza trabalhos longos enquanto estiver aberta.
Este último ponto é um limite real e não temporário. Um complemento instalado não pode agendar trabalhos com mais frequência; portanto, um trabalho grande avança enquanto a barra lateral está aberta. O ponto de verificação durável significa que fechá-lo não perde nenhum trabalho concluído, mas a descrição honesta é que o trabalho é conduzido, não programado.
A lição mais ampla desta sessão não foi sobre escala. Cada uma dessas falhas foi o caso de o sistema saber algo que o usuário não conseguia ver: uma regra de plataforma, uma ferramenta oculta, um caminho suportado nomeado em nenhum lugar do erro. O tamanho era o que tornava todos visíveis ao mesmo tempo.