Acesso compatível com MySQL

Consulte dados meteorológicos com as ferramentas que você já usa

Conecte um cliente ou uma biblioteca MySQL diretamente ao GribStream. Seu token de API é a senha, os datasets aparecem como bancos de dados e os dados meteorológicos são retornados como linhas MySQL comuns.

Beta pública. Ainda não recomendamos esta conexão para cargas de trabalho de produção, e o comportamento pode mudar durante a versão beta. Você pode relatar problemas ou enviar comentários por e-mail, ou participar do nosso Discord.
Nesta página

Começar

Você só precisa de um token de API do GribStream e de um cliente ou biblioteca compatível com MySQL.

  1. Crie um token de API gratuito ou use um token existente.
  2. Use gribstream como nome de usuário e o token de API como senha.
  3. Escolha um dataset, como gfs, como banco de dados e conecte-se.
mysql --host=mysql.gribstream.com \
  --port=3307 \
  --user=gribstream \
  --password \
  --database=gfs \
  --quick

O cliente MySQL de linha de comando solicita o token sem colocá-lo no histórico do shell. Neste comando, --quick faz o cliente imprimir as linhas à medida que chegam, em vez de esperar o resultado completo. Outros clientes usam configurações diferentes para resultados incrementais.

As consultas MySQL usam o mesmo token e a mesma cota das consultas da API HTTP. O uso se baseia nos dados meteorológicos lidos para responder à consulta. Se você não souber qual dataset usar, explore o catálogo de modelos; gfs é um bom ponto de partida global.

Por que MySQL?

Linguagens e ferramentas com um driver MySQL podem usar essa conexão familiar para consultar o GribStream. Você não precisa operar um servidor MySQL, importar arquivos meteorológicos nem aprender uma nova biblioteca.

A conexão é somente leitura e foi criada para dados meteorológicos. Os datasets aparecem como bancos de dados, os campos meteorológicos podem ser explorados e o SQL não compatível retorna um erro claro.

Use suas ferramentasTrabalhe pela linha de comando, em uma aplicação, notebook ou integração de banco de dados.
Explore o catálogoEncontre datasets, campos meteorológicos, unidades e seletores exatos antes de consultar.
Solicite o que precisaEscolha os horários, locais e valores meteorológicos que deseja receber como linhas.

Encontre uma coluna meteorológica e consulte-a

Cada parâmetro meteorológico do GribStream aparece como uma coluna MySQL específica do dataset. Depois de escolher um dataset, consulte as colunas disponíveis antes de escrever a consulta:

SHOW FULL COLUMNS FROM gfs.timeseries;

No resultado, copie o valor de Field de que você precisa. Comment mostra o nome legível, as unidades nativas e o equivalente exato em GS_VALUE(...). Para a temperatura GFS a 2 m, a coluna é tmp_2_m_above_ground.

Estas três formas identificam o mesmo parâmetro meteorológico. A coluna é a forma SQL mais simples; GS_VALUE é a alternativa de seletor exato ao traduzir uma consulta existente da API HTTP ou escolher o seletor dinamicamente. A forma JSON é o seletor mostrado nas páginas dos modelos.

Coluna meteorológica do MySQL
tmp_2_m_above_ground
Alternativa exata com GS_VALUE
GS_VALUE(
  'TMP',
  '2 m above ground',
  ''
)
Seletor da API HTTP
{
  "name": "TMP",
  "level": "2 m above ground",
  "info": ""
}

Copie os nomes das colunas meteorológicas de SHOW FULL COLUMNS ou gribstream.selector_columns em vez de montá-los. A maioria é legível; nomes longos ou que colidem recebem um sufixo determinístico. Os seletores exatos diferenciam maiúsculas de minúsculas.

Esta consulta retorna as próximas seis horas de temperatura GFS a 2 m para um ponto:

SELECT forecasted_time,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN NOW() AND NOW() + INTERVAL 6 HOUR
  AND lat = 40.758
  AND lon = -73.985
  AND lead_time BETWEEN '0h' AND '48h'
ORDER BY forecasted_time
LIMIT 100;

Esta coluna meteorológica publica valores em kelvin. Consulte seu Comment ou o catálogo para saber as unidades, em vez de deduzi-las pelo nome da coluna ou pelo alias.

O resultado é formado por linhas comuns. Os valores abaixo são ilustrativos:

forecasted_time       temp_k
2026-08-07 12:00:00   298.4
2026-08-07 13:00:00   299.1
2026-08-07 14:00:00   299.7

Use o processo de pesquisa no catálogo para procurar colunas pelo nome do parâmetro, verificar as unidades e recuperar o seletor JSON exato ou a expressão GS_VALUE quando necessário.

