The Uncomfortable Truth About Your Data Lake Investment
Between 2020 and 2024, enterprises invested billions in data lake initiatives. The promise was compelling: centralise all your data in Amazon S3, break down silos, enable analytics at scale. The technology delivered on that promise — S3 is the most durable, scalable, and cost-effective storage ever built.
But here is the uncomfortable truth I encounter in nearly every presales engagement: most enterprise data lakes are graveyards of good intentions. The data is there. Petabytes of it. Perfectly stored, perfectly durable, perfectly useless to AI.
The reason is structural. Data lakes were designed for a world where humans write SQL queries and know exactly what they are looking for. AI systems do not work that way. An AI agent does not know your table names. A Bedrock Knowledge Base cannot query a Parquet file by column name. A customer support copilot cannot search your data lake for “interactions similar to this complaint” — because similarity is a semantic concept, and your data lake speaks only in exact matches.
The gap between what your data lake stores and what AI can consume is the semantic gap. Closing it does not require rebuilding your data lake — it requires upgrading it with three capabilities that were never part of the original design: metadata that describes meaning, embeddings that encode similarity, and a discovery layer that lets AI systems find relevant data without human guidance.
This post is about that upgrade — and why the enterprises that close the semantic gap first will have a 12-18 month AI advantage over those still running SQL queries against data nobody remembers putting there.
Why Data Lakes Become Data Swamps: The Three Missing Properties
Every data swamp I have audited in presales discovery shares the same three structural failures. None of them are technology failures — they are design failures from an era before AI was a requirement.
1. No Semantic Metadata — The “What Does This Mean?” Problem
A typical enterprise data lake contains thousands of objects in S3. Filenames like export_20240315_final_v2.csv and folder paths like raw/erp/batch_load_7/ tell you nothing about what the data actually represents.
For a human analyst who built the pipeline, this is navigable through tribal knowledge. For an AI system, it is opaque. A Bedrock agent asked “What were our top customer complaints last quarter?” cannot answer if it cannot discover that customer complaint data lives in s3://data-lake/raw/crm/zendesk_exports/ and that the relevant column is ticket_body, not description_text or notes_field.
The fix: AWS Glue Data Catalog provides the semantic metadata layer — table definitions, column descriptions, data types, and business glossary terms that make data discoverable by meaning, not just by path.
2. No Vector Representations — The “Find Similar Things” Problem
Traditional data lakes support one query pattern: exact match. WHERE customer_id = 12345 or WHERE region = 'APAC'. AI systems need a fundamentally different pattern: similarity search. “Find customer interactions similar to this complaint.” “Find documents related to this product issue.” “Find contracts with similar terms to this one.”
Similarity search requires vector embeddings — mathematical representations of meaning that can be compared using distance metrics. Your data lake has none of these. Every document, every interaction record, every knowledge article is stored in its raw form with no vector representation.
The fix: An embedding generation pipeline that converts your existing data lake content into vector representations stored alongside the source data — enabling semantic search without moving or duplicating the raw data.
3. No Discovery Layer — The “What Data Do We Even Have?” Problem
The most expensive question in enterprise AI is: “What data do we have that could answer this question?” In most organisations, the answer requires emailing three people, scheduling a meeting with the data engineering team, and waiting two weeks for a response.
AI agents cannot send emails. They need programmatic discovery — the ability to query a catalogue, understand what data exists, assess its relevance, and access it autonomously. Without this, every AI use case requires a custom integration built by a data engineer. That does not scale.
The fix: A combination of Glue Data Catalog (for structured discovery) and Bedrock Knowledge Bases (for semantic discovery) that lets AI systems self-serve data access based on meaning, not manual integration.
The Semantic Data Lake Architecture on AWS
The semantic data lake is not a replacement for your existing data lake. It is a layer on top — three upgrades that transform stored data into AI-consumable data without rebuilding what you already have.

