Trabajar con Unity Catalog y el metastore de Hive heredado
En este artículo se explica cómo usar el metastore de Hive por área de trabajo cuando el área de trabajo de Azure Databricks está habilitada para Unity Catalog.
Si el área de trabajo estaba en servicio antes de habilitarse para el catálogo de Unity, es probable que tenga un metastore de Hive que contenga los datos que desea seguir usando. Databricks recomienda migrar las tablas administradas por el metastore de Hive al metastore del catálogo de Unity, pero, si decide no hacerlo, en este artículo se explica cómo trabajar con datos administrados por ambos metastores.
Consulta del metastore de Hive en el catálogo de Unity
El repositorio metastore de Unity Catalog es aditivo, lo cual significa que se puede usar con el metastore de Hive por área de trabajo en Azure Databricks. El metastore de Hive aparece como un catálogo de nivel superior denominado hive_metastore
en el espacio de nombres de tres niveles.
Por ejemplo, puede hacer referencia a una tabla llamada sales_raw
en el esquema sales
del metastore de Hive heredado mediante la notación siguiente:
SQL
SELECT * from hive_metastore.sales.sales_raw;
Python
display(spark.table("hive_metastore.sales.sales_raw"))
R
library(SparkR)
display(tableToDF("hive_metastore.sales.sales_raw"))
Scala
display(spark.table("hive_metastore.sales.sales_raw"))
También puede especificar el catálogo y el esquema con una instrucción USE
:
SQL
USE hive_metastore.sales;
SELECT * from sales_raw;
Python
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
R
library(SparkR)
sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))
Scala
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
Control de acceso en Unity Catalog y el metastore de Hive
Si has configurado el control de acceso a tablas en el metastore de Hive, Databricks seguirá aplicando esos controles de acceso para los datos del catálogo hive_metastore
en los clústeres que se ejecutan en el modo de acceso compartido. El modelo de acceso a Unity Catalog difiere ligeramente de los controles de acceso heredados, como en que no hay instrucciones DENY
. El metastore de Hive es un objeto de nivel de área de trabajo. Los permisos definidos en el catálogo hive_metastore
siempre hacen referencia a los usuarios y grupos locales del área de trabajo. Consulte Diferencias con respecto al control de acceso a tablas.
Diferencias con respecto al control de acceso a tablas
Unity Catalog tiene las diferencias clave siguientes con respecto al uso de los controles de acceso a tablas en el metastore de Hive heredado en cada área de trabajo.
El modelo de control de acceso de Unity Catalog tiene las diferencias siguientes con respecto al control de acceso a tablas:
- Grupos de cuentas: las directivas de control de acceso de Unity Catalog se aplican a los grupos de cuentas, mientras que las directivas de control de acceso del metastore de Hive se aplican a los grupos de área de trabajo local. Consulte Diferencia entre grupos de cuenta y grupos de área de trabajo local.
- Los permisos
USE CATALOG
yUSE SCHEMA
son necesarios en el catálogo y el esquema para todas las operaciones en objetos dentro del catálogo o esquema: independientemente de los privilegios de una entidad de seguridad en una tabla, la entidad de seguridad también debe tener el privilegioUSE CATALOG
en su catálogo primario para tener acceso al esquema y el privilegioUSE SCHEMA
de tener acceso a los objetos dentro del esquema. Por otro lado, con los controles de acceso a tablas de nivel de área de trabajo, al concederUSAGE
en el catálogo raíz, se concedeUSAGE
automáticamente en todas las bases de datos, peroUSAGE
no es necesario en el catálogo raíz. - Vistas: en Unity Catalog, no es necesario que el propietario de una vista sea propietario de las tablas y vistas a las que se hace referencia en esta. Es suficiente con tener el privilegio
SELECT
, junto conUSE SCHEMA
en el esquema primario de las vistas yUSE CATALOG
en el catálogo primario. Con los controles de acceso a tablas de nivel de área de trabajo, el propietario de una vista debe ser propietario de todas las tablas y vistas a las que se hace referencia. - No se admite
ANY FILE
oANONYMOUS FUNCTION
: en Unity Catalog, no hay ningún concepto deANY FILE
niANONYMOUS FUNCTION
protegible que pueda permitir que un usuario sin privilegios ejecute código con privilegios. - Sin privilegio
READ_METADATA
: Unity Catalog administra el acceso para ver los metadatos de otra manera. Consulte Privilegios de Unity Catalog y objetos protegibles.
Combinaciones entre objetos de Unity Catalog y metastore de Hive
Mediante el uso de la notación de espacio de nombres de tres niveles, puede unir los datos de un metastore de Unity Catalog con los datos del metastore de Hive heredado.
Nota:
Una unión con datos del metastore de Hive heredado solo funcionará en el área de trabajo donde residan esos datos. Al intentar ejecutar esa unión en otra área de trabajo, se produce un error. Azure Databricks recomienda actualizar las tablas y vistas heredadas a Unity Catalog.
En el ejemplo siguiente se unen los resultados de la tabla sales_current
del metastore de Hive heredado con los de la tabla sales_historical
del metastore de Unity Catalog cuando los campos order_id
son iguales.
SQL
SELECT * FROM hive_metastore.sales.sales_current
JOIN main.shared_sales.sales_historical
ON hive_metastore.sales.sales_current.order_id = main.shared_sales.sales_historical.order_id;
Python
dfCurrent = spark.table("hive_metastore.sales.sales_current")
dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
other = dfHistorical,
on = dfCurrent.order_id == dfHistorical.order_id
))
R
library(SparkR)
dfCurrent = tableToDF("hive_metastore.sales.sales_current")
dfHistorical = tableToDF("main.shared_sales.sales_historical")
display(join(
x = dfCurrent,
y = dfHistorical,
joinExpr = dfCurrent$order_id == dfHistorical$order_id))
Scala
val dfCurrent = spark.table("hive_metastore.sales.sales_current")
val dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
right = dfHistorical,
joinExprs = dfCurrent("order_id") === dfHistorical("order_id")
))
Catálogo predeterminado
Se configura un catálogo predeterminado para cada área de trabajo habilitada para Unity Catalog.
Si omite el nombre del catálogo de nivel superior cuando lleva a cabo operaciones de datos, se asume el uso del catálogo predeterminado.
El catálogo predeterminado que se configuró inicialmente para el área de trabajo depende de cómo se haya habilitado el área de trabajo para Unity Catalog:
- Si el área de trabajo se ha habilitado automáticamente para Unity Catalog, el catálogo de áreas de trabajo se ha establecido como catálogo predeterminado. Consulte Habilitación automática de Unity Catalog.
- Si el área de trabajo se ha habilitado para Unity Catalog manualmente, el catálogo
hive_metastore
se ha establecido como catálogo predeterminado.
Si va a realizar la transición del metastore de Hive a Unity Catalog dentro de un área de trabajo existente, normalmente tiene sentido usar hive_metastore
como catálogo predeterminado para evitar que afecte al código existente que hace referencia al metastore de Hive.
Para obtener información sobre cómo obtener y cambiar el catálogo predeterminado, consulte Administración del catálogo predeterminado.
Permisos de acceso a datos con ámbito de clúster
Cuando se usa el metastore de Hive junto con Unity Catalog, las credenciales de acceso de datos asociadas con el clúster se usan para acceder a los datos del metastore de Hive, pero no a los datos registrados en Unity Catalog.
Si los usuarios acceden a las rutas de acceso que están fuera de Unity Catalog (por ejemplo, una ruta de acceso no registrada como una tabla o una ubicación externa), se usan las credenciales de acceso asignadas al clúster.
Consulte Conectar a Azure Data Lake Storage Gen2 y Blob Storage
Actualización de tablas heredadas a Unity Catalog
Las tablas del metastore de Hive no se benefician del conjunto completo de características de seguridad y gobernanza que introduce Unity Catalog, como la auditoría y el control de acceso integrados. Databricks recomienda actualizar las tablas heredadas mediante su adición a Unity Catalog.