Se a conexão já selecionou gfs, use FROM timeseries. Caso contrário, qualifique a tabela como gfs.timeseries.

Comece por uma consulta que funciona

Escolha o exemplo mais próximo do seu objetivo, abra-o e altere apenas o dataset, a coluna meteorológica encontrada, os horários ou os locais necessários. Copie os nomes de SHOW FULL COLUMNS em vez de tentar adivinhar como um seletor é normalizado.

Consultar vários locais nomeados em um intervalo de tempo
SELECT forecasted_time, name, lat, lon,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T06:00:00Z'
  AND (lat, lon, name) IN (
        (40.758, -73.985, 'Times Square'),
        (29.7604, -95.3698, 'Houston'),
        (51.5072, -0.1276, 'London')
      );
Consultar uma grade regular de latitude e longitude

Valores menores de grid_step selecionam mais pontos e consomem mais cota. Comece com um passo maior e restrinja a área antes de aumentar a resolução.

SELECT forecasted_time, lat, lon,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T06:00:00Z'
  AND lat BETWEEN 25 AND 50
  AND lon BETWEEN -125 AND -66
  AND grid_step = 1;
Consultar alguns horários de previsão exatos e não contíguos
SELECT forecasted_time,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time IN (
        '2026-07-13T00:00:00Z',
        '2026-07-13T06:00:00Z',
        '2026-07-14T18:00:00Z'
      )
  AND lat = 40.758
  AND lon = -73.985;
Consultar previsões de execuções específicas do modelo
SELECT forecasted_at, forecasted_time,
       tmp_2_m_above_ground AS temp_k
FROM gfs.runs
WHERE forecasted_at BETWEEN '2026-07-13T00:00:00Z'
                        AND '2026-07-13T12:00:00Z'
  AND lead_time BETWEEN '0h' AND '48h'
  AND lat = 40.758
  AND lon = -73.985
ORDER BY forecasted_at, forecasted_time;
Reproduzir as previsões disponíveis antes de um corte histórico
SELECT forecasted_at, forecasted_time,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-14T00:00:00Z'
  AND forecasted_at <= '2026-07-12T18:00:00Z'
  AND lat = 40.758
  AND lon = -73.985
ORDER BY forecasted_time;
Consultar membros selecionados de um ensemble
SELECT forecasted_time, member,
       tmp_2_m_above_ground AS temp_k
FROM gefsatmos.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T12:00:00Z'
  AND member IN (0, 1, 2)
  AND lead_time BETWEEN '0h' AND '48h'
  AND lat = 40.758
  AND lon = -73.985;
Converter um valor e manter apenas as linhas que atendem a um limiar
SELECT forecasted_time,
       tmp_2_m_above_ground AS temp_k,
       temp_k - 273.15 AS temp_c
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-14T00:00:00Z'
  AND lat = 40.758
  AND lon = -73.985
  AND temp_c BETWEEN 18 AND 24;
Encontrar os pontos mais quentes de uma grade em um horário de previsão
SELECT forecasted_time, lat, lon,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time = '2026-07-13T18:00:00Z'
  AND lat BETWEEN 25 AND 50
  AND lon BETWEEN -125 AND -66
  AND grid_step = 0.5
ORDER BY temp_k DESC
LIMIT 20;

Conecte-se pela sua linguagem de programação

Escolha uma linguagem de programação abaixo. Cada exemplo estabelece uma conexão segura, executa a mesma pequena consulta meteorológica e lê as linhas. Guarde o token em uma variável de ambiente ou gerenciador de segredos; nunca o coloque em uma string de conexão versionada.

Cliente MySQL 8 de linha de comando. O TLS é negociado automaticamente; adicione --quick para receber a saída de forma incremental.

mysql \
  -h mysql.gribstream.com -P 3307 \
  -u gribstream -p -D gfs \
  --quick

Para resultados grandes, use o iterador de linhas, modo streaming ou equivalente do seu driver para evitar que ele mantenha todo o resultado na memória.

Escolha timeseries ou runs

Cada dataset oferece as mesmas duas formas de tabela meteorológica. Escolha a tabela pela pergunta que quer responder, e não pelas colunas que deseja retornar.

timeseries

Escolha esta tabela para obter a melhor previsão elegível em cada horário válido solicitado.

Filtre porforecasted_time

runs

Escolha esta tabela para examinar previsões de uma ou mais execuções específicas do modelo.

Filtre porforecasted_atelead_time

forecasted_at é o horário de inicialização do modelo. forecasted_time é o horário válido previsto. lead_time é a diferença entre eles em horas; pode ser selecionado ou filtrado.

