Accesso compatibile con MySQL

Interroga i dati meteo con gli strumenti che usi già

Collega direttamente a GribStream un client o una libreria MySQL. Il token API è la password, i dataset appaiono come database e i dati meteo vengono restituiti come normali righe MySQL.

Beta pubblica. Non consigliamo ancora questa connessione per carichi di lavoro di produzione e il comportamento potrebbe cambiare durante la beta. Puoi segnalare problemi o inviare commenti via email, oppure unirti a noi su Discord.
In questa pagina

Inizia qui

Ti servono soltanto un token API GribStream e un client o una libreria compatibile con MySQL.

  1. Crea un token API gratuito oppure usane uno esistente.
  2. Usa gribstream come nome utente e il token API come password.
  3. Seleziona un dataset, per esempio gfs, come database e connettiti.
mysql --host=mysql.gribstream.com \
  --port=3307 \
  --user=gribstream \
  --password \
  --database=gfs \
  --quick

Il client a riga di comando MySQL richiede il token senza inserirlo nella cronologia della shell. In questo comando, --quick indica al client di stampare le righe appena arrivano invece di attendere il risultato completo. Gli altri client usano impostazioni diverse per i risultati incrementali.

Le query MySQL usano lo stesso token API e la stessa quota delle query API HTTP. L'utilizzo dipende dai dati meteo letti per rispondere alla query. Se non sai quale dataset scegliere, consulta il catalogo dei modelli; gfs è un buon punto di partenza globale.

Perché MySQL?

I linguaggi e gli strumenti dotati di un driver MySQL possono usare questa connessione familiare per interrogare GribStream. Non devi gestire un server MySQL, importare file meteo né imparare una nuova libreria client.

La connessione è di sola lettura e pensata appositamente per i dati meteo. I dataset appaiono come database, i campi meteo sono esplorabili e la sintassi SQL non supportata restituisce un errore chiaro.

Usa i tuoi strumentiLavora dalla riga di comando, da un'applicazione, da un notebook o da un'integrazione per database.
Esplora il catalogoTrova dataset, campi meteo, unità e selettori esatti prima di eseguire una query.
Richiedi ciò che ti serveScegli i tempi, i luoghi e i valori meteo da ricevere come righe.

Trova una colonna meteo e interrogala

Ogni parametro meteorologico di GribStream appare come una colonna MySQL specifica del dataset. Dopo aver scelto un dataset, esamina le sue colonne prima di scrivere la query:

SHOW FULL COLUMNS FROM gfs.timeseries;

Nel risultato, copia il valore Field che ti serve. Comment indica il nome leggibile, le unità native e l'equivalente esatto con GS_VALUE(...). Per la temperatura GFS a 2 m, la colonna è tmp_2_m_above_ground.

Queste tre forme identificano lo stesso parametro meteorologico. La colonna meteo è la forma SQL più semplice; GS_VALUE è l'alternativa con selettore esatto per tradurre una query esistente dell'API HTTP o scegliere dinamicamente il selettore. La forma JSON è il selettore mostrato nelle pagine dei modelli.

Colonna meteo MySQL
tmp_2_m_above_ground
Alternativa esatta con GS_VALUE
GS_VALUE(
  'TMP',
  '2 m above ground',
  ''
)
Selettore dell'API HTTP
{
  "name": "TMP",
  "level": "2 m above ground",
  "info": ""
}

Copia i nomi delle colonne meteo da SHOW FULL COLUMNS o gribstream.selector_columns invece di costruirli. La maggior parte è leggibile; i nomi lunghi o in collisione ricevono un suffisso deterministico. I selettori esatti distinguono maiuscole e minuscole.

Questa query restituisce le prossime sei ore di temperatura GFS a 2 m per un punto:

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;

Questa colonna meteo pubblica valori in kelvin. Controlla il suo Comment o il catalogo per conoscere le unità, invece di dedurle dal nome della colonna o dall'alias.

Il risultato è composto da normali righe. I valori seguenti sono illustrativi:

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

Usa il percorso di ricerca nel catalogo per cercare le colonne per nome del parametro, controllare le unità e recuperare il selettore JSON esatto o l'espressione GS_VALUE quando necessario.

Se la connessione ha già selezionato gfs, usa FROM timeseries. Altrimenti specifica la tabella come gfs.timeseries.

Parti da una query funzionante

