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 DuckDB
ATTACH 'thrift://<host>:<port>' AS <catalog_name> (TYPE hive_metastore);
-- Query any HMS table as if it were native DuckDB
SELECT * FROM <catalog_name>.<schema_name>.<table_name>;
-- For object-storage-backed tables, configure storage secrets as usual
CREATE 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 nach s3://, sodass jedes S3-kompatible Secret funktioniert
  • Behandlung logischer Avro-Typen: Roundtrip von date, timestamp-micros und decimal mit korrekten SQL-Typen
  • INSERT und CTAS schreiben pro Anweisung eine einzelne Datei data_<uuid>.<ext> an die LOCATION der 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) – muss hive_metastore sein
  • WAREHOUSE_LOCATION – Standardbasispfad für verwaltete Tabellen, die per CREATE TABLE ohne explizite LOCATION erzeugt werden. Wenn gesetzt, liegen verwaltete Tabellen unter <warehouse>/<db>/<table>.
  • DEFAULT_SCHEMA – Schema, das verwendet wird, wenn eine Abfrage den Schemanamen weglässt. Standard ist default.

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 location
CREATE TABLE hms.default.events (id INT, ts TIMESTAMP)
WITH (location='s3a://my-bucket/events', format='parquet');
-- Avro: metastore entry only, written by Spark/Hive
CREATE 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.