Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY:
Azure Data Factory
Azure Synapse Analytics
Wskazówka
Wypróbuj usługę Data Factory w usłudze Microsoft Fabric — rozwiązanie analityczne typu all-in-one dla przedsiębiorstw. Usługa Microsoft Fabric obejmuje wszystko, od przenoszenia danych do nauki o danych, analizy w czasie rzeczywistym, analizy biznesowej i raportowania. Dowiedz się, jak bezpłatnie rozpocząć nową wersję próbną !
W tym artykule opisano, jak używać działania kopiowania do kopiowania danych z i do usługi Azure SQL Managed Instance oraz jak używać usługi Przepływ danych do przekształcania danych w usłudze Azure SQL Managed Instance. Aby dowiedzieć się więcej, przeczytaj artykuły wprowadzające dotyczące usług Azure Data Factory i Synapse Analytics.
Obsługiwane możliwości
Ten łącznik usługi Azure SQL Managed Instance jest obsługiwany w następujących funkcjach:
| Obsługiwane możliwości | środowisko IR | Zarządzany prywatny punkt końcowy |
|---|---|---|
| Aktywność kopiowania (źródło/miejsce docelowe) | (1) (2) | √ Publiczna wersja zapoznawcza |
| Mapowanie przepływu danych (źródło/ujście) | (1) | √ Publiczna wersja zapoznawcza |
| Działanie Lookup | (1) (2) | √ Publiczna wersja zapoznawcza |
| Działanie GetMetadata | (1) (2) | √ Publiczna wersja zapoznawcza |
| Działanie skryptu | (1) (2) | √ Publiczna wersja zapoznawcza |
| Działanie procedury składowanej | (1) (2) | √ Publiczna wersja zapoznawcza |
(1) Środowisko Azure Integration Runtime (2) Środowisko uruchomieniowe z własnym hostingiem
W przypadku Działania Kopiowania ten łącznik usługi Azure SQL Database obsługuje następujące funkcjonalności:
- Kopiowanie danych przy użyciu uwierzytelniania SQL i uwierzytelniania tokenu aplikacji Microsoft Entra z jednostką usługi lub tożsamości zarządzanymi dla zasobów platformy Azure.
- Jako źródło pobieranie danych przy użyciu zapytania SQL lub procedury składowanej. Możesz również wybrać opcję równoległego kopiowania ze źródła SQL Managed Instance. Aby uzyskać szczegółowe informacje, zobacz sekcję Równoległa kopia z SQL Managed Instance.
- Jako ujście, automatyczne utworzenie tabeli docelowej, jeśli nie istnieje, na podstawie schematu źródłowego; dołączanie danych do tabeli lub wywoływanie procedury składowanej za pomocą niestandardowej logiki podczas kopiowania.
Wymagania wstępne
Aby uzyskać dostęp do publicznego punktu końcowego usługi SQL Managed Instance, możesz użyć zarządzanego środowiska Azure Integration Runtime. Pamiętaj o włączeniu publicznego punktu końcowego oraz zezwoleniu na ruch publicznego punktu końcowego w sieciowej grupie zabezpieczeń, aby usługa mogła połączyć się z bazą danych. Aby uzyskać więcej informacji, zobacz te wskazówki.
Aby uzyskiwać dostęp do prywatnego punktu końcowego usługi SQL Managed Instance, skonfiguruj własne środowisko Integration Runtime, które będzie mieć dostęp do bazy danych. Jeśli aprowizujesz własne środowisko Integration Runtime w tej samej sieci wirtualnej co wystąpienie zarządzane, upewnij się, że maszyna ze środowiskiem Integration Runtime znajduje się w innej podsieci niż wystąpienie zarządzane. Jeśli aprowizujesz własne środowisko Integration Runtime w innej sieci wirtualnej niż wystąpienie zarządzane, możesz zastosować komunikację równorzędną sieci wirtualnych lub połączenie między sieciami wirtualnymi. Aby uzyskać więcej informacji, zobacz Łączenie aplikacji z usługą SQL Managed Instance.
Wprowadzenie
Aby wykonać działanie kopiowania za pomocą pipeline'u, możesz użyć jednego z następujących narzędzi lub zestawów SDK:
- Narzędzie do kopiowania danych
- Portal Azure
- zestawu SDK platformy .NET
- Zestaw SDK dla języka Python
- Azure PowerShell
- API REST
- Szablon usługi Azure Resource Manager
Tworzenie usługi powiązanej z wystąpieniem zarządzanym Azure SQL przy użyciu interfejsu użytkownika
Wykonaj poniższe kroki, aby utworzyć połączoną usługę z wystąpieniem zarządzanym SQL w interfejsie użytkownika witryny Azure Portal.
Przejdź do karty Zarządzanie w obszarze roboczym usługi Azure Data Factory lub Synapse i wybierz pozycję Połączone usługi, a następnie kliknij pozycję Nowy:
Wyszukaj SQL i wybierz łącznik Azure SQL Managed Instance.
Skonfiguruj szczegóły usługi, przetestuj połączenie i utwórz nową połączoną usługę.
Szczegóły konfiguracji łącznika
Poniższe sekcje zawierają szczegółowe informacje o właściwościach używanych do definiowania jednostek usługi Azure Data Factory specyficznych dla łącznika usługi SQL Managed Instance.
Właściwości połączonej usługi
Zalecana wersja łącznika usługi Azure SQL Managed Instance obsługuje protokół TLS 1.3. Zapoznaj się z tą sekcją, aby zaktualizować wersję łącznika usługi Azure SQL Managed Instance z wersji Legacy. Aby uzyskać szczegółowe informacje o właściwościach, należy odnieść się do odpowiednich sekcji.
Rekomendowana wersja
Te właściwości ogólne są obsługiwane w przypadku połączonej usługi Azure SQL Managed Instance po zastosowaniu zalecanej wersji:
| Właściwości | Opis | Wymagane |
|---|---|---|
| typ | Właściwość type musi być ustawiona na AzureSqlMI. | Tak |
| serwer | Nazwa lub adres sieciowy wystąpienia programu SQL Server, z którym chcesz nawiązać połączenie. | Tak |
| baza danych | Nazwa bazy danych. | Tak |
| typ uwierzytelniania | Typ używany do uwierzytelniania. Dozwolone wartości to SQL (wartość domyślna), ServicePrincipal, SystemAssignedManagedIdentity, UserAssignedManagedIdentity. Przejdź do odpowiedniej sekcji uwierzytelniania dotyczącej określonych właściwości i wymagań wstępnych. | Tak |
| alwaysEncryptedSettings | Określ informacje, które są potrzebne do włączenia funkcji Always Encrypted, w celu ochrony poufnych danych przechowywanych na serwerze SQL przy użyciu tożsamości zarządzanej lub poświadczenia usługi. Aby uzyskać więcej informacji, zobacz przykład JSON w poniższej tabeli i sekcję Using Always Encrypted (Używanie funkcji Always Encrypted ). Jeśli nie zostanie określone, domyślnie ustawienie "zawsze szyfrowane" jest wyłączone. | Nie. |
| szyfrować | Określ, czy szyfrowanie TLS jest wymagane dla wszystkich danych wysyłanych między klientem a serwerem. Opcje: obowiązkowe (dla wartości true, domyślnie)/opcjonalne (dla wartości false)/ścisłe. | Nie. |
| ZaufajCertyfikatowiSerwera | Określ, czy kanał zostanie zaszyfrowany podczas pomijania łańcucha certyfikatów w celu zweryfikowania zaufania. | Nie. |
| hostNameInCertificate | Nazwa hosta do użycia podczas weryfikowania certyfikatu serwera dla połączenia. Jeśli nie zostanie określona, nazwa serwera jest używana do weryfikacji certyfikatu. | Nie. |
| connectVia | To środowisko uruchomieniowe integracji służy do połączenia z magazynem danych. Możesz użyć własnego środowiska Integration Runtime lub środowiska Azure Integration Runtime, jeśli wystąpienie zarządzane ma publiczny punkt końcowy i umożliwia usłudze dostęp do niego. Jeśli nie zostanie określony, zostanie użyte domyślne środowisko Azure Integration Runtime. | Tak |
Aby uzyskać dodatkowe właściwości połączenia, zobacz poniższą tabelę:
| Właściwości | Opis | Wymagane |
|---|---|---|
| zamiar aplikacji | Typ obciążenia aplikacji podczas nawiązywania połączenia z serwerem. Dozwolone wartości to ReadOnly i ReadWrite. |
Nie. |
| connectTimeout | Czas oczekiwania na połączenie z serwerem (w sekundach) przed zakończeniem próby i wygenerowaniem błędu. | Nie. |
| connectRetryCount | Liczba ponownych połączeń podjęta po zidentyfikowaniu błędu bezczynności połączenia. Wartość powinna być liczbą całkowitą z zakresu od 0 do 255. | Nie. |
| connectRetryInterval | Czas (w sekundach) między każdą ponowną próbą nawiązania połączenia po zidentyfikowaniu błędu bezczynności połączenia. Wartość powinna być liczbą całkowitą z zakresu od 1 do 60. | Nie. |
| loadBalanceTimeout | Minimalny czas (w sekundach), przez jaki połączenie może istnieć w puli połączeń przed jego zamknięciem. | Nie. |
| commandTimeout | Domyślny czas oczekiwania (w sekundach) przed zakończeniem próby wykonania polecenia i wygenerowaniem błędu. | Nie. |
| zintegrowaneBezpieczeństwo | Dozwolone wartości to true lub false. Podczas określania false parametru określ, czy nazwa użytkownika i hasło są określone w połączeniu. Podczas określania true, wskazuje, czy bieżące poświadczenia konta systemu Windows są używane do uwierzytelniania. |
Nie. |
| failoverPartner | Nazwa lub adres serwera partnerskiego do nawiązania połączenia, jeśli serwer podstawowy nie działa. | Nie. |
| maksymalnyRozmiarPuli | Maksymalna liczba połączeń dozwolonych w puli połączeń dla określonego połączenia. | Nie. |
| minPoolSize (Minimalny rozmiar puli) | Minimalna liczba połączeń dozwolonych w puli połączeń dla określonego połączenia. | Nie. |
| multipleActiveResultSets | Dozwolone wartości to true lub false. Po określeniu trueparametru aplikacja może obsługiwać wiele aktywnych zestawów wyników (MARS). Po określeniu falseparametru aplikacja musi przetworzyć lub anulować wszystkie zestawy wyników z jednej partii, zanim będzie mogła wykonać inne partie w tym połączeniu. |
Nie. |
| multiSubnetFailover | Dozwolone wartości to true lub false. Jeśli Twoja aplikacja łączy się z AlwaysOn availability group (AG) znajdującą się w różnych podsieciach, ustawienie tej właściwości na true pozwala na szybsze wykrywanie i nawiązywanie połączenia z aktualnie aktywnym serwerem. |
Nie. |
| rozmiar pakietu | Rozmiar pakietów sieciowych w bajtach używanych do komunikacji z instancją serwera. | Nie. |
| Buforowanie | Dozwolone wartości to true lub false. Po określeniu parametru true, połączenie zostanie włączone do puli. Po określeniu falseparametru połączenie zostanie jawnie otwarte przy każdym żądaniu połączenia. |
Nie. |
Uwierzytelnianie SQL
Aby użyć uwierzytelniania SQL, oprócz właściwości ogólnych opisanych w poprzedniej sekcji, określ następujące właściwości:
| Właściwości | Opis | Wymagane |
|---|---|---|
| userName | Nazwa użytkownika używana do nawiązywania połączenia z serwerem. | Tak |
| hasło | Hasło dla nazwy użytkownika. Oznacz to pole jako SecureString , aby bezpiecznie je przechowywać. Możesz też odwołać się do wpisu tajnego przechowywanego w usłudze Azure Key Vault. | Tak |
Przykład 1: używanie uwierzytelniania SQL
{
"name": "AzureSqlMILinkedService",
"properties": {
"type": "AzureSqlMI",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SQL",
"userName": "<user name>",
"password": {
"type": "SecureString",
"value": "<password>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Przykład 2: używanie uwierzytelniania SQL z hasłem w usłudze Azure Key Vault
{
"name": "AzureSqlMILinkedService",
"properties": {
"type": "AzureSqlMI",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SQL",
"userName": "<user name>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Przykład 3. Używanie uwierzytelniania SQL z funkcją Always Encrypted
{
"name": "AzureSqlMILinkedService",
"properties": {
"type": "AzureSqlMI",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SQL",
"userName": "<user name>",
"password": {
"type": "SecureString",
"value": "<password>"
}
},
"alwaysEncryptedSettings": {
"alwaysEncryptedAkvAuthType": "ServicePrincipal",
"servicePrincipalId": "<service principal id>",
"servicePrincipalKey": {
"type": "SecureString",
"value": "<service principal key>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Uwierzytelnianie głównego elementu usługi
Aby użyć uwierzytelniania jednostki usługi, oprócz właściwości ogólnych opisanych w poprzedniej sekcji, określ następujące właściwości
| Właściwości | Opis | Wymagane |
|---|---|---|
| IdentyfikatorPodmiotuUsługowego | Określ identyfikator klienta aplikacji. | Tak |
| servicePrincipalCredential | Poświadczenie jednostki usługi. Określ klucz aplikacji. Oznacz to pole jako SecureString, aby przechowywać jego wartość bezpiecznie, lub odwołaj się do tajemnicy przechowywanej w usłudze Azure Key Vault. | Tak |
| dzierżawa | Określ informacje o dzierżawie, takie jak nazwa domeny lub identyfikator dzierżawy, w którym znajduje się aplikacja. Pobierz go, umieszczając wskaźnik myszy w prawym górnym rogu witryny Azure Portal. | Tak |
| azureCloudType | W przypadku uwierzytelniania jednostki usługi określ typ środowiska chmury Azure, do którego zarejestrowano aplikację Microsoft Entra. Dozwolone wartości to AzurePublic, AzureChina, AzureUsGovernment i AzureGermany. Domyślnie używane jest środowisko chmury usługi. |
Nie. |
Należy również wykonać poniższe kroki:
Postępuj zgodnie z instrukcjami, aby aprowizować administratora usługi Microsoft Entra dla wystąpienia zarządzanego.
Utwórz aplikację Microsoft Entra w portalu Azure. Zanotuj nazwę aplikacji i następujące wartości, które definiują połączoną usługę:
- Identyfikator aplikacji
- Klucz aplikacji
- Identyfikator dzierżawy
Utwórz loginy dla jednostki serwisowej. W programie SQL Server Management Studio (SSMS) połącz się z wystąpieniem zarządzanym przy użyciu konta SQL Server z uprawnieniami administratora systemu (sysadmin). W bazie danych master uruchom następujący kod T-SQL:
CREATE LOGIN [your application name] FROM EXTERNAL PROVIDERUtwórz użytkowników kontenerowej bazy danych dla podmiotu usługi. Nawiąż połączenie z bazą danych, do której lub z której chcesz skopiować dane, a następnie uruchom następujący kod T-SQL:
CREATE USER [your application name] FROM EXTERNAL PROVIDERPrzyznaj głównej jednostce usługi wymagane uprawnienia, tak jak zazwyczaj dla użytkowników SQL i innych. Uruchom następujący kod. Aby uzyskać więcej opcji, zobacz ten dokument.
ALTER ROLE [role name e.g. db_owner] ADD MEMBER [your application name]Konfigurowanie połączonej usługi SQL Managed Instance.
Przykład: użycie uwierzytelniania głównej jednostki usługi
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlMI",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"hostNameInCertificate": "<host name>",
"authenticationType": "ServicePrincipal",
"servicePrincipalId": "<service principal id>",
"servicePrincipalCredential": {
"type": "SecureString",
"value": "<application key>"
},
"tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Uwierzytelnianie zarządzanej tożsamości przypisanej przez system
Obszar roboczy Data Factory lub Synapse może być skojarzony z zarządzaną tożsamością przypisaną przez system dla zasobów platformy Azure, która reprezentuje usługę do uwierzytelniania w innych usługach platformy Azure. Tej tożsamości zarządzanej można użyć do uwierzytelniania usługi SQL Managed Instance. Wyznaczona usługa może uzyskiwać dostęp do danych lub do bazy danych oraz kopiować je przy użyciu tej tożsamości.
Aby użyć uwierzytelniania za pomocą tożsamości zarządzanej przez system, określ właściwości ogólne opisane w poprzedniej sekcji i wykonaj następujące kroki.
Postępuj zgodnie z instrukcjami, aby skonfigurować administratora usługi Microsoft Entra dla zarządzanego wystąpienia.
Utwórz loginy dla tożsamości zarządzanej przypisanej przez system. W programie SQL Server Management Studio (SSMS) połącz się z wystąpieniem zarządzanym przy użyciu konta SQL Server, które jest sysadmin. W bazie danych master uruchom następujący kod T-SQL:
CREATE LOGIN [your_factory_or_workspace_ name] FROM EXTERNAL PROVIDERStwórz użytkowników bazy danych kontenerowej dla tożsamości zarządzanej przypisanej przez system. Nawiąż połączenie z bazą danych, z której lub do której chcesz skopiować dane, a następnie uruchom następujący kod T-SQL:
CREATE USER [your_factory_or_workspace_name] FROM EXTERNAL PROVIDERUdziel wymaganych uprawnień przypisanej przez system tożsamości zarządzanej, tak jak zwykle dla użytkowników SQL i innych. Uruchom następujący kod. Aby uzyskać więcej opcji, zobacz ten dokument.
ALTER ROLE [role name e.g. db_owner] ADD MEMBER [your_factory_or_workspace_name]Konfigurowanie połączonej usługi SQL Managed Instance.
Przykład: używa uwierzytelniania tożsamości zarządzanej przypisanej przez system
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlMI",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SystemAssignedManagedIdentity"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Uwierzytelnianie przypisanej przez użytkownika tożsamości zarządzanej
Fabryka danych lub obszar roboczy Synapse może być skojarzony z tożsamościami zarządzanymi przez użytkownika, które reprezentują usługę uwierzytelniania wobec innych usług Azure. Tej tożsamości zarządzanej można użyć do uwierzytelniania usługi SQL Managed Instance. Wyznaczona usługa może uzyskiwać dostęp do danych lub do bazy danych oraz kopiować je przy użyciu tej tożsamości.
Aby użyć uwierzytelniania przy użyciu zarządzanej tożsamości przypisanej przez użytkownika, oprócz opisanych w poprzedniej sekcji właściwości ogólnych, określ następujące właściwości:
| Właściwości | Opis | Wymagane |
|---|---|---|
| dane logowania | Określ tożsamość zarządzaną przypisaną przez użytkownika jako obiekt poświadczeń. | Tak |
Należy również wykonać poniższe kroki:
Postępuj zgodnie z instrukcjami, aby aprowizować administratora usługi Microsoft Entra dla wystąpienia zarządzanego.
Utwórz konta logowania dla tożsamości zarządzanej przypisanej przez użytkownika. W programie SQL Server Management Studio (SSMS) połącz się z wystąpieniem zarządzanym przy użyciu konta programu SQL Server, które jest administratorem systemu. W bazie danych master uruchom następujący kod T-SQL:
CREATE LOGIN [your_factory_or_workspace_ name] FROM EXTERNAL PROVIDERUtwórz użytkowników bazy danych w trybie izolowanym dla zarządzanej tożsamości przypisanej użytkownikowi. Nawiąż połączenie z bazą danych, z którą chcesz skopiować dane, po nawiązaniu połączenia, uruchom następujący kod T-SQL:
CREATE USER [your_factory_or_workspace_name] FROM EXTERNAL PROVIDERUtwórz jedną lub wiele tożsamości zarządzanych przypisanych przez użytkownika i przyznaj tożsamości zarządzanej przypisanej przez użytkownika wymagane uprawnienia, tak jak zwykle dla użytkowników SQL i innych. Uruchom następujący kod. Aby uzyskać więcej opcji, zobacz ten dokument.
ALTER ROLE [role name e.g. db_owner] ADD MEMBER [your_factory_or_workspace_name]Przypisz jedną lub wiele tożsamości zarządzanych przez użytkownika do fabryki danych i utwórz poświadczenia dla każdej z tych tożsamości.
Konfigurowanie połączonej usługi SQL Managed Instance.
Przykład: używa uwierzytelniania przez przypisaną przez użytkownika zarządzaną tożsamość
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlMI",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "UserAssignedManagedIdentity",
"credential": {
"referenceName": "credential1",
"type": "CredentialReference"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Starsza wersja
Te właściwości ogólne są obsługiwane w przypadku połączonej usługi Azure SQL Managed Instance podczas stosowania starszej wersji:
| Właściwości | Opis | Wymagane |
|---|---|---|
| typ | Właściwość type musi być ustawiona na AzureSqlMI. | Tak |
| Parametry połączenia | Ta właściwość określa informacje connectionString potrzebne do nawiązania połączenia z usługą SQL Managed Instance przy użyciu uwierzytelniania SQL. Aby uzyskać więcej informacji, zobacz następujące przykłady. Domyślny port to 1433. Jeśli używasz usługi SQL Managed Instance z publicznym punktem końcowym, jawnie określ port 3342. Możesz również umieścić hasło w usłudze Azure Key Vault. Jeśli jest to uwierzytelnianie SQL, wyciągnij konfigurację password z ciągu połączenia. Aby uzyskać więcej informacji, zobacz Przechowywanie poświadczeń w usłudze Azure Key Vault. |
Tak |
| alwaysEncryptedSettings | Określ informacje, które są potrzebne do włączenia funkcji Always Encrypted, w celu ochrony poufnych danych przechowywanych na serwerze SQL przy użyciu tożsamości zarządzanej lub poświadczenia usługi. Aby uzyskać więcej informacji, zobacz sekcję Using Always Encrypted (Używanie funkcji Always Encrypted ). Jeśli nie zostanie określone, domyślnie ustawienie "zawsze szyfrowane" jest wyłączone. | Nie. |
| connectVia | To środowisko uruchomieniowe integracji służy do połączenia z magazynem danych. Możesz użyć własnego środowiska Integration Runtime lub środowiska Azure Integration Runtime, jeśli wystąpienie zarządzane ma publiczny punkt końcowy i umożliwia usłudze dostęp do niego. Jeśli nie zostanie określony, zostanie użyte domyślne środowisko Azure Integration Runtime. | Tak |
W przypadku różnych typów uwierzytelniania zapoznaj się z następującymi sekcjami dotyczącymi odpowiednio określonych właściwości i wymagań wstępnych:
- Uwierzytelnianie SQL dla starszej wersji
- Uwierzytelnianie głównej jednostki usługi dla starszej wersji
- Uwierzytelnianie zarządzanej tożsamości przypisanej systemowo dla starszej wersji
- Uwierzytelnianie tożsamości zarządzanej przez użytkownika dla wersji starszej
Uwierzytelnianie SQL dla starszej wersji
Aby użyć uwierzytelniania SQL, określ właściwości ogólne opisane w poprzedniej sekcji.
Uwierzytelnianie podmiotu usługi dla starszej wersji
Aby użyć uwierzytelniania podmiotu usługi, oprócz właściwości ogólnych opisanych w poprzedniej sekcji, określ następujące właściwości:
| Właściwości | Opis | Wymagane |
|---|---|---|
| IdentyfikatorPodmiotuUsługowego | Określ identyfikator klienta aplikacji. | Tak |
| servicePrincipalKey | Określ klucz aplikacji. Oznacz to pole jako SecureString , aby bezpiecznie przechowywać je lub odwoływać się do wpisu tajnego przechowywanego w usłudze Azure Key Vault. | Tak |
| dzierżawa | Określ informacje o dzierżawie, takie jak nazwa domeny lub identyfikator dzierżawy, w którym znajduje się aplikacja. Pobierz go, umieszczając wskaźnik myszy w prawym górnym rogu witryny Azure Portal. | Tak |
| azureCloudType | W przypadku uwierzytelniania jednostki usługi określ typ środowiska chmury Azure, do którego zarejestrowano aplikację Microsoft Entra. Dozwolone wartości to AzurePublic, AzureChina, AzureUsGovernment i AzureGermany. Domyślnie używane jest środowisko chmury obliczeniowej fabryki danych lub potoku Synapse. |
Nie. |
Należy również wykonać kroki opisane w temacie Uwierzytelnianie jednostki usługi, aby udzielić odpowiedniego uprawnienia.
Uwierzytelnianie zarządzanej tożsamości przypisanej przez system dla wersji starszej
Aby użyć uwierzytelniania tożsamości zarządzanej przypisanej przez system, wykonaj ten sam krok, który zaleca się w sekcji Uwierzytelnianie tożsamości zarządzanej przypisanej przez system.
Uwierzytelnianie zarządzanej tożsamości przez użytkownika dla starszej wersji
Aby użyć uwierzytelniania tożsamości zarządzanej przypisanej przez użytkownika, wykonaj ten sam krok co dla zalecanej wersji w sekcji Uwierzytelnianie tożsamości zarządzanej przypisanej przez użytkownika.
Właściwości zestawu danych
Aby uzyskać pełną listę sekcji i właściwości dostępnych do użycia do definiowania zestawów danych, zobacz artykuł dotyczący zestawów danych. Ta sekcja zawiera listę właściwości obsługiwanych przez zestaw danych usługi SQL Managed Instance.
Aby skopiować dane do i z usługi SQL Managed Instance, obsługiwane są następujące właściwości:
| Właściwości | Opis | Wymagane |
|---|---|---|
| typ | Właściwość type zestawu danych musi być ustawiona na AzureSqlMITable. | Tak |
| schemat | Nazwa schematu. | Nie dla źródła, Tak dla ujścia |
| tabela | Nazwa tabeli/widoku. | Nie dla źródła, Tak dla ujścia |
| tableName | Nazwa tabeli/widoku z schematem bazy danych. Ta właściwość jest obsługiwana w celu zapewnienia kompatybilności z poprzednimi wersjami. W przypadku nowego obciążenia roboczego użyj elementów schema i table. |
Nie dla źródła, Tak dla ujścia |
Przykład
{
"name": "AzureSqlMIDataset",
"properties":
{
"type": "AzureSqlMITable",
"linkedServiceName": {
"referenceName": "<SQL Managed Instance linked service name>",
"type": "LinkedServiceReference"
},
"schema": [ < physical schema, optional, retrievable during authoring > ],
"typeProperties": {
"schema": "<schema_name>",
"table": "<table_name>"
}
}
}
Właściwości działania kopiowania
Aby uzyskać pełną listę sekcji i właściwości dostępnych do użycia do definiowania działań, zobacz artykuł Pipelines. Ta sekcja zawiera listę właściwości obsługiwanych przez źródło i odbiornik SQL Managed Instance.
Zarządzane wystąpienie SQL jako źródło
Wskazówka
Aby wydajnie ładować dane z SQL MI przy użyciu partycjonowania danych, dowiedz się więcej na temat równoległego kopiowania z SQL MI.
Aby skopiować dane z usługi SQL Managed Instance, następujące właściwości są obsługiwane w sekcji źródło działania kopiowania:
| Właściwości | Opis | Wymagane |
|---|---|---|
| typ | Właściwość type źródła działania kopiowania musi być ustawiona na Wartość SqlMISource. | Tak |
| sqlReaderQuery | Ta właściwość używa niestandardowego zapytania SQL do odczytywania danych. Może to być na przykład select * from MyTable. |
Nie. |
| sqlReaderStoredProcedureName | Ta właściwość jest nazwą procedury składowanej, która odczytuje dane z tabeli źródłowej. Ostatnia instrukcja SQL musi być instrukcją SELECT w procedurze składowanej. | Nie. |
| parametryProcedurySkładowanej | Te parametry są przeznaczone dla procedury składowanej. Dozwolone wartości to pary nazw lub wartości. Nazwy i formatowanie liter parametrów muszą być zgodne z nazwami i formatowaniem liter parametrów w procedurze składowanej. |
Nie. |
| poziom izolacji | Określa zachowanie blokowania transakcji dla źródła SQL. Dozwolone wartości to: ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Snapshot. Jeśli nie zostanie określony, zostanie użyty domyślny poziom izolacji bazy danych. Aby uzyskać więcej informacji, zapoznaj się z tym dokumentem . | Nie. |
| opcjePodziału | Określa opcje partycjonowania używane do ładowania danych z SQL MI. Dozwolone wartości to: Brak (wartość domyślna), PhysicalPartitionsOfTable i DynamicRange. Jeśli opcja partycji jest włączona (czyli nie None), stopień równoległości przy równoczesnym ładowaniu danych z SQL MI jest kontrolowany przez ustawienie parallelCopies w działaniu kopiowania. |
Nie. |
| ustawienia partycji | Określ grupę ustawień partycjonowania danych. Zastosuj, gdy opcja partycji nie jest None. |
Nie. |
W obszarze partitionSettings: |
||
| partitionColumnName | Określ nazwę kolumny źródłowej o typie liczby całkowitej lub daty/czasu (int, smallint, bigint, date, smalldatetime, datetime, datetime2, lub datetimeoffset), która będzie używana do partycjonowania zakresu dla kopiowania równoległego. Jeśli nie zostanie określony, indeks lub klucz podstawowy tabeli zostanie automatycznie wykryty i użyty jako kolumna partycji.Zastosuj, gdy opcja partycji to DynamicRange. Jeśli używasz zapytania do pobierania danych źródłowych, ustaw ?DfDynamicRangePartitionCondition w klauzuli WHERE. Aby zapoznać się z przykładem, zobacz sekcję Kopiowanie równoległe z bazy danych SQL. |
Nie. |
| partitionUpperBound | Maksymalna wartość kolumny partycji dla podziału zakresu partycji. Ta wartość służy do decydowania o kroku partycji, a nie do filtrowania wierszy w tabeli. Wszystkie wiersze w tabeli lub wyniku zapytania zostaną częściowo podzielone i skopiowane. Jeśli wartość nie zostanie określona, działanie kopiowania automatycznie ją wykryje. Zastosuj, gdy opcja partycji to DynamicRange. Aby zapoznać się z przykładem, zobacz sekcję Kopiowanie równoległe z bazy danych SQL. |
Nie. |
| dolna granica partycji | Minimalna wartość kolumny partycji dla podziału zakresu partycji. Ta wartość służy do decydowania o kroku partycji, a nie do filtrowania wierszy w tabeli. Wszystkie wiersze w tabeli lub wyniku zapytania zostaną częściowo podzielone i skopiowane. Jeśli wartość nie zostanie określona, działanie kopiowania automatycznie ją wykryje. Zastosuj, gdy opcja partycji to DynamicRange. Aby zapoznać się z przykładem, zobacz sekcję Kopiowanie równoległe z bazy danych SQL. |
Nie. |
Pamiętaj o następujących kwestiach:
- Jeśli dla usługi SqlMISource określono wartość sqlReaderQuery, działanie kopiowania uruchamia to zapytanie względem źródła usługi SQL Managed Instance w celu pobrania danych. Można również określić procedurę składowaną, podając sqlReaderStoredProcedureName i storedProcedureParameters, jeśli procedura składowana przyjmuje parametry.
- W przypadku używania procedury składowanej w źródle do pobierania danych należy pamiętać, że procedura składowana jest zaprojektowana jako zwracanie innego schematu po przekazaniu innej wartości parametru, może wystąpić błąd lub nieoczekiwany wynik podczas importowania schematu z interfejsu użytkownika lub kopiowania danych do bazy danych SQL z automatycznym tworzeniem tabeli.
Przykład: używanie zapytania SQL
"activities":[
{
"name": "CopyFromAzureSqlMI",
"type": "Copy",
"inputs": [
{
"referenceName": "<SQL Managed Instance input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SqlMISource",
"sqlReaderQuery": "SELECT * FROM MyTable"
},
"sink": {
"type": "<sink type>"
}
}
}
]
Przykład: użyj procedury składowanej
"activities":[
{
"name": "CopyFromAzureSqlMI",
"type": "Copy",
"inputs": [
{
"referenceName": "<SQL Managed Instance input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SqlMISource",
"sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
"storedProcedureParameters": {
"stringData": { "value": "str3" },
"identifier": { "value": "$$Text.Format('{0:yyyy}', <datetime parameter>)", "type": "Int"}
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
Definicja procedury składowanej
CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
@stringData varchar(20),
@identifier int
)
AS
SET NOCOUNT ON;
BEGIN
select *
from dbo.UnitTestSrcTable
where dbo.UnitTestSrcTable.stringData != stringData
and dbo.UnitTestSrcTable.identifier != identifier
END
GO
Zarządzane wystąpienie SQL jako cel
Wskazówka
Dowiedz się więcej o obsługiwanych zachowaniach zapisu, konfiguracjach i najlepszych rozwiązaniach z sekcji Najlepsze rozwiązanie dotyczące ładowania danych do usługi SQL Managed Instance.
Aby skopiować dane do usługi SQL Managed Instance, w sekcji ujścia operacji kopiowania są obsługiwane następujące właściwości:
| Właściwości | Opis | Wymagane |
|---|---|---|
| typ | Właściwość type ujścia działania kopiowania musi być ustawiona na SqlMISink. | Tak |
| preCopyScript | Ta właściwość określa zapytanie SQL dla działania kopiowania do uruchomienia przed zapisaniem danych w usłudze SQL Managed Instance. Jest wywoływany tylko raz na przebieg kopiowania. Za pomocą tej właściwości można wyczyścić wstępnie załadowane dane. | Nie. |
| opcjaTabeli | Określa, czy automatycznie utworzyć tabelę ujścia, jeśli nie istnieje na podstawie schematu źródłowego. Automatyczne tworzenie tabeli nie jest obsługiwane, gdy ujście określa procedurę składowaną. Dozwolone wartości to: none (wartość domyślna), autoCreate. |
Nie. |
| sqlWriterStoredProcedureName (nazwa procedury składowanej sqlWriter) | Nazwa procedury składowanej, która definiuje sposób stosowania danych źródłowych do tabeli docelowej. Ta procedura składowana jest wywoływana na partię. W przypadku operacji uruchamianych tylko raz, które nie mają nic wspólnego z danymi źródłowymi, na przykład usuń lub skróć, użyj właściwości preCopyScript.Zobacz przykład z wywołania procedury składowanej z ujścia SQL. |
Nie. |
| nazwaParametruTypuTabeliProcedurySkładowanej | Nazwa parametru typu tabeli określona w procedurze składowanej. | Nie. |
| sqlWriterTableType | Nazwa typu tabeli, która ma być używana w procedurze składowanej. Działanie kopiowania danych sprawia, że dane są dostępne w tabeli tymczasowej o tym typie tabeli. Kod procedury składowanej może następnie scalić dane kopiowane z istniejącymi danymi. | Nie. |
| parametryProcedurySkładowanej | Parametry procedury składowanej. Dozwolone wartości to pary nazw i wartości. Nazwy parametrów i wielkość liter w ich nazwach muszą być zgodne z nazwami i wielkością liter parametrów procedury składowanej. |
Nie. |
| writeBatchSize | Liczba wierszy do wstawienia do tabeli SQL na partię. Dozwolone wartości to liczby całkowite dla liczby wierszy. Domyślnie usługa dynamicznie określa odpowiedni rozmiar partii na podstawie rozmiaru wiersza. |
Nie. |
| writeBatchTimeout | Czas oczekiwania na ukończenie operacji wstawiania, operacji upsert i procedury składowanej przed przekroczeniem limitu czasu. Dozwolone wartości są dla przedziału czasu. Przykładem jest "00:30:00" przez 30 minut. Jeśli żadna wartość nie jest określona, limit czasu jest domyślnie ustawiony jako "00:30:00". |
Nie. |
| maxConcurrentConnections | Górny limit połączeń współbieżnych nawiązanych z magazynem danych podczas przebiegu działania. Określ wartość tylko wtedy, gdy chcesz ograniczyć połączenia współbieżne. | Nie |
| WriteBehavior | Określ sposób zapisu podczas operacji kopiowania, aby załadować dane do instancji zarządzanej Azure SQL. Dozwolona wartość to Insert i Upsert. Domyślnie usługa używa wstawiania do ładowania danych. |
Nie. |
| upsertSettings | Określ grupę ustawień zachowania zapisu. Zastosuj, gdy opcja WriteBehavior ma wartość Upsert. |
Nie. |
W obszarze upsertSettings: |
||
| useTempDB | Określ, czy chcesz użyć globalnej tabeli tymczasowej, czy tabeli fizycznej jako tabeli tymczasowej dla operacji upsert. Domyślnie usługa używa globalnej tabeli tymczasowej jako tabeli przejściowej. wartość to true. |
Nie. |
| interimSchemaName | Określ schemat tymczasowy do tworzenia tabeli tymczasowej, jeśli jest używana tabela fizyczna. Uwaga: użytkownik musi mieć uprawnienia do tworzenia i usuwania tabeli. Domyślnie tabela tymczasowa będzie współdzielić ten sam schemat co tabela ujścia. Zastosuj, gdy opcja useTempDB to False. |
Nie. |
| klucze | Określ nazwy kolumn dla unikalnej identyfikacji wierszy. Można użyć pojedynczego klucza lub serii kluczy. Jeśli nie zostanie określony, używany jest klucz podstawowy. | Nie. |
Przykład 1. Dołączanie danych
"activities":[
{
"name": "CopyToAzureSqlMI",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<SQL Managed Instance output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "SqlMISink",
"tableOption": "autoCreate",
"writeBatchSize": 100000
}
}
}
]
Przykład 2: Wywoływanie procedury składowanej podczas kopiowania
Dowiedz się więcej na stronie Wywoływanie procedury składowanej z ujścia wystąpienia zarządzanego SQL.
"activities":[
{
"name": "CopyToAzureSqlMI",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<SQL Managed Instance output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "SqlMISink",
"sqlWriterStoredProcedureName": "CopyTestStoredProcedureWithParameters",
"storedProcedureTableTypeParameterName": "MyTable",
"sqlWriterTableType": "MyTableType",
"storedProcedureParameters": {
"identifier": { "value": "1", "type": "Int" },
"stringData": { "value": "str1" }
}
}
}
}
]
Przykład 3: Wstawianie lub aktualizowanie danych
"activities":[
{
"name": "CopyToAzureSqlMI",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<SQL Managed Instance output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "SqlMISink",
"tableOption": "autoCreate",
"writeBehavior": "upsert",
"upsertSettings": {
"useTempDB": true,
"keys": [
"<column name>"
]
},
}
}
}
]
Kopiowanie równoległe z wystąpienia zarządzanego SQL
Łącznik usługi Azure SQL Managed Instance w działaniu kopiowania zapewnia wbudowane partycjonowanie danych w celu równoległego kopiowania danych. Opcje partycjonowania danych można znaleźć na karcie Źródło działania kopiowania.
Po włączeniu partycjonowanej kopii aktywność kopiowania uruchamia równoległe zapytania do źródła SQL MI w celu załadowania danych według partycji. Stopień przetwarzania równoległego jest kontrolowany przez ustawienie w ramach działania kopiowania parallelCopies. Jeśli na przykład ustawisz parallelCopies na cztery, usługa jednocześnie generuje i wykonuje cztery zapytania na podstawie określonej opcji partycji i ustawień, a każde zapytanie pobiera część danych z wystąpienia zarządzanego SQL.
Zaleca się włączenie kopiowania równoległego przy użyciu partycjonowania danych, szczególnie w przypadku ładowania dużej ilości danych z wystąpienia zarządzanego SQL MI. Poniżej przedstawiono sugerowane konfiguracje dla różnych scenariuszy. Podczas kopiowania danych do magazynu danych opartego na plikach zaleca się zapisywanie w folderze jako wielu plików (tylko określ nazwę folderu), w tym przypadku wydajność jest lepsza niż zapisywanie w jednym pliku.
| Scenariusz | Sugerowane ustawienia |
|---|---|
| Pełne ładowanie z dużej tabeli z fizycznymi partycjami. |
Opcja partycji: Fizyczne podziały tabeli. Podczas wykonywania usługa automatycznie wykrywa partycje fizyczne i kopiuje dane według partycji. Aby sprawdzić, czy tabela ma partycję fizyczną, czy nie, możesz odwołać się do tego zapytania. |
| Pełne ładowanie z dużej tabeli, bez partycji fizycznych, z zastosowaniem kolumny liczbowej całkowitej lub datetime do partycjonowania danych. |
Opcje partycji: dynamiczne partycjonowanie zakresu. Kolumna partycji (opcjonalnie): określ kolumnę używaną do partycjonowania danych. Jeśli nie określono, zostanie użyta kolumna indeksu lub kolumna klucza podstawowego. Górna granica partycji i dolna granica partycji (opcjonalnie): Określ, czy chcesz ustalić krok partycji. Nie dotyczy to filtrowania wierszy w tabeli. Wszystkie wiersze w tabeli zostaną podzielone na partycje i skopiowane. Jeśli nie zostaną określone, działanie kopiowania automatycznie wykryje wartości. Jeśli na przykład kolumna partycji "ID" zawiera wartości z zakresu od 1 do 100, a dolna granica zostanie ustawiona na wartość 20, a górna granica to 80, z kopią równoległą jako 4, usługa pobiera dane według 4 partycji — identyfikatory w zakresie <=20, [21, 50], [51, 80] i >=81. |
| Załaduj dużą ilość danych przy użyciu zapytania niestandardowego, bez partycji fizycznych, natomiast z liczbą całkowitą lub kolumną date/datetime na potrzeby partycjonowania danych. |
Opcje partycji: dynamiczne partycjonowanie zakresu. Zapytanie: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>.Kolumna partycji: określ kolumnę używaną do partycjonowania danych. Górna granica partycji i dolna granica partycji (opcjonalnie): Określ, czy chcesz ustalić krok partycji. Nie jest to przeznaczone do filtrowania wierszy w tabeli, wszystkie wiersze w wyniku zapytania zostaną partycjonowane i skopiowane. Jeśli wartość nie zostanie określona, działanie kopiowania automatycznie ją wykryje. Jeśli na przykład kolumna partycji "ID" zawiera wartości z zakresu od 1 do 100, a dolna granica zostanie ustawiona jako 20 i górna granica jako 80, z kopią równoległą jako 4, usługa pobiera dane według 4 partycji — identyfikatory w zakresie <=20, [21, 50], [51, 80] i >=81. Poniżej przedstawiono więcej przykładowych zapytań dla różnych scenariuszy: 1. Wykonaj zapytanie względem całej tabeli: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition2. Kwerenda z tabeli z zaznaczeniem kolumny i dodatkowymi filtrami klauzuli where: SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>3. Kwerenda z podzapytaniami: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>4. Kwerenda z partycją w zapytaniu podrzędnym: SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T |
Najlepsze rozwiązania dotyczące ładowania danych z opcją partycji:
- Wybierz charakterystyczną kolumnę jako kolumnę partycji (np. klucz podstawowy lub unikatowy klucz), aby uniknąć niesymetryczności danych.
- Jeśli tabela ma wbudowaną partycję, użyj opcji partycji "Partycje fizyczne tabeli", aby uzyskać lepszą wydajność.
- Jeśli używasz środowiska Azure Integration Runtime do kopiowania danych, możesz ustawić większe "Jednostki Integracji Danych (DIU)" (>4), aby korzystać z większej liczby zasobów obliczeniowych. Sprawdź odpowiednie scenariusze tam.
- "Stopień równoległości kopiowania" określa liczby partycji; ustawienie tej liczby zbyt wysoko może czasami obniżyć wydajność. Zaleca się ustawienie tej liczby jako (DIU lub liczba węzłów IR hostowanych lokalnie) * (od 2 do 4)."
Przykład: pełne ładowanie z dużej tabeli z partycjami fizycznymi
"source": {
"type": "SqlMISource",
"partitionOption": "PhysicalPartitionsOfTable"
}
Przykład: zapytanie z dynamicznym podziałem na zakresy
"source": {
"type": "SqlMISource",
"query": "SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>",
"partitionOption": "DynamicRange",
"partitionSettings": {
"partitionColumnName": "<partition_column_name>",
"partitionUpperBound": "<upper_value_of_partition_column (optional) to decide the partition stride, not as data filter>",
"partitionLowerBound": "<lower_value_of_partition_column (optional) to decide the partition stride, not as data filter>"
}
}
Przykładowe zapytanie do sprawdzania partycji fizycznej
SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'
Jeśli tabela ma partycję fizyczną, zostanie wyświetlona wartość "HasPartition" jako "tak", jak pokazano poniżej.
Najlepsze rozwiązanie dotyczące ładowania danych do usługi SQL Managed Instance
Podczas kopiowania danych do usługi SQL Managed Instance może być wymagane inne zachowanie zapisu:
- Dołącz: Moje dane źródłowe mają tylko nowe rekordy.
- Upsert: Moje dane źródłowe mają zarówno wstawki, jak i aktualizacje.
- Zastąp: Chcę ponownie załadować całą tabelę wymiarów za każdym razem.
- Pisanie za pomocą logiki niestandardowej: potrzebuję dodatkowego przetwarzania przed ostatecznym wstawieniem do tabeli docelowej.
Zapoznaj się z odpowiednimi sekcjami, aby dowiedzieć się, jak skonfigurować i najlepsze rozwiązania.
Dołączanie danych
Dołączanie danych to domyślne zachowanie łącznika ujścia usługi SQL Managed Instance. Usługa wykonuje operację wstawiania zbiorczego, aby efektywnie zapisywać dane w tabeli. Źródło i ujście można skonfigurować odpowiednio w działaniu kopiowania.
Wykonywanie operacji upsert dla danych
Funkcja kopiowania teraz obsługuje natychmiastowe ładowanie danych do tymczasowej tabeli bazy danych, a następnie aktualizowanie danych w tabeli docelowej, jeśli istnieje klucz, w przeciwnym razie dodaje nowe dane. Aby dowiedzieć się więcej na temat ustawień upsert w działaniach kopiowania, zobacz SQL Managed Instance as a sink (Wystąpienie zarządzane SQL jako ujście).
Zastąp całą tabelę
Właściwość preCopyScript można skonfigurować w ujściu działania kopiowania. W takim przypadku dla każdego uruchomionego działania kopiowania usługa uruchamia skrypt jako pierwszy. Następnie uruchamia kopię, aby wstawić dane. Aby na przykład zastąpić całą tabelę najnowszymi danymi, określ skrypt, aby najpierw usunąć wszystkie rekordy przed zbiorczym załadowaniem nowych danych ze źródła.
Zapisywanie danych przy użyciu logiki niestandardowej
Kroki, które należy podjąć, aby zapisywać dane za pomocą logiki niestandardowej, są podobne do tych opisanych w sekcji Upsert data. Jeśli musisz zastosować dodatkowe przetwarzanie przed ostatecznym wstawieniem danych źródłowych do tabeli docelowej, możesz załadować dane do tabeli przejściowej, a następnie wywołać działanie procedury składowanej lub wywołać procedurę składowaną jako część ujścia działania kopiowania, aby przetworzyć dane.
Wywoływanie procedury składowanej z ujścia SQL
Podczas kopiowania danych do usługi SQL Managed Instance można również skonfigurować i wywołać procedurę składowaną określoną przez użytkownika z dodatkowymi parametrami w każdej partii tabeli źródłowej. Funkcja procedury składowanej korzysta z parametrów tabelarycznych.
Procedurę składowaną można użyć, gdy wbudowane mechanizmy kopiowania nie obsługują tego celu. Przykładem jest zastosowanie dodatkowego przetwarzania przed ostatecznym wstawieniem danych źródłowych do tabeli docelowej. Niektóre dodatkowe przykłady przetwarzania to, gdy chcesz scalić kolumny, wyszukać dodatkowe wartości i wstawić je do więcej niż jednej tabeli.
W poniższym przykładzie pokazano, jak za pomocą procedury składowanej wykonać operację upsert w tabeli w bazie danych programu SQL Server. Załóżmy, że dane wejściowe i docelowa tabela Marketing mają trzy kolumny: ProfileID, State i Category. Wykonaj upsert w oparciu o kolumnę ProfileID i zastosuj go tylko do określonej kategorii o nazwie "ProductA".
W bazie danych zdefiniuj typ tabeli o takiej samej nazwie jak sqlWriterTableType. Schemat typu tabeli jest taki sam jak schemat zwracany przez dane wejściowe.
CREATE TYPE [dbo].[MarketingType] AS TABLE( [ProfileID] [varchar](256) NOT NULL, [State] [varchar](256) NOT NULL, [Category] [varchar](256) NOT NULL )W bazie danych zdefiniuj procedurę składowaną o takiej samej nazwie jak sqlWriterStoredProcedureName. Obsługuje dane wejściowe z określonego źródła i scala je z tabelą wyjściową. Nazwa parametru typu tabeli w procedurze składowanej jest taka sama jak nazwa_tabeli zdefiniowana w zestawie danych.
CREATE PROCEDURE spOverwriteMarketing @Marketing [dbo].[MarketingType] READONLY, @category varchar(256) AS BEGIN MERGE [dbo].[Marketing] AS target USING @Marketing AS source ON (target.ProfileID = source.ProfileID and target.Category = @category) WHEN MATCHED THEN UPDATE SET State = source.State WHEN NOT MATCHED THEN INSERT (ProfileID, State, Category) VALUES (source.ProfileID, source.State, source.Category); ENDW potoku zdefiniuj sekcję docelowy SQL MI w działaniu kopiowania w następujący sposób:
"sink": { "type": "SqlMISink", "sqlWriterStoredProcedureName": "spOverwriteMarketing", "storedProcedureTableTypeParameterName": "Marketing", "sqlWriterTableType": "MarketingType", "storedProcedureParameters": { "category": { "value": "ProductA" } } }
Właściwości odwzorowania przepływu danych
Podczas przekształcania danych w przepływie mapowania danych można odczytywać i zapisywać w tabelach z usługi Azure SQL Managed Instance. Aby uzyskać więcej informacji, zobacz przekształcanie źródła i przekształcanie ujścia w przepływach danych mapowania.
Przekształcanie źródła
W poniższej tabeli wymieniono właściwości obsługiwane przez źródło usługi Azure SQL Managed Instance. Te właściwości można edytować na karcie Opcje źródła.
| Nazwa/nazwisko | Opis | Wymagane | Dozwolone wartości | Właściwość skryptu przepływu danych |
|---|---|---|---|---|
| Tabela | Jeśli wybierzesz opcję Tabela jako dane wejściowe, przepływ danych pobierze wszystkie dane z tabeli określonej w zestawie danych. | Nie. | - | - |
| Zapytanie | Jeśli wybierzesz pozycję Zapytanie jako dane wejściowe, określ zapytanie SQL, aby pobrać dane ze źródła, które zastępuje dowolną tabelę, którą określisz w zestawie danych. Korzystanie z zapytań to doskonały sposób na zmniejszenie liczby wierszy na potrzeby testowania lub wyszukiwania. Klauzula Order By nie jest obsługiwana, ale można ustawić pełną instrukcję SELECT FROM. Można również użyć funkcji tabeli zdefiniowanych przez użytkownika. select * from udfGetData() jest funkcją UDF w SQL, która zwraca tabelę, której można użyć w przepływie danych. Przykład zapytania: Select * from MyTable where customerId > 1000 and customerId < 2000 |
Nie. | String | kwerenda |
| Rozmiar partii | Określ rozmiar partii do dzielenia dużych danych na odczyty. | Nie. | Integer | batchSize |
| Poziom izolacji | Wybierz jeden z następujących poziomów izolacji: - Odczyt zatwierdzony - Odczyt niezatwierdzony (ustawienie domyślne) - Powtarzalny odczyt -Serializowalny - Brak (ignoruj poziom izolacji) |
Nie. | READ_COMMITTED READ_UNCOMMITTED ODCZYT POWTARZALNY SERIALIZOWALNY BRAK |
poziom izolacji |
| Włącz wyodrębnianie przyrostowe | Użyj tego ustawienia, aby poinformować usługę ADF o przetwarzaniu tylko tych wierszy, które uległy zmianie od czasu ostatniego wykonania potoku danych. | Nie. | - | - |
| Kolumna przyrostowa | W przypadku korzystania z funkcji wyodrębniania przyrostowego, należy wybrać kolumnę daty/godziny lub liczbową, która będzie używana jako znacznik czasu w tabeli źródłowej. | Nie. | - | - |
| Włączanie natywnego przechwytywania danych zmian (wersja zapoznawcza) | Użyj tej opcji, aby poinformować usługę ADF o przetwarzaniu tylko danych różnicowych przechwyconych przez technologię przechwytywania zmian SQL od czasu ostatniego wykonania potoku. Dzięki tej opcji dane różnicowe, w tym wstawianie wierszy, aktualizowanie i usuwanie, zostaną załadowane automatycznie bez konieczności wprowadzania kolumn przyrostowych. Przed użyciem tej opcji w usłudze ADF należy włączyć przechwytywanie zmian danych w usłudze Azure SQL MI. Aby uzyskać więcej informacji na temat tej opcji w usłudze ADF, zobacz przechwytywanie danych zmian natywnych. | Nie. | - | - |
| Rozpocznij czytanie od początku | Ustawienie tej opcji z włączonym wyodrębnianiem przyrostowym spowoduje, że usługa ADF odczyta wszystkie wiersze podczas pierwszego uruchomienia potoku z wyodrębnianiem przyrostowym. | Nie. | - | - |
Wskazówka
Wspólne wyrażenie tabeli (CTE) w SQL nie jest obsługiwane w trybie zapytania przepływu danych mapowania, ponieważ ten tryb wymaga, aby zapytania mogły być używane w klauzuli FROM zapytania SQL, ale CTE nie może być używane w ten sposób. Aby użyć CTE, należy utworzyć procedurę składowaną, korzystając z następującego zapytania:
CREATE PROC CTESP @query nvarchar(max)
AS
BEGIN
EXECUTE sp_executesql @query;
END
Następnie użyj trybu procedury składowanej w transformacji źródłowej przepływu danych mapowania i ustaw @query jak przykład with CTE as (select 'test' as a) select * from CTE. Następnie można użyć CTEs zgodnie z oczekiwaniami.
Przykład skryptu źródłowego usługi Azure SQL Managed Instance
Jeśli używasz usługi Azure SQL Managed Instance jako typu źródła, skojarzony skrypt przepływu danych to:
source(allowSchemaDrift: true,
validateSchema: false,
isolationLevel: 'READ_UNCOMMITTED',
query: 'select * from MYTABLE',
format: 'query') ~> SQLMISource
Przekształcenie ujścia
W poniższej tabeli wymieniono właściwości obsługiwane przez ujście usługi Azure SQL Managed Instance. Te właściwości można edytować na karcie Opcje ujścia.
| Nazwa/nazwisko | Opis | Wymagane | Dozwolone wartości | Właściwość skryptu przepływu danych |
|---|---|---|---|---|
| Metoda aktualizacji | Określ, jakie operacje są dozwolone w miejscu docelowym bazy danych. Ustawieniem domyślnym jest zezwalanie tylko na wstawianie. Aby zaktualizować, dodać lub zaktualizować lub usunąć wiersze, wymagane jest zastosowanie Alter row transformation do tagowania tych wierszy dla odpowiednich działań. |
Tak |
true lub false |
możliwe do usunięcia wstawialny możliwe do aktualizacji dodawalno-aktualizowalne |
| Kolumny kluczy | W przypadku aktualizacji, operacji upserts i delete należy ustawić kolumny kluczy, aby określić, który wiersz ma zostać zmieniony. Nazwa kolumny wybranej jako klucz będzie używana w ramach kolejnej aktualizacji, upsert, delete. W związku z tym należy wybrać kolumnę, która istnieje w mapowaniu ujścia. |
Nie. | Tablica | klucze |
| Pomiń zapisywanie kolumn kluczy | Jeśli nie chcesz zapisywać wartości w kolumnie klucza, wybierz pozycję "Pomiń pisanie kolumn kluczy". | Nie. |
true lub false |
skipKeyWrites |
| Akcja tabeli | Określa, czy należy ponownie utworzyć lub usunąć wszystkie wiersze z tabeli docelowej przed zapisem. - Brak: żadna akcja nie zostanie wykonana w tabeli. - Zrekonstruuj: tabela zostanie usunięta i utworzona ponownie. Wymagane w przypadku dynamicznego tworzenia nowej tabeli. - Truncate: Wszystkie wiersze z tabeli docelowej zostaną usunięte. |
Nie. |
true lub false |
odtworzyć obcinać |
| Rozmiar partii | Określ liczbę wierszy zapisywanych w każdej partii. Większe rozmiary partii zwiększają kompresję i optymalizację pamięci, ale istnieje ryzyko wystąpienia błędów pamięci podczas buforowania danych. | Nie. | Integer | batchSize |
| Skrypty SQL przed i po | Określ wielowierszowe skrypty SQL, które będą wykonywane przed (wstępne przetwarzanie) i po (przetwarzanie końcowe), gdy dane są zapisywane w docelowej bazie danych. | Nie. | String | preSQLs postSQLs |
Wskazówka
- Zaleca się podzielenie pojedynczych skryptów wsadowych z wieloma poleceniami na wiele partii.
- W ramach partii można uruchamiać tylko instrukcje języka DDL (Data Definition Language) i Języka manipulowania danymi (DML), które zwracają prostą liczbę aktualizacji. Dowiedz się więcej na temat wykonywania operacji wsadowych
Przykładowy skrypt ujścia usługi Azure SQL Managed Instance
Jeśli używasz usługi Azure SQL Managed Instance jako typu ujścia, skojarzony skrypt przepływu danych to:
IncomingStream sink(allowSchemaDrift: true,
validateSchema: false,
deletable:false,
insertable:true,
updateable:true,
upsertable:true,
keys:['keyColumn'],
format: 'table',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> SQLMISink
Właściwości czynności wyszukiwania
Aby dowiedzieć się więcej o właściwościach, sprawdź działanie wyszukiwania.
Właściwości działania GetMetadata
Aby dowiedzieć się więcej o właściwościach, sprawdź działanie GetMetadata
Mapowanie typów danych dla usługi SQL Managed Instance
Gdy dane są kopiowane do i z usługi SQL Managed Instance przy użyciu działania kopiowania, następujące mapowania są używane z typów danych usługi SQL Managed Instance do tymczasowych typów danych używanych wewnętrznie w usłudze. Aby dowiedzieć się, jak działanie kopiowania mapuje ze schematu źródłowego i typu danych do ujścia, zobacz Mapowania schematu i typu danych.
| Typ danych wystąpienia zarządzanego SQL | Typ danych usługi tymczasowej |
|---|---|
| bigint | Int64 |
| binarny | Bajt[] |
| bit | logiczny |
| char | Ciąg, Znak[] |
| data | DateTime |
| Data i czas | DateTime |
| datetime2 | DateTime |
| Datetimeoffset | DateTimeOffset |
| Dziesiętne | Dziesiętne |
| Atrybut FILESTREAM (typ varbinary(max)) | Bajt[] |
| float | Podwójna precyzja |
| obraz | Bajt[] |
| int | Int32 |
| pieniądze | Dziesiętne |
| nchar | Ciąg, Znak[] |
| ntekst | Ciąg, Znak[] |
| liczbowe | Dziesiętne |
| nvarchar | Ciąg, Znak[] |
| rzeczywiste | Pojedynczy |
| rowversion | Bajt[] |
| smalldatetime | DateTime |
| smallint | Int16 |
| smallmoney | Dziesiętne |
| sql_variant | Objekt |
| SMS | Ciąg, Znak[] |
| czas | przedział_czasu |
| sygnatura czasowa | Bajt[] |
| tinyint | Int16 |
| unikalny identyfikator | Identyfikator GUID |
| varbinary | Bajt[] |
| varchar | Ciąg, Znak[] |
| xml | String |
Uwaga
W przypadku typów danych mapujących na typ pośredni dziesiętny, funkcja Kopiuj obecnie obsługuje precyzję do 28. Jeśli masz dane, które wymagają precyzji większej niż 28, rozważ przekonwertowanie na ciąg w zapytaniu SQL.
Korzystanie z funkcji Always Encrypted
Podczas kopiowania danych z/do usługi SQL Managed Instance za pomocą funkcji Always Encrypted wykonaj poniższe kroki:
Przechowaj klucz główny kolumny (CMK) w usłudze Azure Key Vault. Dowiedz się więcej na temat konfigurowania funkcji Always Encrypted przy użyciu usługi Azure Key Vault
Upewnij się, że masz doskonały dostęp do magazynu kluczy, w którym jest przechowywany klucz główny kolumny (CMK). Zapoznaj się z tym artykułem , aby uzyskać wymagane uprawnienia.
Utwórz połączoną usługę w celu nawiązania połączenia z bazą danych SQL i włącz funkcję "Always Encrypted" przy użyciu tożsamości zarządzanej lub jednostki usługi.
Uwaga
Usługa SQL Managed Instance Always Encrypted obsługuje poniższe scenariusze:
- Magazyny danych źródła lub ujścia używają tożsamości zarządzanej lub jednostki usługi jako typu uwierzytelniania dostawcy kluczy.
- Magazyny danych źródła i ujścia używają tożsamości zarządzanej jako rodzaju uwierzytelniania dostawcy kluczy.
- Magazyny danych źródła i ujścia używają tej samej jednostki głównej usługi jako typu uwierzytelnienia dostawcy kluczy.
Uwaga
Obecnie funkcja Sql Managed Instance Always Encrypted jest obsługiwana tylko w przypadku przekształcania źródła w przepływach danych mapowania.
Natywne przechwytywanie zmian danych
Usługa Azure Data Factory może obsługiwać natywne funkcje przechwytywania danych zmian dla programów SQL Server, Azure SQL DB i Azure SQL MI. Zmienione dane, w tym wstawianie wierszy, aktualizowanie i usuwanie w magazynach SQL, można automatycznie wykrywać i wyodrębniać przez przepływ danych mapowania usługi ADF. Dzięki bezkodowemu doświadczeniu w mapowaniu przepływu danych, użytkownicy mogą łatwo zrealizować scenariusz replikacji danych z magazynów SQL, dodając bazę danych jako magazyn docelowy. Co więcej, użytkownicy mogą również tworzyć dowolną logikę przekształcania danych między operacjami, aby osiągnąć przyrostowy scenariusz ETL z repozytoriów SQL.
Upewnij się, że nazwy pipeline'u i działań pozostają niezmienione, aby punkty kontrolne mogły być rejestrowane przez usługę ADF w celu automatycznego pobierania zmienionych danych z ostatniego uruchomienia. Jeśli zmienisz nazwę pipeline'u lub nazwę działania, punkt kontrolny zostanie zresetowany, co oznacza, że będziesz musiał rozpocząć od początku lub uwzględnić zmiany od momentu kolejne uruchomienie. Jeśli chcesz zmienić nazwę kolejki lub nazwę działania, ale chcesz zachować punkt kontrolny, aby automatycznie uzyskiwać dane zmienione podczas ostatniego uruchomienia, użyj własnego klucza punktu kontrolnego w działaniu przepływu danych, aby to osiągnąć.
Podczas debugowania potoku ta funkcja działa tak samo. Pamiętaj, że punkt kontrolny zostanie zresetowany podczas odświeżania przeglądarki podczas uruchamiania debugowania. Po zadowoleniu z wyniku pipeline z działania debugowania, możesz przystąpić do opublikowania i uruchomienia pipeline. W chwili, gdy pierwszy raz uruchamiasz opublikowany potok, automatycznie zaczyna się od początku lub wprowadza zmiany od tej chwili.
W sekcji monitorowania zawsze masz możliwość ponownego uruchomienia potoku. Podczas wykonywania tych czynności zmienione dane są zawsze przechwytywane z poprzedniego punktu kontrolnego wybranego przebiegu potoku.
Przykład 1:
Jeśli bezpośrednio połączysz przekształcenie źródłowe, odwołując się do zestawu danych z włączoną funkcją SQL CDC, z przekształceniem docelowym, które odnosi się do bazy danych w przepływie danych mapowanych, zmiany wprowadzone w źródle SQL zostaną automatycznie zastosowane do docelowej bazy danych, w ten sposób łatwo uzyskasz scenariusz replikacji danych między bazami danych. Możesz użyć metody update w transformacji wyjściowej, aby wybrać, czy chcesz zezwolić na wstawianie, zezwolić na aktualizację lub zezwolić na usuwanie w docelowej bazie danych. Przykładowy skrypt w mapowaniu przepływu danych jest następujący.
source(output(
id as integer,
name as string
),
allowSchemaDrift: true,
validateSchema: false,
enableNativeCdc: true,
netChanges: true,
skipInitialLoad: false,
isolationLevel: 'READ_UNCOMMITTED',
format: 'table') ~> source1
source1 sink(allowSchemaDrift: true,
validateSchema: false,
deletable:true,
insertable:true,
updateable:true,
upsertable:true,
keys:['id'],
format: 'table',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true,
errorHandlingOption: 'stopOnFirstError') ~> sink1
Przykład 2:
Jeśli chcesz włączyć scenariusz ETL zamiast replikacji danych między bazami danych za pomocą SQL CDC, możesz użyć wyrażeń isInsert(1), isUpdate(1) i isDelete(1) w przepływie danych w mapowaniu, aby odróżnić wiersze z różnymi typami operacji. Poniżej przedstawiono jeden z przykładowych skryptów do mapowania przepływu danych, który wyprowadza jedną kolumnę z wartością: 1 - aby wskazać wstawione wiersze, 2 - aby wskazać zaktualizowane wiersze, i 3 - aby wskazać usunięte wiersze dla dalszych przekształceń w procesie przetwarzania danych różnicowych.
source(output(
id as integer,
name as string
),
allowSchemaDrift: true,
validateSchema: false,
enableNativeCdc: true,
netChanges: true,
skipInitialLoad: false,
isolationLevel: 'READ_UNCOMMITTED',
format: 'table') ~> source1
source1 derive(operationType = iif(isInsert(1), 1, iif(isUpdate(1), 2, 3))) ~> derivedColumn1
derivedColumn1 sink(allowSchemaDrift: true,
validateSchema: false,
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> sink1
Znane ograniczenie:
- Tylko zmiany netto z systemu CDC SQL zostaną załadowane przez system ADF za pośrednictwem cdc.fn_cdc_get_net_changes_.
Uaktualnianie wersji usługi Azure SQL Managed Instance
Aby uaktualnić wersję usługi Azure SQL Managed Instance, na stronie Edytuj połączoną usługę wybierz pozycję Zalecane w obszarze Wersja i skonfiguruj połączoną usługę, odwołując się do właściwości połączonej usługi dla zalecanej wersji.
Różnice między zalecaną i starszą wersją
W poniższej tabeli przedstawiono różnice między usługą Azure SQL Managed Instance przy użyciu zalecanej i starszej wersji.
| Zalecana wersja | Starsza wersja |
|---|---|
Obsługuj TLS 1.3 za pośrednictwem encrypt jako strict. |
Protokół TLS 1.3 nie jest obsługiwany. |
Powiązana zawartość
Aby uzyskać listę magazynów danych obsługiwanych jako źródła i ujścia działania kopiowania, zobacz Obsługiwane magazyny danych.