Udostępnij za pośrednictwem


Uruchamianie zapytań federacyjnych w usłudze Snowflake (OAuth)

Na tej stronie opisano sposób konfigurowania federacji lakehouse w celu uruchamiania zapytań federacyjnych na danych usługi Snowflake, które nie są zarządzane przez usługę Azure Databricks. Aby dowiedzieć się więcej o federacji Lakehouse, zobacz Co to jest Federacja Lakehouse?

Aby połączyć się z bazą danych Snowflake przy użyciu Lakehouse Federation, należy utworzyć następujące elementy w metastore Unity Catalog w Azure Databricks:

  • Połączenie z bazą danych Snowflake.
  • katalog zagraniczny, który odzwierciedla bazę danych Snowflake w Unity Catalog, dzięki czemu można użyć składni zapytań Unity Catalog i narzędzi do zarządzania ładem danych, aby zarządzać dostępem użytkowników usługi Azure Databricks do bazy danych.

Na tej stronie opisano nawiązywanie połączenia z usługą Snowflake przy użyciu wbudowanej integracji OAuth Snowflake. Inne metody uwierzytelniania można znaleźć na następujących stronach:

Zapytania federacyjne można uruchamiać w usłudze Snowflake przy użyciu federacji bazy danych lub federacji katalogu. Zobacz Federacja katalogów.

W architekturze federacji baz danych JDBC przekazuje zapytanie Unity Catalog do zewnętrznej bazy danych. Jest to idealne rozwiązanie do raportowania ad hoc lub prac nad dowodem koncepcji w Twoich potokach ETL.

W federacji katalogów zapytanie Unity Catalog jest uruchamiane bezpośrednio do magazynu plików. Takie podejście jest przydatne jako długoterminowy model hybrydowy lub do migracji przyrostowej bez potrzeby dostosowywania kodu dla organizacji, które muszą przechowywać niektóre dane w usłudze Snowflake wraz z danymi zarejestrowanymi w jednolitym katalogu Unity.

Federacja bazy danych

Przed rozpoczęciem

Wymagania dotyczące obszaru roboczego:

  • Obszar roboczy włączony dla Unity Catalog.

Wymagania dotyczące obliczeń:

  • Łączność sieciowa od zasobu obliczeniowego do docelowych systemów baz danych. Zobacz Zalecenia dotyczące sieci dla usługi Lakehouse Federation.
  • Środowisko obliczeniowe usługi Azure Databricks musi używać środowiska Databricks Runtime 13.3 LTS lub nowszego oraz standardowego trybu dostępu lub dedykowanego trybu dostępu .
  • Magazyny SQL muszą być w wersji pro lub bezserwerowej i muszą używać wersji 2023.40 lub nowszej.

Wymagane uprawnienia:

  • Aby utworzyć połączenie, musisz być administratorem metastore Unity Catalog lub użytkownikiem z uprawnieniami CREATE CONNECTION w metastore przypisanym do obszaru roboczego.
  • Aby utworzyć katalog zagraniczny, musisz mieć uprawnienie CREATE CATALOG w metastore i być właścicielem połączenia lub mieć uprawnienia CREATE FOREIGN CATALOG dla połączenia.

Dodatkowe wymagania dotyczące uprawnień są określone w każdej sekcji dotyczącej zadań, która następuje.

Tworzenie integracji zabezpieczeń

W konsoli Snowflake uruchom polecenie CREATE SECURITY INTEGRATION. Zastąp następujące wartości:

  • <integration-name>: unikatowa nazwa integracji protokołu OAuth.

  • <workspace-url>: adres URL obszaru roboczego usługi Azure Databricks. Należy ustawić OAUTH_REDIRECT_URI na wartość https://<workspace-url>/login/oauth/snowflake.html, gdzie <workspace-url> jest unikatowym adresem URL obszaru roboczego usługi Azure Databricks, w którym zostanie utworzone połączenie Snowflake.

  • <duration-in-seconds>: czas odświeżania tokenów.

    Ważne

    OAUTH_REFRESH_TOKEN_VALIDITY jest domyślnie polem niestandardowym ustawionym na 90 dni. Po wygaśnięciu tokenu odświeżania należy ponownie uwierzytelnić połączenie. Ustaw pole na rozsądną długość czasu.

Na przykład:

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;

Tworzenie połączenia

Połączenie określa ścieżkę i poświadczenia dostępu do zewnętrznego systemu bazodanowego. Aby utworzyć połączenie, możesz użyć Eksploratora wykazu lub polecenia CREATE CONNECTION SQL w notesie usługi Azure Databricks lub edytorze zapytań SQL usługi Databricks.

Uwaga

Do utworzenia połączenia można również użyć interfejsu API REST usługi Databricks lub interfejsu wiersza polecenia usługi Databricks. Zobacz POST /api/2.1/unity-catalog/connections i polecenia Unity Catalog.

Wymagane uprawnienia: administrator magazynu metadanych lub użytkownik z uprawnieniami CREATE CONNECTION .

  1. W obszarze roboczym usługi Azure Databricks kliknij ikonę Dane.Wykaz.

  2. Na górze okienka Katalog kliknij ikonę Dodaj lub plusDodaj i wybierz pozycję Dodaj połączenie z menu.

    Alternatywnie, na stronie Szybki dostęp kliknij przycisk Zewnętrzne dane >, przejdź do karty Połączenia, a następnie kliknij przycisk Utwórz połączenie.

  3. Na stronie Podstawy połączenia w kreatorze Konfigurowanie połączenia, wprowadź nazwę połączenia przyjazną dla użytkownika .

  4. Wybierz typ połączenia dla Snowflake.

  5. W polu Typ uwierzytelniania wybierz OAuth z menu rozwijanego.

  6. (Opcjonalnie) Dodaj komentarz.

  7. Kliknij przycisk Dalej.

  8. Wprowadź następujące szczegóły uwierzytelniania i połączenia dla magazynu Snowflake.

    • Host: na przykład snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • Port: na przykład 443

    • Użytkownik: na przykład snowflake-user

    • Identyfikator klienta: w konsoli snowflake uruchom polecenie SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') , aby pobrać identyfikator klienta na potrzeby integracji zabezpieczeń.

    • Klucz tajny klienta: w konsoli usługi Snowflake uruchom polecenie SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') , aby pobrać klucz tajny klienta na potrzeby integracji zabezpieczeń.

    • Zakres OAuth: refresh_token session:role:<role-name>. Określ rolę Snowflake do użycia w <role-name>.

    • Zaloguj się przy użyciu usługi Snowflake: kliknij i zaloguj się do aplikacji Snowflake przy użyciu poświadczeń protokołu OAuth.

      Po pomyślnym zalogowaniu zostaniesz ponownie skierowany do kreatora Konfigurowania połączenia.

  9. Kliknij pozycję Utwórz połączenie.

  10. Na stronie Podstawy katalogu wprowadź nazwę katalogu obcego. Wykaz obcy odzwierciedla bazę danych w zewnętrznym systemie danych, dzięki czemu można wykonywać zapytania o dostęp do danych w tej bazie danych i zarządzać nimi przy użyciu usług Azure Databricks i Unity Catalog.

  11. (Opcjonalnie) Kliknij pozycję Testuj połączenie , aby potwierdzić, że działa.

  12. Kliknij Utwórz katalog.

  13. Na stronie Access wybierz obszary robocze, w których użytkownicy mogą uzyskiwać dostęp do utworzonego katalogu. Możesz wybrać opcję Wszystkie obszary robocze mają dostęplub kliknij Przypisać do obszarów roboczych, wybierz obszary robocze, a następnie kliknij Przypisz.

  14. Zmień właściciela , który będzie mógł zarządzać dostępem do wszystkich obiektów w katalogu. Zacznij wpisywać nazwę w polu tekstowym, a następnie kliknij element w wynikach wyszukiwania.

  15. Przyznaj uprawnienia do katalogu. Kliknij Zezwól:

    1. Określ podmioty, które będą miały dostęp do obiektów w katalogu. Zacznij wpisywać nazwę w polu tekstowym, a następnie kliknij element w wynikach wyszukiwania.
    2. Wybierz ustawienia wstępne przywilejów, aby przyznać każdemu podmiotowi. Wszyscy użytkownicy konta domyślnie otrzymują BROWSE.
      • Wybierz Czytnik danych z menu rozwijanego, aby nadać read uprawnienia do obiektów w katalogu.
      • Wybierz pozycję Edytor danych z menu rozwijanego, aby przyznać read i modify uprawnienia do obiektów w wykazie.
      • Ręcznie wybierz uprawnienia do udzielenia.
    3. Kliknij przycisk Przyznaj.
  16. Kliknij przycisk Dalej.

  17. Na stronie Metadane określ pary klucz-wartość dla tagów. Aby uzyskać więcej informacji, zobacz Zastosuj tagi do obiektów zabezpieczalnych w Unity Catalog.

  18. (Opcjonalnie) Dodaj komentarz.

  19. Kliknij Zapisz.

