Truncate table query is not supported in Azure synapse analytics with the delta table

Harshil Shah 21 Reputation points
2022-06-24T08:57:57.833+00:00

I have created a delta table using the following query in azure synapse workspace, it is uses the apache-spark pool and the table is created successfully. And in that, I have added some data to the table

214659-image.png

After that I want to remove all records from that table as well as from primary storage also so, I have used the "TRUNCATE TABLE" query but it gives me an error that TRUNCATE TABLE is not supported for v2 tables.

214753-image.png

And the error stack is:
Error: TRUNCATE TABLE is not supported for v2 tables. org.apache.spark.sql.execution.datasources.v2.DataSourceV2Strategy.apply(DataSourceV2Strategy.scala:353) org.apache.spark.sql.catalyst.planning.QueryPlanner.$anonfun$plan$1(QueryPlanner.scala:63) scala.collection.Iterator$$anon$11.nextCur(Iterator.scala:484) scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:490) scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:489) org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:93) org.apache.spark.sql.execution.SparkStrategies.plan(SparkStrategies.scala:68) org.apache.spark.sql.catalyst.planning.QueryPlanner.$anonfun$plan$3(QueryPlanner.scala:78) scala.collection.TraversableOnce.$anonfun$foldLeft$1(TraversableOnce.scala:162) scala.collection.TraversableOnce.$anonfun$foldLeft$1$adapted(TraversableOnce.scala:162) scala.collection.Iterator.foreach(Iterator.scala:941) scala.collection.Iterator.foreach$(Iterator.scala:941) scala.collection.AbstractIterator.foreach(Iterator.scala:1429) scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:162) scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:160) scala.collection.AbstractIterator.foldLeft(Iterator.scala:1429) org.apache.spark.sql.catalyst.planning.QueryPlanner.$anonfun$plan$2(QueryPlanner.scala:75) scala.collection.Iterator$$anon$11.nextCur(Iterator.scala:484) scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:490) org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:93) org.apache.spark.sql.execution.SparkStrategies.plan(SparkStrategies.scala:68) org.apache.spark.sql.execution.QueryExecution$.createSparkPlan(QueryExecution.scala:420) org.apache.spark.sql.execution.QueryExecution.$anonfun$sparkPlan$4(QueryExecution.scala:115) org.apache.spark.sql.catalyst.QueryPlanningTracker.measurePhase(QueryPlanningTracker.scala:120) org.apache.spark.sql.execution.QueryExecution.$anonfun$executePhase$1(QueryExecution.scala:159) org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) org.apache.spark.sql.execution.QueryExecution.executePhase(QueryExecution.scala:159) org.apache.spark.sql.execution.QueryExecution.sparkPlan$lzycompute(QueryExecution.scala:115) org.apache.spark.sql.execution.QueryExecution.sparkPlan(QueryExecution.scala:99) org.apache.spark.sql.execution.QueryExecution.assertSparkPlanned(QueryExecution.scala:119) org.apache.spark.sql.execution.QueryExecution.executedPlan$lzycompute(QueryExecution.scala:126) org.apache.spark.sql.execution.QueryExecution.executedPlan(QueryExecution.scala:123) org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$5(SQLExecution.scala:105) org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:181) org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:94) org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:68) org.apache.spark.sql.Dataset.withAction(Dataset.scala:3685) org.apache.spark.sql.Dataset.<init>(Dataset.scala:228) org.apache.spark.sql.Dataset$.$anonfun$ofRows$2(Dataset.scala:99) org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:96) org.apache.spark.sql.SparkSession.$anonfun$sql$1(SparkSession.scala:618) org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) org.apache.spark.sql.SparkSession.sql(SparkSession.scala:613)

So, any alternate approach to remove data from the delta table

And in Databricks this query is working properly.

Thank you for giving a solution.

Azure Synapse Analytics
Azure Synapse Analytics
An Azure analytics service that brings together data integration, enterprise data warehousing, and big data analytics. Previously known as Azure SQL Data Warehouse.
5,373 questions
Azure Databricks
Azure Databricks
An Apache Spark-based analytics platform optimized for Azure.
2,514 questions
0 comments No comments
{count} votes

Accepted answer
  1. AnnuKumari-MSFT 34,556 Reputation points Microsoft Employee Moderator
    2022-06-27T09:49:14.59+00:00

    Hi @Harshil Shah ,

    Welcome to Microsoft Q&A platform and thanks for posting your question here.

    As I understand your query, you have created delta table in Azure synapse workspace and are trying to truncate the table , however, it's throwing an error. Please let me know if my understanding about your query is incorrect.

    When you create a delta table in Azure Synapse , it's doesn't create an actual physical table . It actually creates corresponding files in ADLS .

    215362-image.png

    215240-image.png

    Truncate is not possible for these delta tables. You can either use delete from test_delta to remove the table content or drop table test_delta which will actually delete the folder itself and inturn delete the data as well.

    215352-image.png

    Kindly refer to this documentation for more details : Delete from a table

    Note: 'delete' removes the data from the latest version of the Delta table but does not remove it from the physical storage until the old versions are explicitly vacuumed. See vacuum for details.

    Hope this will help. Please let us know if any further queries.

    ------------------------------

    • Please don't forget to click on 130616-image.png or upvote 130671-image.png button whenever the information provided helps you.
      Original posters help the community find answers faster by identifying the correct answer. Here is how
    • Want a reminder to come back and check responses? Here is how to subscribe to a notification
    • If you are interested in joining the VM program and help shape the future of Q&A: Here is how you can be part of Q&A Volunteer Moderators
    3 people found this answer helpful.

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.