Scegli l'esempio più vicino al tuo obiettivo, espandilo e modifica solo il dataset, la colonna meteo trovata, i tempi o i luoghi necessari. Copia i nomi da SHOW FULL COLUMNS invece di provare a dedurre come viene normalizzato un selettore.

Interroga più località con nome in un intervallo di 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')
      );
Interroga una griglia regolare di latitudine e longitudine

Valori di grid_step più piccoli selezionano più punti e consumano più quota. Parti da un passo ampio e restringi l'area prima di aumentare la risoluzione.

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;
Interroga alcuni tempi di previsione esatti e non contigui
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;
Interroga le previsioni di specifiche esecuzioni del modello
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;
Ricostruisci le previsioni disponibili prima di un limite storico
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;
Interroga membri selezionati di un 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;
Converti un valore e conserva solo le righe che superano una soglia
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;
Trova i punti più caldi della griglia per un tempo di previsione
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;

Connettiti dal tuo linguaggio

Scegli un linguaggio qui sotto. Ogni esempio stabilisce una connessione sicura, esegue la stessa piccola query meteo e ne legge le righe. Conserva il token in una variabile d'ambiente o in un gestore di segreti; non inserirlo mai in una stringa di connessione nel codice.

Client a riga di comando MySQL 8. TLS viene negoziato automaticamente; aggiungi --quick per ricevere il risultato in modo incrementale.

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

Per risultati grandi, usa l'iteratore di righe, la modalità streaming o l'equivalente del tuo driver, così non raccoglierà l'intero risultato in memoria.

Scegli timeseries o runs

Ogni schema di dataset espone le stesse due forme di tabella meteo. Scegli la tabella in base alla domanda a cui vuoi rispondere, non alle colonne che vuoi restituire.

timeseries

Sceglila per ottenere la migliore previsione idonea a ogni orario di validità richiesto.

Filtra perforecasted_time

runs

Sceglila per esaminare le previsioni di una o più esecuzioni specifiche del modello.

Filtra perforecasted_atelead_time

forecasted_at è l'orario di inizializzazione del modello. forecasted_time è l'orario di validità della previsione. lead_time è la differenza tra i due in ore e può essere selezionato o filtrato.

Esempio: interroga la cronologia delle esecuzioni del modello
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;
Colonne disponibili, controlli della query e metadati di aggiornamento
ColonnaSignificatoNote
datasetCodice del dataset che ha prodotto la rigaÈ anche il nome dello schema MySQL
forecasted_atTempo di inizializzazione del modelloSu timeseries, <= è l'unico operatore supportato per la soglia dell'esecuzione
forecasted_timeOrario di validità della previsioneColonna temporale principale per timeseries
lat, lon, namePunto risolto ed etichetta facoltativaname può essere NULL
memberIdentificatore del membro dell'ensembleSignificativo soltanto per i dataset ensemble
index_updated_atUltimo aggiornamento dei dati di origine associato alla rigaMetadato facoltativo di aggiornamento, distinto dai due orari della previsione
lead_time, grid_stepLead time della previsione in ore e passo della griglia richiesto in gradiSelezionabili e filtrabili; grid_step è NULL per i punti elencati
Colonne meteo specifiche del datasetValori meteorologici nativi, come tmp_2_m_above_groundSi trovano con SHOW FULL COLUMNS; i valori sono DOUBLE

Seleziona index_updated_at per vedere l'ultimo aggiornamento dei dati di origine associato a ogni riga. È un metadato di aggiornamento, non il tempo di inizializzazione del modello; usa forecasted_at per identificare l'esecuzione del modello.

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;

Scopri dataset, colonne meteo e selettori esatti

Non indovinare nomi delle colonne, livelli dei parametri o unità. Trova un dataset, esamina le sue colonne meteo e usa la mappatura del selettore esatto solo quando ti serve la forma dell'API o l'alternativa GS_VALUE.

1. Trova un 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;
Controlla copertura e frequenza dell'archivio prima di una grande query storica
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 descrivono la copertura pubblicata; una finestra mobile può avanzare. catalog_updated_at indica quando sono stati aggiornati i metadati del catalogo. Seleziona index_updated_at quando è importante l'aggiornamento a livello di riga.

2. Esplora le colonne meteo

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

3. Cerca le mappature o usa un selettore esatto

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 associa ogni colonna meteo al nome leggibile, alle unità, al selettore JSON e all'espressione GS_VALUE equivalente. La query richiede una condizione esatta su dataset.

Usa il column_name generato nel normale SQL. Usa GS_VALUE(name, level, info) quando ti serve la traduzione diretta di un selettore dell'API. Questo selettore di gefsatmosmean ha un valore info non vuoto, quindi sono necessari tutti e tre gli argomenti:

Selettore di parametro JSON
{
  "name": "CAPE",
  "level": "surface",
  "info": "ens mean"
}
Espressione MySQL equivalente
GS_VALUE(
  'CAPE',
  'surface',
  'ens mean'
)

Le pagine dei modelli continuano a mostrare il selettore JSON canonico e la sua forma esatta con GS_VALUE. Copia i nomi delle colonne SQL dallo schema attivo, dove le collisioni e gli identificatori lunghi sono già stati risolti.

4. Trova segnali confrontabili tra dataset

I parametri condivisi elencano concetti meteo comuni, unità di output e dataset che li supportano. Usa questo catalogo prima di confrontare modelli, poi risolvi la tupla esatta per ogni dataset invece di presumere che i nomi dei selettori coincidano.

SELECT code, label, units, supported_datasets
FROM gribstream.shared_parameters
WHERE code = 'temperature_2m';
Esempio: calcola la velocità del vento a 10 m

Dopo aver trovato i selettori esatti delle componenti del vento a 10 m per ifsoper, combinali con 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;
Sintassi leggibile dalle macchine e comandi di esplorazione MySQL

Usali quando vuoi che la connessione stessa descriva la propria sintassi SQL e gli esempi:

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

Sono disponibili anche i comandi MySQL standard SHOW TABLES, SHOW COLUMNS, DESCRIBE e SHOW CREATE TABLE. SHOW FULL COLUMNS include brevi descrizioni meteo e le mappature esatte con GS_VALUE:

SHOW FULL COLUMNS FROM gfs.timeseries;
Tabelle del catalogo
  • gribstream.datasets
  • gribstream.parameters
  • gribstream.parameter_variations
  • gribstream.selector_columns
  • gribstream.shared_parameters
  • gribstream.sql_dialect and gribstream.query_examples

Le query sui metadati supportano proiezioni o *, DISTINCT, ORDER BY, LIMIT con offset non negativo e combinazioni limitate di =, !=, LIKE, IN e verifiche dei valori nulli.

Valori, calcoli e filtri

Le colonne calcolate usano espressioni SQL familiari e possono fare riferimento agli alias definiti prima nell'elenco di selezione. Assegna prima un alias a una colonna meteo, poi riutilizzalo. Mantieni esplicite le conversioni di unità:

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);

Le condizioni sui valori meteo supportano BETWEEN, IN numerico, verifiche dei valori nulli, parentesi, NOT e combinazioni booleane. Unisci con AND le condizioni su tempo, posizione, lead time, membro ed esecuzione del modello; usa OR soltanto nelle condizioni sui valori meteo.

Funzioni e calcoli più complessi

Le funzioni numeriche più comuni includono ABS, CEIL/CEILING, FLOOR, ROUND, SQRT, POW/POWER, MOD e TRUNCATE. I nomi dei punti supportano LOWER/LCASE, UPPER/UCASE, TRIM e CHAR_LENGTH, che conta i caratteri Unicode. LENGTH di MySQL conta i byte e non è supportato; usa CHAR_LENGTH per i nomi.

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;

Le altre funzioni delle espressioni GribStream usano lo spazio dei nomi esplicito func.. Le espressioni supportano valori letterali, parentesi, operatori unari, aritmetica, confronti e combinazioni booleane. Consulta il riferimento delle espressioni per le chiamate func. registrate e i relativi argomenti.

Unità, tipi di dati e valori mancanti

Le colonne dei parametri meteorologici e GS_VALUE restituiscono le unità native pubblicate nel catalogo; la scelta di un alias non converte il valore. Controlla has_code_table in gribstream.parameters prima di trattare un campo codificato come misura continua.

I valori meteo, le espressioni calcolate, la latitudine e la longitudine vengono restituiti come DOUBLE MySQL. Le colonne timestamp sono DATETIME(6); dataset, nome del punto e identificatori dei membri sono stringhe. I valori numerici o temporali mancanti diventano NULL SQL. Verificali con IS NULL o IS NOT NULL; = NULL non è supportato.