Identyfikatory bazy danych z uwzględnieniem wielkości liter

Pole database z katalogu obcego jest mapowane na identyfikator bazy danych Snowflake. Jeśli identyfikator bazy danych Snowflake nie jest wrażliwy na wielkość liter, wielkość liter używana w wykazie obcym <database-name> zostanie zachowana. Jeśli jednak identyfikator bazy danych Snowflake jest wrażliwy na wielkość liter, należy umieścić katalog obcy <database-name> w podwójnych cudzysłowach, aby zachować wielkość liter.

Na przykład:

  • database jest konwertowany na DATABASE

  • "database" jest konwertowany na database

  • "database""" jest konwertowany na database"

    Aby uniknąć podwójnego cudzysłowu, użyj innego podwójnego cudzysłowu.

  • "database"" powoduje błąd, ponieważ podwójny cudzysłów nie jest poprawnie zabezpieczony.

Aby uzyskać więcej informacji, zobacz wymagania dotyczące identyfikatora w dokumentacji usługi Snowflake.

Obsługiwane wypychania

Obsługiwane są następujące mechanizmy obniżania poziomu:

  • Filtry
  • Projekcje
  • Ograniczenie
  • Połączenia
  • Agregacje (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
  • Funkcje (funkcje ciągów, funkcje matematyczne, dane, czas i znacznik czasu oraz inne różne funkcje, takie jak Alias, Cast, SortOrder)
  • Funkcje systemu Windows (DenseRank, Rank, RowNumber)
  • Sortowanie

Mapowanie typu danych

Podczas odczytywania danych z usługi Snowflake do platformy Spark, typy danych są mapowane w następujący sposób:

Typ płatka śniegu Typ Spark
dziesiętne, liczba, numeryczny Typ dziesiętny
bigint, byteint, int, integer, smallint, tinyint Typ Integer
float (zmienna zmiennoprzecinkowa), float4, float8 FloatType
podwójna, podwójna precyzja, rzeczywista PodwójnyTyp
znak, znak, ciąg, tekst, czas, varchar TypCiągu
binarny Typ binarny
typ logiczny (boolowski) Typ boolowski
data Typ daty
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz Typ Znacznika Czasu

Ograniczenia federacji bazy danych

  • Punkt końcowy usługi Snowflake OAuth musi być dostępny z adresów IP płaszczyzny sterowania usługi Azure Databricks. Zobacz Wychodzące z płaszczyzny sterowania Azure Databricks. Rozwiązanie Snowflake obsługuje konfigurowanie zasad sieciowych na poziomie integracji zabezpieczeń, co umożliwia korzystanie z oddzielnych zasad sieciowych, które umożliwiają bezpośrednią łączność z płaszczyzny sterowania usługi Azure Databricks do punktu końcowego OAuth na potrzeby autoryzacji.
  • Opcje konfiguracji "Użyj serwera proxy," "Host serwera proxy," "Port serwera proxy" oraz roli Snowflake nie są obsługiwane. Określ rolę Snowflake w ramach zakresu OAuth.

Federacja katalogów

Zanim rozpoczniesz

Aby uruchamiać zapytania federacyjne w usłudze Snowflake przy użyciu federacji katalogu, należy spełnić następujące wymagania:

Wymagania dotyczące obszaru roboczego:

  • Obszar roboczy włączony dla Unity Catalog.

Wymagania dotyczące obliczeń:

  • Łączność sieciowa od zasobu obliczeniowego do docelowych systemów baz danych. Zobacz Zalecenia dotyczące sieci dla usługi Lakehouse Federation.
  • Środowisko obliczeniowe usługi Azure Databricks musi używać środowiska Databricks Runtime 13.3 LTS lub nowszego oraz standardowego trybu dostępu lub dedykowanego trybu dostępu .
  • Magazyny SQL muszą być w wersji pro lub bezserwerowej i muszą używać wersji 2023.40 lub nowszej.

Wymagane uprawnienia:

  • Aby utworzyć połączenie, musisz być administratorem metastore Unity Catalog lub użytkownikiem z uprawnieniami CREATE CONNECTION w metastore przypisanym do obszaru roboczego.
  • Aby utworzyć katalog zagraniczny, musisz mieć uprawnienie CREATE CATALOG w metastore i być właścicielem połączenia lub mieć uprawnienia CREATE FOREIGN CATALOG dla połączenia.

Dodatkowe wymagania dotyczące uprawnień są określone w każdej sekcji dotyczącej zadań, która następuje.

  • Użyj środowiska Databricks Runtime 16.4 LTS lub nowszego lub usługi Databricks SQL.

Konfigurowanie federacji katalogu

Kroki konfigurowania federacji katalogu są podobne do konfigurowania federacji bazy danych. Należy jednak również utworzyć dane uwierzytelniające do magazynu i lokalizację zewnętrzną dla ścieżek do tabel Apache Iceberg rejestrowanych w usłudze Snowflake.

  1. Utwórz lokalizację zewnętrzną dla tabel Iceberg.

    Należy skonfigurować lokalizację zewnętrzną w katalogu Unity, aby zarządzać dostępem do lokalizacji magazynu w chmurze, które przechowują tabele Iceberg zarejestrowane w bazie danych Snowflake. Lokalizacje zewnętrzne to obiekty podlegające zabezpieczeniu w katalogu Unity, które łączą poświadczenia magazynu z kontenerami w chmurze. Zobacz Poświadczenia magazynu i lokalizacje zewnętrzne.

    Lokalizację zewnętrzną można utworzyć przy użyciu następujących interfejsów:

    • SQL
    • Eksplorator wykazu

    Lokalizacja zewnętrzna zostanie określona jako autoryzowana ścieżka podczas konfiguracji katalogu zewnętrznego.

  2. Utwórz połączenie z katalogiem Snowflake Horizon i utwórz wykaz obcy. Należy określić lokalizację w magazynie w chmurze, w której metadane będą przechowywane dla tabel Iceberg w tym katalogu.

    Skonfigurowanie lokalizacji przechowywania w katalogu umożliwia odczytywanie tabel Iceberg w zagranicznym katalogu za pośrednictwem przechowywania obiektów. Odczytywanie lub zapisywanie w tabelach Iceberg za pośrednictwem protokołu JDBC nie będzie już dostępne (nie będzie to miało wpływu na tabele nie-Iceberg).

    Należy również dodać autoryzowane ścieżki, ścieżki magazynu w chmurze, do których można uzyskać dostęp za pośrednictwem katalogu. Tylko tabele znajdujące się pod tymi ścieżkami można poddawać zapytaniom w katalogu federacyjnym. Ścieżki muszą być objęte lokalizacjami zewnętrznymi.

Ograniczenia federacji katalogu

Uruchamianie zapytań federacyjnych w usłudze Snowflake przy użyciu federacji katalogu ma następujące ograniczenia:

  • Niektóre tabele góry lodowej można odczytywać tylko przy użyciu federacji bazy danych.
    • Tabele z lokalizacjami niezgodnymi z identyfikatorem URI (zawierającymi znaki specjalne).
    • Tabele z lokalizacją metadanych poza lokalizacją tabeli.
    • Tabele z lokalizacjami, które mają nieobsługiwane schematy (obsługiwane są tylko s3, s3a, s3n, abfs, abfss, gs, r2, wasb i wasbs).
  • Tabele o identycznych nazwach, ignorując wielkość liter, konfliktują. Pierwsza tabela do załadowania to ta, która zostanie wyświetlona.
  • W przypadku platformy Azure tabele Snowflake Iceberg nie mogą znajdować się w lokalizacji głównej kontenera.

Zobacz Ograniczenia tabeli góry lodowej dotyczące ograniczeń związanych z górami lodowymi.

Określanie, czy zagraniczna tabela Snowflake używa katalogu lub federacji bazy danych

Obce tabele Snowflake, odczytane korzystając z federacji katalogów, będą wyświetlać format źródła Iceberg w eksploratorze katalogu. Tabele Iceberg odczytane przy użyciu federacji bazy danych będą wyświetlać format źródłowy Snowflake w eksploratorze katalogu.

Federacyjne katalogi Snowflake mogą zawierać zarówno wbudowane tabele Snowflake, jak i tabele Iceberg. Zapytania są wykonywane na tabelach w obu formatach magazynowania będą wykonywane przy użyciu federacji baz danych, która korzysta z usług obliczeniowych Snowflake.

Dodatkowe zasoby

Zapoznaj się z następującymi artykułami w dokumentacji usługi Snowflake: