yaml

YAML-Dateien in DuckDB lesen mit nativer YAML-Typunterstützung, umfassenden Extraktionsfunktionen und nahtloser JSON-Interoperabilität

Maintainer: teaguesterling

Installation und Laden

INSTALL yaml FROM community;
LOAD yaml;

Beispiel

-- Load the extension
LOAD yaml;
-- Query YAML files directly
SELECT * FROM 'config.yaml';
SELECT * FROM 'data/*.yml' WHERE active = true;
-- Create tables with YAML columns
CREATE TABLE configs(id INTEGER, config YAML);
INSERT INTO configs VALUES (1, E'server: production\nport: 8080\nfeatures: [logging, metrics]');
-- Extract data using YAML functions
SELECT
config ->> '$.server' AS environment, -- Arrow operator
yaml_extract(config, '$.port') AS port,
yaml_value(config, '$.port') AS port_scalar
FROM configs;
-- Analyze YAML structure
SELECT yaml_structure(config) FROM configs;
-- Returns: {"server":"VARCHAR","port":"UBIGINT","features":["VARCHAR"]}
-- Check containment and merge documents
SELECT yaml_contains(config, 'server: production') AS is_prod FROM configs;
SELECT yaml_merge_patch(config, 'debug: true') AS with_debug FROM configs;
-- Convert between YAML and JSON
SELECT yaml_to_json(config) AS json_config FROM configs;
SELECT to_yaml({name: 'John', age: 30}) AS yaml_person;
-- Write query results to YAML
COPY (SELECT * FROM users) TO 'output.yaml' (FORMAT yaml, STYLE block);

Über yaml

Die YAML-Erweiterung bringt umfassende YAML-Unterstützung nach DuckDB und ermöglicht die nahtlose Integration von YAML-Daten in SQL-Abfragen.

Wichtige Funktionen:

  • Nativer YAML-Typ: vollständige YAML-Typunterstützung mit automatischem Casting zwischen YAML, JSON und VARCHAR
  • Dateilesen: YAML-Dateien mit read_yaml() und read_yaml_objects() lesen, inklusive Mehrfachdokumenten, Sequenzen auf oberster Ebene und robuster Fehlerbehandlung
  • Direktes Abfragen von Dateien: YAML-Dateien direkt mit der Syntax FROM 'file.yaml' abfragen
  • Extraktionsfunktionen: YAML-Daten mit yaml_extract(), yaml_type(), yaml_exists(), yaml_value(), dem Operator ->> und pfadbasierter Extraktion abfragen
  • Dokumentoperationen: Prüfung auf Enthaltensein mit yaml_contains(), Zusammenführen mit yaml_merge_patch() und Strukturanalyse mit yaml_structure()
  • Typerkennung: umfassende automatische Typerkennung für temporale Typen (DATE, TIME, TIMESTAMP), optimale numerische Typen und boolesche Werte
  • Angabe von Spaltentypen: Spaltentypen beim Lesen von YAML-Dateien explizit festlegen, um ein konsistentes Schema zu erhalten
  • YAML-Ausgabe: Abfrageergebnisse mit COPY TO und konfigurierbaren Formatierungsstilen in YAML-Dateien schreiben
  • Mehrfachdokumente: Dateien mit mehreren durch --- getrennten YAML-Dokumenten verarbeiten
  • Fehlererholung: gültige Dokumente weiterverarbeiten, auch wenn einzelne Fehler enthalten
  • JSON-Interoperabilität: nahtlose Umwandlung zwischen YAML- und JSON-Formaten
  • Frontmatter-Extraktion: YAML-Frontmatter-Metadaten aus anderen Dateien extrahieren

Beispielanwendungen:

  • Verwaltung und Abfrage von Konfigurationsdateien
  • Analyse und Verarbeitung von Logdateien
  • Datenmigration zwischen YAML und relationalen Formaten
  • Integration mit YAML-basierten CI/CD-Pipelines
  • Verarbeitung von Kubernetes-Manifesten und Helm-Charts

Die Erweiterung basiert auf yaml-cpp und folgt den Best Practices der DuckDB-Erweiterungsentwicklung, um zuverlässige Leistung und plattformübergreifende Kompatibilität zu gewährleisten.

Hinweis: Diese Erweiterung wurde vorwiegend mit Claude und Claude Code als Übung in KI-gestützter Entwicklung geschrieben.

Hinzugefügte Funktionen

function_name function_type description comment examples
copy_format_yaml scalar NULL NULL
format_yaml scalar NULL NULL
from_yaml scalar NULL NULL
parse_yaml table NULL NULL
read_yaml table NULL NULL
read_yaml_frontmatter table NULL NULL
read_yaml_objects table NULL NULL
to_yaml scalar NULL NULL
value_to_yaml scalar NULL NULL
yaml scalar NULL NULL
yaml_agg aggregate NULL NULL
yaml_array_elements table NULL NULL
yaml_array_length scalar NULL NULL
yaml_build_object scalar NULL NULL
yaml_contains scalar NULL NULL
yaml_each table NULL NULL
yaml_exists scalar NULL NULL
yaml_extract scalar NULL NULL
yaml_extract_path scalar NULL NULL
yaml_extract_path_text scalar NULL NULL
yaml_extract_string scalar NULL NULL
yaml_get_default_style scalar NULL NULL
yaml_get_max_expansion_nodes scalar NULL NULL
yaml_get_max_input_size scalar NULL NULL
yaml_get_max_nesting_depth scalar NULL NULL
yaml_keys scalar NULL NULL
yaml_merge_patch scalar NULL NULL
yaml_set_default_style scalar NULL NULL
yaml_set_max_expansion_nodes scalar NULL NULL
yaml_set_max_input_size scalar NULL NULL
yaml_set_max_nesting_depth scalar NULL NULL
yaml_structure scalar NULL NULL
yaml_to_json scalar NULL NULL
yaml_type scalar NULL NULL
yaml_valid scalar NULL NULL
yaml_value scalar NULL NULL

Überladene Funktionen

function_name function_type description comment examples
->> scalar NULL NULL

Hinzugefügte Typen

type_name type_size logical_type type_category internal
yaml 16 VARCHAR STRING true

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.