Prepared statement

I normali segnaposto MySQL funzionano nei selettori, nei calcoli, nei timestamp, nelle coordinate, nei membri e nei filtri meteo. Le funzioni di tempo relativo vengono valutate quando il prepared statement viene eseguito, non quando viene preparato.

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;
Risultati DISTINCT limitati

Le query meteo possono usare SELECT DISTINCT ... LIMIT n. L'unicità si applica all'intera riga selezionata. Non può essere combinato con ORDER BY e la query potrebbe dover leggere l'intera selezione limitata prima di sapere che non restano nuove righe. Usalo per eliminare i duplicati da un insieme limitato, non al posto di limiti più stretti per tempo e posizione.

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;

Intervalli di tempo, tempo relativo e fusi orari

timeseries.forecasted_time è l'orario di validità. runs.forecasted_at è l'orario di inizializzazione del modello. Gli intervalli richiedono entrambi i limiti e includono i due estremi quando sono scritti con BETWEEN.

Per finestre adiacenti, preferisci un intervallo semiaperto come forecasted_time >= start AND forecasted_time < end. Evita di restituire due volte l'istante di confine quando si combinano query consecutive.

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;
Funzioni di tempo relativo e formati timestamp supportati

NOW(), CURRENT_TIMESTAMP e UTC_TIMESTAMP() vengono valutati una volta per istruzione in UTC; è accettata la precisione frazionaria, per esempio NOW(6). DATE_ADD, ADDDATE, DATE_SUB, SUBDATE e le forme infisse + INTERVAL/- INTERVAL supportano unità intere fisse dai microsecondi alle settimane. Mesi e anni di calendario sono esclusi intenzionalmente perché la loro durata varia.

I timestamp letterali accettano una data, un datetime MySQL, la forma ISO con T oppure RFC 3339 con offset. Un valore senza offset è UTC, tranne quando rappresenta l'ora locale in ingresso di CONVERT_TZ.

Seleziona tempi esatti e non contigui

Usa = per un tempo esatto e IN per più tempi non contigui. Usa forecasted_time su timeseries e forecasted_at su runs. La raccolta di query contiene un esempio completo.

Interroga un giorno civile locale e gestisci l'ora legale
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;

I fusi IANA con nome tengono conto delle transizioni dell'ora legale. L'intervallo di Parigi qui sopra copre il giorno di 25 ore del ritorno all'ora solare, il 25 ottobre 2026; lo stesso modello semiaperto copre correttamente anche il giorno di 23 ore del passaggio all'ora legale, il 29 marzo. Le ore locali in ingresso vengono convertite subito in UTC; le ore locali ambigue o inesistenti producono un errore chiaro. La conversione del risultato accetta anche forecasted_at e index_updated_at. Mantieni la colonna UTC originale quando il ritorno all'ora solare può mostrare due volte la stessa ora locale. Gli alias di fuso orario proiettati servono solo alla presentazione e non possono essere usati in WHERE.

Le connessioni restano in UTC. SET time_zone accetta valori equivalenti a UTC, SYSTEM o DEFAULT; usa CONVERT_TZ quando ti servono timestamp locali.

Applica un limite storico all'esecuzione del modello

Su timeseries, forecasted_at <= timestamp esclude le esecuzioni del modello più recenti. È l'unico operatore supportato per questa colonna su timeseries; usa index_updated_at quando la domanda riguarda l'aggiornamento dei dati. La raccolta di query contiene un esempio completo con un limite storico.

Punti, griglie, lead time ed ensemble

Usa una coppia di coordinate per un punto, un elenco di tuple per più punti con nome oppure limiti di latitudine e longitudine con grid_step per una griglia regolare. La raccolta di query contiene esempi completi per ogni forma.

  • Un punto: usa lat = value AND lon = value.
  • Più punti: usa (lat, lon) o (lat, lon, name) con IN.
  • Una griglia: limita entrambe le coordinate e imposta grid_step in gradi. Passi più piccoli selezionano più punti e consumano più quota.
Filtri per lead time

Usa durate tra virgolette, per esempio lead_time = '24h'. BETWEEN seleziona un intervallo chiuso; confronti accoppiati >=/< esprimono un intervallo semiaperto; un singolo confronto fornisce soltanto un minimo o un massimo. Le stringhe di durata includono forme come '90m', '24h' o '168h'.