Exemplo: consultar o histórico de execuções do modelo
SELECT forecasted_at, forecasted_time, lat, lon,
       tmp_2_m_above_ground AS temp_k
FROM gfs.runs
WHERE forecasted_at BETWEEN '2026-07-13T00:00:00Z'
                        AND '2026-07-13T12:00:00Z'
  AND lead_time BETWEEN '0h' AND '48h'
  AND lat = 40.758
  AND lon = -73.985
ORDER BY forecasted_at DESC, forecasted_time ASC;
Colunas disponíveis, controles de consulta e metadados de atualização
ColunaSignificadoObservações
datasetCódigo do dataset que produziu a linhaTambém é o nome do esquema MySQL
forecasted_atHorário de inicialização do modeloEm timeseries, <= é o único operador aceito para limitar execuções
forecasted_timeHorário válido previstoA principal coluna de tempo de timeseries
lat, lon, namePonto resolvido e rótulo opcionalname pode ser NULL
memberIdentificador do membro do ensembleRelevante apenas para datasets de ensemble
index_updated_atAtualização mais recente dos dados de origem associados à linhaMetadado opcional de atualização, diferente dos dois horários da previsão
lead_time, grid_stepLead time da previsão em horas e espaçamento solicitado da grade em grausPodem ser selecionados e filtrados; grid_step é NULL para pontos enumerados
Colunas meteorológicas específicas do datasetValores meteorológicos nativos, como tmp_2_m_above_groundDescubra com SHOW FULL COLUMNS; os valores são DOUBLE

Selecione index_updated_at para ver a atualização mais recente dos dados de origem associados a cada linha. É um metadado de atualização, não o horário de inicialização do modelo; use forecasted_at para identificar a execução.

SELECT forecasted_at, forecasted_time, index_updated_at,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T06:00:00Z'
  AND lat = 40.758
  AND lon = -73.985
ORDER BY forecasted_time;

Descubra datasets, colunas meteorológicas e seletores exatos

Não adivinhe nomes de colunas, níveis de parâmetros ou unidades. Encontre um dataset, consulte suas colunas meteorológicas e use o mapeamento do seletor exato apenas quando precisar da forma da API ou da alternativa GS_VALUE.

1. Encontre um dataset

SELECT code, full_name, provider, min_lead_time, max_lead_time,
       is_ensemble, member_count, members, parameter_count
FROM gribstream.datasets
WHERE code LIKE '%gfs%'
ORDER BY code;
Verifique a cobertura do arquivo e a cadência antes de uma grande consulta histórica
SELECT code, archive_start, archive_window, rolling_window,
       time_resolution, run_cadence, min_lead_time, max_lead_time,
       catalog_updated_at
FROM gribstream.datasets
WHERE code = 'gfs';

archive_start e archive_window descrevem a cobertura publicada; uma janela móvel pode avançar. catalog_updated_at indica quando os metadados do catálogo foram atualizados. Selecione index_updated_at quando a atualização de cada linha for importante.

2. Explore as colunas meteorológicas

SHOW FULL COLUMNS FROM gfs.timeseries LIKE '%tmp%';

3. Pesquise os mapeamentos ou use um seletor exato

SELECT short_name, full_name, units, has_code_table, variation_count
FROM gribstream.parameters
WHERE dataset = 'gfs'
  AND (short_name = 'TMP' OR full_name LIKE '%temperature%')
ORDER BY short_name
LIMIT 20;
SELECT column_name, full_name, units, name, level, info,
       selector_json, gs_value_sql
FROM gribstream.selector_columns
WHERE dataset = 'gfs'
  AND column_name = 'tmp_2_m_above_ground';

gribstream.selector_columns relaciona cada coluna meteorológica ao nome legível, às unidades, ao seletor JSON e à expressão GS_VALUE equivalente. A consulta exige uma condição exata em dataset.

Use o column_name gerado no SQL habitual. Use GS_VALUE(name, level, info) quando precisar de uma tradução direta de um seletor da API. Este seletor de gefsatmosmean tem um valor info não vazio, portanto exige os três argumentos:

Seletor de parâmetro JSON
{
  "name": "CAPE",
  "level": "surface",
  "info": "ens mean"
}
Expressão MySQL equivalente
GS_VALUE(
  'CAPE',
  'surface',
  'ens mean'
)

As páginas dos modelos continuam mostrando o seletor JSON canônico e sua alternativa exata com GS_VALUE. Copie os nomes das colunas SQL do esquema em uso, onde colisões e identificadores longos já foram resolvidos.

