Учитывая 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 и / или обход местоположений, в которых хранятся таблицы, и просмотр временных меток файлов. Вот почему лучше всего go через API каталога.
Надеюсь, это поможет.