다음을 통해 공유


MySQL에서 페더레이션 쿼리 실행

Important

이 기능은 공개 미리 보기 상태입니다.

이 문서에서는 Azure Databricks에서 관리되지 않는 MySQL 데이터에 대해 페더레이션된 쿼리를 실행하도록 Lakehouse Federation을 설정하는 방법을 설명합니다. 레이크하우스 페더레이션에 대한 자세한 내용은 레이크하우스 페더레이션이란?

Lakehouse Federation을 사용하여 MySQL 데이터베이스에 연결하려면 Azure Databricks Unity 카탈로그 메타스토어에서 다음을 만들어야 합니다.

  • MySQL 데이터베이스에 대한 연결입니다.
  • Unity 카탈로그 쿼리 구문 및 데이터 거버넌스 도구를 사용하여 데이터베이스에 대한 Azure Databricks 사용자 액세스를 관리할 수 있도록 Unity 카탈로그에 MySQL 데이터베이스를 미러 외국 카탈로그입니다.

시작하기 전에

작업 영역 요구 사항:

  • Unity 카탈로그에 사용할 수 있는 작업 영역입니다.

컴퓨팅 요구 사항:

  • Databricks 런타임 클러스터 또는 SQL 웨어하우스에서 대상 데이터베이스 시스템으로의 네트워크 연결 Lakehouse 페더레이션에 대한 네트워킹 권장 사항을 참조하세요.
  • Azure Databricks 클러스터는 Databricks Runtime 13.3 LTS 이상 및 공유 또는 단일 사용자 액세스 모드를 사용해야 합니다.
  • SQL 웨어하우스는 Pro 또는 서버리스여야 합니다.

필요한 권한은 다음과 같습니다.

  • 연결을 만들려면 메타스토어 관리자이거나 작업 영역에 연결된 Unity 카탈로그 메타스토어에 대한 권한이 있는 사용자 CREATE CONNECTION 여야 합니다.
  • 외세 카탈로그를 만들려면 메타스토어에 대한 권한이 있어야 하며 연결의 소유자이거나 CREATE FOREIGN CATALOG 연결에 대한 권한이 있어야 합니다CREATE CATALOG.

추가 권한 요구 사항은 다음 각 작업 기반 섹션에 지정됩니다.

연결 만들기

연결은 외부 데이터베이스 시스템에 액세스하기 위한 경로 및 자격 증명을 지정합니다. 연결을 만들려면 Azure Databricks Notebook 또는 Databricks SQL 쿼리 편집기에서 카탈로그 탐색기 또는 CREATE CONNECTION SQL 명령을 사용할 수 있습니다.

필요한 권한: Metastore 관리자 또는 권한이 있는 CREATE CONNECTION 사용자입니다.

카탈로그 탐색기

  1. Azure Databricks 작업 영역에서 카탈로그를 클릭합니다카탈로그 아이콘.
  2. 왼쪽 창에서 외부 데이터 메뉴를 확장하고 커넥트 선택합니다.
  3. 연결 만들기를 클릭합니다.
  4. 사용자에게 친숙한 커넥트이온 이름을 입력합니다.
  5. MySQL의 커넥트ion 유형을 선택합니다.
  6. MySQL 인스턴스에 대해 다음 연결 속성을 입력합니다.
    • 호스트: 예를 들면 다음과 같습니다. mysql-demo.lb123.us-west-2.rds.amazonaws.com
    • 포트: 예를 들면 다음과 같습니다. 3306
    • 사용자: 예를 들면 다음과 같습니다. mysql_user
    • 암호: 예를 들면 다음과 같습니다.password123
  7. (선택 사항) 연결 테스트를 클릭하여 작동하는지 확인합니다.
  8. (선택 사항) 메모를 추가합니다.
  9. 만들기를 클릭합니다.

Sql

Notebook 또는 Databricks SQL 쿼리 편집기에서 다음 명령을 실행합니다.

CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

자격 증명과 같은 중요한 값에 일반 텍스트 문자열 대신 Azure Databricks 비밀을 사용하는 것이 좋습니다. 예시:

CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Notebook SQL 명령에서 일반 텍스트 문자열을 사용해야 하는 경우 와 같은 $\특수 문자를 이스케이프하여 문자열을 잘려서는 안 됩니다. 예: \$

비밀 설정에 대한 자세한 내용은 비밀 관리를 참조하세요.

외국 카탈로그 만들기

외부 카탈로그는 외부 데이터 시스템에 데이터베이스를 미러 Azure Databricks 및 Unity 카탈로그를 사용하여 해당 데이터베이스의 데이터에 대한 액세스를 쿼리하고 관리할 수 있도록 합니다. 외국 카탈로그를 만들려면 이미 정의된 데이터 원본에 대한 연결을 사용합니다.

외국 카탈로그를 만들려면 Azure Databricks Notebook 또는 CREATE FOREIGN CATALOG Databricks SQL 쿼리 편집기에서 카탈로그 탐색기 또는 SQL 명령을 사용할 수 있습니다.

필요한 권한:CREATE CATALOG 메타스토어에 대한 권한 및 연결의 소유권 또는 CREATE FOREIGN CATALOG 연결에 대한 권한입니다.

카탈로그 탐색기

  1. Azure Databricks 작업 영역에서 카탈로그를 클릭합니다카탈로그 아이콘.
  2. 카탈로그 만들기 단추를 클릭합니다.
  3. 새 카탈로그 만들기 대화 상자에서 카탈로그의 이름을 입력하고 외세의 유형을선택합니다.
  4. Unity 카탈로그 카탈로그로 미러 데이터베이스에 대한 액세스를 제공하는 커넥트ion을 선택합니다.
  5. 만들기를 클릭합니다.

Sql

Notebook 또는 Databricks SQL 편집기에서 다음 SQL 명령을 실행합니다. 괄호 안의 항목은 선택 사항입니다. 자리 표시자 값을 바꿉니다.

CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;

지원되는 푸시다운

다음 푸시다운은 모든 컴퓨팅에서 지원됩니다.

  • 필터
  • 프로젝션
  • 제한
  • 함수: 부분, 필터 식에만 해당합니다. (문자열 함수, 수학 함수, 데이터, 시간 및 타임스탬프 함수 및 별칭, 캐스트, SortOrder와 같은 기타 함수)

Databricks Runtime 13.3 LTS 이상 및 SQL 웨어하우스에서 지원되는 푸시다운은 다음과 같습니다.

  • 집계
  • 부울 연산자
  • 다음 수학 함수(ANSI가 비활성화된 경우 지원되지 않음): +, -, *, %, /
  • 제한과 함께 사용되는 경우 정렬

다음 푸시다운은 지원되지 않습니다.

  • 조인
  • Windows 함수

데이터 형식 매핑

MySQL에서 Spark로 읽는 경우 데이터 형식은 다음과 같이 매핑됩니다.

MySQL 형식 Spark 유형
bigint(서명되지 않은 경우), 10진수 DecimalType
tinyint*, int, integer, mediumint, smallint IntegerType
bigint(서명된 경우) LongType
float FloatType
double DoubleType
char, enum, set Chartype
varchar VarcharType
json, longtext, mediumtext, text, tinytext StringType
binary, Blob, varbinary, varchar binary BinaryType
bit, boolean BooleanType
date, year DateType
datetime, time, timestamp** TimestampType/TimestampNTZType

tinyint(1) signed 는 부울로 처리되고 .로 BooleanType변환됩니다. mySQL에서 읽을 때 커넥트or/J 참조 *를 참조하세요. (기본값인 경우 preferTimestampNTZ = false ) MySQL Timestamp 이 Spark TimestampType 에 매핑됩니다. MySQL Timestamp 은 ifpreferTimestampNTZ = trueTimestampNTZType 매핑됩니다.