df.write与CREATE TABLE USING的差异:Delta表未显示于hive_metastore
两个Delta表操作的核心差异及你的理解偏差
你的理解确实存在偏差,这两个操作本质是创建无元数据关联的Delta数据集和在元存储中注册关联数据的表的区别,具体差异如下:
1. data.write.format("delta").save("/path/to/delta-table")
- 仅生成Delta格式底层数据:这个操作只会在指定路径下生成Delta所需的parquet数据文件、事务日志(
_delta_log目录)等内容,属于未注册到元存储的“裸”数据集 - 无元存储记录:它不会在Hive Metastore中创建任何表元数据(比如表名、字段结构、分区规则等),因此Databricks的Data板块无法通过元存储的表目录找到它
- 读取限制:你只能通过指定路径的方式读取该数据,比如
spark.read.format("delta").load("/path/to/delta-table"),它不属于元存储管理的表体系
2. CREATE TABLE some_table USING DELTA LOCATION "/path/to/delta-table"
- 注册外部表到元存储:这个操作是在Hive Metastore中创建一条表元数据记录,将已存在的Delta数据集路径与这个表名关联起来,属于外部表
- 元存储可见:因为元存储中存在了该表的记录,所以你能在Databricks Data板块的
hive_metastore下看到这个表 - 数据无变动:这个操作不会移动或复制原路径的数据集,只是给已有数据“绑定”了一个元存储中的表标识
补充:直接创建可被元存储识别的Delta表
如果想在写入数据的同时让表出现在hive_metastore中,可以直接用saveAsTable方法:
data.write.format("delta").saveAsTable("some_table")
这个方法会自动在Hive Metastore中注册表元数据,同时将数据写入默认的表存储路径(如果需要指定自定义路径,可添加option("path", "/path/to/custom"))
内容的提问来源于stack exchange,提问作者Minura Punchihewa
相关产品推荐
相关产品推荐

