Omówienie zapytań elastycznych usługi Azure SQL Database (wersja zapoznawcza)
Dotyczy: Azure SQL Database
Funkcja zapytania elastycznego (w wersji zapoznawczej) umożliwia uruchomienie zapytania Transact-SQL obejmującego wiele baz danych usługi Azure SQL Database. Pozwala na wykonywanie zapytań między bazami danych w celu uzyskiwania dostępu do tabel zdalnych oraz łączenie narzędzi firmy Microsoft i innych firm (Excel, Power BI, Tableau itd.) w celu wykonywania zapytań dotyczących warstw danych z wieloma bazami danych. Korzystając z tej funkcji, można skalować zapytania w poziomie do dużych warstw danych i wizualizować wyniki w raportach analizy biznesowej (BI).
Dlaczego warto używać zapytań elastycznych
Azure SQL Database
Wykonywanie zapytań dotyczących baz danych w usłudze Azure SQL Database całkowicie w języku T-SQL. Umożliwia to wykonywanie zapytań tylko do odczytu zdalnych baz danych i zapewnia klientom programu SQL Server możliwość migrowania aplikacji przy użyciu trzech i czterech części nazw lub serwera połączonego z usługą SQL Database.
Dostępne we wszystkich warstwach usług
Elastyczne zapytanie jest obsługiwane we wszystkich warstwach usług usługi Azure SQL Database. Zobacz sekcję Dotyczącą ograniczeń wersji zapoznawczej poniżej na temat ograniczeń wydajności dla niższych warstw usług.
Wypychanie parametrów do zdalnych baz danych
Zapytania elastyczne mogą teraz wypychać parametry SQL do zdalnych baz danych na potrzeby wykonywania.
Wykonywanie procedury składowanej
Wykonaj zdalne wywołania procedury składowanej lub funkcje zdalne przy użyciu sp_execute _remote.
Elastyczność
Tabele zewnętrzne z elastycznym zapytaniem mogą odwoływać się do tabel zdalnych z inną nazwą schematu lub tabeli.
Scenariusze zapytań elastycznych
Celem jest ułatwienie wykonywania zapytań w scenariuszach, w których wiele baz danych współtworzy wiersze w jeden ogólny wynik. Zapytanie może składać się bezpośrednio z użytkownika lub aplikacji albo pośrednio za pośrednictwem narzędzi połączonych z bazą danych. Jest to szczególnie przydatne w przypadku tworzenia raportów przy użyciu komercyjnych narzędzi do analizy biznesowej lub integracji danych lub dowolnej aplikacji, której nie można zmienić. Za pomocą zapytania elastycznego można wykonywać zapytania w kilku bazach danych przy użyciu znanego środowiska łączności z programem SQL Server w narzędziach takich jak Excel, Power BI, Tableau lub Cognos. Elastyczne zapytanie umożliwia łatwy dostęp do całej kolekcji baz danych za pośrednictwem zapytań wystawionych przez program SQL Server Management Studio lub Visual Studio oraz ułatwia wykonywanie zapytań między bazami danych z programu Entity Framework lub innych środowisk ORM. Rysunek 1 przedstawia scenariusz, w którym istniejąca aplikacja w chmurze (która korzysta z elastycznej biblioteki klienta bazy danych) jest oparta na skalowanej w poziomie warstwie danych, a elastyczne zapytanie jest używane do raportowania między bazami danych.
Rysunek 1 Zapytanie elastyczne używane w warstwie danych skalowanej w poziomie
Scenariusze klientów dotyczące zapytań elastycznych charakteryzuje się następującymi topologiami:
- Partycjonowanie w pionie — zapytania obejmujące wiele baz danych (Topologia 1): dane są partycjonowane w pionie między wieloma bazami danych w warstwie danych. Zazwyczaj różne zestawy tabel znajdują się w różnych bazach danych. Oznacza to, że schemat różni się w różnych bazach danych. Na przykład wszystkie tabele spisu znajdują się w jednej bazie danych, podczas gdy wszystkie tabele związane z księgowością znajdują się w drugiej bazie danych. Typowe przypadki użycia z tą topologią wymagają wykonywania zapytań dotyczących różnych tabel lub kompilowania raportów w kilku bazach danych.
- Partycjonowanie poziome — dzielenie na fragmenty (topologia 2): dane są partycjonowane w poziomie w celu rozłożenia wierszy w warstwie danych skalowanej w poziomie. W przypadku tego podejścia schemat jest identyczny we wszystkich uczestniczących bazach danych. Takie podejście jest również nazywane "fragmentowaniem". Fragmentowanie można wykonywać i zarządzać przy użyciu (1) elastycznych bibliotek narzędzi bazy danych lub (2) samodzielnego fragmentowania. Zapytanie elastyczne służy do wykonywania zapytań lub kompilowania raportów w wielu fragmentach. Fragmenty są zwykle bazami danych w elastycznej puli. Elastyczne zapytanie można traktować jako wydajny sposób wykonywania zapytań względem wszystkich baz danych elastycznej puli jednocześnie, o ile bazy danych współdzielą wspólny schemat.
Uwaga
Zapytanie elastyczne działa najlepiej w przypadku scenariuszy raportowania, w których większość przetwarzania (filtrowanie, agregacja) może być wykonywana po stronie zewnętrznej źródła. Nie nadaje się do operacji ETL, w których duża ilość danych jest transferowana z zdalnych baz danych. W przypadku dużych obciążeń raportowania lub scenariuszy magazynowania danych z bardziej złożonymi zapytaniami rozważ również użycie usługi Azure Synapse Analytics.
Partycjonowanie pionowe — zapytania obejmujące wiele baz danych
Aby rozpocząć kodowanie, zobacz Wprowadzenie do zapytań między bazami danych (partycjonowanie pionowe).
Zapytanie elastyczne może służyć do udostępniania danych w bazie danych w usłudze SQL Database innym bazom danych w usłudze SQL Database. Umożliwia to wykonywanie zapytań z jednej bazy danych w celu odwoływania się do tabel w dowolnej innej zdalnej bazie danych w usłudze SQL Database. Pierwszym krokiem jest zdefiniowanie zewnętrznego źródła danych dla każdej zdalnej bazy danych. Zewnętrzne źródło danych jest definiowane w lokalnej bazie danych, z której chcesz uzyskać dostęp do tabel znajdujących się w zdalnej bazie danych. W zdalnej bazie danych nie są wymagane żadne zmiany. W przypadku typowych scenariuszy partycjonowania pionowego, w których różne bazy danych mają różne schematy, zapytania elastyczne mogą służyć do implementowania typowych przypadków użycia, takich jak dostęp do danych referencyjnych i wykonywanie zapytań między bazami danych.
Ważne
Musisz mieć uprawnienie ALTER ANY EXTERNAL DATA SOURCE. To uprawnienie jest dołączone do uprawnienia ALTER DATABASE. ABY odwołać się do bazowego źródła danych, potrzebne są uprawnienia ALTER ANY EXTERNAL DATA SOURCE.
Dane referencyjne: Topologia jest używana do zarządzania danymi referencyjnymi. Na poniższym rysunku dwie tabele (T1 i T2) z danymi referencyjnymi są przechowywane w dedykowanej bazie danych. Za pomocą zapytania elastycznego można teraz uzyskiwać dostęp do tabel T1 i T2 zdalnie z innych baz danych, jak pokazano na rysunku. Użyj topologii 1, jeśli tabele odwołań są małymi lub zdalnymi zapytaniami do tabeli referencyjnej mają predykaty selektywne.
Rysunek 2 Partycjonowanie pionowe — używanie elastycznego zapytania do wykonywania zapytań dotyczących danych referencyjnych
Wykonywanie zapytań między bazami danych: Zapytania elastyczne umożliwiają wykonywanie zapytań w kilku bazach danych w usłudze SQL Database. Rysunek 3 przedstawia cztery różne bazy danych: CRM, Inventory, HR i Products. Zapytania wykonywane w jednej z baz danych również muszą mieć dostęp do jednej lub wszystkich pozostałych baz danych. Korzystając z elastycznego zapytania, możesz skonfigurować bazę danych dla tego przypadku, uruchamiając kilka prostych instrukcji DDL w każdej z czterech baz danych. Po tej jednorazowej konfiguracji dostęp do tabeli zdalnej jest tak prosty, jak odwoływania się do tabeli lokalnej z zapytań T-SQL lub narzędzi analizy biznesowej. Takie podejście jest zalecane, jeśli zapytania zdalne nie zwracają dużych wyników.
Rysunek 3 Partycjonowanie pionowe — używanie elastycznego zapytania do wykonywania zapytań w różnych bazach danych
Poniższe kroki umożliwiają skonfigurowanie elastycznych zapytań bazy danych dla scenariuszy partycjonowania pionowego, które wymagają dostępu do tabeli znajdującej się w zdalnych bazach danych w usłudze SQL Database przy użyciu tego samego schematu:
- CREATE MASTER KEY mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource typu RDBMS
- CREATE/DROP EXTERNAL TABLE mytable
Po uruchomieniu instrukcji DDL można uzyskać dostęp do tabeli zdalnej "mytable", tak jakby była to tabela lokalna. Usługa Azure SQL Database automatycznie otwiera połączenie ze zdalną bazą danych, przetwarza żądanie w zdalnej bazie danych i zwraca wyniki.
Partycjonowanie poziome — dzielenie na fragmenty
Użycie elastycznego zapytania do wykonywania zadań raportowania za pośrednictwem fragmentowanego, czyli partycjonowanego w poziomie, warstwa danych wymaga elastycznej mapy fragmentów bazy danych do reprezentowania baz danych warstwy danych. Zazwyczaj w tym scenariuszu jest używana tylko jedna mapa fragmentów, a dedykowana baza danych z funkcjami zapytań elastycznych (węzła głównego) służy jako punkt wejścia do zapytań raportowania. Tylko ta dedykowana baza danych wymaga dostępu do mapy fragmentów. Rysunek 4 ilustruje tę topologię i jej konfigurację z elastyczną bazą danych zapytań i mapą fragmentów. Aby uzyskać więcej informacji na temat elastycznej biblioteki klienta bazy danych i tworzenia map fragmentów, zobacz Zarządzanie mapami fragmentów.
Rysunek 4 Partycjonowanie w poziomie — używanie elastycznego zapytania do raportowania w warstwach danych podzielonych na fragmenty
Uwaga
Elastyczna baza danych zapytań (węzeł główny) może być oddzielną bazą danych lub może być tą samą bazą danych, która hostuje mapę fragmentów. Niezależnie od wybranej konfiguracji upewnij się, że warstwa usługi i rozmiar obliczeniowy tej bazy danych są wystarczająco wysokie, aby obsłużyć oczekiwaną ilość żądań logowania/zapytań.
Poniższe kroki umożliwiają skonfigurowanie elastycznych zapytań bazy danych dla scenariuszy partycjonowania poziomego, które wymagają dostępu do zestawu tabel znajdujących się w kilku zdalnych bazach danych w usłudze SQL Database:
- CREATE MASTER KEY mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- Utwórz mapę fragmentów reprezentującą warstwę danych przy użyciu elastycznej biblioteki klienta bazy danych.
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource typu SHARD_MAP_MANAGER
- CREATE/DROP EXTERNAL TABLE mytable
Po wykonaniu tych kroków możesz uzyskać dostęp do tabeli partycjonowanej poziomo "mytable", tak jakby była to tabela lokalna. Usługa Azure SQL Database automatycznie otwiera wiele równoległych połączeń ze zdalnymi bazami danych, w których tabele są fizycznie przechowywane, przetwarza żądania w zdalnych bazach danych i zwraca wyniki. Więcej informacji na temat kroków wymaganych w scenariuszu partycjonowania poziomego można znaleźć w zapytaniu elastycznym na potrzeby partycjonowania poziomego.
Aby rozpocząć kodowanie, zobacz Wprowadzenie do zapytań elastycznych na potrzeby partycjonowania poziomego (fragmentowania).
Ważne
Pomyślne wykonanie zapytań elastycznych w dużym zestawie baz danych w dużym stopniu zależy od dostępności poszczególnych baz danych podczas wykonywania zapytania. Jeśli jedna z baz danych jest niedostępna, całe zapytanie zakończy się niepowodzeniem. Jeśli planujesz wykonywać zapytania dotyczące setek lub tysięcy baz danych jednocześnie, upewnij się, że aplikacja kliencka ma osadzoną logikę ponawiania prób lub rozważyć wykorzystanie zadań elastycznych i wykonywanie zapytań dotyczących mniejszych podzestawów baz danych, konsolidując wyniki każdego zapytania w jedno miejsce docelowe.
Wykonywanie zapytań T-SQL
Po zdefiniowaniu zewnętrznych źródeł danych i tabel zewnętrznych można używać zwykłych parametry połączenia programu SQL Server do łączenia się z bazami danych, w których zdefiniowano tabele zewnętrzne. Następnie możesz uruchomić instrukcje języka T-SQL nad tabelami zewnętrznymi w tym połączeniu z ograniczeniami opisanymi poniżej. Więcej informacji i przykładów zapytań języka T-SQL można znaleźć w tematach dokumentacji dotyczących partycjonowania poziomego i partycjonowania pionowego.
Łączność dla narzędzi
Zwykłe parametry połączenia programu SQL Server umożliwiają łączenie aplikacji i narzędzi do analizy biznesowej lub narzędzi do integracji danych z bazami danych, które mają tabele zewnętrzne. Upewnij się, że program SQL Server jest obsługiwany jako źródło danych dla narzędzia. Po nawiązaniu połączenia zapoznaj się z bazą danych zapytań elastycznych i tabelami zewnętrznymi w tej bazie danych, podobnie jak w przypadku każdej innej bazy danych programu SQL Server, z którą nawiązujesz połączenie za pomocą narzędzia.
Ważne
Zapytania elastyczne są obsługiwane tylko podczas nawiązywania połączenia z uwierzytelnianiem programu SQL Server.
Koszt
Zapytanie elastyczne jest uwzględniane w kosztach usługi Azure SQL Database. Należy pamiętać, że topologie, w których zdalne bazy danych znajdują się w innym centrum danych niż punkt końcowy elastycznego zapytania, są obsługiwane, ale opłaty za ruch wychodzący ze zdalnych baz danych są naliczane regularnie za platformę Azure.
Ograniczenia wersji zapoznawczej
- Uruchomienie pierwszego elastycznego zapytania może potrwać do kilku minut w przypadku mniejszych zasobów oraz warstwy usługi Standardowa i Ogólnego przeznaczenia. Tym razem konieczne jest załadowanie funkcji zapytań elastycznych; wydajność ładowania zwiększa się dzięki wyższym warstwom usług i rozmiarom obliczeniowym.
- Skrypty zewnętrznych źródeł danych lub tabel zewnętrznych z programu SSMS lub SSDT nie są jeszcze obsługiwane.
- Importowanie/eksportowanie dla usługi SQL Database nie obsługuje jeszcze zewnętrznych źródeł danych i tabel zewnętrznych. Jeśli musisz użyć opcji Importuj/Eksportuj, upuść te obiekty przed wyeksportowaniem, a następnie utwórz je ponownie po zaimportowaniu.
- Zapytanie elastyczne obecnie obsługuje tylko dostęp tylko do odczytu do tabel zewnętrznych. Można jednak użyć pełnej funkcjonalności języka Transact-SQL w bazie danych, w której zdefiniowano tabelę zewnętrzną. Może to być przydatne, np. utrwalanie wyników tymczasowych, na przykład SELECT <column_list INTO <local_table>> lub definiowanie procedur składowanych w elastycznej bazie danych zapytań odwołujących się do tabel zewnętrznych.
- Z wyjątkiem nvarchar(max), typy LOB (w tym typy przestrzenne) nie są obsługiwane w definicjach tabeli zewnętrznej. Aby obejść ten problem, możesz utworzyć widok w zdalnej bazie danych, który rzutuje typ LOB na nvarchar(max), zdefiniuj tabelę zewnętrzną w widoku zamiast tabeli bazowej, a następnie rzutuje go z powrotem do oryginalnego typu LOB w zapytaniach.
- Kolumny typu danych nvarchar(max) w zestawie wyników wyłączają zaawansowane techniki przetwarzania wsadowego używane w implementacji elastycznego zapytania i mogą mieć wpływ na wydajność zapytania o kolejność wielkości, a nawet dwa rzędy wielkości w przypadkach użycia nie kanonicznych, w których duża ilość niegregowanych danych jest przesyłana w wyniku zapytania.
- Statystyki kolumn w tabelach zewnętrznych nie są obecnie obsługiwane. Obsługiwane są statystyki tabel, ale należy je utworzyć ręcznie.
- Kursory nie są obsługiwane w przypadku tabel zewnętrznych w usłudze Azure SQL Database.
- Zapytanie elastyczne działa tylko z usługą Azure SQL Database. Nie można go używać do wykonywania zapytań dotyczących wystąpienia programu SQL Server.
- Linki prywatne nie są obecnie obsługiwane w przypadku zapytań elastycznych dla tych baz danych, które są obiektami docelowymi zewnętrznych źródeł danych.
Podziel się swoją opinią
Podziel się swoją opinią na temat Twoich doświadczeń z zapytaniami elastycznymi z nami poniżej, na forach MSDN lub w witrynie Stack Overflow. Interesuje nas wszelkiego rodzaju opinie dotyczące usługi (wady, szorstkie krawędzie, luki funkcji).
Następne kroki
- Aby zapoznać się z samouczkiem dotyczącym partycjonowania w pionie, zobacz Wprowadzenie do zapytań między bazami danych (partycjonowanie pionowe).
- Aby uzyskać informacje na temat składni i przykładowych zapytań dotyczących danych partycjonowanych pionowo, zobacz Querying vertically partitioned data (Wykonywanie zapytań dotyczących danych partycjonowanych pionowo)
- Aby zapoznać się z samouczkiem dotyczącym partycjonowania poziomego (fragmentowania), zobacz Getting started with elastic query for horizontal partitioning (sharding) (Wprowadzenie do zapytań elastycznych na potrzeby partycjonowania poziomego (fragmentowania) .
- Aby uzyskać składnię i przykładowe zapytania dotyczące danych partycjonowanych w poziomie, zobacz Wykonywanie zapytań dotyczących danych partycjonowanych w poziomie)
- Zobacz sp_execute _remote procedury składowanej, która wykonuje instrukcję Języka Transact-SQL w ramach pojedynczej zdalnej bazy danych Azure SQL Database lub zestawu baz danych obsługujących jako fragmenty w schemacie partycjonowania poziomego.