다음을 통해 공유


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

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

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

  • Snowflake 데이터베이스에 대한 연결입니다.
  • Unity 카탈로그 쿼리 구문과 데이터 거버넌스 도구를 사용하여 Azure Databricks 사용자의 데이터베이스 접근을 관리할 수 있도록 Unity 카탈로그 내에서 Snowflake 데이터베이스를 미러링하는 외부 카탈로그입니다.

시작하기 전에

작업 영역 요구 사항

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

컴퓨팅 요구 사항:

  • 컴퓨팅 리소스에서 대상 데이터베이스 시스템으로의 네트워크 연결 Lakehouse Federation에 대한 네트워킹 권장 사항을 참조하세요.
  • Azure Databricks 컴퓨팅은 Databricks Runtime 13.3 LTS 이상을 사용하며, 공유 또는 단일 사용자 액세스 모드를 사용해야 합니다.
  • SQL 웨어하우스는 프로 또는 서버리스여야 하며 2023.40 이상을 사용해야 합니다.

권한 필요:

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

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

  • OAuth를 사용하여 인증하려는 경우 Snowflake 콘솔에서 보안 통합을 만듭니다.
  • OAuth 액세스 토큰을 사용하여 인증하려는 경우 액세스 토큰도 요청해야 합니다.

(선택 사항) Snowflake 콘솔에서 보안 통합 만들기

OAuth를 사용하여 인증하려면 Snowflake 연결을 만들기 전에 이 단계를 수행합니다. 대신 사용자 이름과 암호를 사용하여 인증하려면 이 섹션을 건너뜁니다.

참고 항목

Snowflake의 기본 제공 OAuth 통합만 지원됩니다. Okta 또는 Microsoft Entra ID와 같은 외부 OAuth 통합은 지원되지 않습니다.

Snowflake 콘솔에서 실행 CREATE SECURITY INTEGRATION합니다. 다음 값을 바꿉다.

  • <integration-name>: OAuth 통합의 고유한 이름입니다.

  • <workspace-url>: Azure Databricks 작업 영역 URL입니다. OAUTH_REDIRECT_URIhttps://<workspace-url>/login/oauth/snowflake.html로 설정해야 합니다. 여기서 <workspace-url>는 Snowflake 연결을 만들 Azure Databricks 작업 영역의 고유 URL입니다.

  • <duration-in-seconds>: 새로 고침 토큰의 시간 길이입니다.

    Important

    OAUTH_REFRESH_TOKEN_VALIDITY 기본적으로 90일로 설정된 사용자 지정 필드입니다. 새로 고침 토큰이 만료되면 연결을 다시 인증해야 합니다. 필드를 적절한 시간 길이로 설정합니다.

CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;

(선택 사항) OAuth 액세스 토큰 요청

방법: Snowflake 기술 자료에서 사용자 지정 클라이언트를 위해 Snowflake OAuth를 사용하여 OAuth 토큰을 생성하고 사용하는 방법을 에서 따라 하세요.

연결 만들기

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

참고 항목

Databricks REST API 또는 Databricks CLI를 사용하여 연결을 만들 수도 있습니다. POST /api/2.1/unity-catalog/connectionsUnity Catalog 명령을 참조하십시오.

필요한 권한: 메타스토어 관리자 또는 CREATE CONNECTION 권한이 있는 사용자.

