MySQL-kompatibler Zugriff

Wetterdaten mit Ihren vertrauten Werkzeugen abfragen

Verbinden Sie einen MySQL-Client oder eine MySQL-Bibliothek direkt mit GribStream. Ihr API-Token ist das Passwort, Datasets erscheinen als Datenbanken und Wetterdaten werden als gewöhnliche MySQL-Zeilen zurückgegeben.

Öffentliche Beta. Wir empfehlen diese Verbindung noch nicht für produktive Workloads. Das Verhalten kann sich während der Beta ändern. Bitte melden Sie Probleme oder senden Sie uns Feedback per E-Mail, oder besuchen Sie uns auf Discord.
Auf dieser Seite

Jetzt starten

Sie benötigen lediglich ein GribStream-API-Token und einen MySQL-kompatiblen Client oder eine entsprechende Bibliothek.

  1. Erstellen Sie ein kostenloses API-Token oder verwenden Sie ein vorhandenes Token.
  2. Verwenden Sie gribstream als Benutzernamen und das API-Token als Passwort.
  3. Wählen Sie ein Dataset wie gfs als Datenbank aus und stellen Sie die Verbindung her.
mysql --host=mysql.gribstream.com \
  --port=3307 \
  --user=gribstream \
  --password \
  --database=gfs \
  --quick

Der MySQL-Client für die Kommandozeile fragt das Token ab, ohne es im Shell-Verlauf zu speichern. --quick sorgt in diesem Befehl dafür, dass Zeilen bei ihrer Ankunft ausgegeben werden, statt auf das vollständige Ergebnis zu warten. Andere Clients verwenden andere Einstellungen für die schrittweise Ausgabe.

MySQL-Abfragen verwenden dasselbe API-Token und dasselbe Kontingent wie Abfragen über die HTTP-API. Die Nutzung richtet sich nach den Wetterdaten, die zur Beantwortung gelesen werden. Wenn Sie bei der Dataset-Auswahl unsicher sind, durchsuchen Sie den Modellkatalog; gfs ist ein sinnvoller globaler Ausgangspunkt.

Warum MySQL?

Sprachen und Werkzeuge mit einem MySQL-Treiber können über diese vertraute Verbindung GribStream abfragen. Sie müssen weder einen MySQL-Server betreiben noch Wetterdateien importieren oder eine neue Client-Bibliothek lernen.

Die Verbindung ist nur lesend und auf Wetterdaten zugeschnitten. Datasets erscheinen als Datenbanken, Wetterparameter lassen sich erkunden und nicht unterstütztes SQL führt zu einer klaren Fehlermeldung.

Ihre Werkzeuge verwendenArbeiten Sie per Kommandozeile, Anwendung, Notebook oder Datenbankintegration.
Den Katalog durchsuchenFinden Sie Datasets, Wetterparameter, Einheiten und exakte Selektoren vor der Abfrage.
Nur Benötigtes anfordernWählen Sie Zeiten, Orte und Wetterwerte aus, die als Zeilen zurückgegeben werden sollen.

Wetterspalte finden und abfragen

Jeder GribStream-Wetterparameter erscheint als datasetspezifische MySQL-Spalte. Wählen Sie zunächst ein Dataset und sehen Sie sich dessen Spalten an, bevor Sie die Abfrage schreiben:

SHOW FULL COLUMNS FROM gfs.timeseries;

Kopieren Sie aus dem Ergebnis den benötigten Wert unter Field. Comment enthält den lesbaren Namen, die native Einheit und die genaue Entsprechung mit GS_VALUE(...). Für die GFS-Temperatur in 2 m Höhe heißt die Spalte tmp_2_m_above_ground.

Diese drei Formen bezeichnen denselben Wetterparameter. Die Wetterspalte ist die einfachste SQL-Form; GS_VALUE übernimmt den exakten Selektor, wenn Sie eine vorhandene Abfrage der HTTP-API übersetzen oder den Selektor dynamisch wählen. Die JSON-Form ist der auf den Modellseiten angezeigte Selektor.

MySQL-Wetterspalte
tmp_2_m_above_ground
Exakte Form mit GS_VALUE
GS_VALUE(
  'TMP',
  '2 m above ground',
  ''
)
Selektor der HTTP-API
{
  "name": "TMP",
  "level": "2 m above ground",
  "info": ""
}

Kopieren Sie Wetterspaltennamen aus SHOW FULL COLUMNS oder gribstream.selector_columns, statt sie selbst zu bilden. Die meisten sind gut lesbar; lange oder kollidierende Namen erhalten ein deterministisches Suffix. Exakte Selektoren unterscheiden Groß- und Kleinschreibung.

