This chapter covers Azure Table Storage and Azure Blob Storage, two core non-relational data storage services on Azure. For the DP-900 exam, these services appear in roughly 10-15% of questions, often comparing them to relational databases or other NoSQL options. You need to understand when to use each, their key characteristics, and how they differ from Azure Cosmos DB and SQL Database. This chapter will give you the precise mechanisms, default settings, and exam traps to confidently answer any question on these topics.
Jump to a section
Think of Blob storage as a massive warehouse with shelves. Each shelf is a container, and each item on the shelf is a blob. You can put any item on any shelf, and the items have no structure—they're just boxes. To find something, you need to know the shelf (container) and the item's label (blob name). There's no way to search inside the boxes without opening them yourself. Azure Table storage, on the other hand, is like a row of filing cabinets. Each cabinet is a table, and each drawer is a row. The drawers have labeled tabs (partition key and row key) that tell you exactly where to look. You can open a drawer and see all the files inside, and you can quickly find any file if you know the cabinet and drawer. But you can't put a chair or a lamp in a filing cabinet—it only holds files (structured data). In the warehouse, you can store anything: a chair, a lamp, a giant stuffed bear—as long as it fits on the shelf. That's the key difference: Blob storage is for unstructured data (any binary file), while Table storage is for structured, schema-less data that you query by keys.
What are Azure Table Storage and Blob Storage?
Azure Table Storage and Azure Blob Storage are both part of Azure Storage, a massively scalable, durable cloud storage service. They are non-relational (NoSQL) and store data differently from a relational database like Azure SQL Database.
Azure Blob Storage (Binary Large Object) is designed to store unstructured data, meaning data that has no defined schema or relationships. Examples include images, videos, documents, backups, log files, and application binaries. Blobs are stored in containers, which are like folders but without hierarchy—all blobs are flat within a container.
Azure Table Storage is a NoSQL key-value store that holds structured, schema-less data. Each entity (row) has a partition key, a row key, and a timestamp, plus any number of custom properties. It is designed for fast access using those keys, not for complex queries or joins.
Both services are accessed via REST APIs and are highly available, with at least 99.9% SLA for standard tiers. They are replicated across multiple storage nodes for durability.
How They Work Internally
Blob Storage
- Blobs are stored in a flat namespace within a container. Containers are like directories but cannot be nested.
- Each blob is identified by a URL: https://<storageaccount>.blob.core.windows.net/<container>/<blobname>
- Blobs have metadata (key-value pairs) and can have properties like content type, content encoding, and lease state.
- Three types of blobs: Block blobs (for most data, up to 4.75 TB per blob), Append blobs (optimized for append operations, like logging), and Page blobs (for random read/write, up to 8 TB, used for Azure VM disks).
- Block blobs are composed of blocks (up to 100 MB each). You upload blocks individually and commit them to finalize the blob. This allows parallel uploads and retries.
- Replication options: LRS (locally redundant, 3 copies in one datacenter), GRS (geo-redundant, 6 copies across 2 regions), RA-GRS (read-access geo-redundant), ZRS (zone-redundant), and GZRS.
- Access tiers: Hot (frequent access, higher cost per GB, lower access cost), Cool (infrequent access, lower storage cost, higher access cost), Archive (offline, lowest storage cost, hours to rehydrate).
Table Storage - Data is stored in tables within a storage account. Each table can have billions of entities. - Each entity has a Partition Key (PK) and Row Key (RK) that together form the primary key. The PK enables partitioning across storage nodes for scalability. - Entities are schema-less: each entity can have different properties (columns). The only required properties are PK, RK, and Timestamp. - Queries are efficient only when using PK and RK. Queries that scan without PK are slow and expensive. - Maximum entity size is 1 MB, maximum property count is 252 (excluding PK, RK, Timestamp). - Table Storage is not the same as Azure Cosmos DB Table API, which offers higher throughput and lower latency but is a separate service.
Key Components, Values, and Defaults
Blob Storage - Default blob type: Block blob (if not specified). - Maximum block size: 100 MB per block (for block blobs). - Maximum blob size: 4.75 TB for block blobs (using 50,000 blocks of 100 MB). - Maximum container name length: 63 characters, lowercase letters, numbers, and hyphens. - Maximum blob name length: 1024 characters. - Storage account types: General-purpose v2 (GPv2) supports all features; Blob storage accounts are legacy. - Soft delete: Enabled by default for blobs, with a retention period of 7 days (configurable up to 365 days). - Versioning: Can be enabled to keep previous versions of blobs. - Access tier can be set at the blob level or account level.
Table Storage - Maximum table name length: 63 characters. - Maximum entity size: 1 MB. - Maximum number of properties: 255 (including PK, RK, Timestamp). - Partition key string length: 1-1024 characters. - Row key string length: 1-1024 characters. - Timestamp is automatically maintained by Azure and used for optimistic concurrency. - Maximum storage account capacity: 500 TB total (shared across blobs, tables, queues, files). - Throughput targets: Up to 20,000 entities per second per partition (depending on partition design).
Configuration and Verification Commands
Using Azure CLI:
Create a storage account: az storage account create --name <name> --resource-group <rg> --location <region> --sku Standard_LRS
Create a container: az storage container create --name <containername> --account-name <storageaccount>
Upload a blob: az storage blob upload --container-name <containername> --name <blobname> --file <localfile>
List blobs: az storage blob list --container-name <containername> --account-name <storageaccount>
Create a table: az storage table create --name <tablename> --account-name <storageaccount>
Insert an entity: az storage entity insert --table-name <tablename> --entity PartitionKey=pk RowKey=rk --account-name <storageaccount>
Query entities: az storage entity query --table-name <tablename> --partition-key <pk>
Interaction with Related Technologies
Azure Functions: Can trigger on blob creation or table entity insertion.
Azure Data Factory: Can copy data to/from blob and table storage.
Azure HDInsight and Databricks: Can read/write blob storage as data lakes.
Azure CDN: Can cache blob content for faster delivery.
Azure Search: Can index blob content (like text in PDFs) for full-text search.
Azure Cosmos DB: Table Storage is often compared to Cosmos DB Table API. The exam tests that Cosmos DB offers global distribution, multiple consistency levels, and higher throughput, while Table Storage is cheaper and simpler but has lower throughput limits.
Exam Trap Patterns
Trap: Thinking Table Storage supports complex queries like SQL. Reality: Table Storage only supports queries by primary key (PK and RK) or full table scans. No joins, no secondary indexes (except with Azure Storage Analytics).
Trap: Confusing Blob types. Block blobs are for streaming/upload, page blobs for disks, append blobs for logging. The exam may ask which blob type to use for a VM disk (page blob).
Trap: Assuming Table Storage is the same as Cosmos DB Table API. The exam emphasizes that Cosmos DB is a different offering with global distribution and multiple APIs, while Table Storage is a core Azure Storage service.
Trap: Overlooking blob access tiers. Questions often test that Archive tier requires rehydration (can take hours) and is not for immediate access.
Trap: Forgetting that Table Storage entities have a maximum size of 1 MB. If a data row exceeds that, you must use Blob storage or split the data.
Choose storage account type
First, decide between a General-purpose v2 (GPv2) account and a legacy BlobStorage account. GPv2 is recommended for all new deployments because it supports all Azure Storage features including Table, Queue, File, and Blob, plus all access tiers (Hot, Cool, Archive). A BlobStorage account only supports block blobs and append blobs, not page blobs or tables. For Table Storage, you must use a GPv2 account. For Blob Storage, GPv2 is also preferred. The exam may ask which account type supports tables: GPv2.
Select replication strategy
Choose the replication option based on durability and availability requirements. LRS (Locally Redundant Storage) replicates three copies within a single datacenter. GRS (Geo-Redundant Storage) replicates to a paired region. RA-GRS allows read access from the secondary region. ZRS (Zone-Redundant Storage) replicates across three availability zones in the same region. For the exam, know that GRS provides six copies across two regions, and RA-GRS enables read access during a regional outage. For Table Storage, GRS is common for disaster recovery.
Create container for blobs
In Blob Storage, you must create a container to hold blobs. Containers are flat – no nested folders. Name must be lowercase alphanumeric and hyphens, 3-63 characters. When you upload a blob, you specify the container name. The URL becomes: https://<account>.blob.core.windows.net/<container>/<blob>. You can set the public access level: Private (no anonymous access), Blob (anonymous read for blobs), or Container (anonymous read for container listing). For the exam, remember that private is default and secure.
Upload blob with correct type
When uploading, you specify the blob type: block, append, or page. Block blobs are for most files; they break data into blocks (up to 100 MB each) and allow parallel upload. Append blobs are optimized for logging – you can only add blocks to the end. Page blobs are for random read/write, like Azure VM disks; they are 512-byte pages and can be up to 8 TB. If you need to mount a disk, use page blob. The exam tests that VM disks are page blobs.
Design partition key for tables
For Table Storage, partition key design is critical for performance. The partition key determines how data is distributed across storage nodes. All entities with the same partition key are stored together, so queries by partition key are fast. However, if you put all entities in one partition, you limit scalability (max 20,000 operations per second per partition). The exam expects you to choose a partition key that evenly distributes load. For example, use UserId for a user table, not a constant value. Avoid using the same partition key for all entities.
Scenario 1: Storing User Profile Images in a Social Media App
A social media platform uses Azure Blob Storage to store millions of user profile pictures. They use a GPv2 storage account with RA-GRS replication for high durability and read access during regional failures. Each user uploads a JPEG image, which is stored as a block blob in a container named 'profiles'. The blob name is the user's ID (e.g., 'user12345.jpg'). They set the blob access tier to Hot because images are accessed frequently. To improve performance, they use Azure CDN to cache images at edge locations. Common misconfiguration: forgetting to set the public access level to 'Blob' if images need to be publicly accessible via URL. If set to Private, the app must generate SAS tokens for each request, adding overhead. They also enable soft delete with a 30-day retention to recover from accidental deletions. Scale: They store 10 TB of images, with 50,000 uploads per day. Performance is fine as Blob Storage scales automatically.
Scenario 2: IoT Sensor Data Logging
A manufacturing company collects temperature and humidity readings from thousands of sensors. Each sensor sends a JSON payload every minute. They use Azure Table Storage because the data is structured (sensor ID, timestamp, value) and they need fast lookup by sensor and time. They design the partition key as SensorId and row key as a reversed timestamp (e.g., DateTime.MaxValue.Ticks - ticks) to enable querying the most recent data first. They use a GPv2 account with LRS (since data is not critical). Throughput is about 10,000 writes per second, which Table Storage handles easily. Queries filter by partition key (SensorId) and row key range. Trap: If they had used a single partition key for all sensors, they would hit the 20,000 ops/sec limit and see throttling. Also, they cannot run complex analytics on Table Storage; they use Azure Stream Analytics to read from Table Storage and aggregate into a SQL database for reporting.
Scenario 3: Storing Large Backup Files
An enterprise backs up on-premises databases to Azure Blob Storage nightly. Each backup file is 500 GB, so they use block blobs with large block sizes (100 MB). They upload using AzCopy for parallel transfer. They set the access tier to Cool because backups are accessed infrequently (only for restores). After 30 days, they move blobs to Archive tier using lifecycle management policies to reduce costs. Restore process: When a restore is needed, they change the blob tier from Archive to Hot, which takes up to 15 hours. They must plan for this delay. Misconfiguration: If they accidentally set the default access tier to Archive, the first upload fails because Archive does not support immediate writes. They also enable blob versioning to keep multiple backup versions. Scale: They store 100 TB across multiple containers, with each container holding backups for a specific database.
The DP-900 exam tests Azure Table Storage and Blob Storage under objective 2.5: 'Describe non-relational data services on Azure'. You should expect 3-5 questions on these services, often comparing them to Azure Cosmos DB or SQL Database. Key areas:
Blob Storage characteristics: Know the three blob types (block, append, page) and their use cases. Page blobs are for VM disks; block blobs for streaming/upload; append blobs for logging. The exam often asks: 'Which blob type should you use for a virtual machine disk?' Answer: Page blob.
Access tiers: Hot (frequent access, higher storage cost), Cool (infrequent, lower storage cost, higher access cost), Archive (offline, lowest cost, hours to rehydrate). A common question: 'Which tier is most cost-effective for data that is accessed once a year?' Answer: Archive.
Table Storage keys: Partition key and row key form the primary key. Queries without partition key are full table scans (slow and expensive). The exam may ask: 'Which two properties are required for every entity in Table Storage?' Answer: PartitionKey and RowKey (Timestamp is automatically added).
4. Common wrong answers: - 'Table Storage supports SQL queries.' – False, it only supports OData queries. - 'Blob Storage can store relational data.' – False, it stores unstructured data. - 'Table Storage is the same as Cosmos DB Table API.' – False, they are different services. - 'All blobs are page blobs.' – False, default is block blob.
Edge cases:
Blob name can include '/' to simulate folders, but it's still flat.
Table Storage entity size limit is 1 MB; if data exceeds, use Blob or split.
Soft delete for blobs is enabled by default with 7-day retention; you can change it.
Blob Storage does not support transactions across multiple blobs; Table Storage supports entity group transactions (batch) within same partition.
Elimination strategy: If a question asks about storing a video file, eliminate Table Storage and Cosmos DB (they are for structured data). If it asks about fast lookups by key, eliminate Blob Storage (unless you use a database to index blobs). If it asks about global distribution, eliminate Table Storage (it is not globally distributed; Cosmos DB is).
Azure Blob Storage is for unstructured data; Azure Table Storage is for structured key-value data.
Blob types: Block (default, up to 4.75 TB), Append (logging), Page (VM disks, up to 8 TB).
Table Storage requires PartitionKey and RowKey; queries without PartitionKey are full scans.
Table Storage entity max size is 1 MB; max 252 custom properties.
Blob access tiers: Hot (frequent), Cool (infrequent), Archive (offline, hours to rehydrate).
Soft delete for blobs is enabled by default with 7-day retention.
Table Storage is not globally distributed; use Cosmos DB Table API for global distribution.
Blob Storage containers are flat; use naming convention to simulate folders.
Default storage account type for new deployments is General-purpose v2 (GPv2).
Replication options: LRS (3 copies, single datacenter), GRS (6 copies, two regions), RA-GRS (read access to secondary), ZRS (3 zones).
These come up on the exam all the time. Here's how to tell them apart.
Azure Blob Storage
Stores unstructured binary data (images, videos, backups).
Access via REST API, SDKs, or Azure portal.
Three blob types: block, append, page.
Supports access tiers (Hot, Cool, Archive).
Maximum blob size: 4.75 TB (block) or 8 TB (page).
Azure Table Storage
Stores structured, schema-less data (entities with key-value pairs).
Access via REST API, SDKs, or Azure portal.
Only one entity type, with PartitionKey and RowKey.
No access tiers – all data stored in standard SSD.
Maximum entity size: 1 MB.
Azure Table Storage
Part of Azure Storage (GPv2 accounts).
Lower cost per GB stored.
Throughput up to 20,000 ops/sec per partition.
Single region (unless using GRS, but no active-active).
Only strong consistency (eventual for GRS).
Azure Cosmos DB Table API
Part of Azure Cosmos DB (global database service).
Higher cost, but higher throughput (millions of ops/sec).
Global distribution with multi-master writes.
Multiple consistency levels (strong, bounded staleness, session, consistent prefix, eventual).
Supports automatic indexing of all properties.
Mistake
Azure Table Storage supports secondary indexes for faster queries.
Correct
Table Storage does not support secondary indexes. Queries are efficient only when using PartitionKey and RowKey. Without them, a full table scan occurs. To index other properties, you must use Azure Cosmos DB Table API or a separate indexing service.
Mistake
Blob Storage containers can be nested like folders.
Correct
Containers are flat – they cannot be nested. You can use a hierarchical naming convention (e.g., 'folder1/subfolder1/file.txt') to simulate folders, but the storage system treats it as a single blob name. There is no true hierarchy.
Mistake
All blobs are block blobs by default.
Correct
When you upload a blob without specifying type, the default is block blob. However, page blobs and append blobs are distinct types. For example, Azure VM disks are page blobs, not block blobs.
Mistake
Table Storage is the same as Azure Cosmos DB Table API.
Correct
They are different services. Table Storage is part of Azure Storage, with lower cost and lower throughput (up to 20,000 ops/sec per partition). Cosmos DB Table API offers global distribution, multiple consistency levels, and higher throughput (millions of ops/sec) but at higher cost.
Mistake
Blob Storage can store relational data like tables.
Correct
Blob Storage stores unstructured binary data. It cannot be queried relationally. You can store CSV or JSON files, but querying them requires external processing (e.g., Azure Data Lake Analytics). For structured data, use Table Storage or Azure SQL.
Reveal each answer, then mark whether you got it right. Score 60%+ to unlock the next chapter.
Azure Blob Storage stores unstructured binary data like images, videos, and backups. It is accessed via a URL and supports different blob types (block, append, page) and access tiers (Hot, Cool, Archive). Azure Table Storage stores structured, schema-less data as entities with a partition key and row key. It is optimized for key-based lookups and is cheaper than Cosmos DB. For the exam, remember that Blob is for files, Table is for structured data.
You should use a page blob. Page blobs are optimized for random read/write operations and are used as the backing storage for Azure VM disks. They consist of 512-byte pages and can be up to 8 TB. Block blobs are for streaming data, and append blobs are for logging. The exam will test this distinction.
Always include the PartitionKey in your query. Table Storage distributes entities across partitions based on the PartitionKey. Queries that specify PartitionKey are routed to the correct partition and are fast. Queries without PartitionKey perform a full table scan, which is slow and expensive. You can also filter by RowKey for more granularity. The exam expects you to know that PartitionKey is essential for performance.
No, the maximum entity size in Azure Table Storage is 1 MB. If your data exceeds this limit, you must either split it across multiple entities or use a different storage solution like Blob Storage. This is a common exam fact.
Azure Table Storage is a core Azure Storage service with lower cost and lower throughput (up to 20,000 ops/sec per partition). It is not globally distributed. Azure Cosmos DB Table API is a globally distributed, multi-model database service that offers higher throughput, multiple consistency levels, and automatic indexing. It is more expensive. The exam emphasizes that Cosmos DB is for global scale and low latency.
You can change the access tier of a blob using the Azure portal, CLI, or SDK. For example, with Azure CLI: `az storage blob set-tier --container-name <container> --name <blob> --tier Archive --account-name <account>`. Note that blobs in Archive tier are offline and must be rehydrated (changed to Hot or Cool) before reading, which can take up to 15 hours.
The default retention period for blob soft delete is 7 days. You can configure it between 1 and 365 days. Soft delete protects against accidental deletion by retaining deleted blobs for the retention period. The exam may ask for the default value.
You've just covered Azure Table Storage and Blob Data — now see how well it sticks with free DP-900 practice questions. Full explanations included, no account needed.
Done with this chapter?