Vereisten en indeling voor de landingszone voor spiegeling openen
In dit artikel worden de vereisten voor de bewerking van de landingszone en tabel-/kolom voor open spiegeling in Microsoft Fabric beschreven.
Belangrijk
Deze functie is beschikbaar als preview-versie.
Nadat u uw geopende gespiegelde database hebt gemaakt via de Fabric-portal of openbare API in uw Fabric-werkruimte, krijgt u een URL voor de landingszone in OneLake op de startpagina van het gespiegelde database-item. In deze landingszone maakt uw toepassing een metagegevensbestand en landt u gegevens in Parquet-indeling (niet gecomprimeerd, Snappy, GZIP, ZSTD).
Landingszone
Voor elke gespiegelde database is er een unieke opslaglocatie in OneLake voor metagegevens en deltatabellen. Open mirroring biedt een landingszonemap voor de toepassing om een metagegevensbestand te maken en gegevens naar OneLake te pushen. Spiegeling bewaakt deze bestanden in de landingszone en leest de map voor nieuwe tabellen en gegevens die zijn toegevoegd.
Als u bijvoorbeeld tabellen (Table A
, Table B
, Table C
) hebt die moeten worden gemaakt in de landingszone, maakt u mappen zoals de volgende URL's:
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableA
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableB
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableC
Metagegevensbestand in de landingszone
Elke tabelmap moet een _metadata.json
bestand bevatten.
Dit bestand met metagegevens van de tabel bevat een JSON-record om momenteel alleen de unieke sleutelkolommen op te geven als keyColumns
.
Als u bijvoorbeeld kolommen C1
wilt declareren en C2
als een samengestelde unieke sleutel voor de tabel:
{
"keyColumns" : ["C1", "C2"]
}
Als keyColumns
of _metadata.json
niet is opgegeven, zijn bijwerken/verwijderen niet mogelijk. Dit bestand kan op elk gewenst moment worden toegevoegd, maar zodra het is toegevoegd keyColumns
, kan dit niet worden gewijzigd.
Gegevensbestand en -indeling in de landingszone
Open mirroring ondersteunt Parquet als de bestandsindeling van de landingszone met of zonder compressie. Ondersteunde compressieindelingen zijn Snappy, GZIP en ZSTD.
Alle Parquet-bestanden die naar de landingszone zijn geschreven, hebben de volgende indeling:
<RowMarker><DataColumns>
RowMarker
: kolomnaam is__rowMarker__
(inclusief twee onderstrepingstekens voor en narowMarker
).-
RowMaker
waarden:-
0
voor INSERT -
1
voor UPDATE -
2
voor DELETE -
4
voor UPSERT
-
-
Rijvolgorde: Alle logboeken in het bestand moeten in natuurlijke volgorde staan, zoals toegepast in transactie. Dit is belangrijk voor dezelfde rij die meerdere keren wordt bijgewerkt. Met open spiegeling worden de wijzigingen toegepast met behulp van de volgorde in de bestanden.
Bestandsvolgorde: Bestanden moeten worden toegevoegd in monotonisch toenemende aantallen.
Bestandsnaam: Bestandsnaam is 20 cijfers, zoals
00000000000000000001.parquet
voor het eerste bestand en00000000000000000002.parquet
voor het tweede. Bestandsnamen moeten in doorlopende getallen staan. Bestanden worden automatisch verwijderd door de mirroring-service, maar het laatste bestand wordt achtergelaten, zodat het uitgeverssysteem ernaar kan verwijzen om het volgende bestand op volgorde toe te voegen.
Eerste belasting
Voor de eerste belasting van gegevens in een geopende gespiegelde database moeten alle rijen INSERT hebben als rijmarkering. Zonder RowMarker
gegevens in een bestand behandelt spiegeling het hele bestand als insert.
Incrementele wijzigingen
Als u spiegeling opent, worden incrementele wijzigingen op volgorde gelezen en toegepast op de delta-doeltabel. Volgorde is impliciet in het wijzigingenlogboek en in de volgorde van de bestanden.
Bijgewerkte rijen moeten de volledige rijgegevens bevatten, met alle kolommen.
Hier volgen enkele voorbeeld parquet-gegevens van de rijgeschiedenis om de EmployeeLocation
for EmployeeID
E0001 te wijzigen van Redmond in Bellevue. In dit scenario is de EmployeeID
kolom gemarkeerd als een sleutelkolom in het metagegevensbestand in de landingszone.
__rowMarker__,EmployeeID,EmployeeLocation
0,E0001,Redmond
0,E0002,Redmond
0,E0003,Redmond
1,E0001,Bellevue
Als sleutelkolommen worden bijgewerkt, moet deze worden weergegeven door een DELETE op eerdere sleutelkolommen en een INSERT-rij met nieuwe sleutel en gegevens. De rijgeschiedenis om bijvoorbeeld de RowMarker
unieke id voor EmployeeID
E0001 te wijzigen in E0002. U hoeft niet alle kolomgegevens op te geven voor een DELETE-rij, alleen de sleutelkolommen.
__rowMarker__,EmployeeID,EmployeeLocation
0,E0001,Bellevue
2,E0001,NULL
0,E0002,Bellevue
Tabelbewerkingen
Open mirroring ondersteunt tabelbewerkingen, zoals tabellen toevoegen, neerzetten en de naam ervan wijzigen.
Tabel toevoegen
Met spiegeling openen worden alle tabellen opgehaald die door de toepassing aan de landingszone zijn toegevoegd. Open spiegelingscans voor nieuwe tabellen in elke iteratie.
Tabel neerzetten
Met spiegeling openen wordt de mapnaam bijgehouden. Als een tabelmap wordt verwijderd, wordt de tabel in de gespiegelde database verwijderd door spiegeling.
Als een map opnieuw wordt gemaakt, wordt de tabel verwijderd door spiegeling te openen en opnieuw te maken met de nieuwe gegevens in de map, bereikt door de ETag voor de map bij te houden.
Wanneer u een tabel probeert te verwijderen, kunt u proberen de map te verwijderen, maar er is een kans dat het openen van spiegeling nog steeds gebruikmaakt van de gegevens uit de map, waardoor een verwijderingsfout voor uitgever ontstaat.
Tabelnaam wijzigen
Als u de naam van een tabel wilt wijzigen, verwijdert u de map en maakt u deze opnieuw met initiƫle en incrementele gegevens. Gegevens moeten opnieuw worden ingevuld in de hernoemde tabel.
Schema
Een tabelpad kan worden opgegeven in een schemamap. Een schemalandingszone moet een <schemaname>.schema
mapnaam hebben. Er kunnen meerdere schema's zijn en er kunnen meerdere tabellen in een schema zijn.
Als u bijvoorbeeld schema's (, Schema1
) en tabellen (Schema2
Table A
, , Table B
Table C
) hebt die moeten worden gemaakt in de landingszone, maakt u mappen zoals de volgende paden in OneLake:
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableA
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableB
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema2.schema/TableC
Tabelkolommen en kolombewerkingen
Kolomtypen
- Eenvoudige parquet-typen worden ondersteund in de landingszone.
- Complexe typen moeten worden geschreven als een JSON-tekenreeks.
- Binaire complexe typen, zoals geografie, afbeeldingen, enzovoort, kunnen worden opgeslagen als binair type in de landingszone.
Kolom toevoegen
Als er nieuwe kolommen worden toegevoegd aan de Parquet-bestanden, worden de kolommen door het openen van spiegeling toegevoegd aan de deltatabellen.
Kolom verwijderen
Als een kolom uit de nieuwe logboekbestanden wordt verwijderd, opent u spiegelingsarchieven NULL
voor die kolommen in nieuwe rijen en bevatten oude rijen de kolommen die aanwezig zijn in de gegevens. Als u de kolom wilt verwijderen, verwijdert u de tabel en maakt u de tabelmap opnieuw in de landingszone, wat resulteert in de recreatie van de Delta-tabel met nieuwe schema's en gegevens.
Bij het openen van spiegeling worden altijd alle kolommen uit de vorige versie van toegevoegde gegevens gecombineerd. Als u een kolom wilt verwijderen, maakt u de tabel/map opnieuw.
Kolomtype wijzigen
Als u een kolomtype wilt wijzigen, verwijdert en maakt u de map opnieuw met initiƫle en incrementele gegevens met het nieuwe kolomtype. Als u een nieuw kolomtype oplevert zonder de tabel opnieuw te maken, treedt er een fout op en wordt de replicatie voor die tabel gestopt. Zodra de tabelmap opnieuw is gemaakt, wordt de replicatie hervat met nieuwe gegevens en schema's.
Kolomnaam wijzigen
Als u de naam van een kolom wilt wijzigen, verwijdert u de tabelmap en maakt u de map opnieuw met alle gegevens en met de nieuwe kolomnaam.