Hive MetaStore 到 Unity 目录

问题描述 投票:0回答:1

我正在尝试将我的 Hive Metastore 迁移到 Unity Catalog。 我希望为模式和表保留完全相同的存储架构。

在 Hive Metastore 中,所有架构都是使用 ADLS Gen2 (Azure) 上的位置创建的。然后表会自动创建到模式的文件夹中,并带有表名称。

对于 UC,我必须为存储创建一个外部位置。这是与 hive 元存储相同的 ADLS Gen2 存储。所以当我创建目录时,我指定了UC的路径。但是当在其中创建表时,我不希望拥有所有这些散列命名模式和表。

UC中有没有一种方法,在外部表上创建目录+表时,获取表的简单路径。 示例:

abfss://container_name@storage_name.dfs.core.windows.net/data/my_uc_schema/my_uc_table
我得到的是:

abfss://container_name@storage_name.dfs.core.windows.net/data/uc_test/my_uc_schema/__unitystorage/schemas/ed6a256d-9ae0-4cd4-a859-e13018d3b88a
databricks azure-databricks databricks-unity-catalog
1个回答
0
投票

“托管表”由 Databricks 管理,因此您无法控制放置表/数据的实际位置。

如果你想控制位置,你需要

创建外部表

如果您有一个现有的 Hive 表,其表数据位于

abfss://container_name@storage_name.dfs.core.windows.net/data/my_uc_schema/my_uc_table

,那么您可以创建一个指向现有表/数据的 Unity Catalog 外部表。

例如以下代码

    在特定的 S3 位置创建一个 Hive 表(对于
  • abfss
     应该相同)
  • 然后创建 UC 元数据以指向现有数据
假设已存在覆盖

s3a://bucket/delta

 并具有适当权限的外部位置。请参阅
这个

from datetime import datetime df = spark.createDataFrame( data=[ ("data1", datetime.fromisoformat("2022-01-01T00:00:00")), ("data2", datetime.fromisoformat("2022-02-01T00:00:00")), ], schema="data: string, ts: timestamp", ) df.write.format("delta").save("s3a://bucket/delta/kash/ext_tab2")
SELECT * FROM catalog1.ext_tab2;
SELECT * FROM delta.`s3a://bucket/delta/kash/ext_tab2`;
CREATE TABLE catalog1.default.ext_tab2 LOCATION 's3a://bucket/delta/kash/ext_tab2';
SELECT * FROM catalog1.default.ext_tab2;
Databricks 一直在构建越来越多的

迁移选项,看看其中是否有任何一个能够满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.