hive_metastore
Apache Hive Metastore als nativen DuckDB-Katalog anbinden und die enthaltenen Daten einfach lesen und schreiben!
Maintainer: ilum-cloud, thijs-s
Installation und Laden
INSTALL hive_metastore FROM community;LOAD hive_metastore;Beispiel
-- Attach the Hive Metastore as a catalog in DuckDBATTACH 'thrift://<host>:<port>' AS <catalog_name> (TYPE hive_metastore);
-- Query any HMS table as if it were native DuckDBSELECT * FROM <catalog_name>.<schema_name>.<table_name>;
-- For object-storage-backed tables, configure storage secrets as usualCREATE SECRET s3 (TYPE S3, KEY_ID 'access-key', SECRET 'secret-key', ENDPOINT 'localhost:9000');
-- Create a managed table (requires WAREHOUSE_LOCATION on ATTACH)ATTACH 'thrift://localhost:9083' AS hms (TYPE hive_metastore, WAREHOUSE_LOCATION 's3a://my-bucket/warehouse');CREATE TABLE hms.default.events (id INT, ts TIMESTAMP, payload VARCHAR);INSERT INTO hms.default.events VALUES (1, NOW(), 'hello');Über hive_metastore
Die DuckDB-Hive-Metastore-Erweiterung verbindet DuckDB über das Thrift-Protokoll mit einem Apache Hive Metastore und stellt HMS-Datenbanken und -Tabellen als erstklassigen DuckDB-Katalog bereit. Lesen, Schreiben und Tabellenerstellung sind nativ implementiert; die Format-Scanner von DuckDB verarbeiten die zugrunde liegenden Datendateien.
Unterstützte Tabellenformate
| Format | SELECT | INSERT | CTAS | CREATE TABLE |
|---|---|---|---|---|
| Parquet | yes | yes (non-partitioned) | yes | yes |
| CSV / Text | yes | yes (non-partitioned) | yes | yes |
| Delta Lake | yes | via delta extension |
no | no |
| Iceberg | yes¹ | no | no | no |
| Avro | yes | no (read-only) | no | metastore entry only |
| ORC | partial² | no | no | partial² |
¹ Von Spark erstellte Iceberg-Tabellen können unsafe_enable_version_guessing = true erfordern.
² Die ORC-Unterstützung hängt vom zugrunde liegenden ORC-Scanner von DuckDB ab.
UPDATE, DELETE und COPY TO gegen HMS-Tabellen werden nicht unterstützt – das entspricht der nur-anhängenden Semantik von Hive.
Wichtige Funktionen
- Direkte Thrift-Kommunikation mit dem Metastore – kein REST-Katalog oder Hadoop-Classpath nötig
- Automatische Formaterkennung aus den HMS-Metadaten
inputFormat/outputFormat/ SerDe - Schema- und Datenbankerkennung, einschließlich komplexer Typen (struct, array, map) aus von Spark erstellten Tabellen
- Hive-artige Partitionierung wird beim Scan automatisch angewendet
- S3-kompatibler Objektspeicher (AWS S3, MinIO usw.) über DuckDBs
httpfs - Pfadnormalisierung für Alibaba OSS (
oss://), Tencent COS (cos://,cosn://) – umgeschrieben nachs3://, sodass jedes S3-kompatible Secret funktioniert - Behandlung logischer Avro-Typen: Roundtrip von
date,timestamp-microsunddecimalmit korrekten SQL-Typen - INSERT und CTAS schreiben pro Anweisung eine einzelne Datei
data_<uuid>.<ext>an dieLOCATIONder Tabelle; nebenläufige Schreiber kollidieren nicht - CREATE TABLE erzeugt verwaltete (
MANAGED_TABLE) oder externe (EXTERNAL_TABLE) Einträge mit korrekten Hive-Typzeichenketten, interoperabel mit Spark- und Trino-Readern
Einen Metastore anbinden
ATTACH 'thrift://<host>:<port>' AS <catalog_name> (<options>);Optionen:
TYPE(erforderlich) – musshive_metastoreseinWAREHOUSE_LOCATION– Standardbasispfad für verwaltete Tabellen, die perCREATE TABLEohne expliziteLOCATIONerzeugt werden. Wenn gesetzt, liegen verwaltete Tabellen unter<warehouse>/<db>/<table>.DEFAULT_SCHEMA– Schema, das verwendet wird, wenn eine Abfrage den Schemanamen weglässt. Standard istdefault.
Tabellen erstellen
ATTACH 'thrift://localhost:9083' AS hms (TYPE hive_metastore, WAREHOUSE_LOCATION 's3a://my-bucket/warehouse');
-- Managed Parquet table (default format)CREATE TABLE hms.default.sales (id INT, amount DECIMAL(10,2), region VARCHAR);
-- External table with explicit format and locationCREATE TABLE hms.default.events (id INT, ts TIMESTAMP) WITH (location='s3a://my-bucket/events', format='parquet');
-- Avro: metastore entry only, written by Spark/HiveCREATE TABLE hms.default.shipments (id INT, ship_date DATE) WITH (location='s3a://my-bucket/shipments', format='avro');Format und Speicherort werden über die üblichen SQL-WITH (...)-Angaben übergeben.
Fehlen sowohl LOCATION als auch WAREHOUSE_LOCATION, schlägt CREATE TABLE mit einer klaren Fehlermeldung fehl.
Delta, Iceberg und Avro lesen
Die Erweiterung delegiert das Lesen der Daten an die Format-Scanner von DuckDB. Installieren und laden Sie die betreffende Erweiterung vor der Abfrage:
INSTALL delta; LOAD delta;INSTALL iceberg; LOAD iceberg;INSTALL avro; LOAD avro;Anmeldedaten für Objektspeicher verwenden den üblichen DuckDB-Ablauf CREATE SECRET:
CREATE SECRET s3 ( TYPE S3, KEY_ID 'access-key', SECRET 'secret-key', ENDPOINT 's3.amazonaws.com');Hinzugefügte Funktionen
Diese Erweiterung fügt keine Funktionen hinzu.
Überladene Funktionen
Diese Erweiterung fügt keine Funktionsüberladungen hinzu.
Hinzugefügte Typen
Diese Erweiterung fügt keine Typen hinzu.
Hinzugefügte Einstellungen
Diese Erweiterung fügt keine Einstellungen hinzu.