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 y USE 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 privilegio USE CATALOG en su catálogo primario para tener acceso al esquema y el privilegio USE 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 conceder USAGE en el catálogo raíz, se concede USAGE automáticamente en todas las bases de datos, pero USAGE 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 con USE SCHEMA en el esquema primario de las vistas y USE 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 o ANONYMOUS FUNCTION: en Unity Catalog, no hay ningún concepto de ANY FILE ni ANONYMOUS 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.