TruncateTableCommand Logical Command¶
TruncateTableCommand
is a leaf logical runnable command that represents TruncateTable
or TruncatePartition
(over a V1Table in the spark_catalog catalog) at execution time.
Creating Instance¶
TruncateTableCommand
takes the following to be created:
-
TableIdentifier
- Optional
TablePartitionSpec
TruncateTableCommand
is created when:
- ResolveSessionCatalog logical resolution rule is executed
Executing Command¶
run
requests the given SparkSession for the SessionCatalog (via SessionState).
run
requests the SessionCatalog
for the table metadata by the given tableName.
run
finds the paths of the partitions (if specified) or the main directory of the table and deletes them one by one, recursively.
Uses Apache Hadoop to Delete Paths
run
uses Apache Hadoop's FileSystem.delete to delete the directories.
Once deleted, run
re-creates the paths (so they are empty directories), possibly re-creating their file permissions (based on the spark.sql.truncateTable.ignorePermissionAcl.enabled configuration property).
Uses Apache Hadoop to Re-Create Paths
run
uses Apache Hadoop's FileSystem.mkdirs to re-create the directories.
After deleting the data, run
requests the Catalog to refresh the table followed by updating the table statistics.
run
returns no Row
s.
Exceptions¶
run
throws an AnalysisException
when executed on external tables:
Operation not allowed: TRUNCATE TABLE on external tables: [tableIdentWithDB]
run
throws an AnalysisException
when executed with the TablePartitionSpec on non-partitioned tables:
Operation not allowed: TRUNCATE TABLE ... PARTITION is not supported for tables that are not partitioned: [tableIdentWithDB]
run
throws an AnalysisException
when executed with the TablePartitionSpec with filesource partition disabled or partition metadata not in a Hive metastore.