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 extensionLOAD yaml;
-- Query YAML files directlySELECT * FROM 'config.yaml';SELECT * FROM 'data/*.yml' WHERE active = true;
-- Create tables with YAML columnsCREATE TABLE configs(id INTEGER, config YAML);INSERT INTO configs VALUES (1, E'server: production\nport: 8080\nfeatures: [logging, metrics]');
-- Extract data using YAML functionsSELECT config ->> '$.server' AS environment, -- Arrow operator yaml_extract(config, '$.port') AS port, yaml_value(config, '$.port') AS port_scalarFROM configs;
-- Analyze YAML structureSELECT yaml_structure(config) FROM configs;-- Returns: {"server":"VARCHAR","port":"UBIGINT","features":["VARCHAR"]}
-- Check containment and merge documentsSELECT 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 JSONSELECT yaml_to_json(config) AS json_config FROM configs;SELECT to_yaml({name: 'John', age: 30}) AS yaml_person;
-- Write query results to YAMLCOPY (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()undread_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 mityaml_merge_patch()und Strukturanalyse mityaml_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 TOund 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.