카탈로그 탐색기

  1. Azure Databricks 작업 영역에서 카탈로그 아이콘을 클릭합니다.

  2. 카탈로그 창 위쪽에서 추가 또는 더하기 아이콘 추가 아이콘을 클릭하고 메뉴에서 연결 추가를 선택합니다.

    또는 빠른 액세스 페이지에서 외부 데이터 > 단추를 클릭하고 연결 탭으로 이동한 다음 연결만들기를 클릭합니다.

  3. 연결 설정 마법사의 연결 기본 페이지에서 사용자에게 친숙한 연결 이름를 입력합니다.

  4. 연결 유형Snowflake을 선택하세요.

  5. 인증 유형경우 드롭다운 메뉴에서 Username and password(기본 인증), OAuth access token, PEM Private Key또는 OAuth 선택합니다.

  6. (선택 사항) 주석을 입력합니다.

  7. 다음클릭합니다.

  8. Snowflake 웨어하우스에 대한 다음 인증 및 연결 세부 정보를 입력합니다. 선택한 인증 방법과 관련된 속성 앞에는 Auth type 괄호로 표시됩니다.

    • 호스트: 예를 들면 다음과 같습니다. snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • 포트: 예를 들면 다음과 같습니다. 443

    • 사용자: 예를 들면 다음과 같습니다. snowflake-user

    • (기본 인증) 암호: 예를 들어 password123

    • (OAuth 액세스 토큰) 액세스 토큰: 액세스 토큰(선택 사항) OAuth 액세스 토큰요청합니다.

    • (OAuth 액세스 토큰) 만료(초): 액세스 토큰에 대한 만료 시간(초) (선택 사항) OAuth 액세스 토큰 요청(expires_in).

    • (OAuth) 클라이언트 ID: Snowflake 콘솔에서 SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') 실행하여 보안 통합에 대한 클라이언트 ID를 검색합니다.

    • (OAuth) 클라이언트 비밀: Snowflake 콘솔에서 SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') 실행하여 보안 통합에 대한 클라이언트 비밀을 검색합니다.

    • (OAuth) OAuth 범위: refresh_token session:role:<role-name>. 에서 사용할 Snowflake 역할을 지정합니다 <role-name>.

    • (OAuth) Snowflake로그인: 클릭하고 OAuth 자격 증명을 사용하여 Snowflake에 로그인합니다.

    • (PEM 프라이빗 키) PEM 프라이빗 키: RSA 키 파의 프라이빗 키(HEX64 형식).

    • (PEM 프라이빗 키) 만료(초): 프라이빗 키로 만든 연결의 만료 시간(초)입니다.

      로그인에 성공하면 연결 설정 마법사로 돌아갑니다.

  9. 을 클릭하여 연결을 만듭니다.

  10. (기본 인증) 연결 세부 정보 페이지에서 다음을 지정합니다.

    • 눈송이 창고: 예를 들면 다음과 같습니다. my-snowflake-warehouse
    • (선택 사항) 프록시 호스트: Snowflake에 연결하는 데 사용되는 프록시의 호스트입니다. 또한 프록시 사용을 선택하고 프록시 포트를 지정해야 합니다.
    • (선택 사항) 프록시사용: 프록시 서버를 사용하여 Snowflake에 연결할지 여부입니다.
    • (선택 사항) 프록시 포트: Snowflake에 연결하는 데 사용되는 프록시의 포트입니다. 또한 프록시 사용을 선택하고 프록시 호스트를 지정해야 합니다.
    • (선택 사항) Snowflake 역할: 연결 후 세션에 사용할 기본 보안 역할입니다.
  11. 다음클릭합니다.

  12. 카탈로그 기본 페이지에서 외부 카탈로그의 이름을 입력합니다. 외부 카탈로그는 외부 데이터 시스템의 데이터베이스를 미러링하므로 Azure Databricks 및 Unity 카탈로그를 사용하여 해당 데이터베이스의 데이터에 대한 액세스를 쿼리하고 관리할 수 있습니다.

  13. (선택 사항) 연결 테스트를 클릭하여 작동하는지 확인합니다.

  14. 카탈로그만들기를 클릭합니다.

  15. Access 페이지에서 사용자가 만든 카탈로그에 액세스할 수 있는 작업 영역을 선택합니다. 모든 작업 영역에 액세스선택하거나 작업 영역할당을 클릭하고 작업 영역을 선택한 다음 할당을 클릭합니다.

  16. 카탈로그의 모든 개체에 대한 액세스를 관리할 수 있는 소유자 변경합니다. 텍스트 상자에 주체를 입력한 다음 반환된 결과에서 해당 주체를 클릭합니다.

  17. 카탈로그에 권한 부여합니다. 부여를 클릭합니다.

    1. 카탈로그의 개체에 액세스할 수 있는 주체을 지정합니다. 텍스트 상자에 주체를 입력한 다음 반환된 결과에서 해당 주체를 클릭합니다.
    2. 각 주요 인물에게 부여할 권한 사전 설정을 선택합니다. 모든 계정 사용자에게는 기본적으로 BROWSE 부여됩니다.
      • 드롭다운 메뉴에서 데이터 판독기 선택하여 카탈로그의 개체에 read 권한을 부여합니다.
      • 드롭다운 메뉴에서 데이터 편집기 선택하여 카탈로그의 개체에 readmodify 권한을 부여합니다.
      • 부여할 권한을 수동으로 선택합니다.
    3. 부여를 클릭합니다.
  18. 다음클릭합니다.

  19. 메타데이터 페이지에서 태그의 키-값 쌍을 설정합니다. 자세한 내용은 Unity Catalog 보안 개체에 태그 적용 을 참조하세요.

  20. (선택 사항) 주석을 입력합니다.

  21. 저장을 클릭합니다.

SQL

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

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

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

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

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

외국 카탈로그 만들기

참고 항목

UI를 사용하여 데이터 원본에 대한 연결을 만드는 경우 외세의 카탈로그 만들기가 포함되며 이 단계를 건너뛸 수 있습니다.

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

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

Databricks REST API 또는 Databricks CLI를 사용하여 카탈로그를 만들 수도 있습니다. POST /api/2.1/unity-catalog/catalogsUnity 카탈로그 명령를 참조하십시오.

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

카탈로그 탐색기

  1. Azure Databricks 워크스페이스에서 카탈로그 아이콘을 클릭하여 카탈로그 탐색기를 엽니다.

  2. 카탈로그 창 위쪽에서 추가 또는 더하기 아이콘 추가 아이콘을 클릭하고 메뉴에서 카탈로그 추가를 선택합니다.

    또는 빠른 액세스 페이지에서 카탈로그 단추를 클릭한 다음 카탈로그 만들기 단추를 클릭합니다.

  3. 카탈로그 만들기에서 외국 카탈로그를 만드는 지침을 따르세요.

SQL

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

  • <catalog-name>: Azure Databricks에서 카탈로그의 이름입니다.
  • <connection-name>: 데이터 원본, 경로 및 액세스 자격 증명을 지정하는 연결 개체.
  • <database-name>: Azure Databricks에서 카탈로그로 미러링하려는 데이터베이스의 이름입니다.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

대/소문자를 구분하는 데이터베이스 식별자

외부 카탈로그의 database 필드는 Snowflake 데이터베이스 식별자에 연결됩니다. Snowflake 데이터베이스 식별자가 대/소문자를 구분하지 않으면 외부 카탈로그 <database-name>의 대/소문자 사용이 그대로 유지됩니다. 그러나 Snowflake 데이터베이스 식별자가 대/소문자를 구분하는 경우 대/소문자를 유지하려면 외부 카탈로그 <database-name>를 큰따옴표로 감싸야 합니다.

예시:

  • database 가 변환되는 경우 DATABASE

  • "database" 가 변환되는 경우 database

  • "database""" 가 변환되는 경우 database"

    큰따옴표를 이스케이프하려면 다른 큰따옴표를 사용합니다.

  • "database"" 큰따옴표가 올바르게 이스케이프되지 않아 오류가 발생합니다.

자세한 내용은 Snowflake 설명서의 식별자 요구 사항을 참조하세요.

지원되는 푸시다운

지원되는 푸시다운은 다음과 같습니다.

  • 필터
  • 프로젝션
  • 한계
  • 조인
  • 집계(Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
  • 함수(문자열 함수, 수학 함수, 데이터, 시간 및 타임스탬프 함수 및 별칭, 캐스트, SortOrder와 같은 기타 함수)
  • Windows 함수(DenseRank, Rank, RowNumber)
  • 정렬

데이터 형식 매핑

Snowflake에서 Spark로 읽을 때 데이터 형식은 다음과 같이 매핑됩니다.

눈송이 유형 Spark 형식
decimal, number, numeric 데시말타입
bigint, byteint, int, integer, smallint, tinyint 인터저타입
float, float4, float8 플롯타입
double, double precision, real 더블타입
char, character, string, text, time, varchar StringType
binary BinaryType
부울 값 BooleanType
date DateType
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

OAuth 제한 사항

OAuth 지원 제한 사항은 다음과 같습니다.

  • Snowflake OAuth 엔드포인트는 Databricks 컨트롤 플레인 IP에서 액세스할 수 있어야 합니다. Azure Databricks 컨트롤 플레인에서 아웃바운드를 참조 하세요. Snowflake는 보안 통합 수준에서 네트워크 정책 구성을 지원하며, 이를 통해 권한 부여를 위해 Databricks 컨트롤 플레인에서 OAuth 엔드포인트로 직접 연결할 수 있는 별도의 네트워크 정책을 사용할 수 있습니다.
  • 프록시, 프록시 호스트, 프록시 포트 및 Snowflake 역할 구성 옵션은 사용할 수 없습니다. OAuth 범위의 일부로 Snowflake 역할을 지정합니다.

PEM 프라이빗 키 제한 사항

PEM 프라이빗 키 지원 제한 사항은 다음과 같습니다.

  • Snowflake JDBC 드라이버는 암호화된 프라이빗 키로 인증을 지원하지 않습니다. 오류를 방지하려면 다음과 같이 -nocrypt 옵션이 추가된 키를 생성합니다.

    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    

추가 리소스

Snowflake 설명서에서 다음 문서를 참조하세요.