Filtri per i membri dell'ensemble

Controlla is_ensemble e l'array JSON members in gribstream.datasets prima di selezionare i membri; non presumere che ogni dataset sia un ensemble o che gli identificatori dei membri abbiano lo stesso intervallo. La raccolta di query contiene un esempio con membri selezionati.

Mantieni efficienti le query

L'utilizzo della quota dipende dai dati meteo letti per valutare una query, non dal numero di righe restituite. Una condizione su un valore meteo o su un alias calcolato, come temp_c > 30, può eliminare righe dal risultato soltanto dopo che i valori sono stati letti. Una query grande può quindi consumare molta quota anche se i filtri sui valori restituiscono pochissime righe.

Le condizioni su tempo di previsione, posizione, lead time e membro dell'ensemble riducono i dati selezionati. Le scelte seguenti hanno l'effetto maggiore:

  • Usa timeseries a meno che ti serva espressamente la cronologia di più esecuzioni del modello.
  • Mantieni brevi gli intervalli di tempo oppure usa un elenco di tempi esatti.
  • Seleziona soltanto le colonne dei parametri meteorologici necessarie.
  • Preferisci punti esatti a una griglia ampia; quando usi una griglia, scegli un grid_step adeguato.
  • Limita il lead_time e seleziona soltanto i membri dell'ensemble necessari.

Usa l'ordinamento per l'esplorazione

ORDER BY è pensato soprattutto per sessioni interattive ed esplorazione dei dati, quando un risultato subito leggibile giustifica un lavoro aggiuntivo. Per una query limitata, ordinare prima per la colonna temporale principale consente in genere di restituire le righe progressivamente. Usa forecasted_time per timeseries o forecasted_at per runs, scegli una delle due direzioni e aggiungi, se necessario, colonne selezionate o alias come chiavi secondarie.

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;

Per runs, inizia con forecasted_at e limita entrambi gli estremi di lead_time. Se un risultato ordinato è troppo grande per essere elaborato in sicurezza, restringi la selezione oppure rimuovi ORDER BY e ordinalo nell'applicazione.

Per caricamenti storici e altri trasferimenti di dati ad alto volume, ometti ORDER BY. Se l'ordine è importante, ordina i dati dopo averli ricevuti. In questo modo l'ordinamento lato server non limita la velocità, soprattutto quando una selezione ampia è combinata con filtri sui valori meteo.

Classifiche globali

Un ordinamento che inizia da un valore meteo deve considerare l'intera selezione prima di restituire righe, quindi richiede LIMIT. Usa questa forma per le classifiche, non per ricevere risultati incrementali. La raccolta di query contiene un esempio completo dei punti più caldi.

Usa LIMIT per la dimensione del risultato, non per la quota

LIMIT è utile per mantenere piccolo l'output interattivo, ma non definisce la quantità di dati meteo letti. Filtri e ordinamento possono leggere molti più dati di quelli contenuti nel risultato finale. Usa i controlli di selezione qui sopra quando devi ridurre l'utilizzo della quota.

Avanzato: convalida una query con EXPLAIN

La maggior parte delle query non richiede EXPLAIN. Anteponilo a una query meteo per convalidare l'istruzione e vedere informazioni diagnostiche senza recuperare righe meteo né consumare la quota delle query. È utile soprattutto per la risoluzione dei problemi e l'assistenza.

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;

Streaming, annullamento ed errori

Le righe diventano disponibili progressivamente. La loro visualizzazione immediata dipende dal client o dalla libreria MySQL: per query grandi usa l'interfaccia per risultati non bufferizzati, streaming, iterativi o a blocchi. L'impostazione esatta dipende dal client; l'appendice di riferimento dei client rimanda alla documentazione di ogni libreria.

  • Disconnessione del client: la chiusura della connessione annulla la query attiva.
  • CLI MySQL: premi Ctrl+C per interrompere la query attiva.
Annullamento dall'applicazione e query simultanee

Una connessione MySQL esegue un'istruzione attiva alla volta. Consuma o chiudi il risultato prima di riutilizzare la connessione; usa un pool quando un'applicazione ha davvero bisogno di query simultanee. Ogni connessione del pool si autentica indipendentemente.

Usa l'API di annullamento del driver o un contesto di query annullabile; nome e comportamento dipendono dal client. Per annullare esplicitamente, esegui KILL QUERY <connection_id> da un'altra connessione che usa lo stesso token API. La connessione di destinazione resta riutilizzabile.

Codici di errore MySQL

Gli errori usano le normali risposte di errore MySQL, così i client esistenti li mostrano in modo naturale:

SituazioneCodice MySQLCosa viene mostrato
Sintassi SQL1064Un errore di parsing o convalida vicino all'input non supportato.
SQL non supportato1235Una spiegazione precisa del costrutto non supportato.
Token non valido1045Accesso negato durante l'autenticazione della connessione.
Query annullata1317L'esecuzione della query è stata interrotta.
Limite di frequenza1226Il messaggio indica quanto attendere prima di riprovare, quando l'informazione è disponibile.

Risoluzione dei problemi

Ridurre la larghezza di banda per un risultato grande

Per trasferimenti grandi, abilita la compressione del protocollo MySQL se il client o il driver la supporta. L'impostazione varia in base al client; consulta la documentazione ufficiale nell'appendice.

CLI MySQL: aggiungi --compression-algorithms=zstd alla connessione.

Da qualsiasi client, verifica la compressione negoziata con:

SHOW SESSION STATUS LIKE 'Compression%';
La connessione TLS non supera la verifica del certificato o del nome host

Connettiti a mysql.gribstream.com, non al suo indirizzo IP, e usa un bundle di CA attendibili aggiornato. Mantieni attiva la verifica dell'identità: disabilitarla può nascondere un nome host errato, un'intercettazione o un archivio di attendibilità incompleto. Le impostazioni dell'archivio e della verifica variano in base al client; consulta l'appendice di riferimento dei client.

La connessione scade

Verifica che la rete consenta connessioni TCP in uscita verso mysql.gribstream.com sulla porta 3307. I firewall aziendali e gli ambienti notebook con restrizioni a volte bloccano le porte database non predefinite.

Una colonna meteo è sconosciuta o un selettore esatto viene rifiutato

Esegui SHOW FULL COLUMNS FROM <dataset>.timeseries e copia il valore Field invece di indovinarlo. Per usare un selettore esatto in SQL, copia gs_value_sql da gribstream.selector_columns; i selettori distinguono maiuscole e minuscole e non devono essere tradotti né normalizzati.

Un valore ha scala, unità o significato inattesi

GribStream restituisce i valori nativi pubblicati dal selettore. Ricontrolla units, description e has_code_table nel catalogo e conferma gli esatti level e info. Le conversioni di unità sono colonne calcolate esplicite; un alias AS da solo non modifica mai i dati.

Un intervallo di tempo, un fuso orario o una query ordinata viene rifiutato

Fornisci entrambi i limiti temporali. Converti in UTC i confini espressi nell'ora locale di un fuso con CONVERT_TZ; non indovinare un'ora legale ambigua o inesistente. Per una forma di ordinamento non sicura, restringi la selezione oppure rimuovi ORDER BY e ordina nell'applicazione che riceve i dati.

Non appare alcuna riga fino al termine della query

Il client sta bufferizzando il risultato. Seleziona la modalità non bufferizzata, streaming, iterativa o a blocchi. CLI MySQL: riconnettiti con --quick. pandas: passa chunksize. Per gli altri client, segui la documentazione sulla gestione dei risultati nell'appendice.

Una query riceve l'errore MySQL 1226

Riduci la concorrenza o attendi il tempo indicato nel messaggio di errore prima di riprovare. Un ciclo di tentativi immediati prolunga soltanto il limite di frequenza.

Usa la connessione come strumento autodescrittivo per gli agenti IA

Qualsiasi connettore generico per database MySQL, incluso uno esposto come strumento MCP, può collegarsi a mysql.gribstream.com:3307. Fornisci il token API tramite la configurazione segreta del connettore.

Fornisci all'agente il file di istruzioni qui sotto. Lo schema e le tabelle del catalogo gli consentono di scoprire dataset, colonne meteo, unità, mappature esatte dei selettori, regole del dialetto ed esempi pronti all'uso prima di costruire una query.

  1. Leggi gribstream.sql_dialect e gribstream.query_examples.
  2. Cerca in gribstream.datasets, poi esegui SHOW FULL COLUMNS per la tabella meteo scelta.
  3. Usa gribstream.selector_columns quando serve la mappatura a un selettore JSON esatto o a GS_VALUE.
  4. Costruisci ed esegui la query limitata più piccola che risponde alla domanda.
  5. Usa EXPLAIN soltanto per convalidare o diagnosticare una query.

