Wykonywanie zapytań dotyczących baz danych w chmurze przy użyciu różnych schematów (wersja zapoznawcza)
Dotyczy: Azure SQL Database
Bazy danych partycjonowane w pionie używają różnych zestawów tabel 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.
Wymagania wstępne
- Użytkownik musi 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.
Omówienie
Uwaga
W przeciwieństwie do partycjonowania poziomego instrukcje DDL nie zależą od definiowania warstwy danych z mapą fragmentów za pośrednictwem elastycznej biblioteki klienta bazy danych.
- TWORZENIE KLUCZA GŁÓWNEGO
- TWORZENIE POŚWIADCZENIA W ZAKRESIE BAZY DANYCH
- TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH
- TWORZENIE TABELI ZEWNĘTRZNEJ
Tworzenie klucza głównego i poświadczeń o zakresie bazy danych
Poświadczenie jest używane przez zapytanie elastyczne do łączenia się ze zdalnymi bazami danych.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'master_key_password';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>',
SECRET = '<password>';
Uwaga
Upewnij się, że sufiks <username>
"@servername" nie zawiera żadnego sufiksu .
Tworzenie zewnętrznych źródeł danych
Składnia:
<External_Data_Source> ::=
CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
(TYPE = RDBMS,
LOCATION = '<fully_qualified_server_name>',
DATABASE_NAME = '<remote_database_name>',
CREDENTIAL = <credential_name>
) [;]
Ważne
Parametr TYPE musi być ustawiony na RDBMS.
Przykład
Poniższy przykład ilustruje użycie instrukcji CREATE dla zewnętrznych źródeł danych.
CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
TYPE=RDBMS,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='ReferenceData',
CREDENTIAL= SqlUser
);
Aby pobrać listę bieżących zewnętrznych źródeł danych:
select * from sys.external_data_sources;
Tabele zewnętrzne
Składnia:
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
( { <column_definition> } [ ,...n ])
{ WITH ( <rdbms_external_table_options> ) }
)[;]
<rdbms_external_table_options> ::=
DATA_SOURCE = <External_Data_Source>,
[ SCHEMA_NAME = N'nonescaped_schema_name',]
[ OBJECT_NAME = N'nonescaped_object_name',]
Przykład
CREATE EXTERNAL TABLE [dbo].[customer]
(
[c_id] int NOT NULL,
[c_firstname] nvarchar(256) NULL,
[c_lastname] nvarchar(256) NOT NULL,
[street] nvarchar(256) NOT NULL,
[city] nvarchar(256) NOT NULL,
[state] nvarchar(20) NULL
)
WITH
(
DATA_SOURCE = RemoteReferenceData
);
W poniższym przykładzie pokazano, jak pobrać listę tabel zewnętrznych z bieżącej bazy danych:
select * from sys.external_tables;
Uwagi
Zapytanie elastyczne rozszerza istniejącą składnię tabeli zewnętrznej w celu zdefiniowania tabel zewnętrznych korzystających z zewnętrznych źródeł danych typu RDBMS. Definicja tabeli zewnętrznej na potrzeby partycjonowania pionowego obejmuje następujące aspekty:
- Schemat: tabela zewnętrzna DDL definiuje schemat, którego mogą używać zapytania. Schemat podany w definicji tabeli zewnętrznej musi być zgodny ze schematem tabel w zdalnej bazie danych, w której są przechowywane rzeczywiste dane.
- Dokumentacja zdalnej bazy danych: tabela zewnętrzna DDL odwołuje się do zewnętrznego źródła danych. Zewnętrzne źródło danych określa nazwę serwera i nazwę bazy danych zdalnej bazy danych, w której są przechowywane rzeczywiste dane tabeli.
Użycie zewnętrznego źródła danych zgodnie z opisem w poprzedniej sekcji składnia tworzenia tabel zewnętrznych jest następująca:
Klauzula DATA_SOURCE definiuje zewnętrzne źródło danych (tj. zdalną bazę danych w partycjonowaniu pionowym), które jest używane dla tabeli zewnętrznej.
Klauzule SCHEMA_NAME i OBJECT_NAME umożliwiają mapowanie definicji tabeli zewnętrznej na tabelę w innym schemacie w zdalnej bazie danych lub do tabeli o innej nazwie. To mapowanie jest przydatne, jeśli chcesz zdefiniować tabelę zewnętrzną w widoku wykazu lub widoku DMV w zdalnej bazie danych — lub w jakiejkolwiek innej sytuacji, w której nazwa tabeli zdalnej jest już zajęta lokalnie.
Poniższa instrukcja DDL odrzuca istniejącą definicję tabeli zewnętrznej z katalogu lokalnego. Nie ma to wpływu na zdalną bazę danych.
DROP EXTERNAL TABLE [ [ schema_name ] . | schema_name. ] table_name[;]
Uprawnienia do tabeli CREATE/DROP EXTERNAL TABLE: WYMAGANE są uprawnienia ALTER ANY EXTERNAL DATA SOURCE do tabeli zewnętrznej DDL, która jest również wymagana do odwoływania się do bazowego źródła danych.
Zagadnienia dotyczące zabezpieczeń
Użytkownicy z dostępem do tabeli zewnętrznej automatycznie uzyskują dostęp do bazowych tabel zdalnych w ramach poświadczeń podanych w definicji zewnętrznego źródła danych. Starannie zarządzaj dostępem do tabeli zewnętrznej, aby uniknąć niepożądanego podniesienia uprawnień za pomocą poświadczeń zewnętrznego źródła danych. Zwykłe uprawnienia SQL mogą służyć do udzielania lub odwołowywania dostępu do tabeli zewnętrznej, tak jakby była to zwykła tabela.
Przykład: wykonywanie zapytań względem baz danych partycjonowanych w pionie
Poniższe zapytanie wykonuje trzykierunkowe sprzężenia między dwiema tabelami lokalnymi dla zamówień i wierszy zamówień oraz tabelą zdalną dla klientów. Jest to przykład przypadku użycia danych referencyjnych dla zapytania elastycznego:
SELECT
c_id as customer,
c_lastname as customer_name,
count(*) as cnt_orderline,
max(ol_quantity) as max_quantity,
avg(ol_amount) as avg_amount,
min(ol_delivery_d) as min_deliv_date
FROM customer
JOIN orders
ON c_id = o_c_id
JOIN order_line
ON o_id = ol_o_id and o_c_id = ol_c_id
WHERE c_id = 100
Procedura składowana dotycząca zdalnego wykonywania języka T-SQL: sp_execute_remote
Zapytanie elastyczne wprowadza również procedurę składowaną, która zapewnia bezpośredni dostęp do zdalnej bazy danych. Procedura składowana jest nazywana sp_execute _remote i może służyć do wykonywania zdalnych procedur składowanych lub kodu T-SQL w zdalnej bazie danych. Przyjmuje następujące parametry:
- Nazwa źródła danych (nvarchar): nazwa zewnętrznego źródła danych typu RDBMS.
- Zapytanie (nvarchar): zapytanie T-SQL do wykonania w zdalnej bazie danych.
- Deklaracja parametru (nvarchar) — opcjonalnie: ciąg z definicjami typu danych dla parametrów używanych w parametrze Zapytania (na przykład sp_executesql).
- Lista wartości parametrów — opcjonalnie: rozdzielona przecinkami lista wartości parametrów (na przykład sp_executesql).
Sp_execute_remote używa zewnętrznego źródła danych podanego w parametrach wywołania, aby wykonać daną instrukcję języka T-SQL w zdalnej bazie danych. Używa poświadczeń zewnętrznego źródła danych do nawiązania połączenia z zdalną bazą danych.
Przykład:
EXEC sp_execute_remote
N'MyExtSrc',
N'select count(w_id) as foo from warehouse'
Łączność dla narzędzi
Możesz użyć zwykłych parametry połączenia programu SQL Server do łączenia narzędzi do analizy biznesowej i integracji danych z bazami danych na serwerze z włączonymi elastycznymi zapytaniami i zdefiniowanymi tabelami zewnętrznymi. Upewnij się, że program SQL Server jest obsługiwany jako źródło danych dla narzędzia. Następnie zapoznaj się z bazą danych zapytań elastycznych i jej tabelami zewnętrznymi, podobnie jak w przypadku każdej innej bazy danych programu SQL Server, z którą można nawiązać połączenie za pomocą narzędzia.
Najlepsze rozwiązania
- Upewnij się, że elastyczna baza danych punktu końcowego zapytań uzyskała dostęp do zdalnej bazy danych, włączając dostęp dla usług platformy Azure w konfiguracji zapory usługi Azure SQL Database. Upewnij się również, że poświadczenia podane w zewnętrznej definicji źródła danych mogą pomyślnie zalogować się do zdalnej bazy danych i mieć uprawnienia dostępu do tabeli zdalnej.
- Zapytanie elastyczne działa najlepiej w przypadku zapytań, w których większość obliczeń można wykonywać w zdalnych bazach danych. Zazwyczaj uzyskujesz najlepszą wydajność zapytań przy użyciu predykatów filtru selektywnego, które można ocenić na zdalnych bazach danych lub sprzężeniach, które można wykonać całkowicie w zdalnej bazie danych. Inne wzorce zapytań mogą wymagać załadowania dużych ilości danych ze zdalnej bazy danych i mogą działać źle.
Następne kroki
- Aby zapoznać się z omówieniem zapytania elastycznego, zobacz Omówienie zapytań elastycznych.
- Aby uzyskać informacje o ograniczeniach zapytań elastycznych, zobacz Ograniczenia wersji zapoznawczej
- Aby zapoznać się z samouczkiem dotyczącym partycjonowania w pionie, zobacz Wprowadzenie do zapytań między bazami danych (partycjonowanie pionowe).
- 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.