Diese Abfrage liefert die nächsten sechs Stunden der GFS-Temperatur in 2 m Höhe für einen Punkt:

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;

Diese Wetterspalte veröffentlicht Werte in Kelvin. Prüfen Sie die Einheit in Comment oder im Katalog, statt sie aus Spaltenname oder Alias abzuleiten.

Das Ergebnis besteht aus gewöhnlichen Zeilen. Die folgenden Werte dienen nur als Beispiel:

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

Nutzen Sie die Katalogsuche, um Spalten nach Parameternamen zu finden, Einheiten zu prüfen und bei Bedarf den exakten JSON-Selektor oder die GS_VALUE-Expression zu erhalten.

Wenn die Verbindung bereits gfs ausgewählt hat, verwenden Sie FROM timeseries. Andernfalls geben Sie die Tabelle als gfs.timeseries an.

Mit einer funktionierenden Abfrage beginnen

Wählen Sie das Beispiel, das Ihrem Ziel am nächsten kommt, öffnen Sie es und ändern Sie nur Dataset, gefundene Wetterspalte, Zeiten oder Orte. Kopieren Sie Spaltennamen aus SHOW FULL COLUMNS, statt die Normalisierung eines Selektors zu erraten.

Mehrere benannte Orte über einen Zeitraum abfragen
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')
      );
Ein regelmäßiges Breiten- und Längengradgitter abfragen

Kleinere Werte für grid_step wählen mehr Punkte aus und verbrauchen mehr Kontingent. Beginnen Sie grob und verkleinern Sie das Gebiet, bevor Sie die Auflösung erhöhen.

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;
Einzelne exakte, nicht zusammenhängende Vorhersagezeiten abfragen
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;
Vorhersagen bestimmter Modellläufe abfragen
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;
Vorhersagen vor einem historischen Stichtag reproduzieren
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;
Ausgewählte Ensemble-Mitglieder abfragen
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;
Einen Wert umrechnen und nur Zeilen über einem Schwellenwert behalten
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;
Die wärmsten Gitterpunkte für eine Vorhersagezeit finden
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;

Aus Ihrer Programmiersprache verbinden

Wählen Sie unten eine Sprache aus. Jedes Beispiel stellt eine sichere Verbindung her, führt dieselbe kleine Wetterabfrage aus und liest deren Zeilen. Speichern Sie das Token in einer Umgebungsvariable oder Geheimnisverwaltung und niemals in einer versionierten Verbindungszeichenfolge.

MySQL-8-Client für die Kommandozeile. TLS wird automatisch ausgehandelt; --quick ermöglicht eine schrittweise Ausgabe.

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

Verwenden Sie für große Ergebnisse den Zeilen-Iterator, Streaming-Modus oder die entsprechende Funktion Ihres Treibers, damit nicht das gesamte Ergebnis im Speicher landet.

timeseries oder runs wählen

Jedes Dataset stellt dieselben zwei Formen von Wettertabellen bereit. Wählen Sie die Tabelle nach der zu beantwortenden Frage, nicht nach den gewünschten Ausgabespalten.

timeseries

Wählen Sie diese Tabelle für die beste zulässige Vorhersage zu jedem angeforderten Gültigkeitszeitpunkt.

Filtern nachforecasted_time

runs

Wählen Sie diese Tabelle, um Vorhersagen eines oder mehrerer bestimmter Modellläufe zu untersuchen.

Filtern nachforecasted_atundlead_time

forecasted_at ist der Initialisierungszeitpunkt des Modells. forecasted_time ist der vorhergesagte Gültigkeitszeitpunkt. lead_time ist die Differenz in Stunden und kann ausgewählt oder gefiltert werden.

Beispiel: Verlauf von Modellläufen abfragen
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;
Verfügbare Spalten, Abfragesteuerungen und Aktualitätsmetadaten
SpalteBedeutungHinweise
datasetCode des Datasets, das die Zeile erzeugt hatAuch der Name des MySQL-Schemas
forecasted_atInitialisierungszeitpunkt des ModellsBei timeseries ist <= der einzige unterstützte Operator für einen Lauf-Stichtag
forecasted_timeVorhergesagter GültigkeitszeitpunktPrimäre Zeitspalte für timeseries
lat, lon, nameAufgelöster Punkt und optionale Bezeichnungname darf NULL sein
memberKennung des Ensemble-MitgliedsNur für Ensemble-Datasets relevant
index_updated_atNeueste Aktualisierung der mit der Zeile verbundenen QuelldatenOptionale Aktualitätsmetadaten, getrennt von beiden Vorhersagezeitpunkten
lead_time, grid_stepVorhersagevorlauf in Stunden und angeforderter Rasterabstand in GradAuswählbar und filterbar; bei aufgezählten Punkten ist grid_step NULL
Datasetspezifische WetterspaltenNative Wetterwerte wie tmp_2_m_above_groundMit SHOW FULL COLUMNS auffindbar; die Werte sind DOUBLE

