如果超过30天,则删除Databricks表

时间:2020-01-19 19:50:42

标签: databricks

如果表创建于30多天之前,我想删除Databricks SQL DB表。如何从databricks获取创建的datetime表?

谢谢

2 个答案:

答案 0 :(得分:1)

给出一个tableName,最简单的获取创建时间的方法如下:

import org.apache.spark.sql.catalyst.TableIdentifier

val createdAtMillis = spark.sessionState.catalog
  .getTempViewOrPermanentTableMetadata(new TableIdentifier(tableName))
  .createTime

getTempViewOrPermanentTableMetadata()返回CatalogTable,其中包含以下信息:

CatalogTable(
Database: default
Table: dimension_npi
Owner: root
Created Time: Fri Jan 10 23:37:18 UTC 2020
Last Access: Thu Jan 01 00:00:00 UTC 1970
Created By: Spark 2.4.4
Type: MANAGED
Provider: parquet
Num Buckets: 8
Bucket Columns: [`npi`]
Sort Columns: [`npi`]
Table Properties: [transient_lastDdlTime=1578699438]
Location: dbfs:/user/hive/warehouse/dimension_npi
Serde Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat: org.apache.hadoop.mapred.SequenceFileInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
Schema: root
 |-- npi: integer (nullable = true)
 ...
)

您可以使用sessionCatalog.listTables(database)列出数据库中的所有表。

还有其他方法可以实现相同目的,但是会花费更多的精力,并且由于Spark行为的更改会冒错误的风险:使用SQL查找表元数据和/或遍历存储表的位置并查看文件时间戳。这就是为什么最好通过目录API。

希望这会有所帮助。

答案 1 :(得分:0)

假设您的数据库表是增量数据库:

您可以使用java.lang.UnsupportedOperationException: Schema for type java.util.Hashtable[String,String] is not supported at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$1.apply(ScalaReflection.scala:809) at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$1.apply(ScalaReflection.scala:740) at scala.reflect.internal.tpe.TypeConstraints$UndoLog.undo(TypeConstraints.scala:56) at org.apache.spark.sql.catalyst.ScalaReflection$class.cleanUpReflectionObjects(ScalaReflection.scala:926) at org.apache.spark.sql.catalyst.ScalaReflection$.cleanUpReflectionObjects(ScalaReflection.scala:49) at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:739) at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:736) at org.apache.spark.sql.functions$.udf(functions.scala:3898) ... 59 elided 检索对该表进行的所有事务,包括时间戳。根据{{​​3}}-历史记录仅保留30天。根据您计划如何实施可行的解决方案而定。