Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule szczegółowo przedstawiono wymagania dotyczące operacji strefy docelowej i tabeli/kolumny dotyczące otwierania dublowania w usłudze Microsoft Fabric.
Po utworzeniu otwartej dublowanej bazy danych za pośrednictwem portalu sieci szkieletowej lub publicznego interfejsu API w obszarze roboczym usługi Fabric otrzymasz adres URL strefy docelowej w usłudze OneLake na stronie głównej elementu dublowanej bazy danych. Ta strefa docelowa to miejsce, w którym aplikacja tworzy plik metadanych i dane lądowe w formacie Parquet lub rozdzielanym tekstem, w tym CSV. Pliki mogą być nieskompresowane lub kompresowane za pomocą przystawki, GZIP lub ZSTD. Aby uzyskać więcej informacji, zobacz obsługiwane pliki danych i format.
Strefa docelowa
Dla każdej bazy danych z lustrzanym odbiciem istnieje unikalne miejsce przechowywania w usłudze OneLake dla metadanych i tabel różnicowych. Otwieranie dublowania udostępnia folder strefy docelowej dla aplikacji w celu utworzenia pliku metadanych i wypychania danych do usługi OneLake. Dublowanie monitoruje te pliki w strefie docelowej i odczytuje folder dla nowych tabel i dodanych danych.
Jeśli na przykład masz tabele (Table A, Table B, Table C), które mają zostać utworzone w strefie docelowej, utwórz foldery podobne do następujących adresów URL:
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableAhttps://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableBhttps://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableC
Plik metadanych w strefie docelowej
Każdy folder tabeli musi zawierać _metadata.json plik.
Ten plik metadanych tabeli zawiera rekord JSON, który obecnie określa tylko unikatowe kolumny klucza jako keyColumns.
Aby na przykład zadeklarować kolumny C1 i C2 jako unikatowy klucz złożony dla tabeli:
{
"keyColumns" : ["C1", "C2"]
}
Jeśli keyColumns lub _metadata.json nie zostaną określone, aktualizacje/usunięcia nie są możliwe. Ten plik można dodać w dowolnym momencie, ale po dodaniu keyColumns nie można go zmienić.
Plik zdarzeń w strefie docelowej
Jeśli jesteś partnerem wdrażającym otwarte rozwiązanie replikacji lub klientem, który chce podać nam więcej szczegółów na temat typu źródła, które jest replikowane do OneLake, dodaliśmy nowy plik _partnerEvents.json. Nie jest to wymagane, ale zdecydowanie zalecane.
Przykład:
{
"partnerName": "testPartner",
"sourceInfo": {
"sourceType": "SQL",
"sourceVersion": "2019",
"additionalInformation": {
"testKey": "testValue"
}
}
}
Wymagania dotyczące _partnerEvents.json pliku:
- Plik
_partnerEvents.jsonpowinien zostać umieszczony na poziomie dublowanej bazy danych w strefie docelowej, a nie na tabelę. - Może
sourceTypeto być dowolny ciąg opisowy reprezentujący źródło. Nie ma żadnych ograniczeń dotyczących tej wartości, na przykład: "SQL", "Oracle", "Salesforce" itp. -
partnerNameMożna ustawić dowolną nazwę wybranej nazwy i być reprezentatywną dla nazwy organizacji. Zachowaj spójność nazw we wszystkich dublowaniach baz danych.
Plik danych i format w strefie docelowej
Funkcja otwórz dublowanie obsługuje wprowadzanie danych w formatach tekstowych parquet lub rozdzielonych. Pliki mogą być nieskompresowane lub kompresowane za pomocą przystawki, GZIP lub ZSTD.
Wymagania parquet
Wymagania dotyczące tekstu rozdzielanego
W przypadku formatu tekstu rozdzielanego plik musi mieć wiersz nagłówka w pierwszym wierszu.
W przypadku tekstu rozdzielanego podaj dodatkowe informacje w
_metadata.jsonpliku. Właściwość jest wymaganaFileExtension. Rozdzielane pliki tekstowe mają następujące właściwości i wartości domyślne:Majątek Description Notatki FirstRowAsHeaderPrawda/fałsz dla nagłówka pierwszego wiersza. Wymagane do obsługi truerozdzielanych plików tekstowych.RowSeparatorZnak używany do oddzielania wierszy. Wartość domyślna to \r\n. Obsługuje również programy\ni\r.ColumnSeparatorZnak używany do oddzielania kolumn. Wartość domyślna to ,. Obsługuje również elementy;,|i\t.QuoteCharacterZnak używany do cudzysłowu zawierającego ograniczniki. Wartość domyślna to ". Może również być'lub pusty ciąg.EscapeCharacterSłuży do ucieczki cudzysłowów wewnątrz cytowanych wartości. Wartość domyślna to \. Może to być/również wartość ,"lub pusta.NullValueReprezentacja ciągu wartości null. Może to być "","N/A","null"itp.EncodingKodowanie znaków pliku. Wartość domyślna to UTF-8. Obsługuje szeroką gamę kodowań, w tymascii,utf-16,windows-1252itp.SchemaDefinitionDefiniuje nazwy kolumn, typy i wartość null. Ewolucja schematu nie jest obsługiwana. FileFormatFormat pliku danych. Wartość domyślna to CSV, jeśli nie zostanie określona. Musi być"DelimitedText"przeznaczony dla formatów innych niż CSV.FileExtensionOkreśla rozszerzenie pliku, takie jak .tsv,.psv.Wymagane w przypadku używania polecenia DelimitedText.Na przykład
_metadata.jsonplik dla.tsvpliku danych z czterema kolumnami:{ "KeyColumns": [ "id" ], "SchemaDefinition": { "Columns": [ { "Name": "id", "DataType": "Int32" }, { "Name": "name", "DataType": "String", "IsNullable": true }, { "Name": "age", "DataType": "Int32", "IsNullable": true }, { "Name": "seqNum", "DataType": "Int64", "IsNullable": false } ] }, "FileFormat": "DelimitedText", "FileExtension": "tsv", "FileFormatTypeProperties": { "FirstRowAsHeader": true, "RowSeparator": "\r\n", "ColumnSeparator": ",", "QuoteCharacter": "'", "EscapeCharacter": "\", "NullValue": "N/A", "Encoding": "UTF-8" } }Oczekuje się, że tylko rozdzielane formaty tekstu mają typ danych w pliku
_metadata.json. Pliki Parquet nie muszą określać informacji o typie kolumny. Obecnie obsługiwane typy danych:
| Obsługiwany typ danych | Description |
|---|---|
Double |
Liczba z liczbami dziesiętnymi, używana, gdy wymagana jest wysoka precyzja (na przykład 3,14159). |
Single |
Liczba z liczbami dziesiętnymi, ale mniej precyzyjna niż Podwójna (na przykład 3,14). |
Int16 |
Mała liczba całkowita, zazwyczaj z zakresu od -32 768 do 32 767. |
Int64 |
Bardzo duża liczba całkowita używana do dużych liczb lub identyfikatorów. |
Int32 |
Standardowa liczba całkowita, często używana do zliczania lub indeksowania. |
DateTime |
Pełna wartość daty i godziny (na przykład 2025-06-17 14:30:00). |
IDate |
Data kalendarza bez godziny (na przykład 2025-06-17). |
ITime |
Pełna wartość daty i godziny (na przykład 2025-06-17 14:30:00) |
String |
Dane tekstowe, takie jak nazwy, etykiety lub opisy. |
Boolean |
Wartość true lub false, często używana do przełączania lub tak/brak wyborów. |
ByteArray |
Nieprzetworzone dane binarne, takie jak pliki, obrazy lub zakodowana zawartość. |
Wymagania dotyczące formatu
Wszystkie pliki zapisane w strefie docelowej mają następujący format:
<rowMarker><DataColumns>
rowMarker: nazwa kolumny to__rowMarker__(w tym dwa podkreślenia przed i porowMarker).__rowMarker__wartości i zachowania:__rowMarker__(Scenariusz)Jeśli wiersz nie istnieje z tymi samymi kolumnami kluczy w miejscu docelowym Jeśli wiersz istnieje z tymi samymi kolumnami kluczy w miejscu docelowym 0(Wstaw)Wstaw wiersz do miejsca docelowego Wstaw wiersz do miejsca docelowego, bez sprawdzania poprawności pod kątem sprawdzania kolumny klucza dup. 1(Aktualizacja)Wstaw wiersz do miejsca docelowego, bez sprawdzania poprawności/wyjątku w celu sprawdzenia istnienia wiersza z tą samą kolumną klucza. Zaktualizuj wiersz przy użyciu tej samej kolumny klucza. 2(Usuń)Brak zmian danych, brak walidacji/wyjątku w celu sprawdzenia istnienia wiersza z tą samą kolumną klucza. Usuń wiersz z tą samą kolumną klucza. 4(Upsert)Wstaw wiersz do miejsca docelowego, bez sprawdzania poprawności/wyjątku w celu sprawdzenia istnienia wiersza z tą samą kolumną klucza. Zaktualizuj wiersz przy użyciu tej samej kolumny klucza. Kolejność wierszy: wszystkie dzienniki w pliku powinny być w naturalnej kolejności, zgodnie z zastosowaniem transakcji. Jest to ważne w przypadku tego samego wiersza aktualizowanego wiele razy. Otwieranie dublowania stosuje zmiany przy użyciu kolejności w plikach.
Kolejność plików: pliki powinny być dodawane w monotonicznie rosnącej liczbie.
Nazwa pliku: Nazwa pliku to 20 cyfr, na przykład
00000000000000000001.parquetdla pierwszego pliku, a00000000000000000002.parquetdrugi. Nazwy plików powinny być w liczbach ciągłych. Pliki zostaną usunięte automatycznie przez usługę dublowania, ale ostatni plik zostanie pozostawiony, aby system wydawcy mógł odwoływać się do niego w celu dodania następnego pliku w sekwencji.
Ważne
Kolumna __rowMarker__ musi być końcową kolumną na liście
Pliki niesekwencyjne
Obsługiwane są również pliki niekwercyjne; pliki będą odczytywane na podstawie sygnatury czasowej. Aby określić to i ustawić domyślne działanie na upsertowanie zmian zamiast wstawiania, zaktualizuj plik _metadata.json w następujący sposób:
{
"keyColumns" : ["id"],
"fileDetectionStrategy": LastUpdateTimeFileDetection,
"isUpsertDefaultRowMarker": true
}
Domyślne ustawienie opcji upsert nie zależy od plików niesekwencyjnych. Obsługiwane są wszystkie następujące kombinacje:
- Ustawić właściwość fileDetectionStrategy jako LastUpdateTimeFileDetection oraz isUpsertDefaultRowMarker jako true.
- Mieć tylko isUpsertDefaultRowMarker ustawione na true.
- Jest tylko fileDetectionStrategy jako LastUpdateTimeFileDetection.
- Default
Ładowanie początkowe
W przypadku początkowego ładowania danych do otwartej dublowanej bazy danych __rowMarker__ w początkowym pliku danych jest opcjonalny i nie jest zalecany. Dublowanie traktuje cały plik jako wstawkę, gdy __rowMarker__ nie istnieje.
Aby uzyskać lepszą wydajność i dokładne metryki, __rowMarker__ jest obowiązkowym polem tylko dla zmian przyrostowych w celu zastosowania operacji update/delete/upsert.
Zmiany przyrostowe
Otwieranie funkcji dublowania odczytuje przyrostowe zmiany w kolejności i stosuje je do docelowej tabeli delty. Kolejność jest niejawna w dzienniku zmian i w kolejności plików.
Zmiany danych są uznawane za zmiany przyrostowe po znalezieniu __rowMarker__ kolumny z dowolnego wiersza/pliku.
Zaktualizowane wiersze muszą zawierać pełne dane wierszy ze wszystkimi kolumnami.
Oto kilka przykładowych danych parquet dotyczących historii rekordu, aby zmienić EmployeeLocation wartość dla EmployeeID E0001 z Redmond na Bellevue. W tym scenariuszu kolumna EmployeeID została oznaczona jako kolumna klucza w pliku metadanych w strefie docelowej.
EmployeeID,EmployeeLocation,__rowMarker__
E0001,Redmond,0
E0002,Redmond,0
E0003,Redmond,0
E0001,Bellevue,1
Jeśli kolumny kluczy zostaną zaktualizowane, powinien zostać wyświetlony przez polecenie DELETE w poprzednich kolumnach kluczy i wiersze INSERT z nowym kluczem i danymi. Na przykład historia wierszy, aby zmienić __rowMarker__ unikatowy identyfikator E0001 EmployeeID na E0002. Nie musisz podawać wszystkich danych kolumn dla wiersza DELETE, tylko kolumn kluczy.
EmployeeID,EmployeeLocation,__rowMarker__
E0001,Bellevue,0
E0001,NULL,2
E0002,Bellevue,0
Operacje na tabelach
Funkcja otwierania dublowania obsługuje operacje tabel, takie jak dodawanie, usuwanie i zmienianie nazw tabel.
Dodawanie tabeli
Otwieranie funkcji dublowania pobiera dowolną tabelę dodaną do strefy docelowej przez aplikację. Otwórz skanowanie dublowania dla nowych tabel w każdej iteracji.
Upuść tabelę
Otwieranie dublowania śledzi nazwę folderu. Jeśli folder tabeli zostanie usunięty, otwórz dublowanie pomiń tabelę w dublowanej bazie danych.
Jeśli folder zostanie utworzony ponownie, otwórz dublowanie pomiń tabelę i ponownie utworzy ją przy użyciu nowych danych w folderze, wykonując śledzenie elementu ETag dla folderu.
Podczas próby usunięcia tabeli możesz spróbować usunąć folder, ale istnieje prawdopodobieństwo, że otwieranie dublowania nadal używa danych z folderu, powodując niepowodzenie usuwania dla wydawcy.
Zmienianie nazwy tabeli
Aby zmienić nazwę tabeli, upuść i ponownie utwórz folder przy użyciu danych początkowych i przyrostowych. Dane muszą być ponownie wypełniane do zmienionej tabeli.
Schema
Ścieżkę tabeli można określić w folderze schematu. Strefa docelowa <schemaname>.schema schematu powinna mieć nazwę folderu. Może istnieć wiele schematów i może istnieć wiele tabel w schemacie.
Jeśli na przykład masz schematy (, Schema1) i tabele (Schema2Table A, Table B, Table C), które mają zostać utworzone w strefie docelowej, utwórz foldery podobne do następujących ścieżek w usłudze OneLake:
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableAhttps://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableBhttps://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema2.schema/TableC
Kolumny tabeli i operacje kolumn
Typy kolumn
- Proste typy parquet są obsługiwane w strefie docelowej.
- Typy złożone powinny być zapisywane jako ciąg JSON.
- Typy złożone binarne, takie jak geografia, obrazy itp., mogą być przechowywane jako typ binarny w strefie docelowej.
Dodawanie kolumny
Jeśli nowe kolumny są dodawane do plików parquet lub CSV, otwórz dublowanie dodaje kolumny do tabel różnicowych.
Usuń kolumnę
Jeśli kolumna zostanie porzucona z nowych plików dziennika, otwórz magazyny NULL dublowania dla tych kolumn w nowych wierszach, a stare wiersze mają kolumny obecne w danych. Aby usunąć kolumnę, usuń tabelę i ponownie utwórz folder tabeli w strefie docelowej, co spowoduje odtworzenie tabeli delty z nowym schematem i danymi.
Otwarte dublowanie zawsze składa wszystkie kolumny z poprzedniej wersji dodanych danych. Aby usunąć kolumnę, utwórz ponownie tabelę/folder.
Zmienianie typu kolumny
Aby zmienić typ kolumny, upuść i ponownie utwórz folder z początkowymi i przyrostowymi danymi o nowym typie kolumny. Podanie nowego typu kolumny bez ponownego utworzenia tabeli powoduje wystąpienie błędu, a replikacja dla tej tabeli zostanie zatrzymana. Po ponownym utworzeniu folderu tabeli replikacja zostanie wznowiona przy użyciu nowych danych i schematu.
Zmienianie nazwy kolumny
Aby zmienić nazwę kolumny, usuń folder tabeli i ponownie utwórz folder ze wszystkimi danymi i nową nazwą kolumny.
Proces oczyszczania
Proces oczyszczania podczas otwierania dublowania przenosi wszystkie przetworzone pliki do oddzielnego folderu o nazwie _ProcessedFiles lub _FilesReadyToDelete. Po siedmiu dniach pliki zostaną usunięte z tego folderu.