Scarica le istruzioni GribStream MySQL per agenti per il flusso di lavoro completo, i limiti della sintassi e le regole per recuperare i dati.

SQL supportato e limiti intenzionali

Query meteo

  • SELECT da timeseries e runs
  • Colonne meteo scoperte e alternative esatte con GS_VALUE
  • Alias calcolati, funzioni numeriche e testuali comuni e chiamate func. documentate
  • Intervalli ed elenchi di tempi, punti, griglie, membri e lead time
  • Filtri booleani sui valori meteo
  • Ordinamento a partire dal tempo oppure top-N globale limitato
  • DISTINCT limitato, prepared statement e diagnostica facoltativa con EXPLAIN

Non supportato intenzionalmente

  • Scritture, DDL, transazioni e blocchi
  • Join, sottoquery, aggregazione e raggruppamento
  • SELECT * per risultati meteo
  • Ordinamento globale senza limite ed espressioni di ordinamento
  • Scostamenti diversi da zero nei risultati meteo
  • Funzioni MySQL non elencate e conversioni SQL implicite

Questi limiti mantengono prevedibili le query, incrementali i risultati e chiari gli errori, invece di accettare SQL con comportamenti sorprendenti.

Matrice di compatibilità completa
AmbitoForme supportateLimite
SessioneUSE, VERSION(), DATABASE(), funzioni temporali UTC, variabili di sessione comuni e verifiche dello statoComportamento di compatibilità, non l'insieme completo delle variabili di un server MySQL
EsplorazioneSHOW DATABASES, SHOW TABLES, SHOW FULL COLUMNS, DESCRIBE, SHOW CREATE TABLESoltanto schemi e tabelle GribStream
SELECT sui metadatiProiezioni o *, DISTINCT, filtri booleani, ORDER BY, LIMIT e offset non negativiSoltanto tabelle del catalogo e di information_schema
SELECT meteoColonne fisse e meteo esplicite, alternativa GS_VALUE, calcoli, condizioni limitate, filtri e DISTINCT ristrettoNiente * meteo, join, sottoquery, raggruppamento o aggregazione
OrdinamentoFino a otto chiavi selezionate; ordinamento a partire dal tempo o top-N globale limitatoNiente espressioni, ordinali, chiavi duplicate o ordinamento globale senza limite
Prepared statementNormali segnaposto ? in selettori, espressioni, tempi, posizioni, membri e filtriFino a cinque prepared statement per connessione
Diagnostica avanzataEXPLAIN SELECT ...Convalida senza eseguire; EXPLAIN ANALYZE non è supportato
AnnullamentoKILL QUERY connection_id da una connessione che usa lo stesso tokenNon può ispezionare né annullare il lavoro di un altro token

Appendice: riferimenti per la configurazione dei client

TLS, compressione, buffering dei risultati, annullamento, timeout e pooling delle connessioni vengono configurati dal client o dal driver, non tramite SQL. Consulta la documentazione della libreria che usi davvero per connetterti.

ClientDocumentazione ufficialeUtile per
MySQL CLIOpzioni del client e opzioni di connessioneTLS, compressione, --quick, timeout e altre opzioni della CLI
PythonArgomenti di connessione di Connector/Python e read_sql di pandasTLS, compressione, pooling, opzioni di connessione e DataFrame a blocchi
JavaProprietà di configurazione di Connector/JTLS, compressione, timeout e comportamento JDBC
C# / .NETOpzioni di connessione di MySqlConnectorTLS, compressione, pooling e timeout
GoDocumentazione di go-sql-driver/mysqlOpzioni DSN, TLS, compressione, timeout e pooling
Node.jsDocumentazione di mysql2Connessioni, TLS, pool, prepared statement e streaming dei risultati
RustDocumentazione del crate mysqlTLS, compressione, pool e iterazione delle righe
CGuida all'API C di MySQLAPI di connessione e dei risultati
DuckDBEstensione MySQL di DuckDBCredenziali nelle variabili d'ambiente, ATTACH in sola lettura, TLS, query su tabelle remote e mysql_query
DBeaverImpostazioni della connessione MySQL e configurazione SSLConnessione MySQL 8, SSL, attendibilità dei certificati e navigazione del database