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 usługi Lakehouse Federation, należy utworzyć następujące elementy w magazynie metadanych wykazu aparatu Unity usługi Azure Databricks:
- Połączenie z bazą danych Snowflake.
- Wykaz obcy, który dubluje bazę danych Snowflake w katalogu aparatu Unity, dzięki czemu można użyć składni zapytań wykazu aparatu Unity i narzędzi do zapewniania ładu danych w celu zarządzania dostępem użytkowników usługi Azure Databricks do bazy danych.
Zanim rozpoczniesz
Wymagania dotyczące obszaru roboczego:
- Obszar roboczy włączony dla wykazu aparatu Unity.
Wymagania dotyczące obliczeń:
- Łączność sieciowa z klastra środowiska Databricks Runtime lub usługi SQL Warehouse z docelowymi systemami baz danych. Zobacz Zalecenia dotyczące sieci dla usługi Lakehouse Federation.
- Klastry usługi Azure Databricks muszą używać środowiska Databricks Runtime 13.3 LTS lub nowszego oraz trybu dostępu współużytkowanego lub pojedynczego użytkownika.
- Magazyny SQL muszą mieć wartość Pro lub Bezserwerową i muszą używać wersji 2023.40 lub nowszej.
Wymagane uprawnienia:
- Aby utworzyć połączenie, musisz być administratorem magazynu metadanych lub użytkownikiem z
CREATE CONNECTION
uprawnieniami w magazynie metadanych wykazu aparatu Unity dołączonym do obszaru roboczego. - Aby utworzyć wykaz obcy, musisz mieć
CREATE CATALOG
uprawnienia do magazynu metadanych i być właścicielem połączenia lub miećCREATE FOREIGN CATALOG
uprawnienia do połączenia.
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. Aby uzyskać szczegółowe informacje, zobacz następującą sekcję.
(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 natywna integracja protokołu OAuth z natywną usługą 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 zmiennych:
<integration-name>
: unikatowa nazwa integracji protokołu OAuth.<workspace-url>
: adres URL obszaru roboczego usługi Azure Databricks. Musisz ustawić wartośćOAUTH_REDIRECT_URI
https://<workspace-url>/login/oauth/snowflake.html
, gdzie<workspace-url>
jest unikatowym adresem URL obszaru roboczego usługi Azure Databricks, w którym utworzysz połączenie snowflake.<duration-in-seconds>
: czas odświeżania tokenów.Ważne
OAUTH_REFRESH_TOKEN_VALIDITY
to pole niestandardowe, które jest domyślnie ustawione 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;
Tworzenie połączenia
Połączenie określa ścieżkę i poświadczenia dostępu do zewnętrznego systemu bazy danych. Aby utworzyć połączenie, możesz użyć Eksploratora wykazu lub CREATE CONNECTION
polecenia 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 POLECENIA POST /api/2.1/unity-catalog/connections i Unity Catalog.
Wymagane uprawnienia: administrator magazynu metadanych lub użytkownik z uprawnieniami CREATE CONNECTION
.
Eksplorator wykazu
W obszarze roboczym usługi Azure Databricks kliknij pozycję Wykaz.
W górnej części okienka Wykaz kliknij ikonę Dodaj i wybierz pozycję Dodaj połączenie z menu.
Alternatywnie na stronie Szybki dostęp kliknij przycisk Dane >zewnętrzne, przejdź do karty Połączenia, a następnie kliknij pozycję Utwórz połączenie.
Wprowadź przyjazną dla użytkownika nazwę połączenia.
Wybierz typ połączenia snowflake.
Wprowadź następujące właściwości połączenia dla magazynu Snowflake.
- Typ uwierzytelniania:
OAuth
lubUsername and password
- Host: na przykład
snowflake-demo.east-us-2.azure.snowflakecomputing.com
- Port: na przykład
443
- Magazyn Snowflake: na przykład
my-snowflake-warehouse
- Użytkownik: na przykład
snowflake-user
- (OAuth) Identyfikator klienta: w konsoli usługi Snowflake uruchom polecenie
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>')
, aby pobrać identyfikator klienta na potrzeby integracji zabezpieczeń. - (OAuth): 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ń. - (OAuth) Zakres klienta:
refresh_token session:role:<role-name>
. Określ rolę Snowflake do użycia w pliku<role-name>
. - (Nazwa użytkownika i hasło) Hasło: na przykład
password123
(OAuth) Zostanie wyświetlony monit o zalogowanie się do aplikacji Snowflake przy użyciu poświadczeń protokołu OAuth.
- Typ uwierzytelniania:
(Opcjonalnie) Kliknij pozycję Testuj połączenie , aby potwierdzić, że działa.
(Opcjonalnie) Dodaj komentarz.
Kliknij pozycję Utwórz.
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 wpisów tajnych usługi Azure Databricks zamiast ciągów w postaci zwykłego tekstu dla poufnych wartości, takich jak poświadczenia. 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
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 CREATE FOREIGN CATALOG
polecenia SQL w notesie usługi Azure Databricks lub edytorze zapytań SQL.
Uwaga
Do utworzenia katalogu można również użyć interfejsu API REST usługi Databricks lub interfejsu wiersza polecenia usługi Databricks. Zobacz POLECENIA POST /api/2.1/unity-catalog/catalogs i Unity Catalog.
Wymagane uprawnienia: CREATE CATALOG
uprawnienie do magazynu metadanych i własność połączenia lub CREATE FOREIGN CATALOG
uprawnienia do połączenia.
Eksplorator wykazu
W obszarze roboczym usługi Azure Databricks kliknij pozycję Wykaz , aby otworzyć Eksploratora wykazu.
W górnej części okienka Wykaz kliknij ikonę Dodaj i wybierz pozycję Dodaj wykaz z menu.
Alternatywnie na stronie Szybki dostęp kliknij przycisk Wykazy , a następnie kliknij przycisk Utwórz wykaz .
Postępuj zgodnie z instrukcjami dotyczącymi tworzenia katalogów obcych w temacie 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 symboli zastępczych:
<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
wykazu 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 <database-name>
obcym jest zachowywana. Jeśli jednak identyfikator bazy danych Snowflake jest uwzględniany w wielkości liter, należy owinąć katalog <database-name>
obcy w podwójnych cudzysłowach, aby zachować przypadek.
Na przykład:
database
jest konwertowany naDATABASE
"database"
jest konwertowany nadatabase
"database"""
jest konwertowany nadatabase"
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 identyfikatorów 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.
Dodatkowe zasoby
- Konfigurowanie protokołu OAuth usługi Snowflake dla klientów niestandardowych w dokumentacji usługi Snowflake
- Dokumentacja JĘZYKA SQL: CREATE SECURITY INTEGRATION (Snowflake OAuth) w dokumentacji usługi Snowflake