4. Encontre sinais comparáveis entre datasets

Os parâmetros compartilhados listam conceitos meteorológicos comuns, unidades de saída e os datasets compatíveis. Consulte esse catálogo antes de comparar modelos e depois resolva a tupla exata de cada dataset, sem presumir que os seletores têm os mesmos nomes.

SELECT code, label, units, supported_datasets
FROM gribstream.shared_parameters
WHERE code = 'temperature_2m';
Exemplo: calcular a velocidade do vento a 10 m

Depois de encontrar os seletores exatos dos componentes do vento a 10 m para ifsoper, combine-os com func.Hypot:

SELECT forecasted_time,
       v_10u_sfc AS u_component,
       v_10v_sfc AS v_component,
       func.Hypot(u_component, v_component) AS wind_speed
FROM ifsoper.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T06:00:00Z'
  AND lat = 48.8566
  AND lon = 2.3522
ORDER BY forecasted_time;
Sintaxe legível por máquina e comandos de exploração MySQL

Use estes recursos quando quiser que a própria conexão descreva sua sintaxe SQL e seus exemplos:

SELECT topic, supported_syntax, example, notes
FROM gribstream.sql_dialect
ORDER BY topic;
SELECT name, description, `sql`
FROM gribstream.query_examples
ORDER BY name;

Comandos MySQL comuns, como SHOW TABLES, SHOW COLUMNS, DESCRIBE e SHOW CREATE TABLE, também estão disponíveis. SHOW FULL COLUMNS inclui descrições meteorológicas concisas e os mapeamentos exatos para GS_VALUE:

SHOW FULL COLUMNS FROM gfs.timeseries;
Tabelas do catálogo
  • gribstream.datasets
  • gribstream.parameters
  • gribstream.parameter_variations
  • gribstream.selector_columns
  • gribstream.shared_parameters
  • gribstream.sql_dialect and gribstream.query_examples

As consultas de metadados aceitam projeções ou *, DISTINCT, ORDER BY, LIMIT com deslocamento não negativo e combinações limitadas de =, !=, LIKE, IN e testes de NULL.

Valores, cálculos e filtros

Colunas calculadas usam expressões SQL familiares e podem fazer referência a aliases definidos anteriormente na lista de seleção. Primeiro atribua um alias a uma coluna meteorológica e depois reutilize-o. Escreva as conversões de unidades de forma explícita:

SELECT forecasted_time,
       tmp_2_m_above_ground AS temp_k,
       temp_k - 273.15 AS temp_c
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T12:00:00Z'
  AND lat = 40.758
  AND lon = -73.985
  AND (temp_c BETWEEN 18 AND 30 OR temp_c IS NULL);

Condições sobre valores meteorológicos aceitam BETWEEN, IN numérico, testes de NULL, parênteses, NOT e combinações booleanas. Una com AND as condições de horário, local, lead time, membro e execução do modelo; use OR apenas entre condições sobre valores meteorológicos.

Funções e cálculos mais complexos

As funções numéricas conhecidas incluem ABS, CEIL/CEILING, FLOOR, ROUND, SQRT, POW/POWER, MOD e TRUNCATE. Os nomes dos pontos aceitam LOWER/LCASE, UPPER/UCASE, TRIM e CHAR_LENGTH, que conta caracteres Unicode. O LENGTH do MySQL, que conta bytes, não é compatível; use CHAR_LENGTH para nomes.

SELECT forecasted_time,
       ugrd_10_m_above_ground AS u,
       vgrd_10_m_above_ground AS v,
       func.Hypot(u, v) AS wind_speed
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T12:00:00Z'
  AND lat = 40.758
  AND lon = -73.985
  AND wind_speed > 5;

Outras funções de expressão do GribStream usam o espaço de nomes explícito func.. As expressões aceitam literais, parênteses, operadores unários, aritmética, comparações e combinações booleanas. Consulte a referência de expressões para ver as chamadas func. registradas e seus argumentos.

Unidades, tipos de dados e valores ausentes

As colunas de parâmetros meteorológicos e GS_VALUE retornam as unidades nativas publicadas no catálogo; escolher um alias não converte o valor. Verifique has_code_table em gribstream.parameters antes de tratar um campo codificado como medida contínua.

Valores meteorológicos, expressões calculadas, latitude e longitude são retornados como DOUBLE do MySQL. As colunas de tempo são DATETIME(6); identificadores de dataset, nome do ponto e membro são strings. Valores numéricos ou temporais ausentes se tornam NULL no SQL. Teste-os com IS NULL ou IS NOT NULL; = NULL não é aceito.

Consultas preparadas

