Blog do GribStream

Consulte dados meteorológicos com MySQL: beta pública do GribStream

GribStream | Publicado |
gfs

Conecte clientes e drivers MySQL comuns ao GribStream, use seu token de API como senha e receba os resultados das consultas meteorológicas em linhas MySQL.

Gráfico de linhas de uma previsão de temperatura GFS de 36 horas para Seattle, Denver, Chicago, Nova York e Miami retornada por uma consulta MySQL do GribStream
Uma consulta MySQL retornou 180 linhas de temperatura GFS a 2 m para cinco cidades, da execução do modelo de 7 de agosto de 2026 às 12 UTC. O gráfico usa as linhas originais da consulta.

O GribStream agora oferece uma conexão compatível com MySQL em beta pública. Se uma linguagem, notebook, ferramenta de linha de comando ou aplicação consegue se conectar ao MySQL, ela pode usar a mesma interface conhecida para consultar os dados meteorológicos do GribStream.

Conecte-se a mysql.gribstream.com na porta 3307. Use seu token de API do GribStream como senha, escolha um dataset como gfs como banco de dados e receba os resultados em linhas MySQL.

Esta é uma beta pública. Ainda não recomendamos essa conexão para cargas de trabalho de produção, e o SQL disponível poderá mudar conforme aprendemos com o uso real. Relate problemas ou envie comentários, ou participe do nosso Discord.

Uma breve sessão MySQL

Não há servidor MySQL para instalar nem dados meteorológicos para importar. Com o cliente MySQL de linha de comando, basta se conectar assim:

mysql --host=mysql.gribstream.com \
  --port=3307 \
  --user=gribstream \
  --password

O cliente solicita seu token de API. Depois da conexão, os datasets aparecem como bancos de dados. Os resultados abaixo foram abreviados:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| aifsoper           |
| era5               |
| gfs                |
| hrrr               |
| ifsoper            |
| ...                |
+--------------------+

mysql> USE gfs;
Database changed

Cada dataset tem uma tabela timeseries, que fornece a melhor previsão disponível para cada horário válido, e uma tabela runs, usada para consultar execuções específicas do modelo. Os parâmetros meteorológicos disponíveis aparecem como colunas. A consulta comum do esquema mostra os campos de tempo e localização ao lado dos valores específicos do dataset:

mysql> SHOW COLUMNS FROM gfs.timeseries;
+-----------------------+-------------+------+-----+---------+-------+
| Field                 | Type        | Null | Key | Default | Extra |
+-----------------------+-------------+------+-----+---------+-------+
| forecasted_at         | datetime(6) | YES  |     | NULL    |       |
| forecasted_time       | datetime(6) | YES  |     | NULL    |       |
| lat                   | double      | YES  |     | NULL    |       |
| lon                   | double      | YES  |     | NULL    |       |
| lead_time             | double      | YES  |     | NULL    |       |
| ...                   | ...         | ...  | ... | ...     | ...   |
| tmp_2_m_above_ground  | double      | YES  |     | NULL    |       |
| ...                   | ...         | ...  | ... | ...     | ...   |
+-----------------------+-------------+------+-----+---------+-------+

A saída está abreviada. tmp_2_m_above_ground é a temperatura GFS a 2 metros, em kelvin, a unidade nativa do modelo. Essa coluna numérica pode ser selecionada, transformada, filtrada e renomeada.

Esta é a consulta usada para criar o gráfico no início do post. Ela obtém 36 previsões horárias para cinco cidades e converte a temperatura para graus Celsius:

SELECT forecasted_time, name,
       tmp_2_m_above_ground AS temp_k,
       ROUND(temp_k - 273.15, 2) AS temp_c
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-08-07 19:00:00'
                          AND '2026-08-09 06:00:00'
  AND forecasted_at <= '2026-08-07 12:00:00'
  AND (lat, lon, name) IN (
        (47.6062, -122.3321, 'Seattle'),
        (39.7392, -104.9903, 'Denver'),
        (41.8781,  -87.6298, 'Chicago'),
        (40.7128,  -74.0060, 'New York'),
        (25.7617,  -80.1918, 'Miami')
      )
  AND lead_time BETWEEN '0h' AND '48h'
ORDER BY forecasted_time, name;

O limite em forecasted_at mantém o resultado na execução do modelo de 7 de agosto às 12 UTC usada no gráfico. A consulta completa retorna 180 linhas; estas correspondem ao primeiro horário válido:

+---------------------+----------+------------+--------+
| forecasted_time     | name     | temp_k     | temp_c |
+---------------------+----------+------------+--------+
| 2026-08-07 19:00:00 | Chicago  | 303.708350 |  30.56 |
| 2026-08-07 19:00:00 | Denver   | 307.208350 |  34.06 |
| 2026-08-07 19:00:00 | Miami    | 303.908350 |  30.76 |
| 2026-08-07 19:00:00 | New York | 307.208350 |  34.06 |
| 2026-08-07 19:00:00 | Seattle  | 301.708350 |  28.56 |
+---------------------+----------+------------+--------+

A conexão é somente leitura. Trata-se de uma interface focada em consultas de dados meteorológicos, não de um banco de dados relacional de uso geral.

Por que MySQL?

O MySQL já conta com clientes maduros para a maioria das linguagens de programação e ambientes de dados. Assim, usuários do GribStream podem aproveitar pools de conexões, consultas preparadas, linhas tipadas, leitura incremental dos resultados e cancelamento de consultas sem adotar outra biblioteca cliente.

O guia completo de MySQL traz exemplos prontos para usar na linha de comando, em Python, Java, C#, Go, Node.js, Rust, C e DuckDB, seguidos pela referência completa do SQL disponível.

A conexão também pode ser útil com ferramentas de IA que já tenham um conector MySQL genérico. O arquivo de skill do GribStream para MySQL, disponível para download, ensina um agente a explorar o catálogo e construir consultas meteorológicas bem delimitadas.

Uma interface SQL focada

A beta oferece o SQL necessário para escolher um dataset, intervalo de tempo, locais, lead times, membros do ensemble e valores meteorológicos. Você pode calcular valores derivados, filtrar linhas, usar horários relativos e fusos horários nomeados, além de ordenar resultados delimitados durante a exploração interativa.

A proposta não é implementar todo o MySQL. As consultas meteorológicas não aceitam escritas, joins, subconsultas, agregações, agrupamentos nem SELECT *. A sintaxe não disponível retorna um erro claro, e o guia de SQL documenta as formas aceitas com exemplos.

Grandes volumes, streaming e cota

Para downloads grandes, configure o cliente para processar as linhas conforme elas chegam, em vez de guardar o resultado inteiro na memória. O cliente MySQL de linha de comando usa --quick; outros clientes costumam chamar esse modo de resultado sem buffer, streaming, iterativo ou em blocos. O guia traz links para a documentação correspondente de cada cliente.

Para cargas históricas e outros downloads de grande volume, omita ORDER BY e ordene os dados depois de recebê-los. A ordenação no servidor é voltada principalmente à exploração interativa e a resultados delimitados.

O consumo da cota depende dos dados meteorológicos lidos para responder à consulta, não apenas das linhas retornadas no final. Restrinja o intervalo de tempo, as coordenadas, os lead times, os membros e os campos meteorológicos selecionados antes de depender de filtros por valor ou de LIMIT.

Experimente a beta pública

  1. Crie gratuitamente um token de API do GribStream, ou use um token existente.
  2. Abra o guia de conexão MySQL e o manual de SQL.
  3. Conecte-se a mysql.gribstream.com:3307 com um cliente ou driver MySQL.
  4. Comece com uma consulta pequena e bem delimitada, depois amplie conforme necessário.

O objetivo é simples: se o seu ambiente já se comunica com MySQL, ele deve ter um caminho direto para os dados meteorológicos do GribStream.