Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden patronen aanbevolen voor het opslaan van semi-gestructureerde gegevens, afhankelijk van hoe uw organisatie de gegevens gebruikt. Azure Databricks biedt functies, systeemeigen gegevenstypen en querysyntaxis om te werken met semi-gestructureerde, geneste en complexe gegevens.
De volgende overwegingen zijn van invloed op het patroon dat u moet gebruiken:
- Veranderen de velden of typen in de gegevensbron regelmatig?
- Hoeveel unieke totaalvelden zijn opgenomen in de gegevensbron?
- Moet u uw workloads optimaliseren voor schrijf- of leesbewerkingen?
Databricks raadt aan om gegevens op te slaan als Delta-tabellen voor downstreamquery's.
Variant gebruiken
In Databricks Runtime 15.3 en hoger kunt u het VARIANT type gebruiken om semi-gestructureerde JSON-gegevens op te slaan met behulp van een geoptimaliseerde codering waarmee JSON-tekenreeksen beter presteren voor lees- en schrijfbewerkingen.
Het VARIANT type heeft vergelijkbare toepassingen als JSON-tekenreeksen. Sommige workloads profiteren nog steeds van het gebruik van structs, kaarten en matrices, met name voor gegevens met bekende schema's die profiteren van geoptimaliseerde gegevensindeling en statistiekenverzameling.
Zie de volgende artikelen voor meer informatie:
- Variantgegevens opvragen
- Hoe verschilt variant dan JSON-tekenreeksen?
- Gegevens opnemen als semi-gestructureerd varianttype
JSON-tekenreeksen gebruiken
U kunt gegevens opslaan in één tekenreekskolom met behulp van standaard JSON-opmaak en vervolgens queryvelden in de JSON met behulp van : notatie.
Veel systemen voeren records uit als tekenreeks- of byte-gecodeerde JSON-records. Het opnemen en opslaan van deze records als tekenreeksen vergt zeer weinig verwerkingscapaciteit. U kunt de to_json functie ook gebruiken om elke struct van gegevens om te zetten in een JSON-tekenreeks.
Houd rekening met de volgende sterke en zwakke punten bij het opslaan van gegevens als JSON-tekenreeksen:
- Alle waarden worden opgeslagen als tekenreeksen zonder typegegevens.
- JSON ondersteunt alle gegevenstypen die kunnen worden weergegeven met behulp van tekst.
- JSON ondersteunt tekenreeksen van willekeurige lengte.
- Er zijn geen limieten voor het aantal velden dat kan worden weergegeven in één JSON-gegevenskolom.
- Gegevens vereisen geen voorverwerking voordat ze naar de tabel worden geschreven.
- U kunt typeproblemen in de gegevens oplossen die voorkomen in downstream-workloads.
- JSON biedt de slechtste prestaties bij lezen, omdat u de hele tekenreeks voor elke query moet parseren.
JSON-tekenreeksen bieden veel flexibiliteit en een eenvoudig te implementeren oplossing voor het ophalen van onbewerkte gegevens in een Lakehouse-tabel. U kunt ervoor kiezen om JSON-tekenreeksen voor veel toepassingen te gebruiken, maar deze zijn vooral handig wanneer het belangrijkste resultaat van een workload een volledige en nauwkeurige weergave van een gegevensbron voor downstreamverwerking opslaat. Enkele gebruiksvoorbeelden kunnen zijn:
- Streaminggegevens opnemen uit een wachtrijservice zoals Kafka.
- Reacties op REST API-query's vastleggen.
- Onbewerkte records opslaan vanuit een upstream-gegevensbron die niet wordt beheerd door uw team.
Ervan uitgaande dat uw opnamelogica flexibel is, moet het opslaan van gegevens als een JSON-tekenreeks flexibel zijn, zelfs als u nieuwe velden, wijzigingen in de gegevensstructuur tegenkomt of wijzigingen in de gegevensbron typt. Hoewel downstreamworkloads mogelijk mislukken vanwege deze wijzigingen, bevat uw tabel een volledige geschiedenis van de brongegevens. Dit betekent dat u problemen kunt oplossen zonder dat u terug hoeft te gaan naar de gegevensbron.
Structs gebruiken
U kunt semi-gestructureerde gegevens opslaan met structs en gebruikmaken van alle ingebouwde functionaliteit van kolommen, met behoud van de geneste structuur van de gegevensbron.
Met Delta Lake kunt u structs op dezelfde manier gebruiken als kolommen. In een Delta Lake-tabel maken de Parquet-gegevensbestanden een kolom voor elk veld in een struct. U kunt structvelden gebruiken als clustersleutels en u kunt statistieken over structs verzamelen voor het overslaan van gegevens. U kunt een tabel niet partitioneren op basis van een struct-veld. Gebruik in plaats daarvan liquid clustering. Zie Liquid Clustering gebruiken voor tabellen.
Structs bieden over het algemeen de beste prestaties bij lezen, omdat ze alle optimalisaties voor het overslaan van gegevens ondersteunen en afzonderlijke velden opslaan als kolommen. De prestaties kunnen beginnen te lijden wanneer het aantal kolommen dat aanwezig is, in de honderden komt.
Elk veld in een struct heeft een gegevenstype, dat bij het schrijven net als bij kolommen wordt afgedwongen. Daarom vereisen structs volledige voorverwerking van gegevens. Dit kan nuttig zijn wanneer u alleen gevalideerde gegevens naar een tabel wilt laten wegschrijven, maar het kan leiden tot gegevensverlies of mislukte taken bij het verwerken van foutief gevormde records uit upstream-systemen.
Structs zijn minder flexibel dan JSON-streams voor schemaontwikkeling, of dit nu het gaat om veranderende gegevenstypen of het toevoegen van nieuwe velden.
Kaarten en matrices gebruiken
U kunt een combinatie van kaarten en matrices gebruiken om semi-gestructureerde gegevensindelingen systeemeigen te repliceren in Delta Lake. Statistieken kunnen niet worden verzameld op velden die met deze typen zijn gedefinieerd, maar ze bieden evenwichtige prestaties voor zowel lezen als schrijven voor semi-gestructureerde gegevenssets met ongeveer 500 velden.
Zowel de sleutel als de waarde van kaarten worden getypt, zodat gegevens vooraf worden verwerkt en schema wordt afgedwongen bij schrijven.
Om query's te versnellen, raadt Databricks aan om velden op te slaan die vaak worden gebruikt om gegevens als afzonderlijke kolommen te filteren.
Moet ik mijn gegevens plat maken?
Als u uw gegevens opslaat met behulp van JSON of kaarten, kunt u overwegen velden op te slaan die vaak worden gebruikt voor het filteren van query's als kolommen. Statistiekenverzameling, partitionering en clustering zijn niet beschikbaar voor velden in JSON-tekenreeksen of kaarten. U hoeft dit niet te doen voor gegevens die zijn opgeslagen als structs.
Syntaxis voor het werken met geneste gegevens
Raadpleeg de volgende bronnen voor informatie over het werken met geneste gegevens: