A Data Mart is a subject-oriented analytical data store designed to support the reporting, analytics, and decision-making needs of a specific business function, department, domain, or analytical workload.
For example:
Sales Data Mart
Finance Data Mart
Customer Data Mart
Marketing Data Mart
Supply Chain Data Mart
HR Data Mart
Enterprise Data Warehouse / Lakehouse
企业中央数据平台
|
|---------------- Sales Data Mart
| 销售数据集市
|
|---------------- Finance Data Mart
| 财务数据集市
|
|---------------- Customer Data Mart
| 客户数据集市
|
|---------------- Marketing Data Mart
市场数据集市
A Data Mart typically contains curated, integrated, business-friendly data optimized for analytical queries rather than operational transactions.
What data marts actually address
What data marts actually address is: How do we turn enterprise data into a business-consumable analytical model?
The Real Value of a Data Mart
Business Simplification 业务简化
Consistent Business Definitions 统一业务定义
Performance 查询性能
Security 安全
Self-Service Analytics 自助分析
Data Mart vs Data Warehouse
Scope and Scale / 范围与规模
DWH: Centralizes cross-functional data across the entire enterprise. / 汇集整个企业跨部门的全局数据。
DM: Isolate highly specific data for teams like sales, marketing, or finance. / 仅隔离出销售、市场或财务等特定团队所需的局部数据。
Structural Architecture / 架构关系
Top-down (Inmon): The DWH is built first as a central repository, and Data Marts are extracted from it. / 自上而下架构: 先建立中央数仓,再从中抽取并生成各个数据集市。
Bottom-up (Kimball): Independent Data Marts are built first for business units, then integrated to form the DWH. / 自下而上架构: 先为各业务单元建立独立的数据集市,最终组合在一起构成全局数仓。
Speed and Performance / 速度与性能
DWH: Handles massive, complex analytical queries across different business domains, which can be slower. / 处理跨领域的海量复杂分析,查询可能较慢。
DM: Offers much faster query responses because it scans smaller, curated datasets. / 因为只扫描较小的、精选的数据集,所以查询响应速度极快。
Feature / 特性
Data Warehouse (DWH) / 数据仓库
Data Mart (DM) / 数据集市
Data Scope / 数据范围
Enterprise-wide, cross-functional data / 汇集全企业、跨功能数据
Single subject or specific department / 单一主题或特定部门
Data Sources / 数据来源
Multiple operational systems and external feeds / 多个业务系统和外部数据源
Mostly derived from the central warehouse / 大多衍生自中央数仓
Size / 数据容量
Typically hundreds of gigabytes to petabytes / 通常为数百 GB 到 PB 级
Usually less than 100 gigabytes / 通常小于 100 GB
Implementation / 实施周期
Months to years to fully deploy / 全面部署需要数月到数年
Days to weeks for a targeted setup / 针对性搭建仅需数天到数周
Primary Users / 主要用户
Data scientists, enterprise analysts / 数据科学家、企业级分析师
Department managers, local teams / 部门经理、业务团队
The Complete Data Mart Lifecycle
Business Requirements
|
v
Identify Business Process
|
v
Identify Grain
|
v
Identify Dimensions
|
v
Identify Facts
|
v
Source-to-Target Mapping
|
v
ETL / ELT
|
v
Data Quality
|
v
Data Mart
|
v
Semantic Layer
|
v
Power BI / Reporting
Where is Data Mart in Lakehouse
Azure
|
+--------+---------+
| |
CRM ERP
| |
+--------+---------+
|
Bronze
|
Silver
|
Gold
|
+---------+---------+
| | |
v v v
Sales Finance Customer
Mart Mart Mart
| | |
+---------+---------+
|
Power BI
The complete implementation of a data mart
assuming, we have those in Silver:
silver.orders
silver.order_items
silver.customers
silver.products
We are creating Sales Data Mart
Step 1 — Dimension
Dim Customer
-- ============================================================
-- PURPOSE:
-- Build the Customer Dimension for the Sales Data Mart.
--
-- WHY:
-- Fact_Sales will reference customer_key instead of storing
-- all customer descriptive attributes repeatedly.
-- ============================================================
CREATE TABLE gold.dim_customer
USING DELTA
AS
SELECT
-- --------------------------------------------------------
-- Surrogate Key
-- --------------------------------------------------------
-- A surrogate key is the warehouse/Data Mart key used
-- internally by the dimensional model.
-- --------------------------------------------------------
monotonically_increasing_id() AS customer_key,
-- --------------------------------------------------------
-- Business Key
-- --------------------------------------------------------
-- This is the identifier coming from the source system.
-- Example: CRM customer ID.
-- --------------------------------------------------------
customer_id,
-- --------------------------------------------------------
-- Descriptive Attributes
-- These attributes describe the customer.
-- --------------------------------------------------------
customer_name,
city,
province,
customer_segment
FROM silver.customers;
Product Dimension
-- ============================================================
-- PURPOSE:
-- Create the Product Dimension.
--
-- BUSINESS PURPOSE:
-- Allow analysts to slice sales by product, category,
-- brand, etc.
-- ============================================================
CREATE TABLE gold.dim_product
USING DELTA
AS
SELECT
-- Internal surrogate key used by the Data Mart
monotonically_increasing_id() AS product_key,
-- Source-system business key
product_id,
-- Business descriptive attributes
product_name,
category,
brand
FROM silver.products;
Date Dimension
-- ============================================================
-- PURPOSE:
-- Create a reusable Date Dimension.
--
-- WHY:
-- Business users frequently analyze data by:
-- Year
-- Quarter
-- Month
-- Week
-- Day
--
-- Instead of repeatedly calculating these values from the
-- transaction timestamp, we centralize the business calendar.
-- ============================================================
CREATE TABLE gold.dim_date
USING DELTA
AS
SELECT
date,
-- Calendar attributes
year(date) AS year,
quarter(date) AS quarter,
month(date) AS month,
day(date) AS day,
-- Useful reporting attributes
dayofweek(date) AS day_of_week,
date_format(date, 'MMMM') AS month_name
FROM (
-- Generate a calendar covering the required business period.
SELECT explode(
sequence(
DATE '2020-01-01',
DATE '2030-12-31',
INTERVAL 1 DAY
)
) AS date
);
Step 2 — Fact Sales
Fact_Sales
-- ============================================================
-- PURPOSE:
-- Build the Sales Fact Table.
--
-- GRAIN:
-- One row = one order line item.
--
-- THIS IS CRITICAL.
-- We must define the grain BEFORE loading the fact table.
-- ============================================================
CREATE TABLE gold.fact_sales
USING DELTA
AS
SELECT
-- ========================================================
-- Dimension Foreign Keys
-- ========================================================
d.date_key,
c.customer_key,
p.product_key,
-- ========================================================
-- Degenerate / Business Identifiers
-- ========================================================
oi.order_id,
-- ========================================================
-- Measures
-- ========================================================
oi.quantity,
oi.sales_amount,
oi.discount_amount,
oi.cost_amount,
-- Profit is derived from business measures.
-- ========================================================
oi.sales_amount
- oi.discount_amount
- oi.cost_amount AS profit_amount
FROM silver.order_items oi
-- ============================================================
-- Join Customer Dimension
-- ============================================================
JOIN gold.dim_customer c
ON oi.customer_id = c.customer_id
-- ============================================================
-- Join Product Dimension
-- ============================================================
JOIN gold.dim_product p
ON oi.product_id = p.product_id
-- ============================================================
-- Join Date Dimension
-- ============================================================
JOIN gold.dim_date d
ON CAST(oi.order_date AS DATE) = d.date;
SELECT
d.year,
d.month,
c.customer_segment,
SUM(f.sales_amount) AS revenue
FROM gold.fact_sales f
JOIN gold.dim_customer c
ON f.customer_key = c.customer_key
JOIN gold.dim_date d
ON f.date_key = d.date_key
GROUP BY
d.year,
d.month,
c.customer_segment
ORDER BY
d.year,
d.month,
c.customer_segment;
Key Takeaways
Data Mart: A subject-oriented analytical data store designed for a specific business domain or analytical purpose. 面向特定业务领域、部门或分析需求的数据分析存储层。
Concept
What is it?
Main Purpose
Data Lake
Large-scale flexible data repository
Store diverse data
Data Warehouse
Integrated analytical platform
Enterprise analytics
Data Mart
Domain-oriented analytical store
Business-domain analytics
Lakehouse
Architecture combining lake + warehouse capabilities
Unified data platform
For easy remember:
Data Lake: Store Data
Raw
Flexible
Large scale
Structured + Semi-structured + Unstructured
Data Warehouse: Integrate and analyze enterprise data
Enterprise-wide
Integrated
Structured
Governed
Historical
Analytics
Data Mart: Serve a specific business domain
Sales
Finance
Customer
Risk
Marketing
HR
Lakehouse: Unify Data Lake + Data Warehouse capabilities
Scalable storage + ACID + Governance + SQL Analytics + BI + Data Engineering + ML / AI
Data Lake / Warehouse / Lakehouse describe data-platform architecture; Data Mart describes a business-oriented analytical data product or store.
Dimensional Modeling e.g. Kimball dimensional modeling
Other Modeling Approaches
Dimensional Modeling is a data modeling technique designed primarily for analytical workloads.
It organizes data around:
Facts — measurable business events 可以度量的业务事件
Dimensions — descriptive business context 描述业务上下文的信息
Kimball Dimensional Modeling
Kimball Dimensional Modeling is an approach to designing analytical data warehouses using dimensional models, centered around business processes, facts, dimensions, conformed dimensions, and a bus architecture.
Kimball Dimensional Modeling belongs to Dimmensional Modeling.
The Core Philosophy of Kimball: Start with the business process, not the database tables.
Important concept of Kimball’s dimensional modeling
Business Process
A Business Process is a business activity that an organization performs and wants to measure, analyze, and improve. 企业正在执行的一类业务活动,而且企业希望对这类活动进行度量、分析和改进. e.g.
销售 Sales
订单履行 Order Fulfillment
库存 Inventory
支付 Payments
退货 Returns
保险理赔 Claims
医院入院 Admissions
贷款申请 Loan Applications
客户服务 Customer Service
Kimball dimensional modeling starts with the business process.
Typical examples of Business Processes
Retail:
Sales
Inventory
Returns
Payments
Shipping
Banking:
Account Opening
Transactions
Payments
Loans
Credit Card Transactions
Fraud Detection
Government
Application
Case Processing
Permit Issuance
Payment
Inspection
Appeal
Kimball Dimensional Design — 4 Steps
The four critical steps of the Kimball lifecycle / dimensional modeling methodology are:
Select the Business Process
Declare the Grain
Identify the Dimensions
Identify the Facts
An Example: “We want to analyze credit card transactions.”
Do not create tables now.
Step 1: Select the Business Process
What is the Business Process? Credit Card Transaction
What is the Business Event? A cardholder makes a transaction at a merchant.
Step 2: Declare the Grain
What is the Grain? One row = one credit card transaction
Step 3: Identify the Dimensions
What Dimensions?
Customer
Card
Merchant
Date
Time
Location
Transaction Type
Step 4: Identify the Facts
What Facts?
Transaction Amount
Fee Amount
Tax Amount
Reward Points
Finally:
Dim Customer
|
|
Dim Card ------- Fact Transaction ------ Dim Merchant
|
|
Dim Date
|
|
Dim Time
This is Kimball’s thought.
Implementation – Initially Physical Model
Assuming, I have decided: Grain = one row per sales order line
The grain defines exactly what one row in a fact table represents. Grain 定义 Fact Table 中“一行数据到底代表什么业务事件”。
One row = one sales transaction 一行 = 一笔销售交易
One row = one sales transaction 一行 = 一笔销售交易
One row = one order line 一行 = 一个订单明细
Grain is the semantic contract of the fact table.
Three common fact grains in Kimball
In data warehousing, these three grains are formally known as:
Transaction Fact grain (事务粒度)
Periodic snapshot Fact grain (周期快照粒度)
Accumulating snapshot Fact grain (累积快照粒度)
Fact Type
Grain
核心问题
Transaction Fact
One business event 一次业务事件
What happened? 发生了什么?
Periodic Snapshot
One entity/process at a periodic point 某个周期时点的状态
What was the state? 当时状态如何?
Accumulating Snapshot
One process lifecycle 一个业务流程生命周期
How did the process progress? 流程进行到哪里?
Transaction Fact Grain
One row represents one business transaction/event.
e.g. One row = one order line
Date
Customer
Product
Store
Qty
Sales
Sep 13
C001
P001
S001
1
1200
Sep 13
C001
P002
S001
2
500
Sep 13
C001
P003
S001
1
50
Periodic snapshot Fact grain
A row represents the state of a business process at a regular point in time. 一行代表某个业务对象/流程在一个固定周期时间点的状态。
e.g. Account Balance Snapshot One row = Customer Account + Day
Date
Account
Balance
Sep 11
A001
10,000
Sep 12
A001
9,500
Sep 13
A001
11,000
Accumulating snapshot Fact grain
A single row represents the entire lifecycle of a process or a specific entity that moves through multiple, predictable milestones.
e.g. Order Fulfillment
Order Created ↓ Payment Approved ↓ Warehouse Processing ↓ Shipped ↓ Delivered
We can represent the entire lifecycle of an order in one row.
Order
Order Date
Payment Date
Ship Date
Delivery Date
10001
Sep 10
Sep 10
Sep 11
Sep 13
Grain Determines Whether a Fact Is Valid
A fact is only meaningful if it is measured at the same grain as the fact table. 一个 Fact 只有在与 Fact Table 的 Grain 相匹配时,才是有意义、可以正确分析的。
Suppose we define:
Grain: One row represents one Order Line.
That means every row in the fact table represents exactly:
One product on one order
Order
Product
Quantity
Sales Amount
O1001
iPhone
1
$1,200
O1001
AirPods
2
$500
O1002
MacBook
1
$2,000
A error fact example.
Order
Product
Sales Amount
Order Total
O1001
iPhone
1,200
1,700
O1001
AirPods
500
1,700
there is issue on the column “Order Total” 把 $1,700 放进一个 Order-Line Grain 的 Fact Table,并让它看起来像每一行的可加 Fact,是错误的设计。 我们的 Fact Grain 是 “One row represents one Order Line.” 一行一个order 的 “行” – order 上的一行。
Order Total O1001 这份order的 合计金额, 是 “Order Grain” – 一份order的. 放在目前的Fact 上就不对。
如果一定要使用 “Order Total ”, 那就再叫另外一个Fact_order,
Grain:One row per Order
Order
Customer
Order Total
Shipping Cost
O1001
C001
1700
20
O1002
C002
2000
30
Grain Determines Dimension Context
Kimball-style terminology: The grain defines not only what the fact represents, but also which dimensions can validly describe the row.
Dimensions
A Dimension is a business-oriented structure that provides the descriptive context used to analyze facts. 用于描述和分析 Fact 的业务分析结构。
A Very Important Kimball Principle
Kimball Principle: Dimensions should be understandable to business users.
Data Modeling is the process of deciding how business data should be
structured,
organized,
related,
represented
so that people and computer systems can use it correctly.
In simple terms: Data Modeling = deciding what data we have, what each piece of data means, how different data is related, and how we should organize it.
Data Modeling include:
Conceptual Modeling
Logical Modeling
Physical Modeling
Operational Data Modeling
Relational Modeling
Data Vault
Dimensional Modeling e.g. Kimball dimensional modeling
Other Modeling Approaches
What is Data Modeling actually DOING?
We take the real business world and translate it into a structured data representation that a computer can store, query, analyze, and maintain.
Data Modeling is about MEANING, not just tables.
The basic building blocks of Data Modeling
English
中文
Entity
实体: 我们要管理的“东西”
可识别 + 业务相关 + 可以被描述
An Entity is a distinct business object or concept that we want to represent in data.
Identifiable + Relevant + Describable
Attribute
属性: 描述这个东西的信息
An Attribute describes a property or characteristic of an entity.
Relationship
关系: 东西和东西之间怎么关联
Cardinality
基数 / 数量关系
一个对多少个
Cardinality specifies how many instances of one Entity can be associated with an instance of another Entity. 1:1, 1:N, N:1, N:N
Key
键
Cardinality specifies how many instances of one Entity can be associated with an instance of another Entity. simple, “Which exact record is this?”
A Primary Key is the chosen attribute or combination of attributes that uniquely identifies each row in a table. A Foreign Key is an attribute in one entity/table that references the key of another entity/table.
Constraint
约束
The three levels of Data Modeling
Conceptual Model
Conceptual Modelis a high-level representation of the major business entities and their relationships.
Simply, what business things exist? 业务上有什么东西?
Logical Model
The Logical Data Model defines the detailed structure of the data, including entities, attributes, relationships, keys, and business rules, without depending on a specific database technology.
Simply, how should the business data be logically organized?
Physical Model
The Physical Data Model describes how the logical model will actually be implemented in a specific database, data warehouse, lakehouse, or other technology.
Simply, how will we actually store and implement the data?
Model
Question
中文
Conceptual
What?
有什么业务东西?
Logical
How is it organized?
数据逻辑上怎么组织?
Physical
How is it implemented?
技术上怎么真正实现?
What is Normalization?
Normalization is a data modeling technique used to organize data so that:
unnecessary duplication is reduced
data dependencies are correctly represented
update anomalies are minimized
data integrity is improved
Why do we normalize data?
Normalization organizes data around business entities and dependencies. It reduces unnecessary redundancy and prevents update, insert, and delete anomalies while improving data integrity and maintainability. Normalization 是根据业务实体和数据依赖关系来组织数据,减少不必要的数据冗余,避免 Update、Insert 和 Delete Anomalies,同时提高数据完整性和可维护性。
First Normal Form — 1NF
A table is in 1NF when each attribute contains atomic values, meaning each cell represents a single value rather than a repeating group or list. 每个 Cell 应该保存一个 Atomic Value(原子值),而不是一个列表或重复组。
Second Normal Form — 2NF
A table is in 2NF when:
It is already in 1NF 首先必须满足 1NF
Every non-key attribute depends on the whole primary key, not only part of a composite key. 所有非 Key 属性必须依赖于整个 Primary Key, 不能只依赖 Composite Key 的一部分
Third Normal Form — 3NF
A table is in 3NF when:
It is in 2NF
Non-key attributes depend on the key, the whole key, and nothing but the key.
Grain
粒度
The grain defines exactly what one row in a fact table represents. Grain 定义 Fact Table 中“一行数据到底代表什么业务事件”。
Key Takeaways
Data Modeling translates the real business world into structured data. 是把现实业务世界转换成结构化的数据。
An Entity represents a business object or concept. 表示一个业务对象或业务概念。
An Attribute describes an Entity. 描述 Entity 的特征
A Relationship describes how Entities are connected. 描述不同 Entity 之间如何关联。
Cardinality describes how many instances of one Entity can relate to another. 描述两个 Entity 之间“一对一、一对多、多对多”的数量关系。
Data Vault is a data warehouse modeling methodology designed to build an enterprise data platform that is:
scalable
auditable
historically accurate
adaptable to changing source systems
able to integrate data from many different sources
The central idea is: Separate business identity, relationships, and descriptive history.
Data Vault mainly does this through three building blocks:
Hub + Link + Satellite
You will often see this called: Hubs, Links, and Satellites — HLS
Hub: Represents the primary business objects. Link: Defines the associations between business objects. Satellite: Stores descriptive attributes and records historical changes to those attributes.
You can think this way, a Bank, it has many source systems
CRM → C123
Core Banking → 100023
Credit System → CU-789
Card System → 998877
Assuming Source systems changeing
# Now
Customer
----------------
Customer_ID
Name
Email
Phone
# tomorrow changing to
Customer
----------------
Customer_ID
First_Name
Last_Name
Email
Mobile_Phone
Data Vault will sperate Business Identity and Descriptive Attributes
Hub_Customer, looks after “Customer Business Key”
Satellite_Customer: looks after
“Name Email Phone Address Status … “
Once source add a new attribute – “Preferred_Language”, System only need change Satellite.
Assuming, Historical data tracking
assuming,
2024: Customer = John City = Toronto
2025: Customer = John City = Vancouver
2026: Customer = John City = Calgary
under this scenario, enterprice wants to know: “When did John live in Toronto? When did he move to Vancouver, and when did he move to Calgary?”
Data Vault does “Don’t overwrite histrory unnecessarily“, keep all history change
Hub Customer
│
▼
Satellite Customer
Customer_Key | City | Load_Date
-------------|------------|-----------
C10001 | Toronto | 2024-01-01
C10001 | Vancouver | 2025-03-15
C10001 | Calgary | 2026-02-10
Auditability
Enterprice offen asks where does this data come? e.g. Customer Email = abc@gmail.com
Data Vault highly emphasizes:
Source System
Load Date
Record Source
Business Key
Hash Key
Hash Diff
so we create
Source System ↓ Raw Data ↓ Data Vault ↓ Business Data
to keep data lineage / history
The three core components of Data Vault
Hub – Link – Satellite
Hub represents a unique business concept or business key. It answers “Who is this business entity?”
Link represents a business relationship between Hubs. It is Business relationship
Customer owns Account Customer applies for Loan Customer holds Credit Card Employee works for Branch Supplier provides Product
Satellite stores descriptive attributes and their historical changes. It descripts Hub or Link and information lineages, history change.
example: customer
Data Vault will ask: What is this entity? —- Hub
Customer ID = C10001
How does it relate to other objects? —- Link
Link Customer-Account Customer C10001 | | owns | Account A90001
What attributes does this Customer have? —- Satellite
Customer C10001
Name = John Smith Email = john@gmail.com City = Toronto Status = Active
┌──────────────┐
│ HUB │
│ │
│ WHO ARE YOU? │
└──────┬───────┘
│
│ relationship
▼
┌──────────────┐
│ LINK │
│ │
│ WHO IS │
│ RELATED TO │
│ WHOM? │
└──────┬───────┘
│
▼
┌──────────────┐
│ SATELLITE │
│ │
│ WHAT DO WE │
│ KNOW ABOUT │
│ IT? │
└──────────────┘
A canonical model is a design pattern that uses a single, standardized data format to let different systems talk to each other without needing custom connections for every pair.
先用人话说, Canonical Model = 企业统一规定的一套“标准数据语言”。大家都必须按照同一套“词典 + 语法 + 数据结构”来描述同一个业务对象。
For example, a company has 10 data system, each system has “customer”. but the “customer” is named in different way in each data system.
System
Customer ID
Customer Name
Phone
CRM
customer_id
customer_name
phone
Banking
CUST_NO
CUST_NM
MOBILE_NO
Insurance
client_id
full_name
telephone
ERP
BP_ID
BP_NAME
TEL_NO
Canonical Model means that all “Customer” will be uniformly defined in this way in the future in the company.
Data types are another key component of the Canonical Model. For example, ‘Date of Birth’ must have a consistent data type across the system, rather than being defined as a Varchar one day and a Date type the next.
4. Business Meaning
Unique enterprise identifier representing a customer within the enterprise customer domain.
-- ============================================================
-- SILVER / CANONICAL LAYER
--
-- Purpose:
-- 将 CRM Source Model 转换成 Enterprise Canonical Model。
--
-- 这里最重要的工作不是简单 rename column。
-- 我们同时执行:
--
-- 1. Schema standardization
-- 2. Data type standardization
-- 3. Business naming standardization
-- 4. Data cleansing
-- 5. Business rule application
-- ============================================================
CREATE OR REPLACE TABLE silver.canonical_customer AS
SELECT
-- --------------------------------------------------------
-- 将 CRM 的 CUST_ID 映射为企业统一的 customer_id。
-- --------------------------------------------------------
CAST(CUST_ID AS STRING) AS customer_id,
-- --------------------------------------------------------
-- 将 Source System 的 CUST_NM
-- 转换成 Canonical Model 的 name。
-- trim() 用于消除 source data 中多余空格。
-- --------------------------------------------------------
TRIM(CUST_NM) AS name,
-- --------------------------------------------------------
-- 统一电话号码格式。
-- 实际企业项目中这里可能还会调用标准化规则。
-- --------------------------------------------------------
MOBILE_NO AS phone,
-- --------------------------------------------------------
-- 添加 source_system。
-- 这个 metadata 非常重要:
-- 后续可以追溯数据来自哪个系统。
-- --------------------------------------------------------
'CRM' AS source_system,
-- --------------------------------------------------------
-- 记录 ingestion / transformation 时间。
-- 用于 lineage、audit 和 troubleshooting。
-- --------------------------------------------------------
current_timestamp() AS processed_at
FROM bronze.crm_customer;
result:
customer_id | name | phone
------------|-------------|---------------
10001 | John Smith | 416-111-1111
10002 | Mary Chen | 416-222-2222
Banking
CUSTOMER_NO
FULL_NAME
PHONE
-- ============================================================
-- 将 Banking Source Model 转换为同一个 Canonical Model。
--
-- 注意:
-- CRM 和 Banking 的 Source Schema 完全不同。
-- 但是输出 Schema 必须遵循同一个 Canonical Contract。
-- ============================================================
SELECT
CAST(CUSTOMER_NO AS STRING) AS customer_id,
TRIM(FULL_NAME) AS name,
PHONE AS phone,
'BANKING' AS source_system,
current_timestamp() AS processed_at
FROM bronze.banking_customer;
Unified Customer
-- ============================================================
-- UNIFIED CUSTOMER
--
-- Purpose:
-- 将不同 source systems 的 canonical records
-- 汇聚成企业统一 Customer view。
--
-- 注意:
-- Canonicalization != Entity Resolution
--
-- Canonicalization:
-- 把结构统一。
--
-- Entity Resolution:
-- 判断两个 records 是否代表同一个真实 Customer。
-- ============================================================
CREATE OR REPLACE TABLE gold.unified_customer AS
SELECT
customer_id,
name,
phone
FROM silver.canonical_customer_crmUNION ALL
SELECT
customer_id,
name,
phone
FROM silver.canonical_customer_banking;
Usually, in actual enterprise deployments, this stage usually includes the following additions:
Identity Resolution
Deduplication
Survivorship Rules
Master Data
Golden Record
Key Takeaways
Canonical Model answers: “When different systems talk about the same business concept, what should that concept look like and mean inside the enterprise?”
要点
EN
CN
Canonical Model
Standardized enterprise representation of data
企业统一的数据表示方式
核心目的
Reduce integration complexity
降低系统集成复杂度
核心思想
Different sources → common representation
不同 Source → 统一表示
Business Entity
Customer, Account, Product, etc.
业务实体
Attributes
Standardized fields and meanings
标准化字段及业务含义
Relationships
Defines relationships between entities
定义实体之间关系
Business Semantics
Defines what each field actually means
定义字段真正的业务含义
Source Model
Represents one source system
某个源系统自己的数据模型
Canonical Model
Enterprise-standard representation
企业标准数据模型
Data Unification
Combines data into a consistent enterprise view
将数据统一成企业级一致视图
Master Data
Identifies and manages trusted business entities
管理可信的核心业务实体
Data Contract
Defines producer/consumer data agreement
定义生产者与消费者之间的数据契约
Databricks
Canonical can be implemented using Delta tables/views
可用 Delta Table/View 等实现
Canonical ≠ Unification
Structure standardization is not identity resolution
结构统一不等于实体统一
Canonical + Metadata
Metadata explains meaning, ownership, lineage, etc.
Metadata 解释含义、Owner、Lineage 等
Canonical + DQ
Canonical fields can have standardized quality rules
In Azure Databricks, logging is crucial for monitoring, debugging, and auditing your notebooks, jobs, and applications. Since Databricks runs on a distributed architecture and utilizes standard Python, you can use familiar Python logging tools, along with features specific to the Databricks environment like Spark logging and MLflow tracking.
Python’s logging module provides a versatile logging system for messages of different severity levels and controls their presentation. To get started with the logging module, you need to import it to your program first, as shown below:
Log levels define the severity of the event that is being logged. For example a message logged at the INFO level indicates a normal and expected event, while one that is logged at the ERROR level signifies that some unexpected error has occurred.
Each log level in Python is associated with a number (from 10 to 50) and has a corresponding module-level method in the logging module as demonstrated in the previous example. The available log levels in the logging module are listed below in increasing order of severity:
Logging Level Quick Reference
Level
Meaning
When to Use
DEBUG (10)
detailed debugging info
development
INFO (20)
normal messages
job progress
WARNING (30)
minor issue
non-critical issues
ERROR (40)
failure
recoverable errors
CRITICAL (50)
system failure
stop the job
It’s important to always use the most appropriate log level so that you can quickly find the information you need. For instance, logging a message at the WARNING level will help you find potential problems that need to be investigated, while logging at the ERROR or CRITICAL level helps you discover problems that need to be rectified immediately.
By default, the logging module will only produce records for events that have been logged at a severity level of WARNING and above.
Logging basic configuration
Ensure to place the call to logging.basicConfig() before any methods such as info(), warning(), and others are used. It should also be called once as it is a one-off configuration facility. If called multiple times, only the first one will have an effect.
logging.basicConfig() example
import logging
from datetime import datetime
## set date time format
run_id = datetime.now().strftime("%Y%m%d_%H%M%S")
## Output WITH writing to a file (Databricks log file)
log_file = f"/dbfs/tmp/my_pipeline/logs/run_{run_id}.log"
## start configuing
logging.basicConfig(
filename=log_file,
level=logging.INFO,
format="%(asctime)s — %(levelname)s — %(message)s",
)
## creates (or retrieves) a named logger that you will use to write log messages.
logger = logging.getLogger("pipeline")
## The string "pipeline" is just a name for the logger. It can be anything:
## "etl"
## "my_app"
## "sales_job"
## "abc123"
2025-11-21 15:05:01,112 – INFO – === Pipeline Started === 2025-11-21 15:05:01,213 – INFO – Step 1: Read data 2025-11-21 15:05:01,315 – INFO – Step 2: Transform 2025-11-21 15:05:01,417 – INFO – Step 3: Write output 2025-11-21 15:05:01,519 – INFO – === Pipeline Completed Successfully ===
Log Rotation (Daily Files)
Log Rotation means: Your log file does NOT grow forever. Instead, it automatically creates a new log file each day (or each hour, week, etc.), and keeps only a certain number of old files.
This prevents:
huge log files
storage overflow
long-term disk growth
difficult debugging
slow I/O
It is very common in production systems (Databricks, Linux, App Servers, Databases). Without log rotation → 1 file becomes huge, With daily rotation:
2025-11-21 15:12:01,233 - INFO - my_pipeline - === ETL START ===
2025-11-21 15:12:01,415 - INFO - my_pipeline - Step 1: Read data
2025-11-21 15:12:01,512 - INFO - my_pipeline - Step 2: Transform
2025-11-21 15:12:01,660 - INFO - my_pipeline - Step 3: Write output
2025-11-21 15:12:01,780 - INFO - my_pipeline - === ETL COMPLETED ===
If error:
2025-11-21 15:15:44,812 - ERROR - my_pipeline - ETL FAILED: File not found
Traceback (most recent call last):
...
Best Practices for Logging in Python
By utilizing logs, developers can easily monitor, debug, and identify patterns that can inform product decisions, ensure that the logs generated are informative, actionable, and scalable.
Avoid the root logger it is recommended to create a logger for each module or component in an application.
Centralize your logging configuration Python module that will contain all the logging configuration code.
Use correct log levels
Write meaningful log messages
% vs f-strings for string formatting in logs
Logging using a structured format (JSON)
Include timestamps and ensure consistent formatting
Keep sensitive information out of logs
Rotate your log files
Centralize your logs in one place
Conclusion
To achieve the best logging practices, it is important to use appropriate log levels and message formats, and implement proper error handling and exception logging. Additionally, you should consider implementing log rotation and retention policies to ensure that your logs are properly managed and archived.
The Job Interview is the single most critical step in the job hunting process. It is the definitive arena where all of your abilities must integrate. The interview itself is not a skill you possess; it is the moment you deploy your Integrated Skill Set, blending:
Hard Skills (Technical Mastery): Demonstrating not just knowledge of advanced topics, but the depth of your expertise and how you previously applied it to solve complex, real-world problems.
Soft Skills (Communication & Presence): Clearly articulating strategy, managing complexity under pressure, and exhibiting the leadership presence expected of senior-level and expert-level candidates.
Contextual Skills (Business Acumen): Framing your solutions within the company’s business goals and culture, showing that you understand the strategic impact of your work.
This Integrated Skill represents your first real opportunity to sell your strategic value to the employer.
Landing Zone
A Microsoft Landing Zone usually refers to an Azure Landing Zone (often part of the Cloud Adoption Framework (CAF)). It is a pre-built, best-practice cloud foundation that organizations use to deploy workloads in Azure in a secure, governed, and scalable way.
A Landing Zone is the “foundation environment” in the cloud:
networking is ready
security is enforced
identity is centralized
governance is in place
logging & monitoring are enabled
Core Components
Identity & Access (Entra ID)
Central authentication
RBAC roles
Networking
Hub-Spoke architecture
VNet design
Private endpoints
Governance
Policies (Azure Policy)
Management Groups
Resource tagging standards
Security
Microsoft Defender for Cloud
Security baselines
Key Vault for secrets
Monitoring
Log Analytics
Azure Monitor
Alerting system
Star schema vs Snowflake schema
Star schema has a central fact table connected directly to denormalized dimension tables. It is simple and fast for querying. Snowflake schema has normalized dimension tables, where dimensions are split into multiple related tables.
Snowflake = more normalized, less redundancy but more joins
Star = simpler, faster queries
How do you design a dimensional model?
I design it using business requirements:
Align with BI/reporting needs
Identify facts (measures) like sales, transactions
Azure Data Factory is a cloud-based data integration service used to create data-driven workflows for orchestrating and automating data movement and transformation across different data stores and compute services.
Key capabilities
Data ingestion
Data orchestration
Data transformation
Scheduling and monitoring
What are the core components of ADF?
The main components are:
Component
Purpose
Pipeline
Logical grouping of activities
Activity
Single task in a pipeline
Dataset
Data structure pointing to data
Linked Service
Connection to external resources
Trigger
Schedule or event that starts a pipeline
Integration Runtime
Compute infrastructure used to run activities
What is a Pipeline?
A pipeline is a logical grouping of activities that together perform a task such as data ingestion or transformation.
What is Integration Runtime (IR)?
Integration Runtime is the compute infrastructure used by ADF to perform data integration tasks.
Azure IR Fully managed compute in Azure
Self-hosted IR Runs on on-premises machines
Azure SSIS IR Used to run SSIS packages
Types:
What is a Linked Service?
A linked service defines the connection information needed for ADF to connect to external resources, example:
Azure SQL Database
Data Lake
databricks
On-Prem database
What is a Dataset?
A dataset represents the structure of data within a data store.
Difference between Pipeline and Data Flow
Feature
Pipeline
Data Flow
Purpose
Orchestration
Data transformation
Compute
Orchestration engine
Spark cluster
UI
Activity workflow
Visual transformation
How do you handle incremental loading?
Solution 1: Watermark column last_modified_date: Max(Last_modified) WHERE last_modified > last_run_time
Solution 2: CDC transaction log change tracking
Solution 3: File-based incremental folder partition by date
Azure Data Factory Pipeline is an orchestration layer used to coordinate activities (copy, Databricks, API calls). Mapping Data Flow is a visual ETL engine running on Spark for transformations without coding
How do you handle retries and failure recovery?
I handle failures using:
Delta Lake ACID for safe writes and rollback support
Use run ID to open detailed error logs in Databricks
Log Analytics integration
Centralized monitoring if enabled
Notebook logging best practice
Explicit try/except + logging errors back to ADF (custom messages)
So ADF gives high-level error, Databricks gives detailed stack trace.
How do you manage “Schema Drift” when ingesting data from diverse, changing corporate sources using Azure Data Factory (ADF)?
Answer: * I design a resilient ingest architecture rather than forcing hardcoded mappings. In ADF, I use Mapping Data Flows with the “Allow Schema Drift” option enabled so the pipeline doesn’t break when a source team adds a column.
When landing data into the Databricks Bronze layer, I utilize Databricks Auto Loader (cloudFiles) with Schema Evolution enabled (.option("mergeSchema", "true")). This allows Delta Lake to automatically infer and append new columns to the table schema on-the-fly, while isolating structural alerts into a monitoring log.
Describe the data storage options available in Databricks.
Databricks offers several ways to store data. First, there’s the Databricks File System for storing and managing files. Then, there’s Delta Lake, an open-source storage layer that adds ACID transactions to Apache Spark, making it more reliable. Databricks also integrates with cloud storage services likeAWS S3, Azure Blob Storage, and Google Cloud Storage. Plus, you can connect to a range of external databases, both relational and NoSQL, using JDBC.
What is Databricks Delta (Delta Lakehouse) and how does it enhance the capabilities of Azure Databricks?
Databricks Delta, now known as Delta Lake, is an open-source storage layer that brings ACID transactions to Apache Spark and big data workloads. It enhances Azure Databricks by providing features like:
ACID transactions for data reliability and consistency.
Scalable metadata handling for large tables.
Time travel for data versioning and historical data analysis.
Schema enforcement and evolution.
Improved performance with data skipping and Z-ordering
Are there any alternative solution that is similar to Delta lakehouse?
there are several alternative technologies that provide Delta Lake–style Lakehouse capabilities (ACID + schema enforcement + time travel + scalable storage + SQL engine). such as,
Apache Iceberg
Apache Hudi
Snowflake (Iceberg Tables / Unistore)
BigQuery + BigLake
AWS Redshift + Lake Formation + Apache Iceberg
Microsoft Fabric (OneLake + Delta/DQ/DLTS)
What is Delta Live Table? Have you used DLT?
Yes. Delta Live Tables, or DLT, is a Databricks framework for building and managing reliable data pipelines. In current Databricks terminology, it is part of Lakeflow Declarative Pipelines, but DLT is still commonly used in projects and interviews.
I have used DLT in my previous projects, mainly for production data pipelines using the Bronze, Silver, and Gold architecture.
For example, in the Bronze layer, we ingested raw data from sources such as APIs, files, and enterprise systems. In Silver, we used DLT for data cleansing, validation, deduplication, CDC processing, and business transformations. The Gold layer provided curated datasets for reporting and downstream applications.
One of the key features I used was data quality expectations. I could define rules such as required business keys, valid values, and data completeness. Depending on the requirement, invalid records could be quarantined or handled separately instead of simply being dropped, while the pipeline continued processing valid data.
DLT is also declarative, which means I define what the target datasets should look like and how they depend on upstream data, rather than manually managing every execution step. Databricks manages things such as pipeline dependencies, incremental processing, monitoring, and lineage.
I also used DLT with incremental processing and CDC patterns, including identifying new or changed records using business keys and timestamps and applying changes to Delta tables.
So, in my experience, DLT is not just a transformation tool. I used it as part of a production-grade data engineering solution, covering ingestion, transformation, data quality, incremental processing, CDC, dependency management, monitoring, and the overall Bronze-Silver-Gold architecture.
Why DLT instead of regular Databricks jobs?
I would use DLT when I need a more managed and reliable data pipeline, especially for multi-stage production pipelines.
The main advantage is that DLT provides a declarative approach. I define the data transformations and dependencies, and Databricks manages much of the pipeline execution.
It also provides built-in capabilities for data quality expectations, dependency management, incremental processing, lineage, monitoring, and pipeline recovery.
For example, if I have a Bronze-to-Silver-to-Gold pipeline with multiple dependent datasets, DLT can manage those dependencies and process the data incrementally instead of requiring me to build all of that orchestration logic myself.
Regular Databricks Jobs are still very useful, especially for custom Python or PySpark processing, batch jobs, orchestration, and tasks that don’t naturally fit a declarative pipeline.
So I would say the key difference is: Databricks Jobs are primarily an execution and orchestration mechanism, while DLT provides a more complete framework for building and operating reliable data pipelines.
Delat Live table vs Telta Table side by side
Delta Table vs Delta Live Tables (Side-by-Side)
Feature
Delta Table
Delta Live Tables (DLT)
Definition
Storage layer built on Delta Lake format
Managed ETL framework built on top of Delta Lake
Main Purpose
Store reliable data with ACID properties
Build and manage data pipelines automatically
Type
Data storage / table format
Data pipeline orchestration framework
Responsibility
User manages ETL logic manually
System manages ETL pipeline automatically
Pipeline Management
Not included
Built-in (dependency handling, orchestration)
Data Processing
Manual (SQL / PySpark / Spark jobs)
Declarative (define tables, system executes pipeline)
ETL Control
Fully controlled by developer
Partially automated (framework-managed execution)
Data Quality Rules
Not built-in
Built-in (expect, expect_or_drop, etc.)
Monitoring
External tools required
Built-in monitoring & observability
Lineage Tracking
Manual or external tools
Automatic lineage tracking
Streaming Support
Manual setup required
Native streaming support built-in
Incremental Processing
Manually implemented
Automatically handled
Error Handling / Retry
Developer must implement
Built-in retry & recovery
CI/CD Integration
Possible but manual
Fully integrated with pipelines
Underlying Storage
Parquet-based Delta format
Uses Delta Tables underneath
Use Case
Store data, build tables, SQL analytics
Build production ETL pipelines (Bronze/Silver/Gold)
Complexity Level
Lower concept complexity
Higher abstraction, easier operations
What is schema evolution in Delta Lake?
Schema evolution allows Delta tables to automatically or manually adapt when new columns are added or schema changes occur, without breaking pipelines.
What is Schema Enforcement?
Schema Enforcement means the system validates incoming data against a predefined schema before writing the data. It checks column names, data types, and structure to ensure data consistency and quality. And the system will reject the write or throw an error if incoming data does not match the expected schema.
What is Schema Contract?
A schema contract is an agreement between a data producer and a data consumer that defines the expected structure and rules of the data.
For example, it can define the required columns, data types, nullable rules, and sometimes business constraints.
The purpose is to make sure the producer and consumer have a clear and stable understanding of what the data should look like.
For example, if the contract says customer_id must be a non-null STRING, the producer should always provide the data in that format. If the producer wants to make a breaking change, such as changing the data type, that change needs to be agreed upon and managed.
So, in simple terms, a schema contract is the agreed data interface between the producer and the consumer.
What is Time Travel?
Time Travel is a feature that allows you to access and query previous versions of data in a table.
In Delta Lake, every data change (insert, update, delete) is versioned. This means the system keeps a history of changes, and you can query the table as it existed at a specific point in time or version.
SELECT * FROM table VERSION AS OF 5;
SELECT * FROM table TIMESTAMP AS OF '2024-01-01';
Explain how you can use Databricks to implement a Medallion Architecture (Bronze, Silver, Gold).
Bronze Layer (Raw Data): Ingest raw data from various sources into the Bronze layer. This data is stored as-is, without any transformation.
Silver Layer (Cleaned Data, as known Enriched layer): Clean and enrich the data from the Bronze layer. Apply transformations, data cleansing, and filtering to create more refined datasets.
Gold Layer (Aggregated Data, as known Curated layer): Aggregate and further transform the data from the Silver layer to create high-level business tables or machine learning features. This layer is used for analytics and reporting.
What Is Z-Order (Databricks / Delta Lake)?
Z-Ordering in Databricks (specifically for Delta Lake tables) is an optimization technique designed to co-locate related information into the same set of data files on disk.
OPTIMIZE mytable ZORDER BY (col1, col2);
What Is Liquid Clustering (Databricks)?
Liquid Clustering is Databricks’ next-generation data layout optimization for Delta Lake. It replaces (and is far superior to) Z-Order.
## At creation time:
CREATE TABLE sales
CLUSTER BY (customer_id, event_date)
AS SELECT * FROM source;
## For existing tables:
ALTER TABLE sales
CLUSTER BY (customer_id, event_date);
## Trigger the actual clustering:
OPTIMIZE sales;
## Remove clustering:
ALTER TABLE sales
CLUSTER BY NONE;
What is a Dataframe, RDD, Dataset in Azure Databricks?
Dataframe refers to a specified form of tables employed to store the data within Databricks during runtime. In this data structure, the data will be arranged into two-dimensional rows and columns to achieve better accessibility.
RDD, Resilient Distributed Dataset, is a fault-tolerant, immutable collection of elements partitioned across the nodes of a cluster. RDDs are the basic building blocks that power all of Spark’s computations.
Dataset is an extension of the DataFrame API that provides compile-time type safety and object-oriented programming benefits.
What is catching and its types?
A cache is a temporary storage that holds frequently accessed data, aiming to reduce latency and enhance speed. Caching involves the process of storing data in cache memory.
What is Spark Cache / Persist (Memory Cache)
This is the standard Apache Spark feature. It stores data in the JVM Heap (Memory).
What is Databricks Disk Cache (Local Disk)
This is a Databricks-specific optimization. It automatically stores copies of remote files (Parquet/Delta) on the local NVMe SSDs of the worker nodes.
comparing .cache() and .persist()
both .cache() and .persist() are used to save intermediate results to avoid re-computing the entire lineage. The fundamental difference is that .cache() is a specific, pre-configured version of .persist().
.cache(): This is a shorthand for .persist(StorageLevel.MEMORY_ONLY). It tries to store your data in the JVM heap as deserialized objects.
.persist(): This is the more flexible version. It allows you to pass a StorageLevel to decide exactly how and where the data should be stored (RAM, Disk, or both).
How do you optimize Databricks?
When optimizing Databricks workloads, I focus on several layers. First, I optimize data layout using partitioning and Z-ordering on Delta tables. Second, I improve Spark performance by using broadcast joins, filtering data early, and caching intermediate results. Third, I tune cluster resources such as autoscaling and Photon engine. Finally, I run Delta maintenance commands like OPTIMIZE and VACUUM to manage small files and improve query performance.
Data Layout Optimization: Partitioning: CREATE TABLE sales USING DELTA PARTITIONED BY (date)
Z-Ordering: OPTIMIZE sales ZORDER BY (customer_id);
Liquid Clustering:
What is Photon Engine?
Photon is a high-performance query engine built in C++ that accelerates SQL queries and data processing workloads in Azure Databricks. It improves performance by using vectorized processing and optimized execution for modern hardware.
What is Data skew,
Data skew happens when some partitions have much more data than others, causing slow tasks and performance bottlenecks.
Data skew usually happens during:
Joins
GroupBy
Aggregations
When designing a production pipeline in Databricks, how do you diagnose and mitigate data skew or memory-related issues like Out of Memory (OOM) errors?
Answer: * Diagnosis: I look at the Spark UI. If one task takes significantly longer than others (Stage Skew) or if an executor’s memory usage spikes and drops unexpectedly, it indicates data skew. If an executor JVM dies entirely, it’s an OOM error.
I optimize partitioning using Adaptive Query Execution (AQE) or implement Liquid Clustering in Delta Lake to maintain balanced, performance-aware file sizes.
Mitigation for Skew: * If joining on a skewed key, I leverage Broadcast Joins if one table is small enough.
For larger tables, I use Skew Hints in Spark SQL (/*+ SKEW('tablename', 'columnname') */) to force Spark to salt the skewed key automatically.
Mitigation for OOM: * I review the code for anti-patterns like calling .collect() on large DataFrames.
How to fix Data Skew
Salting: split one hot key into multiple keys for example: Add a random key to spread data across partitions. sample data: Partition 1: US (1M rows) ← Skew, slow Partition 2: UK (10k rows) Partition 3: CA (5k rows)
Better Partitioning: Repartition data using a better key. df.repartition(“country”)
AQE: AQE (Adaptive Query Execution) in Spark dynamically optimizes query execution during runtime.
How to enable AQE. It can adjust join strategies, merge small partitions, and handle data skew by splitting large partitions based on real execution statistics instead of static estimates. spark.conf.set("spark.sql.adaptive.enabled", "true")
How do you handle late-arriving data?
I handle late data using:
Reprocessing logic for backfill if needed
Event-time processing (not processing-time)
Watermarking in Structured Streaming
Window-based aggregations
Delta Lake MERGE INTO for upserts
Difference between batch vs streaming in Databricks
Batch processing processes data in chunks at scheduled intervals, while streaming processes data continuously in near real-time.
Databricks uses Structured Streaming, which treats streaming as incremental batch processing with fault tolerance.
How do you manage cluster sizing and cost optimization?
I manage cost by:
Using Photon and Delta optimizations to reduce compute time
Using autoscaling clusters
Choosing right node types (memory vs compute optimized)
Using job clusters instead of all-purpose clusters
Auto-termination for idle clusters
How do you validate data quality?
I validate data quality using:
Row count validation
Null checks
Duplicate checks
Data type validation
Referential integrity checks
Business rule validation
I usually automate these checks in pipelines and log failures.
How do you monitor pipeline failures?
I monitor failures using:
ADF Monitor
Databricks job monitoring
Log Analytics / Azure Monitor
Alerts and notifications (email/Teams)
Custom logging tables
I also track pipeline run IDs for troubleshooting.
What metrics do you track in production pipelines?
Key production metrics:
Pipeline success/failure rate
Execution duration
Throughput
Data latency
Row counts
Error counts
Cluster utilization/cost
SLA compliance
These help identify performance or reliability issues.
How do you handle schema drift?
Schema drift happens when source schema changes unexpectedly.
I handle it by:
Enabling schema evolution
Using dynamic column mapping
Metadata-driven pipelines
Auto Loader schema inference
Logging and alerting schema changes
Separating mandatory vs optional columns
How would you secure and manage secrets in Azure Databricks when connecting to external data sources?
Use Azure Key Vault to store and manage secrets securely.
Integrate Azure Key Vault with Azure Databricks using Databricks-backed or Azure-backed scopes.
Access secrets in notebooks and jobs using the dbutils.secrets API. dbutils.secrets.get(scope=”<scope-name>”, key=”<key-name>”)
Ensure that secret access policies are strictly controlled and audited.
How do you design a scalable ingestion pipeline?
I design it using a layered approach (Medallion Architecture):
Bronze: raw ingestion (batch/streaming via ADF / Auto Loader)
Silver: cleaned and standardized data
Gold: business-ready aggregated data
For scalability:
Use Auto Loader for incremental file ingestion
Use partitioning + incremental loads
Decouple ingestion and transformation
Use Delta Lake for reliability and ACID
Scenario: You need to implement a data governance strategy in Azure Databricks. What steps would you take?
Data Classification: Classify data based on sensitivity and compliance requirements.
Access Controls: Implement role-based access control (RBAC) using Azure Active Directory.
Data Lineage: Use tools like Databricks Lineage to track data transformations and movement.
Audit Logs: Enable and monitor audit logs to track access and changes to data.
Compliance Policies: Implement Azure Policies and Azure Purview for data governance and compliance monitoring.
Scenario: You need to optimize a Spark job that has a large number of shuffle operations causing performance issues. What techniques would you use?
Repartitioning: Repartition the data to balance the workload across nodes and reduce skew.
Broadcast Joins: Use broadcast joins for small datasets to avoid shuffle operations.
Caching: Cache intermediate results to reduce the need for recomputation.
Shuffle Partitions: Increase the number of shuffle partitions to distribute the workload more evenly.
Skew Handling: Identify and handle skewed data by adding salt keys or custom partitioning strategies.
Scenario: You need to migrate an on-premises Hadoop workload to Azure Databricks. Describe your migration strategy.
Assessment: Evaluate the existing Hadoop workloads and identify components to be migrated.
Data Transfer: Use Azure Data Factory or Azure Databricks to transfer data from on-premises HDFS to ADLS.
Code Migration: Convert Hadoop jobs (e.g., MapReduce, Hive) to Spark jobs and test them in Databricks.
Optimization: Optimize the Spark jobs for performance and cost-efficiency.
Validation: Validate the migrated workloads to ensure they produce the same results as on-premises.
Deployment: Deploy the migrated workloads to production and monitor their performance.
Can you explain the difference between running a PySpark workload using a Databricks Notebook versus deploying it as modular Python code via Databricks Jobs? When would you choose one over the other?
Answer: * Databricks Notebooks are excellent for ad-hoc exploration, rapid prototyping, and interactive data analysis. They combine markdown documentation with executable code blocks, making them highly visual.
Decision Criteria: For production ETL pipelines, I advocate for modular code deployed via Databricks Jobs. It allows us to implement proper software engineering practices, such as unit testing (via pytest), static code analysis, and robust CI/CD branch policies. Notebooks are kept strictly for initial R&D or orchestrating lightweight, high-level control flows.
Modular Python Code (e.g., packaged .py files/wheels) breaks logic down into reusable, unit-testable classes and functions.
What is the difference between df.collect() and df.take(n) or df.show()
Answer: * df.collect() pulls every single rowfrom the distributed executors across the network and dumps it into the memory of the single Driver node, converting the Spark DataFrame into a local Python list. It is highly dangerous because if the data volume exceeds the Driver’s available RAM, it triggers an immediate OOM crash.
df.take(n) and df.show(n) only retrieve the first n rows. They are safe because they cap the memory allocation on the Driver, making them ideal for debugging or lightweight data sampling.
Migrate from Hive Metastore to Unity Catalog, what would be your step-by-step strategy to handle data migration, permissions, and governance?
Step 5 — Convert Non-Delta Tables (IMPORTANT) CONVERT TO DELTA parquet.`abfss://container/path`; or CONVERT TO DELTA hive_metastore.sales.orders;
Step 6 — Migrate Tables
CREATE TABLE finance.sales.orders
DEEP CLONE hive_metastore.sales.orders;
or
CREATE TABLE finance.sales.orders AS
SELECT * FROM hive_metastore.sales.orders;
or
SYNC TABLE finance.sales.orders
FROM hive_metastore.sales.orders;
SYNC works mainly for: external tables and metadata sync scenarios
Step 7 — Migrate Permissions GRANT SELECT ON TABLE finance.sales.orders TO analysts;
How do you handle credential rotation and secure workspace access using Databricks Secrets and Azure Key Vault in a heavily locked-down or regulated financial services environment?
Answer: * Hardcoding passwords or keys in code is strictly prohibited. I create an Azure Key Vault-backed Secret Scope within Databricks.
All database passwords, API keys, and service principal secrets live inside Azure Key Vault. When Databricks runs a pipeline, it fetches these secrets securely at runtime using dbutils.secrets.get(). Credential rotation is handled upstream entirely within Azure Key Vault (often via automated Azure Functions), and Databricks automatically reflects the rotated values without requiring code changes.
What is Delta Sharing?have you used it?
Yes. Delta Sharing is an open protocol developed by Databricks for securely sharing data across different organizations, platforms, and cloud environments without requiring the recipient to copy or physically move the underlying data.
I have used Delta Sharing in Databricks environments to share Delta tables and curated datasets with downstream consumers. For example, instead of creating another physical copy of the data for a consumer, we can provide controlled access to the shared data through a Delta Share.
A key advantage is that the provider can control what data is shared and who can access it. We can share specific tables or views rather than giving consumers direct access to the underlying storage.
In a typical implementation, the provider creates a share and adds the required tables or views. The recipient is then granted access and can consume the shared data using supported clients, without needing access to the provider’s underlying ADLS or cloud storage.
I also see Delta Sharing as useful for cross-organization and cross-cloud data sharing, because the consumer doesn’t necessarily need to be on the same Databricks workspace or even the same cloud platform.
So the key point is: Delta Sharing provides governed data sharing without requiring traditional data copying or giving the consumer direct access to the underlying storage.
What is Unity Catalog Volumes?
Unity Catalog Volumes provide a governed way to manage non-tabular files in cloud storage through Unity Catalog.
in short, Delta tables are for structured/tabular data; Volumes are for files, unstructured.
Unity Catalog Volumes provide a governed way to access and manage files in cloud storage that are not necessarily Delta tables.
I have used Volumes in Databricks environments for file-based data such as documents, JSON, CSV, and other files that need to be accessed by data engineering or AI workloads.
There are two main types: managed volumes and external volumes. With a managed volume, Databricks manages the underlying storage. With an external volume, the data remains in an external cloud storage location such as ADLS Gen2, while Unity Catalog provides centralized governance and access control.
One of the main benefits is that users and workloads can access files through a governed Unity Catalog path such as /Volumes/<catalog>/<schema>/<volume>/..., rather than directly accessing cloud storage credentials or storage paths.
This is particularly useful when we need to apply centralized access control, auditing, and governance to file-based data.
So, in simple terms, Unity Catalog tables are primarily for governed structured data, while Volumes provide governed access to files.
What are Synapse SQL Workspaces and how are they used?
Synapse SQL Workspaces are the environments within Azure Synapse Analytics where users can perform data querying and management tasks. They include:
Provisioned SQL Pools: Used for large-scale, high-performance data warehousing. Users can create and manage databases, tables, and indexes, and run complex queries.
On-Demand SQL Pools: Allow users to query data directly from Azure Data Lake without creating a dedicated data warehouse. It is ideal for interactive and exploratory queries.
What is the difference between On-Demand SQL Pool and Provisioned SQL Pool?
The primary difference between On-Demand SQL Pool and Provisioned SQL Pool lies in their usage and scalability:
On-Demand SQL Pool: Allows users to query data stored in Azure Data Lake without requiring a dedicated resource allocation. It is best for ad-hoc queries and does not incur costs when not in use. It scales automatically based on query demand.
Provisioned SQL Pool: Provides a dedicated set of resources for running data warehousing workloads. It is optimized for performance and can handle large-scale data operations. Costs are incurred based on the provisioned resources and are suitable for predictable, high-throughput workloads.
How does Azure Synapse Analytics handle data integration?
Azure Synapse Analytics handles data integration through Synapse Pipelines, which is a data integration service built on Azure Data Factory. It enables users to:
Ingest Data: Extract data from various sources, including relational databases, non-relational data stores, and cloud-based services.
Transform Data: Use data flows and data wrangling to clean and transform data.
Orchestrate Workflows: Schedule and manage data workflows, including ETL (Extract, Transform, Load) processes.
Data Integration Runtime: Utilizes Azure Integration Runtime for data movement and transformation tasks.
Can you explain the concept of “Dedicated SQL Pool” in Azure Synapse Analytics?
Dedicated SQL Pool is a provisioned, high-performance relational database.
Data Storage: Data must be ingested and stored internally in a proprietary columnar format. It follows a Schema-on-Write approach.
Architecture: Uses MPP (Massively Parallel Processing) architecture. Data is sharded into 60 distributions and processed by multiple compute nodes in parallel.
Cost: Billed by the hour based on the provisioned DWUs. You can pause it when not in use to save costs.
Best For: Stable production reporting, TB/PB scale enterprise data warehousing, and high-concurrency queries needing sub-second response.
What is Serverless SQL Pool and when would you use it?
Serverless SQL Pool is an on-demand, compute-only query engine with no internal storage.
Data Location: It does not store data. Data remains in the Data Lake (ADLS Gen2) in open formats like Parquet, CSV, or JSON.
Mechanism: Uses the OPENROWSET function to query lake files directly. It follows a Schema-on-Read approach.
Cost: Billed per query based on data scanned (approx. $5 USD per TB). Cost is $0 if no queries are run.
Best For: Rapid data discovery, building a Logical Data Warehouse, and ad-hoc data validation.
It is a managed Apache Spark 3 instance easily created and configured within Azure.
Managed Cluster: You don’t manage servers; you just select the node size and the number of nodes.
Auto-Scale & Auto-Pause: It automatically scales nodes based on workload and pauses after 5 minutes of inactivity to save costs.
Language Support: Supports PySpark (Python), Spark SQL, Scala, and .NET.
Can you give an example of a prompt design you used to help document a complex pipeline or generate validation test cases, including the constraints you applied?
Answer: * Effective prompt design relies on clear persona, context, and explicit constraints.
Example Prompt: “You are an expert Data Architect. Act as a technical documentation writer. Analyze the following PySpark code which performs a Type 2 Slowly Changing Dimension (SCD Type 2) merge. Write a technical markdown document explaining the data lineage, column mappings, and transformation logic. Constraints: Do not use placeholder code. Do not explain standard PySpark syntax. Format the column mappings strictly in a markdown table. Highlight the idempotency mechanics of the code.”
Using Generative AI tools responsibly to improve engineering velocity. How do you use tools like GitHub Copilot or ChatGPT to scaffold notebooks, write unit tests, or optimize slow SQL queries?
I use generative AI tools like GitHub Copilot and ChatGPT as productivity accelerators across development, testing, and optimization, but always within a controlled and validated engineering workflow.
For example, when building Databricks notebooks, I use Copilot to scaffold initial PySpark structures such as data ingestion patterns, Delta table reads/writes, and common transformation templates. This helps me quickly set up a working baseline, especially for standard ETL/ELT pipelines, while I focus on business logic, data modeling, and performance design.
For unit testing, I use ChatGPT or Copilot to generate initial PySpark or SQL test cases, such as null checks, schema validation, row count verification, and data quality rules. I then refine these tests to align with data contracts and production expectations, ensuring they are meaningful and not just syntactically correct.
For SQL optimization, I often use ChatGPT to analyze slow queries and suggest improvements like better join strategies, partition pruning, or indexing considerations. However, I always validate improvements using query execution plans, Databricks Spark UI, and actual runtime benchmarks before applying changes.
In all cases, I treat AI as an assistant rather than an authority. I ensure no sensitive or PII data is included in prompts, and all AI-generated code is reviewed, tested, and validated before production deployment. The goal is to improve engineering velocity without compromising correctness, security, or governance.
What are your strict guardrails regarding Data Governance and Security when using Generative AI tools? How do you ensure that sensitive corporate data, business logic, or PII (Personally Identifiable Information) are never leaked in a prompt?
Answer: * Data privacy is paramount, especially in financial services. My absolute rule is that no actual client data, proprietary database schemas, or PII can ever enter a commercial AI prompt.
When utilizing AI for troubleshooting or code generation, I completely anonymize and abstract the prompt. I swap out proprietary table names for generic placeholders (e.g., Table_A, Table_B), obfuscate custom column names (e.g., changing account_balance_cad to metric_1), and generate synthetic mockup rows if I need to illustrate a data structure issue.
AI can occasionally “hallucinate” code or logic. What is your process for validating AI-assisted code outputs before submitting a Pull Request (PR) for a peer review?
I never take AI-generated code at face value; it must be fully verified. My validation process includes:
Unit Testing: Verify the output against expected boundaries (checking edge cases like handling of Null values or empty DataFrames). Only after it passes automated testing do I integrate it into the codebase and open a PR.
Code Review & Linting: Check for syntax errors, deprecated Spark methods, or non-existent library parameters.
Local/Dev Execution: Run the generated code block inside a isolated scratchpad environment using a small, controlled sample dataset.
Database locking is the mechanism a database uses to control concurrent access to data so that transactions stay consistent, isolated, and safe.
Locking prevents:
Dirty reads
Lost updates
Write conflicts
Race conditions
Types of Locks:
1. Shared Lock (S)
Used when reading data
Multiple readers allowed
No writers allowed
2. Exclusive Lock (X)
Used when updating or inserting
No one else can read or write the locked item
3. Update Lock (U) (SQL Server specific)
Prevents deadlocks when upgrading from Shared → Exclusive
Only one Update lock allowed
4. Intention Locks (IS, IX, SIX)
Used at table or page level to signal a lower-level lock is coming.
5. Row / Page / Table Locks
Based on granularity:
Row-level: Most common, best concurrency
Page-level: Several rows together
Table-level: When scanning or modifying large portions
DB engines automatically escalate:
Row → Page → Table when there are too many small locks.
Can you talk on Deadlock?
A deadlock happens when:
Transaction A holds Lock 1 and wants Lock 2
Transaction B holds Lock 2 and wants Lock 1
Both wait on each other → neither can move → database detects → kills one transaction (“deadlock victim”).
Deadlocks usually involve one writer + one writer, but can also involve readers depending on isolation level.
How to Troubleshoot Deadlocks?
A: In SQL Server: Enable Deadlock Graph Capture
run:
ALTER DATABASE [YourDB] SET DEADLOCK_PRIORITY NORMAL;
use:
DBCC TRACEON (1222, -1);
DBCC TRACEON (1204, -1);
B: Interpret the Deadlock Graph
You will see:
Processes (T1, T2…)
Resources (keys, pages, objects)
Types of locks (X, S, U, IX, etc.)
Which statement caused the deadlock
Look for:
Two queries touching the same index/rows in different order
A scanning query locking too many rows
Missed indexes
Query patterns that cause U → X lock upgrades
C. Identify
The exact tables/images involved
The order of locking
The hotspot row or range
Rows with heavy update/contention
This will tell you what to fix.
How to Prevent Deadlocks (Practical + Senior-Level)
Always update rows in the same order
Keep transactions short
Use appropriate indexes
Use the correct isolation level
Avoid long reads before writes
Can you discuss on database normalization and denormalization
Normalization is the process of structuring a relational database to minimize data redundancy (duplicate data) and improve data integrity.
Normal Form
Rule Summary
Problem Solved
1NF (First)
Eliminate repeating groups; ensure all column values are atomic (indivisible).
Multi-valued columns, non-unique rows.
2NF (Second)
Be in 1NF, AND all non-key attributes must depend on the entire primary key.
Partial Dependency (non-key attribute depends on part of a composite key).
3NF (Third)
Be in 2NF, AND eliminate transitive dependency (non-key attribute depends on another non-key attribute).
Redundancy due to indirect dependencies.
BCNF (Boyce-Codd)
A stricter version of 3NF; every determinant (column that determines another column) must be a candidate key.
Edge cases involving multiple candidate keys.
Denormalization is the process of intentionally introducing redundancy into a previously normalized database to improve read performance and simplify complex queries.
Adding Redundant Columns: Copying a value from one table to another (e.g., copying the CustomerName into the Orders table to avoid joining to the Customer table every time an order is viewed).
Creating Aggregate/Summary Tables: Storing pre-calculated totals, averages, or counts to avoid running expensive aggregate functions at query time (e.g., a table that stores the daily sales total).
Merging Tables: Combining two tables that are frequently joined into a single, wider table.
Creating a robust data migration checklist can be challenging, particularly for those new to the process. To simplify this, we’ve compiled a core set of essential activities for effective data migration planning. This checklist, designed to support thorough preparation for data migration projects, has been successfully used across diverse migration projects over several years, including those for financial institutions (including banks), insurance companies, consulting firms, and other industries. While not exhaustive, it provides a solid foundation that can be customized with project-specific requirements.
In relational databases, locks are essential mechanisms for managing concurrent access to data. They prevent data corruption and ensure data consistency when multiple transactions try to read or modify the same data simultaneously.
Without locks, concurrent transactions could lead to several problems. For example,
Dirty Reads, a transaction may read data that has been modified by another transaction but not yet committed;
Lost updates, one transaction’s updates may be overwritten by another transaction;
Non-Repeatable Reads, A transaction reads the same data multiple times, and due to updates by other transactions, the results of each read may be different;
Phantom Reads: A transaction executes the same query multiple times, and due to insertions or deletions by other transactions, the result set of each query may be different.
Here’s a detailed breakdown of locks in relational databases.
Types of Locks
Relational databases use various types of locks with different levels of restriction:
Shared Lock
Allows multiple read operations simultaneously. Prevents write operations until the lock is released.
Example: SELECTstatements in many databases.
Exclusive Lock
Allows a single transaction to modify data. Prevents other operations (read or write) until the lock is released.
Example: UPDATE, DELETE.
Update Lock
Prevents deadlocks when a transaction might upgrade a shared lock to an exclusive lock.
Intent Lock
Indicate the type of lock a transaction intends to acquire. Intent Shared (IS): Intends to acquire a shared lock on a lower granularity level. Intent Exclusive (IX): Intends to acquire an exclusive lock on a lower granularity level.
Lock Granularity
Locks can be applied at different levels of granularity.
Row-Level Lock
Locks a specific row in a table. Provide the highest concurrency, but if many rows are locked, it may lead to lock management overhead. Example: Updating a specific record (UPDATE ... WHERE id = 1).
Page-Level Lock
Locks a data page, a block of rows. Provide a compromise between concurrency and overhead.
(a page is a fixed-size storage unit)
Table-Level Lock
Locks an entire table. Provide the lowest concurrency but minimal overhead.
Example: Prevents any modifications to the table during an operation like ALTER TABLE.
Lock Duration
Transaction Locks: Held until the transaction is committed or rolled back.
Session Locks: Held for the duration of a session.
Temporary Locks: Released immediately after the operation completes.
Deadlocks Prevention and Handling
A deadlock occurs when two or more transactions are waiting for each other to release locks. Databases employ deadlock detection and resolution mechanisms to handle such situations.
Prevent Deadlocks
Avoid Mutual Exclusion Use resources that allow shared access (e.g., shared locks for read-only operations).
Eliminate Hold and Wait Require transactions to request all resources they need at the beginning. If any resource is unavailable, the transaction must wait without holding any resources.
Allow Preemption If a transaction requests a resource that is held by another, the system can preempt (forcefully release) the resource from the holding transaction. The preempted transaction is rolled back and restarted.
Break Circular Wait Impose a global ordering on resources and require transactions to request resources in that order. For example, if resources are ordered as R1, R2, R3, a transaction must request R1 before R2, and R2 before R3.
Handle Deadlocks
If deadlocks cannot be prevented, the database system must detect and resolve them. Here’s how deadlocks are typically handled:
Deadlock Detection The database system periodically checks for deadlocks by analyzing the wait-for graph, which represents transactions and their dependencies on resources. If a cycle is detected in the graph, a deadlock exists.
Deadlock Resolution Once a deadlock is detected, the system must resolve it by choosing a victim transaction to abort. The victim is typically selected based on criteria such as:
Transaction Age: Abort the newest or oldest transaction.
Transaction Progress: Abort the transaction that has done the least work.
Priority: Abort the transaction with the lowest priority.
The aborted transaction is rolled back, releasing its locks and allowing other transactions to proceed.
Conclusion
Locks are crucial for ensuring data consistency and integrity in relational databases. Understanding the different types of locks, lock granularity, locking protocols, and isolation levels is essential for database developers and administrators to design and manage concurrent applications effectively.
Please do not hesitate to contact me if you have any questions at William . chen @ mainri.ca
In general, data migration is the process of moving digital information. These projects are often initiated due to various reasons, such as upgrading databases, deploying new applications, or migrating from on-premises to cloud-based environments. The migration process typically involves preparing, extracting, transforming, and loading the data, usually as a one-time effort.
Data Migration Types
Migration types refer to the various strategies used to move databases, storage, applications, business processes, and cloud environments. Common migration types are described below. The specific type of data migration undertaken depends on business requirements.
Database migration
Database migration can refer to either moving data from one database vendor to another, or to upgrading your database software to a newer version. The data format can vary between vendors so a transformation process may be required. In most cases, a change in database technology should not affect the application layer but you should definitely test to confirm.
Storage migration
Storage migration involves transferring data from an existing repository to another, often new repository. The data usually remains unchanged during a storage migration. The goal is typically to upgrade to more modern technology which scales data more cost-effectively and processes data faster.
Business process migration
Business process migration involves the transfer of databases and applications containing data related to customers, products, and operations. Data often requires transformation as it moves from one data model to another. These projects are usually triggered by a company reorganization, merger or acquisition.
Application migration
Application migration refers to moving a software application such as an ERP or CRM system from one computing environment to another. The data usually requires transformation as it moves from one data model to another. This process most often occurs when the company decides to change to a new application vendor and/or involves transferring from on-premises to a public cloud or moving from one cloud to another.
Cloud migration
Cloud migration is a frequently discussed aspect of data migration, encompassing the movement of data, applications, and other business components to a cloud computing environment, including cloud data warehouses. This migration can occur from an on-premises data center to a public cloud, or between different cloud platforms. The reverse process, known as “cloud exit,” involves migrating data and applications from the public cloud back to an on-premises infrastructure.
Common Data Migration Challenges
Due to the criticality of data to organizational operations, data migration is a complex process necessitating thorough risk assessment. Numerous challenges frequently arise during implementation. The following are some of the most common data migration challenges.
Data Loss: Data Loss: Incomplete data transmission can occur. This can result in irrevocable data loss.
Semantics errors: Data migration can lead to semantic errors, where the meaning or interpretation of data changes. For instance, if a source field called “grand total” is migrated to a different field or column in the target system, the data’s intended meaning is lost or distorted.
Extended downtime: If the migration process takes longer than anticipated, it can lead to significant disruptions and losses for your business.
Data corruption: Migrating unwanted data types can corrupt the target system. This can lead to system crashes or damage the data organization.
Performance: Performance issues can stem from poor code quality, application bugs, or an inability to handle high workloads.
Orchestration: Orchestration refers to the organized migration of disparate data from multiple sources to a unified location. Inadequate data migration planning can lead to the unintended creation of new data silos by failing to maintain proper tracking of data points. This issue is compounded when multiple disconnected teams operate within different departments or when functional and technical teams utilize data in a variety of ways.
Integration: Integrating data sources with other tools and systems allows for data sharing. However, improper integration can lead to the loss of valuable insights.
User training: Data migration necessitates a shift in staff focus from existing systems to a new platform. Without adequate training on the new system, users are more prone to making errors.
Data security: Data migration introduces significant security risks, including potential exposure to third parties and the possibility of migrating to a more vulnerable system.
Data quality: Poor data quality, including missing, inconsistent, useless, or incorrect data, can have significant negative consequences when migrated. These consequences include reduced target system performance, bugs, and system errors.
Not only above mentioned challenges, but business continuity and costs are common faced challenges.
Business continuity: To ensure a positive user experience during data migration, minimize service disruption. When downtime or slowdowns are unavoidable, schedule migrations during off-peak hours and provide clear, timely communication to users through multiple channels, including email, in-app notifications, and social media.
Costs: Data migration involves various expenses, including tools, human resources, new infrastructure, and decommissioning costs for old infrastructure. Thorough budgeting is essential before starting the process. Factor in potential productivity and revenue losses due to downtime. Minimizing outages and proactive user communication can help control migration costs.
Common migration strategy
Several common strategies are employed for data migration, which is the process of moving data between platforms. These include:
Big Bang data migration
In a Big Bang migration, all data assets are moved from the source environment to the target environment in a single, comprehensive operation within a relatively short window of time. This approach necessitates system downtime during the data transfer and transformation process to ensure compatibility with the target infrastructure.
Advantages: less costly, less complex, takes less time, all changes happen once
Disadvantages: a high risk of expensive failure, requires downtime
The big bang approach fits small companies or businesses working with small amounts of data. It doesn’t work for mission-critical applications that must be available 24/7.
Trickle migration
Trickle Migration (also known as phased or iterative migration): This strategy divides the overall migration process into smaller, manageable sub-migrations, each with its own specific objectives, timelines, scope, and quality assurance measures. By operating the old and new systems concurrently and migrating data in small increments, trickle migration achieves near-zero downtime, maintaining uninterrupted application availability for users.
Advantages: less prone to unexpected failures, zero downtime required
Disadvantages: more expensive, takes more time, needs extra efforts and resources to keep two systems running
Trickle migration is the right choice for medium and large enterprises that can’t afford long downtime but have enough expertise to face technological challenges.
Comparison of Migration strategy
Feature/Aspect
Trickle Migration
Big Bang Migration
Definition
Data and systems are migrated incrementally, in smaller phases, over time.
All data and systems are migrated in one large, single event.
Approach
Iterative and gradual.
One-time, all-at-once migration.
Timeline
Extended, as it spans multiple phases or iterations.
Shorter, focused on a single migration window.
Risk
Lower risk due to phased testing and gradual changes.
Higher risk because everything changes at once.
Complexity
More complex due to managing coexistence of old and new systems.
Simpler as there’s no coexistence of systems.
Downtime
Minimal downtime per phase, but over a longer time overall.
Typically involves a significant downtime window.
Testing
Easier to test in smaller chunks.
Requires comprehensive pre-migration testing.
User Impact
Lower immediate impact, users can transition gradually.
High immediate impact, users must adapt quickly.
Cost
Potentially higher due to prolonged migration and dual operations.
Lower due to single-event focus but risks unforeseen costs from errors.
Suitability
Best for large, complex systems with critical operations needing minimal disruptions.
Best for smaller, less complex systems or when speed is a priority.
Migration Process
Data migration projects, due to their involvement with critical data and potential impact on stakeholders, present inherent challenges. Prior to any data transfer, a robust and well-defined migration plan is a necessity. A successful data migration initiative is predicated on an initial, comprehensive analysis and assessment of the data’s lifecycle. Irrespective of the specific methodology employed, all data migration projects adhere to a consistent set of key phases.
Stage 1: Project Planning
Prior to commencing the migration process, it is imperative to establish well-defined objectives and delineate the scope of the data migration. This process involves determining the precise data set required for transfer, including the identification and exclusion of obsolete records. Furthermore, potential compatibility issues between the source and target environments must be addressed, particularly in cases involving migration between disparate database paradigms, such as from a relational database (e.g., Oracle) to a non-relational database (e.g., MongoDB).
This initial phase involves follow key steps:
1.1. Define clear and measurable objectives
Define clear and measurable objectives for the data migration project, including specifying the precise data to be migrated, defining success criteria.
1.2. Refine the project scope
Define the precise scope of the data migration by identifying and excluding all non-essential data elements, focusing solely on the minimum dataset necessary to ensure effective target system operation. This process necessitates a high-level comparative analysis of the source and target systems, conducted in consultation with the end-users directly impacted by the migration.
1.3. Risk assessment
A comprehensive risk assessment is conducted to identify potential challenges and roadblocks that could impede the data migration project. This assessment includes evaluating potential impacts on the organization and developing mitigation strategies for contingencies such as data loss, downtime, or other failures.
1.4. Estimate the budget and set realistic timelines
Subsequent to scope refinement and system evaluation, the appropriate migration methodology (e.g., Big Bang or Trickle) is selected, resource requirements are estimated, and a realistic project timeline is defined. It should be noted that enterprise-scale data migration projects typically require a duration of six months to two years.
Stage 2: Discovery and Profiling
This initial phase of the data migration methodology involves a comprehensive assessment of the data landscape. This assessment encompasses data inventory, analysis, auditing, and profiling to thoroughly examine and cleanse the data set targeted for migration. The objective is to identify and address potential data conflicts, detect and remediate data quality issues, and eliminate redundant or anomalous data elements prior to the commencement of the migration process.
2.1. Source System Assessment
2.1.1. Identify Data Sources
Primary Sources: Identify the primary sources of data, such as databases, files, APIs, etc.
Secondary Sources: Identify any secondary or external data sources that may need to be migrated.
2.1.2. Understand the Data Structure
Data Models: Review the data models, schemas, and relationships between different data entities.
Data Types: Identify the types of data (e.g., text, numeric, date, binary) and their formats.
Data Volume: Estimate the volume of data to be migrated, including the number of records, tables, and databases.
Data Quality: Assess the quality of the data, including issues like duplicates, missing values, and inconsistencies.
2.1.3. Analyze Data Dependencies
Interdependencies: Identify relationships and dependencies between different data entities.
Business Rules: Understand any business rules or logic applied to the data in the source system.
Data Flow: Map out how data flows through the source system, including ETL (Extract, Transform, Load) processes.
2.1.4. Evaluate Data Security and Compliance
Access Controls: Review who has access to the data and what permissions they have.
Encryption: Check if data is encrypted at rest or in transit.
Compliance: Ensure the data complies with relevant regulations (e.g., GDPR, HIPAA).
2.1.5. Document Source System
Metadata: Document metadata, including data definitions, formats, and constraints.
Data Dictionary: Create or update a data dictionary that describes the data elements in the source system.
2.2. Target System Assessment
2.2.1. Understand the Target System Architecture
Data Models: Review the data models and schemas of the target system.
Data Types: Ensure the target system supports the data types and formats used in the source system.
Storage Capacity: Verify that the target system has sufficient storage capacity for the migrated data.
2.2.2. Evaluate Data Transformation Requirements
Data Mapping: Map data fields from the source system to the target system.
Data Transformation: Identify any transformations needed to convert data from the source format to the target format.
Data Validation: Plan for data validation to ensure accuracy and completeness after migration.
2.2.3. Assess System Performance
Performance Benchmarks: Evaluate the performance of the target system to ensure it can handle the volume and complexity of the migrated data.
Scalability: Ensure the target system can scale to accommodate future data growth.
2.2.4. Review Security and Compliance
Access Controls: Ensure the target system has appropriate access controls in place.
Encryption: Verify that data will be encrypted at rest and in transit in the target system.
Compliance: Ensure the target system complies with relevant regulations.
2.2.5. Test the Target System
Test Environment: Set up a test environment that mirrors the target system.
Pilot Migration: Perform a pilot migration to test the process and identify any issues.
User Acceptance Testing (UAT): Conduct UAT to ensure the migrated data meets user requirements.
2.3. Comparative Analysis of Source and Target Systems
2.3.1. Network and Connectivity
Confirm bandwidth, latency, and reliability between source and target systems.
Address firewall or VPN requirements for data flow.
2.3.2. Data Transformation Needs
Determine if data needs cleansing, enrichment, or reformatting during migration. Plan for ETL (Extract, Transform, Load) processes if required.
2.3.3. Testing Environments
Establish sandbox or test environments in both systems for validation.
2.3.4. Documentation and Communication
Document findings and share with stakeholders to align expectations. Maintain clear communication between teams managing source and target systems.
Stage 3: Resource Allocation and Solution Development
For large data assets, a phased development approach is recommended, wherein the data is segmented, and the migration logic is developed and tested iteratively for each segment.
3.1 Set data standards
This will allow your team to spot problem areas across each phase of the migration process and avoid unexpected issues at the post-migration stage.
3.2 Architecture Design and Resource Allocation
This phase encompasses both the design of the migration architecture and the allocation of necessary resources. It is imperative to confirm the availability and commitment of all requisite resources, including internal personnel, external consultants, vendors, and enabling technologies. This verification extends to resources required for post-migration activities, such as user training and communication. Upon confirmation of resource availability, the development of the migration logic commences, encompassing the processes of data extraction, transformation, and loading (ETL) into the designated target repository.
3.3 Create a Detailed Migration Plan
Data Extraction: Plan for data extraction from the source system.
Data Transformation: Outline the steps for data transformation.
Data Loading: Plan for loading data into the target system.
Testing: Include testing phases in the migration plan.
stage 4: Backup and Contingency Planning
Despite careful planning, data migration projects can face unexpected challenges. A robust backup strategy is essential to ensure data can be recovered and systems remain operational in the event of unforeseen issues during the migration process. Furthermore, detailed contingency plans should be developed to address each identified potential setback or roadblock.
stage 5: Execution
5.1. Pre-migration – sampling testing
To assess the accuracy of the migration and identify any potential data quality issues, test the migration process using a representative data sample.
5.2. User Acceptance Testing (UAT)
User Acceptance Testing (UAT) is a critical phase in the data migration process where end-users validate that the migrated data and system meet their business requirements and expectations. UAT ensures that the migration solution works as intended in a real-world scenario before it is fully deployed. we should focus on business goals and customer satisfaction.
5.3. Executing the Migration Solution
Following successful completion of testing procedures, the data migration process, encompassing data extraction, transformation, and loading (ETL), is formally initiated. In a Big Bang migration scenario, the execution phase is typically completed within a period of several days. Conversely, the Trickle migration methodology employs an incremental data transfer approach, resulting in a more protracted execution timeline but significantly mitigating the risk of critical system failures and minimizing downtime.
stage 6: Documentation and Reporting
After completing a data migration, documentation and reporting are critical steps to ensure the process is well-documented, auditable, and provides insights for future improvements. Proper documentation and reporting help stakeholders understand the migration’s success, identify any issues, and maintain a record for compliance and reference purposes.
6.1. Documentation
Documentation provides a detailed record of the data migration process, including the steps taken, decisions made, and outcomes. It serves as a reference for future migrations, audits, or troubleshooting.
Key Components of Documentation
Migration Plan:
Include the original migration plan, including objectives, scope, timelines, and resource allocation.
Data Mapping:
Document the mapping of source data fields to target data fields.
Include any transformations or conversions applied during the migration.
Data Validation:
Record the validation rules and checks performed to ensure data accuracy and completeness.
Include sample validation results and any discrepancies found.
Error Handling:
Document any errors encountered during the migration and how they were resolved.
Include a log of rejected or failed records and the reasons for rejection.
Migration Tools and Scripts:
Provide details of the tools, scripts, or software used for the migration.
Include version numbers, configurations, and any custom code.
Testing Results:
Document the results of pre-migration testing, including unit tests, integration tests, and user acceptance tests (UAT).
Include test cases, expected outcomes, and actual results.
Post-Migration Verification:
Record the steps taken to verify the success of the migration.
Include checks for data integrity, completeness, and performance in the target system.
Lessons Learned:
Summarize what went well and what could be improved in future migrations.
Include feedback from the migration team and stakeholders.
Compliance and Security:
Document compliance with relevant regulations (e.g., GDPR, HIPAA).
Include details of security measures taken during the migration.
Rollback Plan:
Document the rollback plan and whether it was executed (if applicable).
Include details of any fallback procedures used.
6.2. Reporting
Reporting provides a summary of the migration process and outcomes for stakeholders. It highlights key metrics, successes, and areas for improvement.
Key Components of Reporting
Executive Summary:
Provide a high-level overview of the migration, including objectives, scope, and outcomes.
Highlight key achievements and challenges.
Migration Metrics:
Include quantitative metrics such as:
Volume of data migrated (e.g., number of records, tables, databases).
Time taken for the migration.
Number of errors or rejected records.
Downtime (if applicable).
Data Quality Report:
Summarize the results of data validation and quality checks.
Include metrics such as:
Percentage of accurate records.
Percentage of incomplete or duplicate records.
Number of records requiring manual intervention.
Performance Report:
Compare the performance of the target system before and after migration.
Include metrics such as:
Response times.
Throughput.
System uptime.
Issue and Risk Log:
Provide a summary of issues encountered during the migration and how they were resolved.
Include a risk assessment and mitigation strategies.
Stakeholder Feedback:
Summarize feedback from stakeholders, including end-users, IT teams, and business leaders.
Highlight any concerns or suggestions for improvement.
Post-Migration Support:
Document the support provided after the migration, including:
Troubleshooting and issue resolution.
User training and documentation.
Monitoring and maintenance activities.
Recommendations:
Provide recommendations for future migrations or system enhancements.
Include best practices and lessons learned.
stage 7: Post-Migration Assessment Validating, Auditing and Monitor
7.1. Post-migration Validation and Auditing.
Once the migration is complete, perform post-migration validation to verify that all data is accurately transferred and that the new system functions as expected. Conduct regular audits to ensure data integrity and compliance with data regulations.
7.2. User Training and Communications
User Training and Communications, Ongoing stakeholder communications is crucial throughout the data migration process. This should include keeping everyone informed about the migration schedule, potential disruptions, and expected outcomes, as well as providing end-user training/instructions to smooth the transition and prevent any post-migration usability issues. Once the migration is complete, perform post-migration validation to verify that all data is accurately transferred and that the new system functions as expected. Conduct regular audits to ensure data integrity and compliance with data regulations.
7.3. Continuous Performance Monitoring
Ongoing monitoring of the new system’s performance is vital for surfacing any post-migration data loss and/or data corruption issues. Regularly assess the target system’s performance and investigate any potential data-related performance bottlenecks/issues.
7.4. Data Security and Compliance
Last but certainly not least, ensure that data security and compliance requirements are met during and after the migration process. This may include implementing data encryption at rest and in transit, access controls, and data protection measures to safeguard sensitive information.
Conclusion
Assessing the source and target systems is a foundational step in ensuring a successful data migration. By thoroughly evaluating both systems, identifying potential risks, and developing a comprehensive migration plan, you can minimize disruptions and ensure that the migrated data is accurate, secure, and compliant with relevant regulations.
Sticking to the best practices can increase the likelihood of successful data migration. each data migration project is unique and presents its own challenges, the following golden rules may help companies safely transit their valuable data assets, avoiding critical delays.
Use data migration as an opportunity to reveal and fix data quality issues. Set high standards to improve data and metadata as you migrate them.
Hire data migration specialists and assign a dedicated team to run the project.
Minimize the amount of data for migration.
Profile all source data before writing mapping scripts.
Allocate considerable time to the design phase as it greatly impacts project success.
Don’t be in a hurry to switch off the old platform. Sometimes, the first attempt at data migration fails, demanding rollback and another try.
Data migration is often viewed as a necessary evil rather than a value-adding process. This seems to be the key root of many difficulties. Considering migration an important innovation project worthy of special focus is half the battle won.
Please do not hesitate to contact me if you have any questions at William . chen @ mainri.ca