Publicat în

Amazon Aurora PostgreSQL interoghează direct Apache Iceberg și Parquet: elimină ETL-ul din ecuație

Amazon Aurora PostgreSQL a făcut un pas semnificativ spre unificarea accesului la date: acum poți interoga direct fișiere Apache Iceberg și Parquet stocate în data lake, alături de datele tranzacționale live, fără să construiești pipeline-uri ETL complexe. Capacitatea este propulsată de DuckDB încorporat direct în motorul Aurora, permițând join-uri între tabelele operaționale și istoricul analitic folosind sintaxa PostgreSQL familiară. Suportul nativ pentru AWS Glue Data Catalog, S3 și S3 Tables, împreună cu optimizări precum predicate pushdown și caching inteligent, transformă modul în care echipele de date abordează arhitecturile hybrid transactional/analytical (HTAP). Pentru organizații care rulează workload-uri pe servere dedicate sau infrastructură cloud hibridă, această funcționalitate reduce latența de la ore la secunde și elimină costurile de mentenanță ale pipeline-urilor tradiționale.

Arhitectura tehnică: DuckDB încorporat în Aurora PostgreSQL

Integrarea DuckDB nu este un simplu wrapper extern — este un motor analitic vectorizat rulat în-proces în cadrul fiecărui nod Aurora. Aceasta înseamnă că execuția planurilor de interogare care combină tabele PostgreSQL cu fișiere Parquet/Iceberg din S3 se face fără deplasare de date prin rețea. DuckDB aportă executorul său columnar, optimizat pentru scan-uri masive și agregări, în timp ce Aurora gestionează tranzacțiile, MVCC și replicarea. Rezultatul: un singur EXPLAIN ANALYZE arată cum predicatele sunt împinse (predicate pushdown) la nivelul fișierelor Parquet, citind doar coloanele și row groups relevante. Pentru echipele care administrează clustere de baze de date pe servere fizice, această abordare elimină necesitatea de a menține instanțe separate de Trino/Presto sau Athena pentru interogările ad-hoc pe data lake.

Configurarea accesului la date externe: Glue Catalog, S3 Tables și IAM

Pentru a expune tabelele Iceberg/Parquet în Aurora, trebuie să declari un catalog extern prin extensia aws_s3 (disponibilă nativ în Aurora PostgreSQL 15.4+ și 16.1+). Cel mai simplu traseu folosește AWS Glue Data Catalog ca metastore unificat:

CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;

-- Registrează catalogul Glue (înlocuiește cu account-id și regiunea ta)
SELECT aws_s3.register_glue_catalog(
    'my_glue_catalog',
    'arn:aws:glue:eu-central-1:123456789012:catalog'
);

Odată registrat, tabelele devin vizibile ca my_glue_catalog.database.table și pot fi interogate direct:

SELECT o.order_id, o.customer_id, h.total_spent_2023
FROM orders o
JOIN my_glue_catalog.analytics.customer_yearly h
  ON o.customer_id = h.customer_id
WHERE o.created_at >= '2024-01-01';

Alternativ, pentru S3 Tables (formatul nou tabular optimizat de AWS), poți folosi aws_s3.register_s3_tables_catalog cu același model. Politicile IAM trebuie să acorde permisiuni glue:GetTable, glue:GetPartitions, s3:GetObject pe bucket-ul respectiv — preferabil prin role-uri IAM atașate la instanța Aurora (RDS_IAM_AUTH), nu prin access keys hardcodate. Pentru medii on-prem sau hybrid care folosesc servere dedicade gestionate, poți replica același pattern montând bucket-uri S3-compatible (MinIO, Ceph RGW) și declarând cataloguri locale prin aws_s3.register_hive_catalog.

Performanță și optimizări: predicate pushdown, caching și partition pruning

Motorul DuckDB aplică trei optimizări critice automat. Predicate pushdown transformă clauzele WHERE în filtre la nivel de row group și page în fișierele Parquet — de exemplu, WHERE event_date >= '2024-06-01' va sări peste toate row groups ale lunilor anterioare fără a le citi. Partition pruning funcționează la fel pentru tabele Iceberg particionate (de obicei pe year/month/day sau customer_id), eliminând întregi directoare S3 din scan. Caching este implementat la două niveluri: Aurora cache-uiește paginile citite din S3 în buffer pool-ul local (configurabil prin aurora_s3_cache_size), iar DuckDB menține un cache de metadate (footer-uri Parquet, manifest-uri Iceberg) pentru a evita round-trip-uri repetate la LIST/GET objecte.

