Unity 카탈로그 및 레거시 Hive 메타스토어 작업

이 문서에서는 Azure Databricks 작업 영역이 Unity 카탈로그에 사용하도록 설정된 경우 작업 영역별 Hive 메타스토어를 사용하는 방법을 설명합니다.

Unity 카탈로그에 사용하도록 설정하기 전에 작업 영역이 서비스 중이면 계속 사용하려는 데이터가 포함된 Hive 메타스토어가 있는 것일 수 있습니다. Hive 메타스토어에서 관리하는 테이블을 Unity 카탈로그 메타스토어로 마이그레이션하는 것이 좋지만, 마이그레이션하지 않는 경우에는 이 문서에서 설명하는 두 메타스토어에서 관리하는 데이터로 작업하는 방법을 참조하세요.

Unity 카탈로그에서 Hive 메타스토어 쿼리

Unity 카탈로그 메타스토어는 가산적입니다. 즉, Azure Databricks의 작업 영역별 Hive 메타스토어와 함께 사용할 수 있습니다. Hive 메타스토어는 3개 수준 네임스페이스에서 hive_metastore를 호출하는 최상위 카탈로그로 나타납니다.

예를 들어 다음 표기법을 사용하여 레거시 Hive 메타스토어의 sales 스키마에서 sales_raw를 호출한 테이블을 참조할 수 있습니다.

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"))

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"))

Unity 카탈로그 및 Hive 메타스토어에서의 액세스 제어

Hive 메타스토어에서 테이블 액세스 제어를 구성한 경우 Databricks는 공유 액세스 모드에서 실행되는 클러스터에 대해 hive_metastore 카탈로그의 데이터에 대한 액세스 제어를 계속 적용합니다. Unity 카탈로그 액세스 모델은 DENY 문이 없는 것과 같이 레거시 액세스 제어와 약간 다릅니다. Hive 메타스토어는 작업 영역 수준 개체입니다. hive_metastore 카탈로그 내에 정의된 사용 권한은 항상 작업 영역의 로컬 사용자 및 그룹을 참조합니다. 테이블 액세스 제어의 차이점을 참조하세요.

테이블 액세스 제어의 차이점

Unity 카탈로그는 각 작업 영역의 레거시 Hive 메타스토어에서 테이블 액세스 제어를 사용하는 경우와 다음과 같은 주요 차이점이 있습니다.

Unity 카탈로그의 액세스 제어 모델에는 테이블 액세스 제어와 다음과 같은 차이점이 있습니다.

  • 계정 그룹: Unity 카탈로그의 액세스 제어 정책은 계정 그룹에 적용되며, Hive 메타스토어에 대한 액세스 제어 정책은 작업 영역 로컬 그룹에 적용됩니다. 계정 그룹과 작업 영역 로컬 그룹의 차이점을 참조하세요.
  • USE CATALOGUSE SCHEMA 사용 권한은 카탈로그 및 스키마 내 개체의 모든 작업에 대한 카탈로그 및 스키마에 필요합니다: 테이블에 대한 보안 주체의 권한에 관계없이 보안 주체는 스키마에 액세스하기 위한 부모 카탈로그에 대한 USE CATALOG 권한과 스키마 내의 개체에 액세스할 수 있는 USE SCHEMA 권한도 있어야 합니다. 반면에, 작업 영역 수준의 테이블 액세스 제어를 사용하면서, 루트 카탈로그에 대해 USAGE를 부여하면 모든 데이터베이스에 자동으로 USAGE가 부여되지만 USAGE는 루트 카탈로그에 필요하지 않습니다.
  • : Unity 카탈로그에서 뷰의 소유자는 뷰에서 참조하는 테이블 및 뷰의 소유자가 될 필요가 없습니다. 보기의 부모 스키마에 대한 USE SCHEMA 및 부모 카탈로그에 대한 USE CATALOG와 함께 SELECT 권한이 있으면 충분합니다. 작업 영역 수준의 테이블 액세스 제어를 사용하면 뷰의 소유자가 참조된 모든 테이블 및 뷰의 소유자여야 합니다.
  • 지원 ANY FILE 되지 않거나ANONYMOUS FUNCTION: Unity 카탈로그에는 권한 없는 사용자가 권한 있는 코드를 실행할 수 있는 개념이나 ANONYMOUS FUNCTION 보안 개체의 개념 ANY FILE 이 없습니다.
  • 권한 없음READ_METADATA: Unity 카탈로그는 다른 방식으로 메타데이터를 보기 위한 액세스를 관리합니다. Unity 카탈로그 권한 및 보안 개체를 참조하세요.

Unity 카탈로그와 Hive 메타스토어 개체 간의 조인

3단계 네임스페이스 표기법을 사용하여 Unity 카탈로그 메타스토어의 데이터를 레거시 Hive 메타스토어의 데이터와 조인할 수 있습니다.

참고 항목

레거시 Hive 메타스토어의 데이터와 조인하면 해당 데이터가 있는 작업 영역에서만 작동합니다. 다른 작업 영역에서 이렇게 조인하려고 하면 오류가 발생합니다. Azure Databricks는 레거시 테이블 및 뷰를 Unity 카탈로그로 업그레이드하는 것을 권장합니다.

다음 예제에서는 order_id 필드가 같을 때 레거시 Hive 메타스토어의 sales_current 테이블 결과를 Unity 카탈로그 메타스토어의 sales_historical 테이블과 조인합니다.

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")
))

기본 카탈로그

기본 카탈로그는 Unity 카탈로그에 대해 사용하도록 설정된 각 작업 영역에 대해 구성됩니다.

데이터 작업을 수행할 때 최상위 카탈로그 이름을 생략하면 기본 카탈로그가 사용됩니다.

작업 영역에 대해 처음에 구성된 기본 카탈로그는 Unity 카탈로그에 대해 작업 영역을 사용하도록 설정한 방법에 따라 달라집니다.

  • 작업 영역이 자동으로 Unity 카탈로그 에 사용하도록 설정된 경우 작업 영역 카탈로그 가 기본 카탈로그로 설정되었습니다. Unity 카탈로그 자동 사용을 참조하세요.
  • 작업 영역이 Unity 카탈로그에 대해 수동으로 hive_metastore 사용하도록 설정된 경우 카탈로그가 기본 카탈로그로 설정되었습니다.

기존 작업 영역 내에서 Hive 메타스토어에서 Unity 카탈로그로 전환하는 경우 일반적으로 Hive 메타스토어를 참조하는 기존 코드에 영향을 주지 않도록 기본 카탈로그로 사용하는 hive_metastore 것이 좋습니다.

기본 카탈로그를 가져와서 전환하는 방법을 알아보려면 기본 카탈로그 관리를 참조 하세요.

클러스터 범위 데이터 액세스 권한

Unity 카탈로그와 함께 Hive 메타스토어를 사용하는 경우 클러스터와 연결된 데이터 액세스 자격 증명은 Hive 메타스토어 데이터에 액세스하는 데 사용되지만 Unity 카탈로그에 등록된 데이터는 액세스하지 않습니다.

사용자가 Unity 카탈로그 외부에 있는 경로(예: 테이블 또는 외부 위치로 등록되지 않은 경로)에 액세스하는 경우 클러스터에 할당된 액세스 자격 증명이 사용됩니다.

Azure Data Lake Storage Gen2 및 Blob Storage에 대한 커넥트 참조하세요.

레거시 테이블을 Unity 카탈로그로 업그레이드

Hive 메타스토어의 테이블은 기본 제공 감사 및 액세스 제어 등 Unity 카탈로그에서 도입한 보안 및 거버넌스 기능의 전체 집합을 활용하지 않습니다. Databricks는 레거시 테이블을 Unity 카탈로그에 추가하여 업그레이드하는 것을 권장합니다.