The critical design principle: your existing S3 data lake remains untouched. The semantic layer sits on top, indexing and embedding what is already there. No data migration. No pipeline rewrite. No disruption to existing analytics workloads.
Building Block 1: The Metadata Foundation — AWS Glue Data Catalog
The Glue Data Catalog is the first upgrade — it transforms your S3 storage from a file system into a discoverable knowledge repository.
Why This Matters for AI
Without a catalogue, an AI agent accessing your data lake is like a new employee on their first day with no onboarding — they can see the filing cabinets but have no idea what is in them or how to find anything relevant. The Glue Data Catalog provides the onboarding document.
Implementation Pattern
# Step 1: Create a database in the Glue Data Catalog
aws glue create-database \
--database-input '{
"Name": "crm_semantic_lake",
"Description": "Semantically catalogued CRM data for AI consumption. Contains customer interactions, support tickets, and engagement history.",
"Parameters": {
"data_owner": "customer-success-team",
"classification": "confidential",
"ai_ready": "true",
"last_catalogued": "2026-04-01"
}
}'
# Step 2: Run a Glue Crawler to auto-discover schema from S3
aws glue create-crawler \
--name crm-data-crawler \
--role arn:aws:iam::<account-id>:role/GlueCrawlerRole \
--database-name crm_semantic_lake \
--targets '{
"S3Targets": [
{"Path": "s3://enterprise-data-lake/crm/customer-interactions/"},
{"Path": "s3://enterprise-data-lake/crm/support-tickets/"},
{"Path": "s3://enterprise-data-lake/crm/engagement-history/"}
]
}' \
--schema-change-policy '{
"UpdateBehavior": "UPDATE_IN_DATABASE",
"DeleteBehavior": "LOG"
}'
# Step 3: Start the crawler — it discovers schema, data types, and partitions
aws glue start-crawler --name crm-data-crawler
The Business Value of Cataloguing
The crawler runs once and then on schedule (daily or weekly). After it completes, every table, column, and partition in your data lake is discoverable through a single API. But the real value is what you add on top — business descriptions that make the data meaningful to AI:
# Add semantic descriptions to discovered tables
import boto3
glue = boto3.client('glue', region_name='ap-south-1')
# Update table with business-meaningful metadata
glue.update_table(
DatabaseName='crm_semantic_lake',
TableInput={
'Name': 'customer_interactions',
'Description': 'All customer touchpoints including support tickets, sales calls, onboarding sessions, and escalations. Each record represents one interaction with timestamp, channel, resolution status, and full text content.',
'Parameters': {
'business_domain': 'customer-success',
'pii_contains': 'customer_name, email, phone',
'ai_embedding_status': 'pending',
'freshness_sla': 'daily',
'primary_use_cases': 'customer-insights-agent, support-copilot, churn-prediction'
}
}
)
The primary_use_cases parameter is the key AI-readiness pattern. When a Bedrock agent needs to answer “What complaints has this customer raised?”, the agent can query the catalogue to discover which table serves that use case — without a data engineer manually wiring the connection.
Building Block 2: The Embedding Pipeline — Making Data Semantically Searchable
Cataloguing tells AI what data exists. Embeddings tell AI what data means. This is the transformation that converts your data lake from “searchable by exact match” to “searchable by meaning.”
The Embedding Pipeline Pattern
# Glue ETL job: Generate embeddings for CRM interaction data
# Reads from the catalogued data lake, writes embeddings to vector store
import boto3
import json
from awsglue.context import GlueContext
from pyspark.context import SparkContext
sc = SparkContext()
glueContext = GlueContext(sc)
bedrock = boto3.client('bedrock-runtime', region_name='ap-south-1')
def generate_embedding(text: str) -> list:
"""Generate vector embedding using Amazon Titan Embeddings"""
response = bedrock.invoke_model(
modelId='amazon.titan-embed-text-v2:0',
contentType='application/json',
body=json.dumps({
"inputText": text,
"dimensions": 1024,
"normalize": True
})
)
result = json.loads(response['body'].read())
return result['embedding']
# Read from catalogued data lake
interactions = glueContext.create_dynamic_frame.from_catalog(
database="crm_semantic_lake",
table_name="customer_interactions"
)
# Convert to DataFrame for processing
df = interactions.toDF()
# Create searchable text by combining relevant fields
# This is the semantic content that AI will search against
df_with_text = df.withColumn(
"searchable_content",
concat_ws(" | ",
col("subject"),
col("body"),
col("resolution_notes"),
col("interaction_type")
)
)
# Generate embeddings (simplified — production would use batch processing)
# Write results to vector store for semantic search
Strategic Decision: Where to Store Vectors
| Option | Best For | Trade-off |
|---|---|---|
| Amazon OpenSearch Serverless | Hybrid search (keyword + semantic), existing OpenSearch expertise | Higher cost, more operational control |
| Bedrock Knowledge Bases | Fastest time-to-value, fully managed, zero infrastructure | Less customisation, managed chunking |
| S3 Vectors | Massive scale (billions of vectors), cost-sensitive | Newer service, less ecosystem tooling |
| Aurora pgvector | Applications already on PostgreSQL | Performance ceiling at very large scale |
My recommendation for most enterprises: Start with Bedrock Knowledge Bases. It handles chunking, embedding, indexing, and retrieval as a fully managed service. You point it at your S3 data, it does the rest. Move to OpenSearch or S3 Vectors only when you need custom retrieval logic or are operating at billions of vectors.
The reason: the fastest path to demonstrating AI value is the one with the fewest engineering dependencies. Bedrock Knowledge Bases removes the entire vector infrastructure question from your critical path.
Building Block 3: The AI Discovery Layer — Bedrock Knowledge Bases Over Your Data Lake
This is where the semantic data lake delivers business value. Bedrock Knowledge Bases connects directly to your S3 data lake, automatically chunks documents, generates embeddings, and provides a retrieval API that any AI application can query by meaning.
Configuration
{
"name": "enterprise-data-lake-kb",
"description": "Semantic search across enterprise data lake — CRM interactions, support knowledge base, product documentation",
"knowledgeBaseConfiguration": {
"type": "VECTOR",
"vectorKnowledgeBaseConfiguration": {
"embeddingModelArn": "arn:aws:bedrock:ap-south-1::foundation-model/amazon.titan-embed-text-v2:0"
}
},
"storageConfiguration": {
"type": "OPENSEARCH_SERVERLESS",
"opensearchServerlessConfiguration": {
"collectionArn": "arn:aws:aoss:ap-south-1:<account-id>:collection/<collection-id>",
"vectorIndexName": "data-lake-semantic-index",
"fieldMapping": {
"vectorField": "embedding",
"textField": "content",
"metadataField": "metadata"
}
}
},
"dataSourceConfiguration": {
"type": "S3",
"s3Configuration": {
"bucketArn": "arn:aws:s3:::enterprise-data-lake",
"inclusionPrefixes": [
"crm/customer-interactions/",
"knowledge-base/support-articles/",
"product/documentation/"
]
}
}
}
What This Enables
Before the semantic layer, answering “What similar issues have other customers experienced with our payment integration?” required:
- A data engineer to write a custom SQL query
- Knowledge of which tables contain payment-related data
- Manual text matching (LIKE ‘%payment%’) that misses semantic variants
- Hours of turnaround time
After the semantic layer, the same question is answered in seconds — the Bedrock Knowledge Base searches by meaning across all indexed content, retrieves semantically similar interactions regardless of exact keyword match, and returns grounded answers with source citations.
That difference — from hours of human effort to seconds of AI retrieval — is the ROI of the semantic data lake.
Building Block 4: Governance That Scales to AI — Lake Formation
The semantic layer must respect the same access controls as the underlying data. This is non-negotiable for regulated industries — and it is the property that makes enterprise AI deployable rather than just demonstrable.
The Governance Challenge AI Creates
Traditional data lake governance controls who can run queries. AI governance must control what an AI system can see, return, and reference. These are different problems:
- A human analyst with access to HR data understands not to include salary information in a customer-facing report. An AI system will include it unless explicitly prevented.
- A human knows that draft financial data should not be cited as fact. An AI system treats all indexed data as equally authoritative.
- A human understands that a document marked “internal only” should not be summarised in an external communication. An AI system has no concept of audience.
Lake Formation + Bedrock: Permission-Aware AI
# Grant the Bedrock Knowledge Base service role access ONLY to
# customer-facing data — not internal HR, finance, or legal content
aws lakeformation grant-permissions \
--principal '{
"DataLakePrincipalIdentifier": "arn:aws:iam::<account-id>:role/BedrockKnowledgeBaseRole"
}' \
--resource '{
"Table": {
"DatabaseName": "crm_semantic_lake",
"Name": "customer_interactions"
}
}' \
--permissions '["SELECT"]' \
--permissions-with-grant-option '[]'
# Explicitly DENY access to sensitive tables
aws lakeformation grant-permissions \
--principal '{
"DataLakePrincipalIdentifier": "arn:aws:iam::<account-id>:role/BedrockKnowledgeBaseRole"
}' \
--resource '{
"Table": {
"DatabaseName": "hr_data",
"Name": "employee_compensation"
}
}' \
--permissions '[]'
The principle: the AI service role gets the minimum access required for its use case. Customer-facing AI gets customer data. Internal productivity AI gets internal knowledge base content. No AI system gets unrestricted data lake access. This is the same least-privilege model that governs human access — applied to AI identities.
The Business Case: Semantic Upgrade vs Rebuild
The most common objection I hear: “We already spent $X million on our data lake. Now you want us to spend more?”
The answer is not “spend more.” The answer is “activate what you already paid for.”
Cost Comparison
| Approach | Cost | Timeline | Risk |
|---|---|---|---|
| Rebuild data lake for AI from scratch | $300K-$600K | 9-12 months | High — disrupts existing analytics |
| Semantic layer upgrade (on top of existing) | $50K-$120K | 6-10 weeks | Low — existing workloads unchanged |
| Do nothing (build custom AI integrations per use case) | $60K-$100K per use case | 4-8 weeks each | Unsustainable — cost multiplies per use case |
The semantic upgrade pays for itself on the second AI use case. Every subsequent use case — customer insights agent, support copilot, knowledge search, compliance assistant — builds on the same semantic layer at near-zero marginal cost. The “custom integration per use case” approach costs $60K-$100K every time.
The 12-Month Value Timeline
| Month | Milestone | Business Value |
|---|---|---|
| 1-2 | Catalogue + crawl existing data lake | Discovery: “Here’s what data we actually have” |
| 3-4 | First Knowledge Base on CRM data | First AI use case live — customer insights agent |
| 5-6 | Embedding pipeline for support articles | Support copilot answers questions from your knowledge base |
| 7-8 | Expand to product documentation + contracts | Multi-domain semantic search |
| 9-12 | Bedrock Agents autonomously querying the semantic lake | Self-serve AI access — new use cases deploy in days, not months |
A Presales Perspective: Surfacing the Semantic Gap in Customer Conversations
The Discovery Question That Opens the Conversation
In every data & AI presales engagement, I ask one question early: “If I gave your AI team unlimited access to your data lake today, could they build a customer insights agent by Friday?”
The answer is always no. The follow-up question — “What’s missing?” — surfaces the semantic gap without me having to explain it. Customers self-identify the problems:
- “We don’t have good metadata — nobody knows what half the tables contain”
- “Our data is in raw format — AI can’t read Parquet files directly”
- “There’s no search — you have to know exactly what you’re looking for”
- “Governance would block it — we can’t give AI access to everything”
Each of those statements maps directly to a building block in the semantic data lake architecture. The customer has diagnosed themselves — I just need to show the solution.
The Framing That Resonates with CDOs and CTOs
“You already own the most valuable asset in AI — your proprietary enterprise data. It is sitting in S3, perfectly stored, perfectly durable. The only thing standing between that data and AI-powered business value is a semantic layer that makes it discoverable, searchable, and governed. That layer costs 5-10% of what you already invested in the lake — and it activates 100% of the value.”
That framing works because it positions the semantic layer as an activation investment, not a new initiative. Executives who approved the original data lake investment want to hear that their decision was correct — it just needs one more layer to deliver the AI value they are now being asked to demonstrate.
For CFOs: The Unit Economics
- Cost per AI use case without semantic layer: $60K-$100K (custom integration every time)
- Cost per AI use case with semantic layer: $10K-$20K (configuration + prompt engineering only)
- Break-even point: Second AI use case
- Year-one value (assuming 4-5 AI use cases): $180K-$350K in avoided custom engineering
Common Pitfalls: Lessons From Real Implementations
| Pitfall | Consequence | Prevention |
|---|---|---|
| Embedding everything without prioritisation | $50K+ in unnecessary Titan Embeddings costs | Start with highest-value data domains (CRM, support KB), expand based on demand |
| No freshness strategy | AI answers based on stale data, user trust erodes | EventBridge-triggered re-embedding on data updates, daily sync schedule minimum |
| Skipping governance | AI surfaces confidential data in wrong context | Lake Formation permissions BEFORE Knowledge Base indexing, not after |
| Choosing vector store before validating use case | Over-engineering infrastructure | Start with Bedrock Knowledge Bases (managed), migrate to self-hosted only when needed |
| No metadata standards | Catalogue becomes as messy as the data lake | Define naming conventions, required descriptions, and business glossary terms before crawling |
Why This Matters Now: The AI Advantage Window
The semantic data lake is not a permanent competitive advantage — it is a temporary one. Every enterprise will eventually upgrade their data lakes for AI. The question is who does it first.
The enterprises that close the semantic gap in 2026 will:
- Deploy AI use cases 4-5x faster than competitors still building custom integrations
- Compound their advantage as each new use case builds on the shared semantic layer
- Attract and retain AI talent who want to work on interesting problems — not spend months writing data pipeline glue code
The enterprises that wait will:
- Continue paying $80K-$150K per AI use case in custom engineering
- Watch competitors ship AI features monthly while they ship quarterly
- Eventually do the same upgrade, but under time pressure and at higher cost
The data lake investment was sound. The data is there. The semantic layer is the last mile that makes it useful to AI — and the organizations that build it first win the next 18 months.
Lessons for Technology Leaders
- Your data lake is not the problem — the missing semantic layer is — The storage investment was correct. The data is valuable. It just needs three properties (metadata, embeddings, discovery) to become AI-consumable.
- Catalogue first, embed second, govern always — The sequence matters. You cannot embed data you cannot find, and you cannot deploy AI over data you cannot govern. Glue Data Catalog → Embedding pipeline → Lake Formation → Bedrock Knowledge Bases.
- The semantic layer pays for itself on the second AI use case — Every use case after the first builds on the same infrastructure at marginal cost. The custom-integration-per-use-case approach does not have this property.
- Start with Bedrock Knowledge Bases, not custom vector infrastructure — The fastest path to proving value is the one with the fewest engineering dependencies. Prove the use case first, optimise the infrastructure second.
- The “data swamp” is a metadata problem, not a data problem — Your data is fine. Your metadata is missing. The Glue Crawler + business descriptions fix this in weeks, not months. The ROI of cataloguing is immediate — for AI and for human analysts.
About the Author
Rajat Jindal is VP – Presales at AeonX Digital Technology Limited, where he architects winning cloud strategies for enterprise customers and translates modernization into measurable business value. He is a strong advocate of AWS, committed to sharing thought leadership that helps technology leaders make faster, better-informed decisions.