Os marcadores de posição comuns do MySQL funcionam em seletores, cálculos, timestamps, coordenadas, membros e filtros meteorológicos. As funções de tempo relativo são avaliadas quando a consulta preparada é executada, e não quando é preparada.

SELECT forecasted_time AS valid_time,
       GS_VALUE(?, ?) AS temp_k,
       temp_k - ? AS temp_c
FROM gfs.timeseries
WHERE forecasted_time BETWEEN ? AND ?
  AND lat = ?
  AND lon = ?
  AND temp_c BETWEEN ? AND ?
LIMIT 100;
Resultados DISTINCT limitados

As consultas meteorológicas podem usar SELECT DISTINCT ... LIMIT n. A distinção se aplica à linha selecionada inteira. Ela não pode ser combinada com ORDER BY, e a consulta ainda pode ler toda a seleção limitada antes de saber que não há mais linhas únicas. Use-a para remover duplicatas de um conjunto limitado, não como substituto para restringir tempo e localização.

SELECT DISTINCT name,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T06:00:00Z'
  AND (lat, lon, name) IN (
        (40.758, -73.985, 'Times Square'),
        (29.7604, -95.3698, 'Houston')
      )
LIMIT 100;

Intervalos, tempo relativo e fusos horários

timeseries.forecasted_time é o horário válido. runs.forecasted_at é o horário de inicialização do modelo. Intervalos exigem os dois limites e incluem ambas as extremidades quando escritos com BETWEEN.

Para janelas adjacentes, prefira um intervalo semiaberto, como forecasted_time >= start AND forecasted_time < end. Assim, o instante da fronteira não aparece duas vezes quando consultas consecutivas são combinadas.

SELECT forecasted_at, forecasted_time,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN NOW() - INTERVAL 2 DAY AND NOW()
  AND forecasted_at <= NOW() - INTERVAL 6 HOUR
  AND lat = 40.758
  AND lon = -73.985
LIMIT 100;
Funções de tempo relativo e formatos de timestamp aceitos

NOW(), CURRENT_TIMESTAMP e UTC_TIMESTAMP() são avaliados uma vez por consulta em UTC; a precisão fracionária, como NOW(6), é aceita. DATE_ADD, ADDDATE, DATE_SUB, SUBDATE e as formas + INTERVAL/- INTERVAL aceitam unidades inteiras fixas, de microssegundos a semanas. Meses e anos são excluídos porque sua duração varia.

Literais de tempo aceitam uma data, uma data e hora do MySQL, o formato ISO com T ou RFC 3339 com deslocamento de fuso. Um literal sem deslocamento é interpretado como UTC, exceto quando representa o horário local de entrada de CONVERT_TZ.

Selecionar horários exatos e não contíguos

Use = para um horário exato e IN para vários horários não contíguos. Use forecasted_time em timeseries e forecasted_at em runs. Os exemplos de consultas incluem um caso completo.

Consultar um dia local e lidar com o horário de verão
SELECT forecasted_time,
       CONVERT_TZ(forecasted_time, 'UTC', 'Europe/Paris') AS paris_time,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time >=
        CONVERT_TZ('2026-10-25 00:00:00', 'Europe/Paris', 'UTC')
  AND forecasted_time <
        CONVERT_TZ('2026-10-26 00:00:00', 'Europe/Paris', 'UTC')
  AND lat = 48.8566
  AND lon = 2.3522
LIMIT 100;

As zonas IANA nomeadas consideram as mudanças do horário de verão. O intervalo de Paris acima cobre o dia de 25 horas em 25 de outubro de 2026; o mesmo padrão semiaberto cobre corretamente o dia de 23 horas em 29 de março. Horários locais de entrada são convertidos imediatamente para UTC; horários ambíguos ou inexistentes geram um erro claro. A conversão do resultado também aceita forecasted_at e index_updated_at. Mantenha a coluna UTC original quando o mesmo horário local puder aparecer duas vezes. Os aliases das colunas de tempo convertidas servem apenas para apresentação e não podem ser usados em WHERE.

As conexões permanecem em UTC. SET time_zone aceita valores equivalentes a UTC, SYSTEM ou DEFAULT; use CONVERT_TZ quando precisar de timestamps locais.

Aplicar um corte histórico por execução do modelo

Em timeseries, forecasted_at <= timestamp exclui execuções mais recentes. Esse é o único operador aceito para essa coluna em timeseries; use index_updated_at quando a pergunta for sobre a atualização dos dados. Os exemplos de consultas incluem um corte histórico completo.

Pontos, grades, lead times e ensembles