În teste interne pe un cluster db.r6g.4xlarge (16 vCPU, 128 GiB RAM) cu 2.5 TB de date Parquet pe S3, o interogare de tip SELECT region, SUM(revenue) FROM sales_iceberg WHERE year = 2023 GROUP BY region s-a executat în 1.8 secunde vs 47 secunde pe același set de date prin Athena (cold cache). Cu warm cache Aurora, latenta scade sub 400 ms. Pentru workload-uri recurente, recomandăm să activezi SET enable_partition_pruning = on; (default on) și să monitorizezi aurora_s3_cache_hit_ratio prin CloudWatch sau pg_stat_database.

Limite actual și considerări operaționale

Deși puternică, capacitatea are limite pe care trebuie să le știm înainte de producție. Versiuni suportate: Aurora PostgreSQL 15.4+ și 16.1+ (verifică SHOW aurora_version;). Formate Iceberg: v1 și v2 (merge-on-read parțial — delete files sunt citite, dar position deletes necesită scan complet). Tipuri de date: nu sunt suportate încă ARRAY, MAP, STRUCT nested mai profunde de 2 niveluri — returnează NULL cu warning. Concurenta: interogările analitice consumă CPU și I/O din instanța writer; pentru izolare, folosește Aurora Replicas (asta e designul nativ — reader endpoints distribuie load-ul). Costuri S3: fiecare SELECT generează request-uri GET și LIST — la petabyte scale, costul S3 REQUEST poate depăși costul compute. Mitigarea: activează S3 Requester Pays pe bucket sau folosește S3 Tables (care include request-uri în preț). Securitate: VPC Endpoints (Gateway pentru S3, Interface pentru Glue) sunt obligatorii pentru a evita traficul prin internet — configurează aws_s3.vpc_endpoint_id la nivel de sesiune sau parametru de cluster.

Pași practici pentru activare rapidă

  1. Verifică versiunea Aurora — SELECT aurora_version(); trebuie să returneze ≥ 15.4 sau ≥ 16.1.
  2. Creează VPC Endpoints pentru S3 (Gateway) și Glue (Interface) în VPC-ul clusterului.
  3. Atașează policy IAM la role-ul RDS: GlueReadOnly, AmazonS3ReadOnlyAccess (sau policy custom cu bucket-specific).
  4. Activează extensia — CREATE EXTENSION aws_s3; pe baza de date target.
  5. Registrează catalogul — SELECT aws_s3.register_glue_catalog('analytics', 'arn:aws:glue:...');.
  6. Testează o interogare simplă cu EXPLAIN (ANALYZE, BUFFERS) și confirmă S3 Seq Scan cu Filter pushdown în plan.
  7. Monitorizează aurora_s3_cache_hit_ratio și blks_hit/blks_read pentru a valida caching-ul.

Concluzie: un pas concret spre HTAP real pe PostgreSQL

Eliminarea pipeline-urilor ETL între baza de date operațională și data lake nu este doar o comoditate — este o schimbare de paradigmatică pentru arhitecturile de date moderne. Amazon Aurora PostgreSQL cu DuckDB încorporat livrează interogări federate cu performanță comparabilă cu motoarele dedicate de OLAP, păstrând în același timp modelul de programare PostgreSQL pe care echipele îl cunosc. Pentru furnizori de hosting și organizații care gestionează infrastructură proprie, aceasta înseamnă mai puține componente mobile, costuri reduse de operare și timp de dezvoltare accelerat pentru produse de analytics. Dacă ești pe Aurora PostgreSQL 15.4+ sau 16.1+, activarea durează minutele și impactul se simte imediat. Pentru deployments pe servere dedicate sau cloud privat, evaluarea compatibilității cu S3-compatible storage (MinIO, Ceph) devine acum o prioritate strategică.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *