{"id":893,"date":"2026-11-05T13:57:15","date_gmt":"2026-11-05T13:57:15","guid":{"rendered":"https:\/\/datascientists.info\/?p=893"},"modified":"2026-11-05T13:57:15","modified_gmt":"2026-11-05T13:57:15","slug":"duckdb-kubernetes-data-warehousing-pgvector","status":"publish","type":"post","link":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/","title":{"rendered":"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cloud data warehouses often present teams with a difficult trade-off: either accept unpredictable SaaS compute bills or take on the operational overhead of running heavy distributed query engines like Trino or Spark. Furthermore, modern analytical platforms increasingly require bridging structured analytical files with operational relational records and vector embeddings for retrieval-augmented generation (RAG) and semantic similarity search.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By deploying <strong><a href=\"https:\/\/duckdb.org\/\">DuckDB<\/a> <\/strong>inside Kubernetes<strong>,<\/strong> you can achieve sub-second analytical queries directly across raw object storage (via <code>httpfs<\/code>) and transactional\/vector data residing in PostgreSQL with <code><a href=\"https:\/\/github.com\/pgvector\/pgvector\">pgvector<\/a><\/code> (via the <code>postgres_scanner<\/code> and <code>vss<\/code> extensions)\u2014combining an in-process vectorized engine with cloud-native scalability, zero vendor lock-in, and native Kubeflow integration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is an architectural deep dive into how to build this unified analytical and semantic query layer on Kubernetes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Architectural Overview<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The core design principle is <strong>stateless compute decoupled from durable object storage and operational databases<\/strong>. The DuckDB engine pods retain no persistent disk state; instead, they execute vectorized SQL queries federating directly across remote Parquet files on S3 and vector tables in PostgreSQL via connection pooling.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Component<\/strong><\/td><td><strong>Resource \/ Technology<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>Service Endpoint<\/strong><\/td><td>Kubernetes ClusterIP \/ Ingress Service<\/td><td>Exposes REST and Arrow Flight SQL endpoints (<code>\/api<\/code>) alongside the interactive Web UI (<code>\/<\/code>) to Kubeflow Notebooks, pipeline tasks, and data science workloads.<\/td><\/tr><tr><td><strong>DuckDB Engine Pod<\/strong><\/td><td>FastAPI \/ Python + DuckDB Native<\/td><td>Stateless query runner executing vectorized SQL queries, federated joins, and vector distance operations over HTTP range requests and Postgres sockets.<\/td><\/tr><tr><td><strong>DuckDB Web UI Pod<\/strong><\/td><td>DuckDB-UI \/ Web GUI Container<\/td><td>Interactive web console for visual SQL exploration, schema inspection, and ad-hoc federated query execution.<\/td><\/tr><tr><td><strong>Storage Connection<\/strong><\/td><td>S3 Bucket via <code>httpfs<\/code><\/td><td>Streams Parquet metadata, footers, and filtered row groups directly from object storage without full-file downloads.<\/td><\/tr><tr><td><strong>Relational &amp; Vector Source<\/strong><\/td><td>PostgreSQL + <code>pgvector<\/code> via <code>postgres_scanner<\/code><\/td><td>Attached relational database storing operational entities and high-dimensional embeddings for similarity searches.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"843\" height=\"810\" src=\"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png\" alt=\"\" class=\"wp-image-894\" srcset=\"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png 843w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1-300x288.png 300w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1-767x737.png 767w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Key Components in Detail<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Storage Connections: Object Storage &amp; PostgreSQL \/ pgvector<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">S3 via <code>httpfs<\/code><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Traditional data processing pipelines download entire dataset dumps to a local volume before executing SQL queries. DuckDB circumvents this via its native <strong><code>httpfs<\/code> extension<\/strong>, which communicates with S3-compatible Object Storage Services (MinIO, Ceph, AWS S3).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When DuckDB reads a Parquet file over S3:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>It issues targeted HTTP byte-range requests to fetch the <strong>Parquet file footer<\/strong> (schema, column statistics, dictionary pages).<\/li>\n\n\n\n<li>It pushes down query projections and filter predicates ($min\/max$ metadata checks) to determine which row groups are needed.<\/li>\n\n\n\n<li>It fetches <strong>only the required byte ranges<\/strong> directly into memory.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"795\" height=\"475\" src=\"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-2.png\" alt=\"\" class=\"wp-image-895\" srcset=\"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-2.png 795w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-2-300x179.png 300w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-2-767x458.png 767w\" sizes=\"auto, (max-width: 795px) 100vw, 795px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">PostgreSQL + <code>pgvector<\/code> via <code>postgres_scanner<\/code><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Using the <code>postgres_scanner<\/code> extension, DuckDB connects directly to PostgreSQL using the binary protocol to read tables on the fly without staging them to disk. When paired with <code>pgvector<\/code>, DuckDB can read embeddings (stored as <code class=\"\">vector<\/code> or array types) and execute hybrid joins\u2014such as enriching historical parquet transaction logs with live user profile vectors and product similarity scores.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nINSTALL httpfs;\nLOAD httpfs;\nINSTALL postgres_scanner;\nLOAD postgres_scanner;\n\n-- Configure S3 credentials\nSET s3_endpoint = &#039;s3_endpoint_path&#039;;\nSET s3_url_style = &#039;path&#039;;\nSET s3_use_ssl = true;\nSET s3_access_key_id = &#039;${STORAGE_ACCESS_KEY}&#039;;\nSET s3_secret_access_key = &#039;${STORAGE_SECRET_KEY}&#039;;\n\n-- Attach PostgreSQL database dynamically\nCALL postgres_attach(&#039;dbname=analytics user=postgres host=postgres-service.analytics.svc.cluster.local password=${POSTGRES_PASSWORD} port=5432&#039;, source_schema=&#039;public&#039;);\n\n-- Federated Query: Join massive Parquet lakehouse logs with pgvector customer embeddings\nSELECT \n    l.customer_id,\n    p.customer_segment,\n    p.embedding,\n    COUNT(DISTINCT l.transaction_id) AS total_orders,\n    ROUND(SUM(l.sale_amount), 2) AS total_revenue\nFROM read_parquet(&#039;s3:\/\/lakehouse-gold\/sales\/year=2026\/*.parquet&#039;) l\nJOIN analytics.customer_profiles p ON l.customer_id = p.id\nWHERE l.status = &#039;COMPLETED&#039;\nGROUP BY l.customer_id, p.customer_segment, p.embedding\nORDER BY total_revenue DESC\nLIMIT 50;\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">The Engine Pod: Python Native + FastAPI<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The engine pod acts as an analytical proxy. Built with FastAPI and native DuckDB bindings, it accepts SQL payloads or structured parameter blocks, runs them against the engine, and returns results in Apache Arrow format or JSON.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Using <strong>Apache Arrow Flight SQL<\/strong> or raw Arrow IPC buffers drastically minimizes serialization latency. Unlike traditional JDBC\/ODBC connections that incur heavy CPU overhead converting tabular records to JSON\/tuples, Arrow retains zero-copy columnar data structures from DuckDB straight to downstream clients.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A lightweight production wrapper (<code class=\"\">app.py<\/code>):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nimport duckdb\nfrom fastapi import FastAPI, HTTPException\nfrom pydantic import BaseModel\nimport pyarrow as pa\nimport io\nimport os\n\napp = FastAPI(title=&quot;DuckDB K8s Federated Engine&quot;)\n\nclass QueryPayload(BaseModel):\n    query: str\n\ndef get_connection():\n    con = duckdb.connect(database=&quot;:memory:&quot;)\n    \n    # Load storage and database extensions\n    con.execute(&quot;INSTALL httpfs; LOAD httpfs;&quot;)\n    con.execute(&quot;INSTALL postgres_scanner; LOAD postgres_scanner;&quot;)\n    \n    # Object storage configuration\n    con.execute(f&quot;SET s3_endpoint = &#039;{os.getenv(&#039;S3_ENDPOINT&#039;)}&#039;;&quot;)\n    con.execute(f&quot;SET s3_access_key_id = &#039;{os.getenv(&#039;S3_ACCESS_KEY&#039;)}&#039;;&quot;)\n    con.execute(f&quot;SET s3_secret_access_key = &#039;{os.getenv(&#039;S3_SECRET_KEY&#039;)}&#039;;&quot;)\n    \n    # Engine limits &amp;amp; concurrency\n    con.execute(f&quot;SET threads = {os.getenv(&#039;DUCKDB_THREADS&#039;, &#039;4&#039;)};&quot;)\n    con.execute(f&quot;SET max_memory = &#039;{os.getenv(&#039;DUCKDB_MAX_MEMORY&#039;, &#039;8GB&#039;)}&#039;;&quot;)\n    \n    # Attach Postgres &amp;amp; pgvector source\n    pg_conn = (\n        f&quot;dbname={os.getenv(&#039;POSTGRES_DB&#039;, &#039;analytics&#039;)} &quot;\n        f&quot;user={os.getenv(&#039;POSTGRES_USER&#039;, &#039;postgres&#039;)} &quot;\n        f&quot;host={os.getenv(&#039;POSTGRES_HOST&#039;, &#039;postgres-service.analytics.svc.cluster.local&#039;)} &quot;\n        f&quot;password={os.getenv(&#039;POSTGRES_PASSWORD&#039;)} &quot;\n        f&quot;port={os.getenv(&#039;POSTGRES_PORT&#039;, &#039;5432&#039;)}&quot;\n    )\n    con.execute(f&quot;CALL postgres_attach(&#039;{pg_conn}&#039;, source_schema=&#039;public&#039;);&quot;)\n    return con\n\n@app.post(&quot;\/api\/query&quot;)\ndef execute_query(payload: QueryPayload):\n    try:\n        con = get_connection()\n        arrow_table: pa.Table = con.execute(payload.query).arrow()\n        \n        # Serialize Arrow table to IPC stream\n        sink = io.BytesIO()\n        with pa.ipc.new_stream(sink, arrow_table.schema) as writer:\n            writer.write_table(arrow_table)\n            \n        con.close()\n        return sink.getvalue()\n    except Exception as e:\n        raise HTTPException(status_code=400, detail=str(e))\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Visual Exploration: DuckDB Web UI Pod<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For data scientists and analysts accustomed to browser-based SQL consoles, pairing the stateless engine with a dedicated UI container provides parity with modern cloud data warehouse interfaces.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The UI container connects to the query engine or mounts identical <code>httpfs<\/code> and Postgres credentials, allowing users to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inspect remote schemas and explore partitions across S3 paths.<\/li>\n\n\n\n<li>Inspect PostgreSQL catalog tables, view metadata, and check vector column dimensions directly.<\/li>\n\n\n\n<li>Interactively test filter predicates, joins, and aggregations before committing code to production DAGs.<\/li>\n\n\n\n<li>Download ad-hoc result sets directly as Parquet or CSV.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Kubernetes Service &amp; Ingress Routing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A standard Kubernetes <code>Deployment<\/code> coupled with a unified <code>Ingress<\/code> exposes both components under a single domain, isolating operational concerns:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napiVersion: v1\nkind: Service\nmetadata:\n  name: duckdb-service\n  namespace: analytics\nspec:\n  type: ClusterIP\n  ports:\n    - name: http-engine\n      port: 8000\n      targetPort: 8000\n    - name: http-ui\n      port: 8080\n      targetPort: 8080\n  selector:\n    app: duckdb-warehouse\n---\napiVersion: networking.k8s.io\/v1\nkind: Ingress\nmetadata:\n  name: duckdb-ingress\n  namespace: analytics\n  annotations:\n    kubernetes.io\/ingress.class: nginx\nspec:\n  rules:\n  - host: warehouse.internal.data-do.de\n    http:\n      paths:\n      - path: \/api\n        pathType: Prefix\n        backend:\n          service:\n            name: duckdb-service\n            port:\n              number: 8000\n      - path: \/\n        pathType: Prefix\n        backend:\n          service:\n            name: duckdb-service\n            port:\n              number: 8080\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Operational Advantages<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"463\" src=\"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-4-1024x463.png\" alt=\"\" class=\"wp-image-897\" srcset=\"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-4-1024x463.png 1024w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-4-300x136.png 300w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-4-767x347.png 767w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-4-1536x695.png 1536w, https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-4.png 1988w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Near-Zero Idle Cost:<\/strong> Unlike multi-node warehouses that require always-on coordinator and worker nodes, DuckDB engine pods can be scaled down to zero or scaled dynamically using the Kubernetes Horizontal Pod Autoscaler (HPA) or KEDA based on HTTP request volume.<\/li>\n\n\n\n<li><strong>Predictable Memory Footprint:<\/strong> DuckDB adheres strictly to its configured <code>max_memory<\/code> boundary, utilizing out-of-core disk spillover (backed by ephemeral K8s <code>emptyDir<\/code> volumes) to prevent <code>OOMKilled<\/code> termination during large joins or vector transformations.<\/li>\n\n\n\n<li><strong>True Hybrid Analytics (Lake + Relational + Vectors):<\/strong> By federating Parquet lakehouse storage with <code>pgvector<\/code> inside PostgreSQL, analysts can evaluate vector embeddings alongside historical data without requiring separate vector synchronization pipelines or specialized graph databases.<\/li>\n\n\n\n<li><strong>Reproducibility with Kubeflow:<\/strong> Pipeline tasks executed in Kubeflow can call the internal <code>[http:\/\/duckdb-service.analytics.svc.cluster.local:8000\/api\/query](http:\/\/duckdb-service.analytics.svc.cluster.local:8000\/api\/query)<\/code> endpoint, generating training feature tables directly from raw lakehouse files and live database state without custom driver configurations.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Running DuckDB on Kubernetes decouples data volume from compute cost, giving engineering teams a high-performance, compliant, and cost-efficient analytical foundation without the overhead of heavy distributed engines.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cloud data warehouses often present teams with a difficult trade-off: either accept unpredictable SaaS compute bills or take on the operational overhead of running heavy distributed query engines like Trino or Spark. Furthermore, modern analytical platforms increasingly require bridging structured analytical files with operational relational records and vector embeddings for retrieval-augmented generation (RAG) and semantic [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_ppma_block_editor_authors":"{\"authors\":[144,145],\"author_categories\":{\"144\":\"1\",\"145\":\"1\"},\"fallback_author_user\":\"1\",\"ppma_author_box_select\":\"\",\"selected_authors\":[{\"id\":144,\"display_name\":\"Marc Matt\",\"is_guest\":0,\"category_id\":\"1\"},{\"id\":145,\"display_name\":\"saidah\",\"is_guest\":0,\"category_id\":\"1\"}]}"},"categories":[2,3,125,4,6],"tags":[126,29,179],"ppma_author":[144,145],"class_list":["post-893","post","type-post","status-publish","format-standard","hentry","category-analytics-platform","category-big-data","category-data-engineering","category-data-lake","category-data-warehouse","tag-data-engineering","tag-data-science","tag-duckdb","author-marc","author-saidah"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector - DATA DO - \u30c7\u30fc\u30bf \u9053<\/title>\n<meta name=\"description\" content=\"Deploy a lean, stateless data warehouse on Kubernetes. Learn how to federate DuckDB queries across S3 Parquet lakes and PostgreSQL pgvector embeddings.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector - DATA DO - \u30c7\u30fc\u30bf \u9053\" \/>\n<meta property=\"og:description\" content=\"Deploy a lean, stateless data warehouse on Kubernetes. Learn how to federate DuckDB queries across S3 Parquet lakes and PostgreSQL pgvector embeddings.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/\" \/>\n<meta property=\"og:site_name\" content=\"DATA DO - \u30c7\u30fc\u30bf \u9053\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataScientists\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-05T13:57:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png\" \/>\n<meta name=\"author\" content=\"Marc Matt, saidah\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marc Matt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/\"},\"author\":{\"name\":\"Marc Matt\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/#\\\/schema\\\/person\\\/723078870bf3135121086d46ebb12f19\"},\"headline\":\"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \\\/ pgvector\",\"datePublished\":\"2026-11-05T13:57:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/\"},\"wordCount\":827,\"publisher\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/datascientists.info\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/image-1.png\",\"keywords\":[\"Data Engineering\",\"Data Science\",\"DuckDB\"],\"articleSection\":[\"Analytics Platform\",\"Big Data\",\"Data Engineering\",\"Data Lake\",\"Data Warehouse\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/\",\"url\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/\",\"name\":\"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \\\/ pgvector - DATA DO - \u30c7\u30fc\u30bf \u9053\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/datascientists.info\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/image-1.png\",\"datePublished\":\"2026-11-05T13:57:15+00:00\",\"description\":\"Deploy a lean, stateless data warehouse on Kubernetes. Learn how to federate DuckDB queries across S3 Parquet lakes and PostgreSQL pgvector embeddings.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/#primaryimage\",\"url\":\"https:\\\/\\\/datascientists.info\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/image-1.png\",\"contentUrl\":\"https:\\\/\\\/datascientists.info\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/image-1.png\",\"width\":843,\"height\":810},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/index.php\\\/2026\\\/11\\\/05\\\/duckdb-kubernetes-data-warehousing-pgvector\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/datascientists.info\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \\\/ pgvector\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/#website\",\"url\":\"https:\\\/\\\/datascientists.info\\\/\",\"name\":\"Data Scientists\",\"description\":\"Digging data, Big Data, Analysis, Data Mining\",\"publisher\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/datascientists.info\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/#organization\",\"name\":\"DATA DO - \u30c7\u30fc\u30bf \u9053\",\"url\":\"https:\\\/\\\/datascientists.info\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/datascientists.info\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Bildschirmfoto-vom-2026-02-02-08-13-21.png\",\"contentUrl\":\"https:\\\/\\\/datascientists.info\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Bildschirmfoto-vom-2026-02-02-08-13-21.png\",\"width\":250,\"height\":174,\"caption\":\"DATA DO - \u30c7\u30fc\u30bf \u9053\"},\"image\":{\"@id\":\"https:\\\/\\\/datascientists.info\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/DataScientists\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/datascientists.info\\\/#\\\/schema\\\/person\\\/723078870bf3135121086d46ebb12f19\",\"name\":\"Marc Matt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74f48ef754cf04f628f42ed117a3f2b42931feeb41a3cca2313b9714a7d4fdd2?s=96&d=mm&r=g53b84b5f47a2156ba8b047d71d6d05fc\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74f48ef754cf04f628f42ed117a3f2b42931feeb41a3cca2313b9714a7d4fdd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74f48ef754cf04f628f42ed117a3f2b42931feeb41a3cca2313b9714a7d4fdd2?s=96&d=mm&r=g\",\"caption\":\"Marc Matt\"},\"description\":\"Senior Data Architect with 15+ years of experience helping Hamburg's leading enterprises modernize their data infrastructure. I bridge the gap between legacy systems (SAP, Hadoop) and modern AI capabilities. I help clients: Migrate &amp; Modernize: Transitioning on-premise data warehouses to Google Cloud\\\/AWS to reduce costs and increase agility. Implement GenAI: Building secure RAG (Retrieval-Augmented Generation) pipelines to unlock value from internal knowledge bases using LangChain and Vector DBs. Scale MLOps: Operationalizing machine learning models from PoC to production with Kubernetes and Airflow. Proven track record leading engineering teams.\",\"sameAs\":[\"https:\\\/\\\/data-do.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector - DATA DO - \u30c7\u30fc\u30bf \u9053","description":"Deploy a lean, stateless data warehouse on Kubernetes. Learn how to federate DuckDB queries across S3 Parquet lakes and PostgreSQL pgvector embeddings.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/","og_locale":"en_US","og_type":"article","og_title":"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector - DATA DO - \u30c7\u30fc\u30bf \u9053","og_description":"Deploy a lean, stateless data warehouse on Kubernetes. Learn how to federate DuckDB queries across S3 Parquet lakes and PostgreSQL pgvector embeddings.","og_url":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/","og_site_name":"DATA DO - \u30c7\u30fc\u30bf \u9053","article_publisher":"https:\/\/www.facebook.com\/DataScientists\/","article_published_time":"2026-11-05T13:57:15+00:00","og_image":[{"url":"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png","type":"","width":"","height":""}],"author":"Marc Matt, saidah","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Marc Matt","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/#article","isPartOf":{"@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/"},"author":{"name":"Marc Matt","@id":"https:\/\/datascientists.info\/#\/schema\/person\/723078870bf3135121086d46ebb12f19"},"headline":"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector","datePublished":"2026-11-05T13:57:15+00:00","mainEntityOfPage":{"@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/"},"wordCount":827,"publisher":{"@id":"https:\/\/datascientists.info\/#organization"},"image":{"@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/#primaryimage"},"thumbnailUrl":"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png","keywords":["Data Engineering","Data Science","DuckDB"],"articleSection":["Analytics Platform","Big Data","Data Engineering","Data Lake","Data Warehouse"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/","url":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/","name":"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector - DATA DO - \u30c7\u30fc\u30bf \u9053","isPartOf":{"@id":"https:\/\/datascientists.info\/#website"},"primaryImageOfPage":{"@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/#primaryimage"},"image":{"@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/#primaryimage"},"thumbnailUrl":"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png","datePublished":"2026-11-05T13:57:15+00:00","description":"Deploy a lean, stateless data warehouse on Kubernetes. Learn how to federate DuckDB queries across S3 Parquet lakes and PostgreSQL pgvector embeddings.","breadcrumb":{"@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/#primaryimage","url":"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png","contentUrl":"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/10\/image-1.png","width":843,"height":810},{"@type":"BreadcrumbList","@id":"https:\/\/datascientists.info\/index.php\/2026\/11\/05\/duckdb-kubernetes-data-warehousing-pgvector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/datascientists.info\/"},{"@type":"ListItem","position":2,"name":"Serverless Analytics &amp; Vector Search on Kubernetes: Building a Lean Data Warehouse with DuckDB, Object Storage, and PostgreSQL \/ pgvector"}]},{"@type":"WebSite","@id":"https:\/\/datascientists.info\/#website","url":"https:\/\/datascientists.info\/","name":"Data Scientists","description":"Digging data, Big Data, Analysis, Data Mining","publisher":{"@id":"https:\/\/datascientists.info\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/datascientists.info\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/datascientists.info\/#organization","name":"DATA DO - \u30c7\u30fc\u30bf \u9053","url":"https:\/\/datascientists.info\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/datascientists.info\/#\/schema\/logo\/image\/","url":"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-vom-2026-02-02-08-13-21.png","contentUrl":"https:\/\/datascientists.info\/wp-content\/uploads\/2026\/02\/Bildschirmfoto-vom-2026-02-02-08-13-21.png","width":250,"height":174,"caption":"DATA DO - \u30c7\u30fc\u30bf \u9053"},"image":{"@id":"https:\/\/datascientists.info\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataScientists\/"]},{"@type":"Person","@id":"https:\/\/datascientists.info\/#\/schema\/person\/723078870bf3135121086d46ebb12f19","name":"Marc Matt","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/74f48ef754cf04f628f42ed117a3f2b42931feeb41a3cca2313b9714a7d4fdd2?s=96&d=mm&r=g53b84b5f47a2156ba8b047d71d6d05fc","url":"https:\/\/secure.gravatar.com\/avatar\/74f48ef754cf04f628f42ed117a3f2b42931feeb41a3cca2313b9714a7d4fdd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/74f48ef754cf04f628f42ed117a3f2b42931feeb41a3cca2313b9714a7d4fdd2?s=96&d=mm&r=g","caption":"Marc Matt"},"description":"Senior Data Architect with 15+ years of experience helping Hamburg's leading enterprises modernize their data infrastructure. I bridge the gap between legacy systems (SAP, Hadoop) and modern AI capabilities. I help clients: Migrate &amp; Modernize: Transitioning on-premise data warehouses to Google Cloud\/AWS to reduce costs and increase agility. Implement GenAI: Building secure RAG (Retrieval-Augmented Generation) pipelines to unlock value from internal knowledge bases using LangChain and Vector DBs. Scale MLOps: Operationalizing machine learning models from PoC to production with Kubernetes and Airflow. Proven track record leading engineering teams.","sameAs":["https:\/\/data-do.de"]}]}},"authors":[{"term_id":144,"user_id":1,"is_guest":0,"slug":"marc","display_name":"Marc Matt","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/74f48ef754cf04f628f42ed117a3f2b42931feeb41a3cca2313b9714a7d4fdd2?s=96&d=mm&r=g","avatar_alt":"","avatar_decorative":"","author_category":"1","first_name":"Marc","last_name":"Matt","user_url":"https:\/\/data-do.de","job_title":"Senior Data Architect | GenAI & RAG Expert | GCP \/ AWS","description":"Senior Data Architect with 15+ years of experience helping Hamburg's leading enterprises modernize their data infrastructure. I bridge the gap between legacy systems (SAP, Hadoop) and modern AI capabilities.\r\n\r\nI help clients:\r\n\r\n \tMigrate &amp; Modernize: Transitioning on-premise data warehouses to Google Cloud\/AWS to reduce costs and increase agility.\r\n\r\n\r\n \tImplement GenAI: Building secure RAG (Retrieval-Augmented Generation) pipelines to unlock value from internal knowledge bases using LangChain and Vector DBs.\r\n \tScale MLOps: Operationalizing machine learning models from PoC to production with Kubernetes and Airflow.\r\n\r\nProven track record leading engineering teams."},{"term_id":145,"user_id":2,"is_guest":0,"slug":"saidah","display_name":"saidah","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/015737c94dd80772d772f2b24a55e96c868068f28684c8577d9492f3313e4dd3?s=96&d=mm&r=g","avatar_alt":"","avatar_decorative":"","author_category":"","first_name":"Saidah","last_name":"","user_url":"http:\/\/data-do.de","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/posts\/893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/comments?post=893"}],"version-history":[{"count":3,"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/posts\/893\/revisions"}],"predecessor-version":[{"id":900,"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/posts\/893\/revisions\/900"}],"wp:attachment":[{"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/media?parent=893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/categories?post=893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/tags?post=893"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/datascientists.info\/index.php\/wp-json\/wp\/v2\/ppma_author?post=893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}