【问题标题】:Delta Lake Table metadataDelta Lake Table 元数据
【发布时间】:2020-07-21 10:22:49
【问题描述】:

Delta Lake 在哪里存储表元数据信息。我在我的独立机器上使用 spark 2.6(不是 Databricks)。我的假设是,如果我重新启动 spark,在 deltalake spark 中创建的表将被删除(从 Jupyter notebook 尝试)。但事实并非如此。

【问题讨论】:

  • 你存放表格的位置在哪里?它将存储在您指定的存储/文件系统上。它不会被自动删除。
  • @zsxwing 我正在本地 Windows 环境中尝试它,我所有的表都在 C:/tmp 下。即使我删除文件夹,表格元数据信息也会保留
  • 是的。这是意料之中的。我猜你正在使用外部表(在create table 语句中使用location)。如果是这样,您需要运行drop table 将表从 Metastore 中删除(drop table 不会删除外部表使用的文件夹),并手动删除表文件夹。
  • @zsxwing 感谢您的评论。是的,我在创建表语句中使用“位置”。一个问题,表元信息(在这种情况下是可用表)存储在哪里,因为我的本地窗口环境中没有配置单元。
  • 如果您不配置 Hive,它将使用 derby,它使用本地文件系统提供 Metastore 功能。默认情况下,您应该能够在当前工作目录中看到一个目录spark-warehouse

标签: delta-lake


【解决方案1】:

Apache Spark 中有两种类型的表:外部表和托管表。在CREATE TABLE 语句中使用LOCATION 关键字创建表时,它是一个外部表。否则,它是一个托管表,其位置位于 Spark SQL conf spark.sql.warehouse.dir 指定的目录下。它的默认值为当前工作目录下的spark-warehouse目录

除了数据之外,Spark 还需要将表元数据存储到 Hive Metastore 中,以便在用户使用表名查询时,Spark 可以知道数据在哪里。 Hive Metastore 通常是一个数据库。如果用户没有为 Hive Metastore 指定数据库,Spark 将使用名为 Derby 的嵌入式数据库将表元数据存储在本地文件系统上。

DROP TABLE 命令根据表类型有不同的行为。当表是托管表时,DROP TABLE 将从 Hive Metastore 中删除该表并删除数据。如果表是外部表,DROP TABLE 将从 Hive Metastore 中删除该表,但仍将数据保留在文件系统上。因此,外部表的数据文件需要用户手动从文件系统中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2022-10-13
    • 2021-10-16
    • 2023-03-30
    相关资源
    最近更新 更多