{"id":119881,"date":"2026-07-06T15:05:27","date_gmt":"2026-07-06T09:35:27","guid":{"rendered":"https:\/\/www.guvi.in\/blog\/?p=119881"},"modified":"2026-07-06T15:05:29","modified_gmt":"2026-07-06T09:35:29","slug":"delta-lake-tutorial","status":"publish","type":"post","link":"https:\/\/www.guvi.in\/blog\/delta-lake-tutorial\/","title":{"rendered":"Delta Lake Tutorial: A Practical Guide for Data Engineers"},"content":{"rendered":"\n<p>Data lakes are useful, but they can become messy very quickly. Files arrive from different systems. Schemas change without warning. Batch jobs fail midway. Streaming pipelines write new data while analysts are still querying old data. One bad write can break trust in the entire dataset.<\/p>\n\n\n\n<p>Delta Lake solves this problem by adding reliability, transaction control, version history, and better data management on top of data lake storage.&nbsp;<\/p>\n\n\n\n<p>This Delta Lake tutorial explains what Delta Lake is, how it works, how to create Delta tables, how to read and write data, how to use time travel, and how to manage updates with MERGE. It is written for beginners who already understand basic data engineering, Apache Spark, SQL, or PySpark.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>TL;DR<\/strong><\/h2>\n\n\n\n<ul>\n<li>Delta Lake is an open-source storage layer for reliable data lakes.<\/li>\n\n\n\n<li>It adds ACID transactions, schema enforcement, time travel, and scalable metadata handling.<\/li>\n\n\n\n<li>Delta tables store data as Parquet files with a transaction log.<\/li>\n\n\n\n<li>Data engineers use Delta Lake for batch pipelines, streaming jobs, CDC, data warehousing, and lakehouse architecture.<\/li>\n\n\n\n<li>Key commands include write, read, update, delete, merge, vacuum, optimize, and time travel.<\/li>\n\n\n\n<li>Delta Lake works well with Apache Spark and is widely used in Databricks lakehouse environments.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is Delta Lake?<\/strong><\/h2>\n\n\n\n<p>Delta Lake is an open-source storage layer that brings reliability to data lakes. It stores data in Parquet format and maintains a transaction log that records every change made to the table. This log helps Delta Lake support ACID transactions, schema enforcement, time travel, updates, deletes, and merges.<\/p>\n\n\n\n<p>Traditional data lakes often store raw files in cloud storage such as Amazon S3, Azure Data Lake Storage, or Google Cloud Storage. That works well for scale, but it can create problems when multiple jobs read and write at the same time. Delta Lake adds a structured table layer over those files so data teams can manage large datasets with more control.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why is Delta Lake Used?<\/strong><\/h2>\n\n\n\n<p>Delta Lake is used because raw data lakes can become hard to trust when data volume grows. A normal data lake may have duplicate files, incomplete writes, schema mismatches, and no clear version history. Delta Lake gives teams a safer way to build analytics, machine learning, and reporting pipelines.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Benefits<\/strong><\/h3>\n\n\n\n<ul>\n<li>Supports ACID transactions for reliable reads and writes<\/li>\n\n\n\n<li>Prevents bad data with schema enforcement<\/li>\n\n\n\n<li>Allows table rollback through time travel<\/li>\n\n\n\n<li>Supports updates, deletes, and merges<\/li>\n\n\n\n<li>Works with batch and streaming data pipelines<\/li>\n\n\n\n<li>Improves data quality in lakehouse architecture<\/li>\n\n\n\n<li>Stores data in open Parquet format<\/li>\n\n\n\n<li>Helps data teams manage large metadata at scale<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Common Use Cases<\/strong><\/h3>\n\n\n\n<ul>\n<li>Data lakehouse implementation<\/li>\n\n\n\n<li>ETL and ELT pipelines<\/li>\n\n\n\n<li>Change data capture pipelines<\/li>\n\n\n\n<li>Real-time analytics<\/li>\n\n\n\n<li>Slowly changing dimensions<\/li>\n\n\n\n<li>Machine learning feature stores<\/li>\n\n\n\n<li><a href=\"https:\/\/www.guvi.in\/blog\/data-warehousing-concepts-and-implementation\/\" target=\"_blank\" rel=\"noreferrer noopener\">Data warehouse<\/a> modernization<\/li>\n\n\n\n<li>Streaming and batch pipeline unification<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Delta Lake Architecture<\/strong><\/h2>\n\n\n\n<p>Delta Lake has two main parts: Parquet data files and the Delta transaction log.<\/p>\n\n\n\n<p>The Parquet files store the actual table data. The transaction log, stored inside the _delta_log folder, records table actions such as inserts, updates, deletes, schema changes, and file versions. Every transaction creates a new log entry. This helps Delta Lake understand which files are valid for each table version.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Main Components<\/strong><\/h3>\n\n\n\n<ul>\n<li><strong>Parquet Files:<\/strong> Store the actual data in columnar format.<\/li>\n\n\n\n<li><strong>Delta Log:<\/strong> Stores transaction history and table metadata.<\/li>\n\n\n\n<li><strong>Table Metadata:<\/strong> Tracks schema, partitions, properties, and versions.<\/li>\n\n\n\n<li><strong>Snapshot:<\/strong> Represents the table state at a specific version.<\/li>\n\n\n\n<li><strong>Checkpoint Files:<\/strong> Help Delta Lake read large transaction logs faster.<\/li>\n<\/ul>\n\n\n\n<p><em>Build industry-ready expertise in modern data engineering with HCL GUVI\u2019s <\/em><a href=\"https:\/\/www.guvi.in\/courses\/data-science\/big-data-engineering\/?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=delta-lake-tutorial-a-practical-guide-for-data-engineers\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Big Data Engineering Course.<\/em><\/a><em> Learn in-demand technologies like Spark, Hadoop, ETL pipelines, cloud platforms, and data lakes through hands-on projects and real-world use cases. Develop the skills needed to design scalable data systems and succeed in high-growth data engineering roles.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Delta Lake Tutorial: Step-by-Step Guide<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Install Delta Lake<\/strong><\/h3>\n\n\n\n<p>Delta Lake is commonly used with <a href=\"https:\/\/www.guvi.in\/blog\/what-is-apache-spark\/\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Spark<\/a>. The simplest way to start locally is to install the Delta Lake package for PySpark.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install pyspark delta-spark<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/www.guvi.in\/blog\/top-data-engineer-skills\/\" target=\"_blank\" rel=\"noreferrer noopener\">Data engineers<\/a> working on Databricks usually do not need separate installation because Delta Lake is already integrated into the platform. For open-source Spark, the Delta Lake package must match the Apache Spark version being used.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Create a Spark Session<\/strong><\/h3>\n\n\n\n<p>A Spark session is needed before working with Delta tables in <a href=\"https:\/\/www.guvi.in\/blog\/pyspark-tutorial\/\" target=\"_blank\" rel=\"noreferrer noopener\">PySpark<\/a>. The Delta package must be configured with Spark so Delta Lake commands can run properly.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from pyspark.sql import SparkSession\n\nfrom delta import configure_spark_with_delta_pip\n\nbuilder = (\n\n&nbsp;&nbsp;&nbsp;&nbsp;SparkSession.builder\n\n&nbsp;&nbsp;&nbsp;&nbsp;.appName(\"DeltaLakeTutorial\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;.config(\"spark.sql.extensions\", \"io.delta.sql.DeltaSparkSessionExtension\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;.config(\"spark.sql.catalog.spark_catalog\", \"org.apache.spark.sql.delta.catalog.DeltaCatalog\")\n\n)\n\nspark = configure_spark_with_delta_pip(builder).getOrCreate()<\/code><\/pre>\n\n\n\n<p>This setup allows Spark to read and write Delta tables, use Delta SQL syntax, and manage table metadata through the Delta catalog.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Create a Delta Table<\/strong><\/h3>\n\n\n\n<p>A Delta table can be created by writing a Spark DataFrame in Delta format. The following example creates a small customer dataset and saves it as a Delta table.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data = &#91;\n\n&nbsp;&nbsp;&nbsp;&nbsp;(1, \"Aarav\", \"Delhi\", 2500),\n\n&nbsp;&nbsp;&nbsp;&nbsp;(2, \"Naina\", \"Mumbai\", 4200),\n\n&nbsp;&nbsp;&nbsp;&nbsp;(3, \"Rohan\", \"Bengaluru\", 3100)\n\n]\n\ncolumns = &#91;\"customer_id\", \"name\", \"city\", \"spend\"]\n\ndf = spark.createDataFrame(data, columns)\n\ndf.write.format(\"delta\").mode(\"overwrite\").save(\"\/tmp\/delta\/customers\")<\/code><\/pre>\n\n\n\n<p>This command creates a Delta table at the given path. The table stores Parquet files and a _delta_log folder.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Read a Delta Table<\/strong><\/h3>\n\n\n\n<p>Delta tables can be read using the Delta format option.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>customers_df = spark.read.format(\"delta\").load(\"\/tmp\/delta\/customers\")\n\ncustomers_df.show()<\/code><\/pre>\n\n\n\n<p>Data teams can also register Delta tables in a metastore and query them using <a href=\"https:\/\/www.guvi.in\/blog\/guide-on-sql-for-data-science\/\">SQL<\/a>. This makes Delta Lake useful for analysts, data engineers, and BI teams working on the same dataset.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Append New Data<\/strong><\/h3>\n\n\n\n<p>New records can be added to an existing Delta table using append mode.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>new_data = &#91;\n\n&nbsp;&nbsp;&nbsp;&nbsp;(4, \"Meera\", \"Pune\", 3900),\n\n&nbsp;&nbsp;&nbsp;&nbsp;(5, \"Kabir\", \"Hyderabad\", 2800)\n\n]\n\nnew_df = spark.createDataFrame(new_data, columns)\n\nnew_df.write.format(\"delta\").mode(\"append\").save(\"\/tmp\/delta\/customers\")<\/code><\/pre>\n\n\n\n<p>Append mode is useful for daily ingestion pipelines, event data, transaction logs, and incremental data loading.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. Use Schema Enforcement<\/strong><\/h3>\n\n\n\n<p>Schema enforcement prevents data with the wrong structure from being written into a Delta table. This matters because data pipelines often fail when new files contain missing columns, wrong data types, or unexpected fields.<\/p>\n\n\n\n<p>For example, if a Delta table expects customer_id, name, city, and spend, a write operation with mismatched columns will fail unless schema evolution is allowed.<\/p>\n\n\n\n<p>This protects downstream reports, dashboards, and machine learning pipelines from silent data quality issues.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>7. Use Schema Evolution<\/strong><\/h3>\n\n\n\n<p>Schema evolution allows the table schema to change when new columns are added. This is useful when data sources grow over time.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>new_schema_data = &#91;\n\n&nbsp;&nbsp;&nbsp;&nbsp;(6, \"Isha\", \"Chennai\", 5000, \"Gold\")\n\n]\n\nnew_schema_columns = &#91;\"customer_id\", \"name\", \"city\", \"spend\", \"customer_tier\"]\n\nnew_schema_df = spark.createDataFrame(new_schema_data, new_schema_columns)\n\nnew_schema_df.write.format(\"delta\") \\\n\n&nbsp;&nbsp;&nbsp;&nbsp;.mode(\"append\") \\\n\n&nbsp;&nbsp;&nbsp;&nbsp;.option(\"mergeSchema\", \"true\") \\\n\n&nbsp;&nbsp;&nbsp;&nbsp;.save(\"\/tmp\/delta\/customers\")<\/code><\/pre>\n\n\n\n<p>Schema evolution should be used carefully. It is helpful for controlled schema changes, but teams should still review data contracts and pipeline dependencies before allowing frequent changes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>8. Update Records in Delta Lake<\/strong><\/h3>\n\n\n\n<p>Delta Lake supports update operations, which are difficult to manage safely in a raw file-based data lake.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from delta.tables import DeltaTable\n\ndelta_table = DeltaTable.forPath(spark, \"\/tmp\/delta\/customers\")\n\ndelta_table.update(\n\n&nbsp;&nbsp;&nbsp;&nbsp;condition = \"city = 'Delhi'\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;set = { \"spend\": \"spend + 500\" }\n\n)<\/code><\/pre>\n\n\n\n<p>This command updates records where the city is Delhi. The Delta log records the change and creates a new table version.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>9. Delete Records in Delta Lake<\/strong><\/h3>\n\n\n\n<p>Delta Lake also supports delete operations.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>delta_table.delete(\"spend &lt; 3000\")<\/code><\/pre>\n\n\n\n<p>This command removes records where spend is less than 3000. In production, deletes are often used for privacy requests, data correction, retention rules, and compliance workflows.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>10. Use MERGE for Upserts<\/strong><\/h3>\n\n\n\n<p>MERGE is one of the most important Delta Lake features for data engineering. It allows teams to update existing records and insert new records in one operation. This is commonly called an upsert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>updates_data = &#91;\n\n&nbsp;&nbsp;&nbsp;&nbsp;(2, \"Naina\", \"Mumbai\", 4600),\n\n&nbsp;&nbsp;&nbsp;&nbsp;(7, \"Arjun\", \"Jaipur\", 2200)\n\n]\n\nupdates_df = spark.createDataFrame(updates_data, columns)\n\ndelta_table.alias(\"target\").merge(\n\n&nbsp;&nbsp;&nbsp;&nbsp;updates_df.alias(\"source\"),\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"target.customer_id = source.customer_id\"\n\n).whenMatchedUpdateAll() \\\n\n&nbsp;.whenNotMatchedInsertAll() \\\n\n&nbsp;.execute()<\/code><\/pre>\n\n\n\n<p>MERGE is useful for customer tables, transaction pipelines, CDC workloads, inventory data, and slowly changing dimension tables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>11. Use Time Travel<\/strong><\/h3>\n\n\n\n<p>Time travel allows users to query earlier versions of a Delta table. This is useful when a bad data load happens, a report needs historical validation, or a model needs reproducible training data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>old_version_df = spark.read.format(\"delta\") \\\n\n&nbsp;&nbsp;&nbsp;&nbsp;.option(\"versionAsOf\", 0) \\\n\n&nbsp;&nbsp;&nbsp;&nbsp;.load(\"\/tmp\/delta\/customers\")\n\nold_version_df.show()\n\nA table can also be queried using timestamp-based time travel.\n\nold_timestamp_df = spark.read.format(\"delta\") \\\n\n&nbsp;&nbsp;&nbsp;&nbsp;.option(\"timestampAsOf\", \"2026-06-01\") \\\n\n&nbsp;&nbsp;&nbsp;&nbsp;.load(\"\/tmp\/delta\/customers\")<\/code><\/pre>\n\n\n\n<p>Time travel gives data teams a practical recovery path without manually restoring old files.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>12. View Delta Table History<\/strong><\/h3>\n\n\n\n<p>Delta Lake keeps operation history for each table.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>delta_table.history().show()<\/code><\/pre>\n\n\n\n<p>This helps data engineers audit table changes, check who changed the table, review operation types, and debug pipeline issues.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>13. Optimize Delta Tables<\/strong><\/h3>\n\n\n\n<p>As data grows, Delta tables may contain many small files. Small files can slow down queries because Spark has to read too many file fragments. Delta Lake supports optimization methods to improve file layout and query performance.<\/p>\n\n\n\n<p>On <a href=\"https:\/\/www.guvi.in\/blog\/getting-started-with-databricks\/\" target=\"_blank\" rel=\"noreferrer noopener\">Databricks<\/a>, the OPTIMIZE command is commonly used.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OPTIMIZE delta.`\/tmp\/delta\/customers`;<\/code><\/pre>\n\n\n\n<p>Teams can also use partitioning, clustering, compaction, and data skipping techniques based on query patterns. The right optimization strategy depends on table size, read frequency, write frequency, and filter columns.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>14. Clean Old Files with VACUUM<\/strong><\/h3>\n\n\n\n<p>Delta Lake keeps old data files for time travel and rollback. Over time, unused files can increase storage cost. The VACUUM command removes old files that are no longer needed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>VACUUM delta.`\/tmp\/delta\/customers`;<\/code><\/pre>\n\n\n\n<p>VACUUM should be used carefully because removing old files can limit time travel. Production teams should align retention settings with audit, compliance, and recovery needs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>A good Delta Lake tutorial should not stop at creating a table. The real value comes from understanding how Delta Lake protects pipelines, supports recovery, manages change, and improves trust in analytics data. For anyone working in data engineering, lakehouse architecture, Spark, Databricks, or cloud analytics, Delta Lake is a practical skill that connects raw data storage with production-ready data systems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQs<\/strong><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1782905701396\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>What is Delta Lake in simple words?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Delta Lake is an open-source storage layer that makes data lakes more reliable. It stores data in Parquet format and adds a transaction log so teams can manage updates, deletes, time travel, schema changes, and ACID transactions.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782905712988\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">I<strong>s Delta Lake a database?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Delta Lake is not a traditional database. It is a storage layer that sits on top of data lake storage. It helps tools like Apache Spark and Databricks read and write data with stronger reliability.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782905731455\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>What is the difference between Delta Lake and Parquet?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Parquet is a file format used to store data efficiently. Delta Lake uses Parquet files but adds a transaction log, ACID transactions, schema enforcement, time travel, and support for updates and deletes.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782905759506\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>Why do data engineers use Delta Lake?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Data engineers use Delta Lake to build reliable ETL pipelines, manage changing data, recover older table versions, support streaming and batch workloads, and prevent bad writes from breaking analytics systems.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1782905769188\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>\u00a0Is Delta Lake only used with Databricks?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No, Delta Lake is open source and can be used with Apache Spark outside Databricks. Databricks provides strong built-in support for Delta Lake, but Delta Lake itself is not limited to Databricks.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Data lakes are useful, but they can become messy very quickly. Files arrive from different systems. Schemas change without warning. Batch jobs fail midway. Streaming pipelines write new data while analysts are still querying old data. One bad write can break trust in the entire dataset. Delta Lake solves this problem by adding reliability, transaction [&hellip;]<\/p>\n","protected":false},"author":60,"featured_media":120505,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[578,16],"tags":[],"views":"38","authorinfo":{"name":"Vaishali","url":"https:\/\/www.guvi.in\/blog\/author\/vaishali\/"},"thumbnailURL":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/07\/Delta-Lake-Tutorial-300x116.webp","_links":{"self":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/119881"}],"collection":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/users\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/comments?post=119881"}],"version-history":[{"count":3,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/119881\/revisions"}],"predecessor-version":[{"id":120507,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/119881\/revisions\/120507"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media\/120505"}],"wp:attachment":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media?parent=119881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/categories?post=119881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/tags?post=119881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}