Konfigurowanie bazy danych SQL w działaniu kopiowania (wersja zapoznawcza)
W tym artykule opisano sposób używania działania kopiowania w potoku danych do kopiowania danych z i do bazy danych SQL.
Obsługiwana konfiguracja
W przypadku konfiguracji każdej karty w działaniu kopiowania przejdź odpowiednio do poniższych sekcji.
Ogólne
Zapoznaj się z
Źródło
Następujące właściwości są obsługiwane w przypadku bazy danych SQL w karty Źródło działania kopiowania.
Następujące właściwości są wymagane:
Połączenie: Wybierz istniejącą bazę danych SQL, odnosząc się do kroku w tym artykule.
Użyjzapytań: możesz wybrać tabeli, querylub procedury składowanej. Poniższa lista zawiera opis konfiguracji każdego ustawienia:
Table: określ nazwę bazy danych SQL, aby odczytywać dane. Wybierz istniejącą tabelę z listy rozwijanej lub wybierz pozycję Wprowadź ręcznie, aby wprowadzić nazwę schematu i tabeli.
Zapytanie: określ niestandardowe zapytanie SQL do odczytu danych. Przykładem jest
select * from MyTable
. Możesz też wybrać ikonę ołówka, aby edytować w edytorze kodu.Procedura składowana: Wybierz procedurę składowaną z listy rozwijanej.
W obszarze Advancedmożna określić następujące pola:
limit czasu zapytania (w minutach): określ limit czasu wykonywania polecenia zapytania, wartość domyślna to 120 minut. Jeśli parametr jest ustawiony dla tej właściwości, dozwolone wartości są przedziałem czasu, takim jak "02:00:00" (120 minut).
poziom izolacji: określa zachowanie blokowania transakcji dla źródła SQL. Dozwolone wartości to: Odczyt zatwierdzony, Odczyt niezatwierdzony, Powtarzalny odczyt, Serializowalnelub Migawka. Aby uzyskać więcej informacji, zobacz IsolationLevel Enum.
Opcja partycjonowania: Wybierz opcje partycjonowania danych używane do ładowania danych z bazy danych SQL. Dozwolone wartości to: Brak (wartość domyślna), fizyczne partycje tabelii zakres dynamiczny. Po włączeniu opcji partycji (czyli nie Brak), stopień równoległości ładowania danych z bazy danych SQL jest kontrolowany przez parametr Stopień równoległości kopiowania w karcie ustawień działania kopiowania.
Brak: wybierz to ustawienie, aby nie używać partycji.
Partycje fizyczne tabeli: W przypadku korzystania z partycji fizycznej, kolumna partycji i mechanizm są automatycznie ustalane na podstawie definicji tabeli fizycznej.
zakres dynamiczny: w przypadku używania zapytania z włączonym wykonywaniem równoległym, parametr partycji zakresu (
?DfDynamicRangePartitionCondition
) jest wymagany. Przykładowe zapytanie:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
.Nazwa kolumny partycji: określ nazwę kolumny źródłowej w liczba całkowita lub typ typu data/godzina/data/godzina (
int
,smallint
,bigint
,date
,smalldatetime
,datetime
,datetime2
lubdatetimeoffset
) używany przez partycjonowanie zakresu na potrzeby kopiowania równoległego. Jeśli nie zostanie określony, indeks lub klucz podstawowy tabeli zostanie automatycznie wykryty i użyty jako kolumna partycji.Jeśli używasz zapytania do pobierania danych źródłowych, podłącz
?DfDynamicRangePartitionCondition
w klauzuli WHERE. Aby zapoznać się z przykładem, zobacz sekcjęParallel copy from SQL Database (Kopiowanie równoległe z usługi SQL Database).Górna granica partycji: określ maksymalną 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ą podzielone na partycje i skopiowane. Jeśli nie zostanie określona, operacja kopiowania automatycznie wykryje wartość. Aby zapoznać się z przykładem, zobacz sekcję
Parallel copy from SQL Database (Kopiowanie równoległe z usługi SQL Database).Partition lower bound: Określ minimalną 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ą podzielone na partycje i skopiowane. Jeśli nie zostanie określona, proces kopiowania automatycznie wykrywa tę wartość. Aby zapoznać się z przykładem, zobacz sekcję
Parallel copy from SQL Database (Kopiowanie równoległe z usługi SQL Database).
dodatkowe kolumny: dodaj więcej kolumn danych, aby przechowywać ścieżkę względną plików źródłowych lub wartość statyczną. Wyrażenie jest obsługiwane dla ostatniego. Aby uzyskać więcej informacji, zobacz Dodawanie dodatkowych kolumn podczas kopiowania.
Cel
Następujące właściwości są obsługiwane dla bazy danych SQL na karcie Miejsce docelowe w zadaniu kopiowania.
Następujące właściwości są wymagane:
connection: Select an existing SQL database refering to the step in this article(Wybierz istniejącą sql database).
opcja Tabela: wybierz pozycję z Użyj istniejącej lub Automatyczne tworzenie tabeli.
W przypadku wybrania opcji Użyj istniejącej:
- Table: określ nazwę bazy danych SQL do zapisywania danych. Wybierz istniejącą tabelę z listy rozwijanej lub wybierz pozycję Wprowadź ręcznie, aby wprowadzić nazwę schematu i tabeli.
W przypadku wybrania opcji Automatyczne tworzenie tabeli:
- Table: automatycznie tworzy tabelę (jeśli nie istnieje) w schemacie źródłowym. To działanie nie jest obsługiwane, gdy używana jest procedura składowana jako sposób zapisu.
W obszarze Advancedmożna określić następujące pola:
zachowanie zapisu: definiuje zachowanie zapisu, gdy źródłem są pliki z magazynu danych opartego na plikach. Możesz wybrać wstaw, upsert lub procedurę składowaną.
Wstaw: wybierz tę opcję, jeśli dane źródłowe zawierają wstawki.
Upsert: wybierz tę opcję, jeśli dane źródłowe zawierają zarówno wstawki, jak i aktualizacje.
Użyj bazy danych TempDB: Określ, czy używać globalnej tabeli tymczasowej, czy tabeli fizycznej jako tabeli pośredniej dla operacji upsert. Domyślnie usługa używa globalnej tabeli tymczasowej jako tabeli pośredniej, a to pole wyboru jest zaznaczone.
Jeśli zapisujesz duże ilości danych w bazie danych SQL, usuń zaznaczenie tego pola i określ nazwę schematu, w którym usługa Data Factory utworzy tabelę przejściową w celu załadowania danych nadrzędnych i automatycznego czyszczenia po zakończeniu. Upewnij się, że użytkownik ma uprawnienie do tworzenia tabeli w bazie danych i zmień uprawnienia w schemacie. Jeśli nie jest określona, globalna tabela tymczasowa jest używana jako przejściowa.Wybierz schemat bazy danych użytkownika: Gdy Użyj bazy danych TempDB nie jest zaznaczone, określ nazwę schematu, w ramach którego usługa Data Factory utworzy tabelę tymczasową do załadowania danych wejściowych i automatycznego ich usunięcia po zakończeniu. Upewnij się, że masz uprawnienie do tworzenia tabeli w bazie danych i zmień uprawnienia w schemacie.
Notatka
Musisz mieć uprawnienia do tworzenia i usuwania tabel. Domyślnie tabela tymczasowa będzie współdzielić ten sam schemat co tabela docelowa.
Kolumny klucza: wybierz kolumnę używaną do określenia, czy wiersz ze źródła pasuje do wiersza z miejsca docelowego.
Nazwa procedury składowanej: Wybierz procedurę składowaną z listy rozwijanej.
zbiorcze wstawianie blokady tabeli: wybierz Tak lub Nie. To ustawienie umożliwia zwiększenie wydajności kopiowania podczas operacji wstawiania zbiorczego w tabeli bez indeksu z wielu klientów. Aby uzyskać więcej informacji, przejdź do BULK INSERT (Transact-SQL)
skrypt przed kopiowaniem: określ skrypt, który ma zostać wykonany przed zapisaniem danych w tabeli docelowej w każdym uruchomieniu. Za pomocą tej właściwości można wyczyścić wstępnie załadowane dane.
limit czasu zapisu wsadowego: określ czas oczekiwania na zakończenie operacji wstawiania wsadowego przed upływem limitu czasu. Dozwolona wartość to przedział czasu. Wartość domyślna to "00:30:00" (30 minut).
Zapisuj rozmiar partii: określ liczbę wierszy do wstawienia do tabeli SQL na partię. Dozwolona wartość to liczba całkowita (liczba wierszy). Domyślnie usługa dynamicznie określa odpowiedni rozmiar partii na podstawie rozmiaru wiersza.
maksymalna liczba współbieżnych połączeń: określ górny limit połączeń współbieżnych ustanowionych w magazynie danych podczas uruchamiania działania. Określ wartość tylko wtedy, gdy chcesz ograniczyć połączenia współbieżne.
Mapowanie
W przypadku konfiguracji karty Mapowanie, jeśli nie zastosujesz bazy danych SQL z automatycznym tworzeniem tabel jako celu, przejdź do Mapowanie.
Jeśli zastosujesz bazę danych SQL z automatycznym tworzeniem tabel jako miejsce docelowe, oprócz konfiguracji w Mapowanie, możesz edytować typ kolumn docelowych. Po wybraniu Importuj schematymożna określić typ kolumny w miejscu docelowym.
Na przykład typ kolumny ID w źródle jest int i można zmienić go na typ zmiennoprzecinkowy podczas mapowania na kolumnę docelową.
Ustawienia
Aby uzyskać Ustawienia konfiguracji karty, przejdź do Konfigurowanie innych ustawień na karcie ustawienia.
Równoległa kopia z bazy danych SQL
Łącznik bazy danych SQL 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 kopii partycjonowanej działanie kopiowania uruchamia zapytania równoległe względem źródła bazy danych SQL w celu załadowania danych według partycji. Stopień równoległy jest kontrolowany przez Stopień równoległości kopiowania na karcie ustawień działania kopiowania. Jeśli na przykład ustawisz stopień równoległości kopiowania na cztery, usługa jednocześnie generuje i uruchamia cztery zapytania na podstawie określonej opcji partycji i ustawień, a każde zapytanie pobiera część danych z bazy danych 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 bazy danych SQL. 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 partycjami fizycznymi. |
Opcja partycjonowania: Fizyczne partycje 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 tej kwerendy. |
Pełne ładowanie z dużej tabeli, bez fizycznych partycji, z kolumną liczbową całkowitą lub typu datetime do partycjonowania danych. |
Opcje partycji: partycja zakresu dynamicznego. Kolumna partycji (opcjonalnie): określ kolumnę używaną do partycjonowania danych. Jeśli nie zostanie określona, używa się kolumny indeksu lub 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, operacja kopiowania automatycznie wykrywa wartości i może to zająć dużo czasu w zależności od wartości MIN i MAX. Zaleca się podanie górnej granicy i dolnej granicy. Jeśli na przykład kolumna partycji "ID" ma zakres wartości z zakresu od 1 do 100, a dolna granica to 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. |
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: Partycjonowanie według zakresu dynamicznego. 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 zdefiniować krok partycji. Nie jest to przeznaczone do filtrowania wierszy w tabeli, wszystkie wiersze w wyniku zapytania zostaną partycjonowane i skopiowane. Operacja kopiowania automatycznie wykrywa wartość, jeśli nie zostanie ona określona. 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 równoległym kopiowaniem 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: • Wykonaj zapytanie dotyczące całej tabeli: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition • Zapytanie z tabeli z wyborem kolumn i dodatkowymi filtrami klauzuli where: SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Kwerenda z podzapytaniami: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Zapytanie z partycjonowaniem w podzapytaniu: 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 wbudowane partycje, użyj opcji partycjonowania dla fizycznych partycji tabeli, aby poprawić wydajność.
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.
Podsumowanie tabeli
Poniższe tabele zawierają więcej informacji na temat działania kopiowania w bazie danych SQL.
Źródło
Nazwa | Opis | Wartość | Wymagane | Właściwość skryptu JSON |
---|---|---|---|---|
połączenia | Połączenie ze źródłowym magazynem danych. | <twoje połączenie> | Tak | połączenie |
Użyj zapytania | Sposób odczytywania danych. Zastosuj table, aby odczytywać dane z określonej tabeli lub stosować Query do odczytywania danych przy użyciu zapytań SQL. | • tabela • Zapytanie • procedura składowana |
Tak | / |
dla tabeli | ||||
nazwa schematu | Nazwa schematu. | < nazwę schematu > | Nie | schemat |
nazwa tabeli | Nazwa tabeli. | < nazwę tabeli > | Nie | stół |
Zapytanie | ||||
Zapytanie | Określ niestandardowe zapytanie SQL do odczytu danych. Na przykład: SELECT * FROM MyTable . |
< zapytań SQL > | Nie | sqlReaderQuery |
Procedura składowana | ||||
nazwa procedury składowanej | Nazwa procedury składowanej. | < Twoją nazwę procedury składowanej > | Nie | sqlReaderStoredProcedureName |
limit czasu zapytania (w minutach) | Limit czasu wykonywania polecenia zapytania, wartość domyślna to 120 minut. Jeśli parametr jest ustawiony dla tej właściwości, dozwolone wartości są przedziałem czasu, takim jak "02:00:00" (120 minut). | przedział czasu | Nie | limit czasu zapytania |
poziom izolacji | Określa zachowanie blokowania transakcji dla źródła SQL. | • Odczyt zatwierdzony • Odczytywanie niezatwierdzonych • Powtarzalny odczyt • Seryjny •Migawka |
Nie | isolationLevel: • ReadCommitted • OdczytNiezatwierdzony • Powtarzalny odczyt • Serializowalny •Migawka |
Opcja partycji | Opcje partycjonowania danych używane do ładowania danych z bazy danych SQL. | • Żaden Fizyczne partycje tabeli • Zakres dynamiczny |
Nie | opcje partycji • FizycznePartycyjeTabeli • DynamicRange |
dla zakresu dynamicznego | ||||
Nazwa kolumny partycji | Nazwa kolumny źródłowej w typu integer lub date/datetime (int , smallint , bigint , date , smalldatetime , datetime , datetime2 lub datetimeoffset ) używana przez partycjonowanie zakresowe na potrzeby kopiowania równoległego. Jeśli nie zostanie określony, indeks lub klucz podstawowy tabeli zostanie automatycznie wykryty i użyty jako kolumna partycji. Jeśli używasz zapytania do pobierania danych źródłowych, podłącz ?DfDynamicRangePartitionCondition w klauzuli WHERE. |
< "nazwy kolumn partycji" > | Nie | partitionColumnName |
górna granica partycji | 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ą partycjonowane i skopiowane. Jeśli nie zostanie określony, proces kopiowania automatycznie wykryje wartość. | Ustaw < górną granicę partycji > | Nie | partitionUpperBound |
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ą spartycjonowane i skopiowane. Jeśli nie zostanie określony, operacja kopiowania automatycznie wykrywa wartość. | < twoja dolna granica partycji > | Nie | dolna granica partycji |
dodatkowe kolumny | Dodaj więcej kolumn danych, aby przechowywać ścieżkę względną plików źródłowych lub wartość statyczną. Obsługiwane są wyrażenia dla tych ostatnich. | •Nazwa •Wartość |
Nie | dodatkoweKolumny: •nazwa •wartość |
Cel
Nazwa | Opis | Wartość | Wymagane | Właściwość skryptu JSON |
---|---|---|---|---|
połączenie | Połączenie z docelowym magazynem danych. | < > połączenia | Tak | połączenie |
opcje tabeli | Docelowa tabela danych. Wybierz spośród Użyj istniejącej tabeli lub Utwórz tabelę automatycznie. | Użyj istniejącej • Automatyczne tworzenie tabeli |
Tak | schemat stół |
Zachowanie podczas zapisu | Definiuje zachowanie zapisu, gdy źródłem są pliki z magazynu danych opartego na plikach. | •Wstawiać • Upsert • Procedura składowana |
Nie | writeBehavior: • wstawić • wstaw/aktualizuj • nazwa procedury składowanej sqlWriterStoredProcedureName |
zbiorcze wstawianie blokady tabeli | To ustawienie pozwala na poprawę wydajności kopiowania podczas operacji zbiorczego wstawiania do tabeli bez indeksu, gdy dane pochodzą od wielu klientów. | Tak lub Nie (ustawienie domyślne) | Nie | sqlWriterUseTableLock: true lub false (wartość domyślna) |
dla Upsert | ||||
użyj bazy danych TempDB | Czy używać globalnej tabeli tymczasowej czy tabeli fizycznej jako tabeli pośredniej dla operacji upsert. | wybrane (domyślne) lub niezaznaczone | Nie | useTempDB: true (wartość domyślna) lub fałsz |
Kluczowe kolumny | Wybierz kolumnę używaną do określenia, czy wiersz ze źródła pasuje do wiersza z miejsca docelowego. | < twoja kolumna kluczowa> | Nie | Klucze |
Procedura składowana | ||||
nazwa procedury składowanej | 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 zaprogramowanej. | < nazwa procedury składowanej > | Nie | sqlWriterStoredProcedureName |
skrypt przed kopiowaniem | Skrypt dla czynności kopiowania do wykonania przed zapisaniem danych w tabeli docelowej przy każdym uruchomieniu. Za pomocą tej właściwości można wyczyścić wstępnie załadowane dane. |
<skrypt kopiowania wstępnego> łańcuch znaków |
Nie | preCopyScript |
zapisywanie limitu czasu wsadowego | Czas oczekiwania na zakończenie operacji wstawiania wsadowego przed upływem limitu czasu. Dozwolona wartość to przedział czasu. Wartość domyślna to "00:30:00" (30 minut). | przedział czasu | Nie | writeBatchTimeout |
rozmiar partii zapisu | Liczba wierszy do wstawiania do tabeli SQL na partię. Domyślnie usługa dynamicznie określa odpowiedni rozmiar partii na podstawie rozmiaru wiersza. |
<liczba wierszy> (liczba całkowita) |
Nie | writeBatchSize |
maksymalna liczba współbieżnych połączeń | Górny limit współbieżnych połączeń ustanawianych z magazynem danych podczas wykonywania działania. Określ wartość tylko wtedy, gdy chcesz ograniczyć połączenia współbieżne. |
<górny limit połączeń współbieżnych> (liczba całkowita) |
Nie | maksymalnaLiczbaPołączeńJednoczesnych (maxConcurrentConnections) |