Wählen Sie index_updated_at, um die neueste Aktualisierung der Quelldaten jeder Zeile zu sehen. Dies sind Aktualitätsmetadaten, nicht der Initialisierungszeitpunkt; identifizieren Sie den Modelllauf mit forecasted_at.

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;

Datasets, Wetterspalten und exakte Selektoren finden

Raten Sie Spaltennamen, Parameterlevel oder Einheiten nicht. Finden Sie ein Dataset, prüfen Sie seine Wetterspalten und verwenden Sie die exakte Selektorzuordnung nur, wenn Sie die API-Form oder die GS_VALUE-Ausweichform benötigen.

1. Dataset finden

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;
Archivabdeckung und Takt vor einer großen historischen Abfrage prüfen
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 und archive_window beschreiben die veröffentlichte Abdeckung; ein rollierendes Fenster kann weiterwandern. catalog_updated_at zeigt die letzte Aktualisierung der Katalogmetadaten. Wählen Sie index_updated_at, wenn die Aktualität einzelner Zeilen wichtig ist.

2. Wetterspalten durchsuchen

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

3. Zuordnungen suchen oder exakten Selektor verwenden

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 ordnet jede Wetterspalte ihrem lesbaren Namen, den Einheiten, dem JSON-Selektor und der entsprechenden GS_VALUE-Expression zu. Die Abfrage benötigt eine exakte Bedingung für dataset.

Verwenden Sie den erzeugten column_name in gewöhnlichem SQL. Nutzen Sie GS_VALUE(name, level, info) für die direkte Übersetzung eines API-Selektors. Dieser gefsatmosmean-Selektor besitzt einen nicht leeren Wert für info und benötigt daher alle drei Argumente:

JSON-Parameterselektor
{
  "name": "CAPE",
  "level": "surface",
  "info": "ens mean"
}
Entsprechende MySQL-Expression
GS_VALUE(
  'CAPE',
  'surface',
  'ens mean'
)

Die Modellseiten zeigen weiterhin den kanonischen JSON-Selektor und seine exakte GS_VALUE-Form. Kopieren Sie SQL-Spaltennamen aus dem aktuellen Schema, in dem Kollisionen und lange Bezeichner bereits aufgelöst sind.

4. Vergleichbare Signale über Datasets finden

Gemeinsame Parameter listen übereinstimmende Wetterkonzepte, Ausgabeeinheiten und unterstützende Datasets auf. Verwenden Sie diesen Katalog vor Modellvergleichen und bestimmen Sie anschließend das exakte Selektor-Tupel jedes Datasets, statt identische Namen anzunehmen.

SELECT code, label, units, supported_datasets
FROM gribstream.shared_parameters
WHERE code = 'temperature_2m';
Beispiel: Windgeschwindigkeit in 10 m Höhe berechnen

Nachdem Sie die exakten 10-m-Selektoren der Windkomponenten für ifsoper gefunden haben, kombinieren Sie sie mit 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;
Maschinenlesbare Syntax und MySQL-Befehle zur Erkundung

Nutzen Sie diese Tabellen, wenn die Verbindung ihre SQL-Syntax und Beispiele selbst beschreiben soll:

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

Auch gängige MySQL-Befehle wie SHOW TABLES, SHOW COLUMNS, DESCRIBE und SHOW CREATE TABLE sind verfügbar. SHOW FULL COLUMNS enthält kurze Wetterbeschreibungen und exakte GS_VALUE-Zuordnungen:

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

Metadatenabfragen unterstützen Projektionen oder *, DISTINCT, ORDER BY, LIMIT mit nicht negativem Offset sowie begrenzte Kombinationen aus =, !=, LIKE, IN und NULL-Prüfungen.

Werte, Berechnungen und Filter

Berechnete Spalten verwenden vertraute SQL-Expressionen und können auf zuvor definierte Aliase verweisen. Geben Sie zuerst einer Wetterspalte einen Alias und verwenden Sie diesen anschließend weiter. Schreiben Sie Einheitenumrechnungen ausdrücklich aus:

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