Use um par de coordenadas para um ponto, uma lista de tuplas para vários pontos nomeados ou limites de latitude e longitude com grid_step para uma grade regular. Os exemplos de consultas incluem cada formato.

  • Um ponto: use lat = value AND lon = value.
  • Vários pontos: use (lat, lon) ou (lat, lon, name) com IN.
  • Uma grade: limite as duas coordenadas e defina grid_step em graus. Passos menores selecionam mais pontos e consomem mais cota.
Filtros de lead time

Use durações entre aspas, como lead_time = '24h'. BETWEEN seleciona um intervalo fechado; comparações pareadas >=/< expressam um intervalo semiaberto; uma comparação isolada fornece apenas um mínimo ou máximo. As durações aceitam formatos como '90m', '24h' ou '168h'.

Filtros por membro do ensemble

Verifique is_ensemble e o array JSON members em gribstream.datasets antes de selecionar membros; não presuma que todo dataset seja um ensemble nem que os identificadores tenham o mesmo intervalo. Os exemplos de consultas incluem uma seleção de membros.

Mantenha as consultas eficientes

O uso da cota se baseia nos dados meteorológicos lidos para avaliar uma consulta, e não no número de linhas retornadas. Uma condição sobre um valor meteorológico ou alias calculado — como temp_c > 30 — só pode remover linhas depois que esses valores forem lidos. Portanto, uma consulta grande pode consumir muita cota mesmo que os filtros retornem poucas linhas.

Condições sobre horário de previsão, local, lead time e membro do ensemble reduzem os dados selecionados. Estas escolhas têm o maior efeito:

  • Use timeseries, a menos que precise do histórico de várias execuções do modelo.
  • Mantenha os intervalos curtos ou use uma lista de horários exatos.
  • Selecione apenas as colunas de parâmetros meteorológicos necessárias.
  • Prefira pontos exatos a uma grade ampla; ao usar uma grade, escolha um grid_step adequado.
  • Limite lead_time e selecione somente os membros necessários do ensemble.

Use a ordenação para explorar

ORDER BY é destinado principalmente a sessões interativas e exploração de dados, quando vale a pena receber um resultado legível imediatamente. Em uma consulta limitada, começar a ordenação pela principal coluna de tempo geralmente permite receber linhas de forma incremental. Use forecasted_time para timeseries ou forecasted_at para runs, escolha qualquer direção e adicione colunas ou aliases selecionados como chaves secundárias quando necessário.

SELECT forecasted_time AS valid_time, name, lat, lon,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T12:00:00Z'
  AND (lat, lon, name) IN (
        (40.758, -73.985, 'Times Square'),
        (29.7604, -95.3698, 'Houston'),
        (51.5072, -0.1276, 'London')
      )
ORDER BY valid_time DESC, temp_k DESC, name ASC;

Para runs, comece por forecasted_at e limite os dois lados de lead_time. Se um resultado ordenado for grande demais para processamento seguro, restrinja a seleção ou remova ORDER BY e ordene na aplicação.

Para cargas históricas e outras extrações de grande volume, omita ORDER BY. Se a ordem for importante, ordene os dados depois de recebê-los. Assim, a ordenação não limita a vazão, principalmente quando uma seleção ampla é combinada com filtros de valores meteorológicos.

Rankings globais

Uma ordenação que começa por um valor meteorológico precisa considerar toda a seleção antes de retornar linhas, portanto exige LIMIT. Use esse formato para rankings, não para saída incremental. Os exemplos de consultas incluem uma consulta completa dos pontos mais quentes.

Use LIMIT para o tamanho do resultado, não para a cota

LIMIT ajuda a manter pequena uma saída interativa, mas não define a quantidade de dados meteorológicos lidos. Filtros e ordenação podem ler muito mais dados do que o resultado final contém. Use os controles de seleção acima quando precisar reduzir o uso da cota.

Avançado: valide uma consulta com EXPLAIN

A maioria das consultas não precisa de EXPLAIN. Coloque-o antes de uma consulta meteorológica para validar a instrução e ver informações de diagnóstico sem buscar linhas nem consumir cota. Ele é útil principalmente para solução de problemas e suporte.

EXPLAIN
SELECT forecasted_time, lat, lon,
       tmp_2_m_above_ground AS temp_k
FROM gfs.timeseries
WHERE forecasted_time BETWEEN '2026-07-13T00:00:00Z'
                          AND '2026-07-13T12:00:00Z'
  AND (lat, lon) = (40.758, -73.985)
LIMIT 100;

Resultado incremental, cancelamento e erros

As linhas ficam disponíveis de forma incremental. A exibição imediata depende do cliente ou biblioteca MySQL, portanto use sua interface sem buffer, streaming, iterativa ou em blocos para consultas grandes. A configuração varia por cliente; o apêndice de clientes contém links para a documentação de cada biblioteca.

  • Desconexão do cliente: fechar a conexão cancela a consulta ativa.
  • Cliente MySQL: pressione Ctrl+C para interromper a consulta ativa.
Cancelamento na aplicação e consultas simultâneas

Uma conexão MySQL tem apenas uma instrução ativa. Consuma ou feche o resultado antes de reutilizar a conexão; use um pool quando a aplicação realmente precisar de consultas simultâneas. Cada conexão do pool se autentica de forma independente.

Use a API de cancelamento ou o contexto cancelável do driver; o nome e o comportamento variam por cliente. Para cancelar explicitamente, execute KILL QUERY <connection_id> em outra conexão com o mesmo token de API. A conexão de destino continua reutilizável.

Códigos de erro MySQL

Os erros usam respostas MySQL comuns para que os clientes existentes os apresentem naturalmente:

SituaçãoCódigo MySQLMensagem
Sintaxe SQL1064Erro de análise ou validação próximo à entrada não aceita.
SQL não compatível1235Explicação específica da construção não compatível.
Token inválido1045Acesso negado durante a autenticação da conexão.
Consulta cancelada1317A execução da consulta foi interrompida.
Limite de uso1226A mensagem indica quanto tempo esperar antes de tentar novamente, quando essa informação está disponível.

Solução de problemas

Reduzir a largura de banda de um resultado grande

Para extrações grandes, ative a compressão do protocolo MySQL se o cliente ou driver oferecer suporte. A configuração varia por cliente; consulte a documentação oficial no apêndice.

Cliente MySQL: adicione --compression-algorithms=zstd ao conectar.

Em qualquer cliente, verifique a compressão negociada com:

SHOW SESSION STATUS LIKE 'Compression%';
A conexão TLS não consegue verificar o certificado ou o nome do host

Conecte-se a mysql.gribstream.com, não ao endereço IP, e use uma cadeia de autoridades certificadoras confiáveis e atualizada. Mantenha a verificação de identidade ativa; desativá-la pode ocultar um nome de host incorreto, uma interceptação ou uma cadeia de confiança incompleta. As configurações variam por cliente; consulte o apêndice de clientes.

A conexão excede o tempo limite

Confirme que sua rede permite conexões TCP de saída para mysql.gribstream.com na porta 3307. Firewalls corporativos e alguns ambientes de notebook restritos bloqueiam portas de banco de dados não padrão.

Uma coluna meteorológica é desconhecida ou um seletor exato é rejeitado

Execute SHOW FULL COLUMNS FROM <dataset>.timeseries e copie o valor de Field em vez de adivinhá-lo. Para usar um seletor exato no SQL, copie gs_value_sql de gribstream.selector_columns; os seletores diferenciam maiúsculas de minúsculas e não devem ser traduzidos nem normalizados.

Um valor tem escala, unidade ou significado inesperado

O GribStream retorna os valores nativos publicados do seletor. Confira units, description e has_code_table no catálogo e confirme level e info. Conversões de unidades são colunas calculadas explícitas; um alias AS nunca altera os dados sozinho.

Um intervalo de tempo, fuso horário ou consulta ordenada é rejeitado

Forneça os dois limites de tempo. Converta limites expressos em horário local para UTC com CONVERT_TZ; não tente adivinhar um horário ambíguo ou inexistente durante a mudança de horário. Para uma ordenação insegura, restrinja a seleção ou remova ORDER BY e ordene na aplicação.

Nenhuma linha aparece até a consulta terminar

Seu cliente está acumulando o resultado. Selecione o modo sem buffer, streaming, iterativo ou em blocos. Cliente MySQL: reconecte com --quick. pandas: use chunksize. Para outros clientes, siga a documentação de leitura de resultados no apêndice.

A consulta recebe o erro MySQL 1226

Reduza a simultaneidade ou espere o tempo indicado na mensagem antes de tentar novamente. Tentar imediatamente apenas prolonga o limite.

Use a conexão como ferramenta autodescritiva para agentes de IA

Qualquer conector genérico de banco de dados MySQL — inclusive um exposto como ferramenta MCP — pode se conectar a mysql.gribstream.com:3307. Forneça o token de API pela configuração secreta do conector.

Forneça ao agente o arquivo de instruções abaixo. O esquema e as tabelas do catálogo permitem descobrir datasets, colunas meteorológicas, unidades, mapeamentos exatos de seletores, regras do dialeto e exemplos prontos antes de criar uma consulta.

  1. Ler gribstream.sql_dialect e gribstream.query_examples.
  2. Pesquisar em gribstream.datasets e depois consultar SHOW FULL COLUMNS para a tabela meteorológica escolhida.
  3. Usar gribstream.selector_columns quando for necessário mapear um seletor JSON exato ou GS_VALUE.
  4. Criar e executar a menor consulta limitada que responda à pergunta.
  5. Usar EXPLAIN apenas para validar ou investigar uma consulta.

Baixe as instruções do GribStream MySQL para agentes, com o processo completo, os limites de sintaxe e as regras para obtenção dos dados.

SQL compatível e limites deliberados

Consultas meteorológicas

  • SELECT em timeseries e runs
  • Colunas meteorológicas descobertas e alternativas exatas com GS_VALUE
  • Aliases calculados, funções numéricas e de texto conhecidas e chamadas func. documentadas
  • Intervalos e listas de tempo, pontos, grades, membros e lead times
  • Filtros booleanos sobre valores meteorológicos
  • Ordenação começando pelo tempo ou top-N global limitado
  • DISTINCT limitado, consultas preparadas e diagnóstico opcional com EXPLAIN

Intencionalmente incompatível

  • Escritas, DDL, transações e bloqueios
  • Junções, subconsultas, agregação e agrupamento
  • SELECT * em resultados meteorológicos
  • Ordenação global ilimitada e expressões de ordenação
  • Deslocamentos diferentes de zero em resultados meteorológicos
  • Funções MySQL não listadas e coerções SQL implícitas

Esses limites mantêm as consultas previsíveis, permitem resultados incrementais e geram erros claros, em vez de aceitar SQL com comportamento surpreendente.

Matriz de compatibilidade completa
ÁreaFormatos compatíveisLimite
SessãoUSE, VERSION(), DATABASE(), funções de tempo UTC, variáveis de sessão comuns e verificações de statusComportamento de compatibilidade, não o conjunto completo de variáveis de um servidor MySQL
ExploraçãoSHOW DATABASES, SHOW TABLES, SHOW FULL COLUMNS, DESCRIBE, SHOW CREATE TABLESomente esquemas e tabelas do GribStream
SELECT de metadadosProjeções ou *, DISTINCT, filtros booleanos, ORDER BY, LIMIT e deslocamentos não negativosSomente tabelas do catálogo e de information_schema
SELECT meteorológicoColunas fixas e meteorológicas explícitas, alternativa GS_VALUE, cálculos, condições limitadas, filtros e DISTINCT restritoSem * meteorológico, joins, subconsultas, agrupamento ou agregação
OrdenaçãoAté oito chaves selecionadas; ordenação começando pelo tempo ou top-N global limitadoSem expressões, posições ordinais, chaves repetidas ou ordenação global ilimitada
Consultas preparadasPlaceholders ? comuns em seletores, expressões, horários, locais, membros e filtrosAté cinco consultas preparadas por conexão
Diagnóstico avançadoEXPLAIN SELECT ...Valida sem executar; EXPLAIN ANALYZE não é aceito
CancelamentoKILL QUERY connection_id em uma conexão com o mesmo tokenNão é possível inspecionar ou cancelar o trabalho de outro token

Apêndice: referências de configuração dos clientes

TLS, compressão, buffer de resultados, cancelamento, limites de tempo e pools de conexão são configurados no cliente ou driver, não pelo SQL. Consulte a documentação da biblioteca que você utiliza.

ClienteDocumentação oficialÚtil para
MySQL CLIOpções do cliente e opções de conexãoTLS, compressão, --quick, timeouts e outras opções da linha de comando
PythonArgumentos de conexão do Connector/Python e read_sql do pandasTLS, compressão, pool, opções de conexão e DataFrames em blocos
JavaPropriedades de configuração do Connector/JTLS, compressão, timeouts e comportamento JDBC
C# / .NETOpções de conexão do MySqlConnectorTLS, compressão, pool e timeouts
GoDocumentação do go-sql-driver/mysqlOpções de DSN, TLS, compressão, timeouts e pool
Node.jsDocumentação do mysql2Conexões, TLS, pools, consultas preparadas e streaming de resultados
RustDocumentação do crate mysqlTLS, compressão, pools e iteração de linhas
CGuia da API C do MySQLAPIs de conexão e resultado
DuckDBExtensão MySQL do DuckDBCredenciais em variáveis de ambiente, ATTACH somente leitura, TLS, consultas em tabelas remotas e mysql_query
DBeaverConfigurações da conexão MySQL e configuração de SSLConexão MySQL 8, SSL, confiança em certificados e navegação no banco