Structured, Semi-Structured and Unstructured Data: A Practical Guide
Classify tables, JSON, images and text by the information you need to analyse, then turn a mixed support dataset into measurable fields.
Three categories, one important qualification
Structured data follows a defined arrangement of fields, such as a table with a ticket ID, creation date and status. Semi-structured data carries keys, tags or nested organisation while allowing more variation; JSON and XML are common examples. Unstructured content, such as an image or free-form conversation, does not arrive as a ready-made table of the business facts you want to measure.
These labels describe how content is organised for a task. They do not mean an image file has no technical format, or that a spreadsheet is automatically clean. Google Cloud’s overview of unstructured data provides the broader distinction.
Classify the content, not just its extension
| Input | Typical classification | What an analyst should check |
|---|---|---|
| Sales table with typed columns | Structured | Does one row mean an order or an order line? |
| JSON user profiles with optional nested fields | Semi-structured | Which fields and arrays are optional? |
| XML configuration document | Semi-structured | Which tags carry the values you need? |
| Product photograph | Unstructured visual content | What labelled measurement will be extracted? |
| Video demonstration | Unstructured audiovisual content | How will events and timestamps be defined? |
| Free-text customer message in a table | Unstructured content inside a structured container | How will categories be assigned and validated? |
A CSV can carry a consistent tabular dataset or contain irregular rows and long narrative fields. Inspect the contents and the agreed schema before giving a confident label. Likewise, a JSON object can obey a strict validation schema while still being stored in a flexible, nested representation.
BigQuery supports querying JSON directly, illustrating why semi-structured data does not automatically require abandoning SQL. See its JSON documentation.
Work through a mixed support dataset
Imagine three invented support tickets. Each has a ticket ID, a text message and an optional screenshot. The messages are “Parcel not here”, “Charged twice” and “Delivery late; also charged twice”. The team wants to count tickets mentioning delivery and billing problems.
Define the unit as one ticket and allow multiple issue labels. A single ticket can legitimately belong to both categories. An analyst could create the following review table after reading each message:
| ticket_id | delivery_issue | billing_issue | Evidence |
|---|---|---|---|
| 1 | Yes | No | Parcel not here |
| 2 | No | Yes | Charged twice |
| 3 | Yes | Yes | Delivery late; also charged twice |
Delivery appears in two tickets and billing appears in two. There are three tickets, but four label assignments. Adding the category counts and calling the result “total tickets” would be wrong. If you need mutually exclusive reporting, define a primary-issue rule and acknowledge what that rule hides.
The screenshot remains unstructured visual content even after the issue flags are stored in columns. Extracting fields creates a structured representation; it does not make the original evidence unnecessary.
Validate the extraction process
- Define each label. State whether “Where is my parcel?” counts as delivery even when no delay is confirmed.
- Allow uncertainty. Use an unknown or needs-review state when the evidence is insufficient.
- Review a sample. Compare extracted labels with independently reviewed examples and inspect disagreements.
- Track the method. Record the rules or model version used, so a later change can be investigated.
- Preserve the denominator. Distinguish tickets, messages and label assignments in each chart.
A keyword rule might miss “It never arrived” or misread “I was not charged twice”. An AI classifier may also misinterpret context. A confident-looking label is not proof of a correct classification. Start with a small labelled sample and examine errors before applying the method to a larger file.
Answer the question with a concrete example
A concise answer is: “A ticket table is structured; a nested JSON export is semi-structured; the message text and screenshots contain unstructured evidence. I can derive issue flags from that evidence, but I need definitions and quality checks before counting them.”
If asked which two inputs are unstructured, a product image and a demonstration video are usually clearer examples than JSON profiles and XML settings. Explain the distinction rather than memorising a list of extensions.
For a portfolio exercise, create ten synthetic tickets, write a labelling guide and show one ambiguous case. Report both category counts and total distinct tickets. Then use the business case guide to connect the analysis to a decision, such as which support issue needs further investigation.