Bedingungen für Wetterwerte unterstützen BETWEEN, numerisches IN, NULL-Prüfungen, Klammern, NOT und boolesche Kombinationen. Verbinden Sie Zeit-, Orts-, Lead-Time-, Mitglieder- und Modelllaufbedingungen mit AND; verwenden Sie OR nur innerhalb von Wetterwertbedingungen.

Funktionen und komplexere Berechnungen

Vertraute numerische Funktionen sind ABS, CEIL/CEILING, FLOOR, ROUND, SQRT, POW/POWER, MOD und TRUNCATE. Punktnamen unterstützen LOWER/LCASE, UPPER/UCASE, TRIM und das Unicode-zeichenbasierte CHAR_LENGTH. MySQLs bytezählendes LENGTH wird nicht unterstützt; verwenden Sie für Namen CHAR_LENGTH.

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;

Zusätzliche GribStream-Expressionsfunktionen verwenden den ausdrücklichen Namensraum func.. Expressionen unterstützen Literale, Klammern, unäre Operatoren, Arithmetik, Vergleiche und boolesche Kombinationen. Die Expressionsreferenz beschreibt registrierte func.-Aufrufe und ihre Argumente.

Einheiten, Datentypen und fehlende Werte

Wetterparameterspalten und GS_VALUE geben die im Katalog veröffentlichten nativen Einheiten zurück; ein Alias rechnet den Wert nicht um. Prüfen Sie has_code_table in gribstream.parameters, bevor Sie ein codiertes Feld als kontinuierliche Messung behandeln.

Wetterwerte, berechnete Expressionen, Breiten- und Längengrade werden als MySQL-DOUBLE zurückgegeben. Zeitspalten sind DATETIME(6); Dataset-, Punkt- und Mitgliederkennungen sind Strings. Fehlende numerische Werte oder Zeitpunkte werden zu SQL-NULL. Prüfen Sie sie mit IS NULL oder IS NOT NULL; = NULL wird nicht unterstützt.

Prepared Statements

Normale MySQL-Platzhalter funktionieren in Selektoren, Berechnungen, Zeitpunkten, Koordinaten, Mitgliedern und Wetterfiltern. Relative Zeitfunktionen werden bei der Ausführung des Prepared Statements ausgewertet, nicht bei seiner Vorbereitung.

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;
Begrenzte DISTINCT-Ergebnisse

Wetterabfragen können SELECT DISTINCT ... LIMIT n verwenden. Die Eindeutigkeit gilt für die gesamte ausgewählte Zeile. Diese Form lässt sich nicht mit ORDER BY kombinieren, und die Abfrage muss möglicherweise die gesamte begrenzte Auswahl lesen, bevor feststeht, dass keine weiteren eindeutigen Zeilen existieren. Verwenden Sie sie zum Deduplizieren einer begrenzten Auswahl, nicht anstelle enger Zeit- und Ortsgrenzen.

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;

Zeiträume, relative Zeiten und Zeitzonen

timeseries.forecasted_time ist die gültige Zeit. runs.forecasted_at ist der Initialisierungszeitpunkt des Modells. Zeiträume benötigen beide Grenzen und schließen bei BETWEEN beide Endpunkte ein.

Verwenden Sie für angrenzende Fenster einen halboffenen Zeitraum wie forecasted_time >= start AND forecasted_time < end. So wird der Grenzzeitpunkt beim Zusammenführen aufeinanderfolgender Abfragen nicht doppelt zurückgegeben.

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;
Unterstützte relative Zeitfunktionen und Zeitformate

NOW(), CURRENT_TIMESTAMP und UTC_TIMESTAMP() werden einmal pro Anweisung in UTC ausgewertet; Nachkommastellen wie bei NOW(6) sind zulässig. DATE_ADD, ADDDATE, DATE_SUB, SUBDATE und + INTERVAL/- INTERVAL unterstützen feste ganzzahlige Einheiten von Mikrosekunden bis Wochen. Monate und Jahre sind ausgeschlossen, weil ihre Dauer variiert.

Zeitliterale akzeptieren ein Datum, ein MySQL-Datetime, die ISO-Form mit T oder RFC 3339 mit Offset. Ein Literal ohne Offset wird als UTC interpretiert, außer es ist die lokale Eingabezeit für CONVERT_TZ.

Exakte, nicht zusammenhängende Zeiten auswählen

Verwenden Sie = für eine exakte Zeit und IN für mehrere nicht zusammenhängende Zeiten. Verwenden Sie forecasted_time bei timeseries und forecasted_at bei runs. Die Abfragebeispiele enthalten ein vollständiges Beispiel.

Einen lokalen Kalendertag abfragen und Zeitumstellungen berücksichtigen
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;

Benannte IANA-Zonen berücksichtigen Zeitumstellungen. Der Pariser Zeitraum oben umfasst den 25-Stunden-Tag am 25. Oktober 2026; dasselbe halboffene Muster bildet auch den 23-Stunden-Tag am 29. März korrekt ab. Lokale Eingabezeiten werden sofort in UTC umgerechnet; mehrdeutige oder nicht vorhandene Zeiten führen zu einem klaren Fehler. Die Ergebnisumrechnung unterstützt auch forecasted_at und index_updated_at. Behalten Sie die ursprüngliche UTC-Spalte, wenn dieselbe lokale Uhrzeit zweimal erscheinen kann. Projizierte Zeitzonen-Aliase dienen nur der Darstellung und können nicht in WHERE verwendet werden.

Verbindungen bleiben in UTC. SET time_zone akzeptiert UTC-äquivalente Werte, SYSTEM oder DEFAULT; verwenden Sie CONVERT_TZ für lokale Zeitpunkte.

Historischen Modelllauf-Stichtag anwenden

Bei timeseries schließt forecasted_at <= timestamp neuere Modellläufe aus. Dies ist der einzige unterstützte Operator für diese Spalte; verwenden Sie index_updated_at, wenn es um Datenaktualität geht. Die Abfragebeispiele enthalten ein vollständiges Stichtagsbeispiel.

Punkte, Grids, Lead Times und Ensembles

Verwenden Sie ein Koordinatenpaar für einen Punkt, eine Tupelliste für mehrere benannte Punkte oder Grenzen für Breiten- und Längengrad mit grid_step für ein regelmäßiges Grid. Die Abfragebeispiele zeigen jede Form.

  • Ein Punkt: lat = value AND lon = value verwenden.
  • Mehrere Punkte: (lat, lon) oder (lat, lon, name) mit IN verwenden.
  • Ein Grid: beide Koordinaten begrenzen und grid_step in Grad festlegen. Kleinere Schritte wählen mehr Punkte aus und verbrauchen mehr Kontingent.
Lead-Time-Filter

Verwenden Sie Zeitdauern in Anführungszeichen wie lead_time = '24h'. BETWEEN wählt einen geschlossenen Bereich; gepaarte Vergleiche >=/< drücken einen halboffenen Bereich aus; ein einzelner Vergleich liefert nur Minimum oder Maximum. Gültige Formen sind etwa '90m', '24h' oder '168h'.

Filter für Ensemble-Mitglieder

Prüfen Sie is_ensemble und das JSON-Array members in gribstream.datasets, bevor Sie Mitglieder auswählen. Nehmen Sie weder an, dass jedes Dataset ein Ensemble ist, noch dass Mitgliederkennungen denselben Bereich haben. Die Abfragebeispiele enthalten eine Auswahl von Mitgliedern.

Abfragen effizient halten

Das API-Kontingent richtet sich nach den zur Auswertung gelesenen Wetterdaten, nicht nach der Zahl der zurückgegebenen Zeilen. Eine Bedingung für einen Wetterwert oder berechneten Alias — etwa temp_c > 30 — kann Zeilen erst entfernen, nachdem diese Werte gelesen wurden. Eine große Abfrage kann daher viel Kontingent verbrauchen, obwohl ihre Filter nur wenige Zeilen liefern.

Bedingungen für Vorhersagezeit, Ort, Lead Time und Ensemble-Mitglied reduzieren die ausgewählten Daten. Den größten Einfluss haben folgende Entscheidungen:

  • Verwenden Sie timeseries, sofern Sie nicht ausdrücklich den Verlauf mehrerer Modellläufe benötigen.
  • Halten Sie Zeiträume kurz oder verwenden Sie eine Liste exakter Zeiten.
  • Wählen Sie nur die benötigten Wetterparameterspalten aus.
  • Bevorzugen Sie exakte Punkte gegenüber einem großen Grid und wählen Sie einen passenden grid_step.
  • Begrenzen Sie lead_time und wählen Sie nur benötigte Ensemble-Mitglieder.

Sortierung zur Erkundung verwenden

ORDER BY ist hauptsächlich für interaktive Sitzungen und Datenexploration gedacht, wenn ein sofort lesbares Ergebnis zusätzlichen Aufwand rechtfertigt. Bei einer begrenzten Abfrage können Zeilen in der Regel schrittweise zurückgegeben werden, wenn zuerst nach der primären Zeitspalte sortiert wird. Verwenden Sie forecasted_time für timeseries oder forecasted_at für runs, wählen Sie die Richtung und ergänzen Sie bei Bedarf ausgewählte Spalten oder Aliase als weitere Schlüssel.

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;

