Udostępnij za pośrednictwem


Uruchamianie zapytań federacyjnych w usłudze Snowflake

W tym artykule 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 nawiązać połączenie z bazą danych Snowflake przy użyciu Lakehouse Federation, należy utworzyć następujące elementy w magazynie 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.

Zanim rozpoczniesz

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 w wersji 13.3 LTS lub nowszej oraz trybu dostępu współdzielonego lub jednoużytkownikowego.
  • 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 Katalogu Jedności lub użytkownikiem z uprawnieniami CREATE CONNECTION w metastore Katalogu Jedności dołączonym do obszaru roboczego.
  • Aby utworzyć wykaz obcy, musisz mieć uprawnienie CREATE CATALOG w metastore i być właścicielem połączenia lub mieć uprawnienia CREATE FOREIGN CATALOG na połączeniu.

Dodatkowe wymagania dotyczące uprawnień są określone w każdej sekcji opartej na zadaniach.

  • Jeśli planujesz uwierzytelnić się przy użyciu protokołu OAuth, utwórz integrację zabezpieczeń w konsoli usługi Snowflake.
  • Jeśli planujesz uwierzytelnienie przy użyciu tokenu dostępu OAuth, musisz również zażądać tokenu dostępu.

(Opcjonalnie) Tworzenie integracji zabezpieczeń w konsoli usługi Snowflake

Jeśli chcesz uwierzytelnić się przy użyciu protokołu OAuth, wykonaj ten krok przed utworzeniem połączenia usługi Snowflake. Aby zamiast tego uwierzytelnić się przy użyciu nazwy użytkownika i hasła, pomiń tę sekcję.

Uwaga

Obsługiwana jest tylko wbudowana integracja protokołu OAuth firmy Snowflake. Zewnętrzne integracje OAuth, takie jak Okta lub Microsoft Entra ID, nie są obsługiwane.

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.

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;

(Opcjonalnie) Żądanie tokenu dostępu OAuth

Postępuj zgodnie z instrukcjami zawartymi w bazie wiedzy Snowflake, dotyczącymi: Jak generować i używać tokenu OAuth przy użyciu OAuth Snowflake dla niestandardowych klientów .

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 .

Eksplorator wykazu

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

  2. W górnej części okienka katalogu kliknij ikonę Dodaj lub plus,Ikona Dodaj 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 kreatora Konfigurowanie połączenia wprowadź przyjazną dla użytkownika nazwę połączenia .

  4. Wybierz typ połączenia dla Snowflake.

  5. W przypadku typu uwierzytelniania wybierz pozycję Username and password (uwierzytelnianie podstawowe), OAuth access token, PEM Private Keylub 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. Właściwości specyficzne dla wybranej metody uwierzytelniania są poprzedzone Auth type w nawiasach.

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

    • Port: na przykład 443

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

    • (Uwierzytelnianie podstawowe) hasło: na przykład password123

    • (Token dostępu OAuth) token dostępu: token dostępu z (opcjonalnie) Żądanie tokenu dostępu OAuth.

    • (Token dostępu OAuth) Wygasa w sekundach: czas wygaśnięcia (w sekundach) tokenu dostępu z (opcjonalnie) Zażądaj tokenu dostępu OAuth (expires_in).

    • (OAuth) identyfikator klienta: W konsoli Snowflake uruchom SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>'), aby pobrać identyfikator klienta dla integracji zabezpieczeń.

    • (OAuth) tajemnica klienta: w konsoli Snowflake uruchom SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>'), aby pobrać tajemnicę klienta na potrzeby integracji zabezpieczeń.

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

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

    • (Klucz prywatny PEM) klucz prywatny PEM: klucz prywatny z pary kluczy RSA w formacie HEX64.

    • (Klucz prywatny PEM) Wygasa w sekundach: czas wygaśnięcia (w sekundach) połączenia z kluczem prywatnym.

      Po pomyślnym zalogowaniu zostaniesz przekierowany z powrotem do kreatora Konfigurowania połączenia.

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

  10. (Uwierzytelnianie podstawowe) Na stronie Szczegóły połączenia określ następujące elementy:

    • Magazyn Snowflake: na przykład my-snowflake-warehouse
    • (Opcjonalnie) host serwera proxy : host serwera proxy używanego do nawiązywania połączenia z usługą Snowflake. Należy również wybrać pozycję Użyj serwera proxy oraz określić port serwera proxy .
    • (Opcjonalnie) Użyj proxy: czy nawiązać połączenie z usługą Snowflake przy użyciu serwera proxy.
    • (Opcjonalnie) port serwera proxy: port serwera proxy używanego do nawiązywania połączenia z usługą Snowflake. Należy również zaznaczyć opcję Użyj serwera proxy i określić serwer proxy.
    • (Opjonalnie) rola Snowflake: domyślna rola zabezpieczeń używana na potrzeby sesji po nawiązaniu połączenia.
  11. Kliknij przycisk Dalej.

  12. 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.

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

  14. Kliknij Utwórz katalog.

  15. 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.

  16. 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.

  17. Przyznaj uprawnienia w 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 użytkownikowi. 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.
  18. Kliknij przycisk Dalej.

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

  20. (Opcjonalnie) Dodaj komentarz.

  21. Kliknij Zapisz.

SQL

Uruchom następujące polecenie w notesie lub edytorze zapytań SQL usługi Databricks.

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

Zalecamy używanie tajnych danych usługi Azure Databricks zamiast ciągów w postaci zwykłego tekstu dla poufnych wartości, takich jak dane uwierzytelniające. Na przykład:

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

Aby uzyskać informacje na temat konfigurowania wpisów tajnych, zobacz Zarządzanie wpisami tajnymi.

Tworzenie wykazu obcego

Uwaga

Jeśli używasz interfejsu użytkownika do utworzenia połączenia ze źródłem danych, tworzenie wykazu obcego zostanie uwzględnione i możesz pominąć ten krok.

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. Aby utworzyć wykaz obcy, należy użyć połączenia ze źródłem danych, które zostało już zdefiniowane.

Aby utworzyć wykaz obcy, możesz użyć Eksploratora wykazu lub polecenia CREATE FOREIGN CATALOG SQL w notesie usługi Azure Databricks lub edytorze zapytań SQL.

Do utworzenia katalogu 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/catalogs i polecenia Katalogu Unity.

Wymagane uprawnienia:CREATE CATALOG uprawnienie do magazynu metadanych i własność połączenia lub CREATE FOREIGN CATALOG uprawnienia do połączenia.

Eksplorator wykazu

  1. W obszarze roboczym usługi Azure Databricks kliknij ikonę Katalogu Katalog, aby otworzyć Eksploratora Katalogu.

  2. W górnej części okienka katalogu kliknij ikonę Dodaj lub plusIkona Dodaj i wybierz Dodaj wykaz z menu.

    Alternatywnie na stronie Szybki dostęp kliknij na przycisk Wykazy, a następnie kliknij na przycisk Utwórz katalog.

  3. Postępuj zgodnie z instrukcjami dotyczącymi tworzenia katalogów obcych w Tworzenie katalogów.

SQL

Uruchom następujące polecenie SQL w notesie lub edytorze zapytań SQL. Elementy w nawiasach kwadratowych są opcjonalne. Zastąp wartości zastępcze

  • <catalog-name>: nazwa wykazu w usłudze Azure Databricks.
  • <connection-name>: obiekt połączenia określający źródło danych, ścieżkę i poświadczenia dostępu.
  • <database-name>: nazwa bazy danych, którą chcesz dublować jako wykaz w usłudze Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Identyfikatory bazy danych z uwzględnieniem wielkości liter

Pole database katalogu obcego mapuje na identyfikator bazy danych Snowflake. Jeśli identyfikator bazy danych Snowflake nie uwzględnia wielkości 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 wystąpienie błędu, ponieważ podwójny cudzysłów nie jest poprawnie uniknięta.

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

Obsługiwane wypychania

Obsługiwane są następujące wypychania:

  • Filtry
  • Projekcje
  • Limit
  • Sprzężenia
  • 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 z usługi Snowflake do platformy Spark typy danych są mapowe w następujący sposób:

Typ płatka śniegu Typ platformy Spark
dziesiętne, liczbowe, liczbowe Typ dziesiętny
bigint, byteint, int, integer, smallint, tinyint Typ liczby całkowitej
float, float4, float8 FloatType
podwójna precyzja, podwójna precyzja, rzeczywista DoubleType
znak, znak, ciąg, tekst, czas, varchar StringType
dane binarne BinaryType
boolean Typ logiczny
data Typ daty
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

Ograniczenia uwierzytelniania OAuth

Poniżej przedstawiono ograniczenia obsługi protokołu OAuth:

  • Punkt końcowy usługi Snowflake OAuth musi być dostępny z adresów IP płaszczyzny sterowania usługi Databricks. Zobacz Wychodzący z płaszczyzny sterowania usługi 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 Databricks do punktu końcowego OAuth na potrzeby autoryzacji.
  • Opcje konfiguracji roli Serwer proxy, Host serwera proxy, Port proxy i Snowflake nie są obsługiwane. Określ rolę Snowflake w ramach zakresu OAuth.

Ograniczenia klucza prywatnego PEM

Poniżej przedstawiono ograniczenia obsługi klucza prywatnego PEM:

  • Sterownik JDBC usługi Snowflake nie obsługuje uwierzytelniania przy użyciu zaszyfrowanych kluczy prywatnych. Aby uniknąć błędów, wygeneruj klucz z dodaną opcją -nocrypt w następujący sposób:

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

Dodatkowe zasoby

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