Beginnen Sie bei runs mit forecasted_at und begrenzen Sie beide Seiten von lead_time. Ist ein sortiertes Ergebnis zu groß für eine sichere Verarbeitung, verkleinern Sie die Auswahl oder entfernen Sie ORDER BY und sortieren in Ihrer Anwendung.

Lassen Sie ORDER BY bei historischen Nachladungen und anderen großen Datenabrufen weg. Sortieren Sie nach dem Empfang, falls die Reihenfolge wichtig ist. So begrenzt die Sortierung nicht den Durchsatz, insbesondere bei breiten Auswahlen mit Wetterwertfiltern.

Globale Ranglisten

Eine Sortierung, die mit einem Wetterwert beginnt, muss vor der ersten Ausgabe die gesamte Auswahl berücksichtigen und benötigt daher LIMIT. Verwenden Sie diese Form für Ranglisten, nicht für schrittweise Ausgabe. Die Abfragebeispiele enthalten ein vollständiges Beispiel für die wärmsten Punkte.

LIMIT für die Ergebnisgröße verwenden, nicht für das Kontingent

LIMIT hält interaktive Ausgaben klein, bestimmt aber nicht die Menge der gelesenen Wetterdaten. Filter und Sortierung können wesentlich mehr Daten lesen, als das Ergebnis enthält. Reduzieren Sie den Kontingentverbrauch mit den Auswahlbedingungen oben.

Erweitert: Abfrage mit EXPLAIN prüfen

Die meisten Abfragen benötigen kein EXPLAIN. Stellen Sie es einer Wetterabfrage voran, um die Anweisung zu prüfen und Diagnoseinformationen anzuzeigen, ohne Wetterzeilen abzurufen oder Kontingent zu verbrauchen. Es dient vor allem der Fehlerbehebung und dem Support.

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;

Schrittweise Ausgabe, Abbruch und Fehler

Zeilen werden schrittweise verfügbar. Ob sie sofort erscheinen, hängt vom MySQL-Client oder der Bibliothek ab. Verwenden Sie für große Abfragen eine ungepufferte, streamende, iterative oder blockweise Ergebnisschnittstelle. Die genaue Einstellung ist clientspezifisch; der Client-Anhang verlinkt die Dokumentation.

  • Client trennt die Verbindung: Das Schließen der Verbindung bricht ihre aktive Abfrage ab.
  • MySQL-Client: Mit Ctrl+C stoppen Sie die aktive Abfrage.
Abbruch in Anwendungen und gleichzeitige Abfragen

Eine MySQL-Verbindung kann jeweils eine aktive Anweisung ausführen. Verarbeiten oder schließen Sie das Ergebnis, bevor Sie die Verbindung wiederverwenden. Nutzen Sie einen Verbindungspool, wenn wirklich gleichzeitige Abfragen erforderlich sind. Jede Pool-Verbindung authentifiziert sich eigenständig.

Verwenden Sie die Abbruch-API oder den abbrechbaren Abfragekontext Ihres Treibers; Bezeichnung und Verhalten hängen vom Client ab. Zum ausdrücklichen Abbruch führen Sie KILL QUERY <connection_id> über eine weitere Verbindung mit demselben API-Token aus. Die Zielverbindung bleibt wiederverwendbar.

MySQL-Fehlercodes

Fehler verwenden gewöhnliche MySQL-Antworten, damit vorhandene Clients sie verständlich anzeigen:

SituationMySQL-CodeAnzeige
SQL-Syntax1064Parser- oder Validierungsfehler nahe der nicht unterstützten Eingabe.
Nicht unterstütztes SQL1235Konkrete Erklärung des nicht unterstützten Konstrukts.
Ungültiges Token1045Zugriff während der Verbindungsanmeldung verweigert.
Abgebrochene Abfrage1317Die Ausführung der Abfrage wurde unterbrochen.
Nutzungslimit1226Die Meldung nennt, soweit verfügbar, die Wartezeit vor dem nächsten Versuch.

Fehlerbehebung

Bandbreite bei großen Ergebnissen reduzieren

Aktivieren Sie für große Abrufe die MySQL-Protokollkompression, wenn Ihr Client oder Treiber sie unterstützt. Die Einstellung ist clientspezifisch; verwenden Sie die offizielle Dokumentation im Anhang.

MySQL-Client: Fügen Sie beim Verbinden --compression-algorithms=zstd hinzu.

Prüfen Sie die ausgehandelte Kompression in jedem Client mit:

SHOW SESSION STATUS LIKE 'Compression%';
Die TLS-Verbindung kann Zertifikat oder Hostnamen nicht prüfen

Verbinden Sie sich mit mysql.gribstream.com, nicht mit der IP-Adresse, und verwenden Sie einen aktuellen vertrauenswürdigen CA-Speicher. Lassen Sie die Identitätsprüfung aktiviert; sonst können ein falscher Hostname, eine Abfangverbindung oder eine unvollständige Vertrauenskette verborgen bleiben. Die Einstellungen unterscheiden sich je nach Client; siehe Client-Anhang.

Zeitüberschreitung beim Verbinden

Prüfen Sie, ob Ihr Netzwerk ausgehende TCP-Verbindungen zu mysql.gribstream.com auf Port 3307 zulässt. Unternehmensfirewalls und eingeschränkte Notebook-Umgebungen blockieren manchmal nicht standardmäßige Datenbankports.

Eine Wetterspalte ist unbekannt oder ein exakter Selektor wird abgelehnt

Führen Sie SHOW FULL COLUMNS FROM <dataset>.timeseries aus und kopieren Sie den Wert unter Field, statt ihn zu erraten. Für exakte Selektoren in SQL kopieren Sie gs_value_sql aus gribstream.selector_columns; Selektoren unterscheiden Groß- und Kleinschreibung und dürfen weder übersetzt noch normalisiert werden.

Ein Wert hat eine unerwartete Skala, Einheit oder Bedeutung

GribStream gibt die veröffentlichten nativen Werte des Selektors zurück. Prüfen Sie units, description und has_code_table im Katalog sowie das exakte level und info. Einheitenumrechnungen sind ausdrückliche berechnete Spalten; ein AS-Alias ändert die Daten nicht.

Zeitraum, Zeitzone oder sortierte Abfrage wird abgelehnt

Geben Sie beide Zeitgrenzen an. Wandeln Sie Grenzen in lokaler Uhrzeit mit CONVERT_TZ in UTC um; erraten Sie keine mehrdeutige oder nicht vorhandene Zeit während einer Zeitumstellung. Verkleinern Sie bei einer unsicheren Sortierung die Auswahl oder entfernen Sie ORDER BY und sortieren in der Anwendung.

Bis zum Ende der Abfrage erscheinen keine Zeilen

Ihr Client puffert das Ergebnis. Wählen Sie den ungepufferten, streamenden, iterativen oder blockweisen Ergebnismodus. MySQL-Client: Verbinden Sie sich erneut mit --quick. pandas: Verwenden Sie chunksize. Für andere Clients finden Sie Hinweise zur Ergebnisverarbeitung im Anhang.

Die Abfrage erhält MySQL-Fehler 1226

Reduzieren Sie die Anzahl gleichzeitiger Abfragen oder warten Sie die in der Meldung genannte Zeit. Sofortige Wiederholungsversuche verlängern das Limit nur.

Verbindung als selbstbeschreibendes Werkzeug für KI-Agenten nutzen

Jeder allgemeine MySQL-Datenbankconnector — auch als MCP-Werkzeug bereitgestellt — kann sich mit mysql.gribstream.com:3307 verbinden. Hinterlegen Sie das API-Token in der Geheimniskonfiguration des Connectors.

Geben Sie dem Agenten die folgende Anweisungsdatei. Über Schema und Katalogtabellen kann er Datasets, Wetterspalten, Einheiten, exakte Selektorzuordnungen, Dialektregeln und ausführbare Beispiele ermitteln, bevor er eine Abfrage erstellt.

  1. gribstream.sql_dialect und gribstream.query_examples lesen.
  2. gribstream.datasets durchsuchen und danach SHOW FULL COLUMNS für die gewählte Wettertabelle ausführen.
  3. gribstream.selector_columns verwenden, wenn eine exakte JSON-Selektor- oder GS_VALUE-Zuordnung benötigt wird.
  4. Die kleinste begrenzte Abfrage erstellen und ausführen, die die Frage beantwortet.
  5. EXPLAIN nur zum Prüfen oder Untersuchen einer Abfrage verwenden.

GribStream-MySQL-Skill für Agenten herunterladen — mit vollständigem Ablauf, Syntaxgrenzen und Regeln für den Datenabruf.

Unterstütztes SQL und bewusste Grenzen

Wetterabfragen

  • SELECT aus timeseries und runs
  • Gefundene Wetterspalten und exakte GS_VALUE-Ausweichformen
  • Berechnete Aliase, vertraute numerische und Textfunktionen sowie dokumentierte func.-Aufrufe
  • Zeiträume und Listen, Punkte, Grids, Mitglieder und Lead Times
  • Boolesche Wetterwertfilter
  • Zeit zuerst sortieren oder begrenztes globales Top-N
  • Begrenztes DISTINCT, Prepared Statements und optionale EXPLAIN-Diagnose

Bewusst nicht unterstützt

  • Schreibzugriffe, DDL, Transaktionen und Sperren
  • Joins, Unterabfragen, Aggregation und Gruppierung
  • SELECT * für Wetterergebnisse
  • Unbegrenzte globale Sortierung und Sortierexpressionen
  • Von null abweichende Offsets für Wetterergebnisse
  • Nicht aufgeführte MySQL-Funktionen und implizite SQL-Konvertierungen

Diese Grenzen halten Abfragen vorhersehbar, Ergebnisse schrittweise lesbar und Fehlermeldungen klar, statt SQL mit überraschendem Verhalten zu akzeptieren.

Vollständige Kompatibilitätsmatrix
BereichUnterstützte FormenGrenze
SitzungUSE, VERSION(), DATABASE(), UTC-Zeitfunktionen, häufige Sitzungsvariablen und StatusabfragenKompatibilitätsverhalten, kein vollständiger Variablensatz eines MySQL-Servers
ErkundungSHOW DATABASES, SHOW TABLES, SHOW FULL COLUMNS, DESCRIBE, SHOW CREATE TABLENur GribStream-Schemas und -Tabellen
Metadaten-SELECTProjektionen oder *, DISTINCT, boolesche Filter, ORDER BY, LIMIT und nicht negative OffsetsNur Katalog- und information_schema-Tabellen
Wetter-SELECTExplizite feste und gefundene Wetterspalten, GS_VALUE-Ausweichform, Berechnungen, begrenzte Bedingungen, Filter und eingeschränktes DISTINCTKein Wetter-*, keine Joins, Unterabfragen, Gruppierung oder Aggregation
SortierungBis zu acht ausgewählte Schlüssel; Zeit zuerst oder begrenztes globales Top-NKeine Expressionen, Ordinalpositionen, doppelten Schlüssel oder unbegrenzte globale Sortierung
Prepared StatementsNormale ?-Platzhalter in Selektoren, Expressionen, Zeiten, Orten, Mitgliedern und FilternBis zu fünf Prepared Statements pro Verbindung
Erweiterte DiagnoseEXPLAIN SELECT ...Prüft ohne Ausführung; EXPLAIN ANALYZE wird nicht unterstützt
AbbruchKILL QUERY connection_id über eine Verbindung mit demselben TokenArbeit eines anderen Tokens kann weder untersucht noch abgebrochen werden

Anhang: Konfigurationsreferenzen der Clients

TLS, Kompression, Ergebnispufferung, Abbruch, Zeitüberschreitungen und Verbindungspools werden im Client oder Treiber statt per SQL konfiguriert. Verwenden Sie die Dokumentation der tatsächlich eingesetzten Bibliothek.

ClientOffizielle DokumentationHilfreich für
MySQL CLIClient-Optionen und VerbindungsoptionenTLS, Kompression, --quick, Zeitüberschreitungen und weitere CLI-Optionen
PythonVerbindungsargumente von Connector/Python und pandas read_sqlTLS, Kompression, Pooling, Verbindungsoptionen und blockweise DataFrames
JavaKonfigurationseigenschaften von Connector/JTLS, Kompression, Zeitüberschreitungen und JDBC-Verhalten
C# / .NETVerbindungsoptionen von MySqlConnectorTLS, Kompression, Pooling und Zeitüberschreitungen
GoDokumentation von go-sql-driver/mysqlDSN-Optionen, TLS, Kompression, Zeitüberschreitungen und Pooling
Node.jsDokumentation von mysql2Verbindungen, TLS, Pools, Prepared Statements und Ergebnis-Streaming
RustDokumentation des mysql-CratesTLS, Kompression, Pools und Zeileniteration
CLeitfaden zur MySQL-C-APIVerbindungs- und Ergebnis-APIs
DuckDBMySQL-Erweiterung von DuckDBZugangsdaten in Umgebungsvariablen, schreibgeschütztes ATTACH, TLS, Abfragen entfernter Tabellen und mysql_query
DBeaverMySQL-Verbindungseinstellungen und SSL-KonfigurationMySQL-8-Verbindung, SSL, Zertifikatsvertrauen und Datenbanknavigation