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.
Liquid clustering is een optimalisatietechniek voor gegevensindeling die tabelpartitionering vervangt en ZORDER. Het vereenvoudigt tabelbeheer en optimaliseert queryprestaties door gegevens automatisch te ordenen op basis van clustersleutels.
In tegenstelling tot traditionele partitionering kunt u clustersleutels opnieuw definiëren zonder bestaande gegevens te herschrijven. Hierdoor kan uw gegevensindeling zich ontwikkelen naast veranderende analysebehoeften. Liquid clustering is van toepassing op zowel streamingtabellen als gerealiseerde weergaven.
Important
Liquid clustering is algemeen beschikbaar voor Delta Lake-tabellen met Databricks Runtime 15.4 LTS en hoger, en in openbare preview voor Apache Iceberg-tabellen in Databricks Runtime 16.4 LTS en hoger. Databricks raadt aan de nieuwste Databricks Runtime te gebruiken voor de beste prestaties.
Beheerde Apache Iceberg v3-tabellen ondersteunen ook verwijderingsvectoren, rijtracering, gelijktijdigheid op rijniveau en automatische liquide clustering. Voor deze mogelijkheden is Databricks Runtime 18.0 en hoger vereist. Zie Apache Iceberg v3-functies gebruiken.
Wanneer moet u liquid clustering gebruiken
Databricks raadt vloeibare clustering aan voor alle nieuwe tabellen, waaronder streamingtabellen en gerealiseerde weergaven. De volgende scenario's profiteren met name van clustering:
- Queries die filteren op kolommen met hoge kardinaliteit.
- Tabellen met ernstige ongelijkheid van gegevens.
- Snel groeiende tabellen waarvoor onderhoud en afstemming nodig zijn.
- Tabellen met gelijktijdige schrijfvereisten.
- Tabellen met verschillende of veranderende toegangspatronen.
- Tabellen waarbij een typische partitiesleutel resultaten kan retourneren van te veel of te weinig partities.
Liquid clustering inschakelen
U kunt vloeistofclustering inschakelen voor een bestaande niet-gepartitioneerde tabel of tijdens het maken van een tabel. Samenvoegen is niet compatibel met partitionering of ZORDER. Databricks raadt aan om het platform alle indelings- en optimalisatiebewerkingen voor gegevens in uw tabel te laten beheren. Nadat u liquid clustering hebt ingeschakeld, voert u OPTIMIZE taken uit om gegevens incrementeel te clusteren. Zie Hoe clustering te activeren.
Tabellen maken met clustering
Als u liquide clustering wilt inschakelen, voegt u CLUSTER BY toe aan een instructie voor het maken van tabellen, zoals in de voorbeelden hieronder. In Databricks Runtime 14.3 LTS en hoger kunt u DataFrame-API's en DeltaTable-API's gebruiken in Python of Scala om liquide clustering in te schakelen voor Delta Lake-tabellen.
SQL
Een lege tabel maken met clustering:
CREATE TABLE table1 (col0 INT, col1 STRING) CLUSTER BY (col0);
Als u een tabel wilt maken op basis van bestaande gegevens met clusteren, moet CLUSTER BY na de tabelnaam staan, niet in de SELECT-clausule:
CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;
Een tabelstructuur met inbegrip van de clusterconfiguratie kopiëren:
CREATE TABLE table3 LIKE table1;
Python
Een lege tabel maken met clustering met behulp van de DeltaTable API:
(DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute())
Een tabel maken op basis van een bestaand DataFrame:
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
Een tabel maken met behulp van de DataFrameWriterV2 API (beschikbaar in Databricks Runtime 14.2 en hoger):
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Scala
Een lege tabel maken met clustering met behulp van de DeltaTable API:
DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute()
Een tabel maken op basis van een bestaand DataFrame:
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
Een tabel maken met behulp van de DataFrameWriterV2 API (beschikbaar in Databricks Runtime 14.2 en hoger):
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Important
Wanneer u de DataFrame-API's gebruikt om clustersleutels in te stellen, kunt u alleen clustersleutels opgeven tijdens het maken van tabellen of wanneer u de overwrite-modus gebruikt (zoals bij CREATE OR REPLACE TABLE-bewerkingen). U kunt clustersleutels niet wijzigen wanneer u de modus gebruikt append .
Als u clustersleutels in een bestaande tabel wilt wijzigen tijdens het toevoegen van gegevens, gebruikt u SQL-opdrachten ALTER TABLE om de clusterconfiguratie afzonderlijk van uw schrijfbewerkingen voor gegevens te wijzigen. Zie Clusteringsleutels wijzigen.
In Databricks Runtime 16.4 LTS en hoger kunt u tabellen maken waarvoor liquide clustering is ingeschakeld met behulp van Structured Streaming-schrijfbewerkingen, zoals in de volgende voorbeelden:
SQL
CREATE TABLE table1 (
col0 STRING,
col1 DATE,
col2 BIGINT
)
CLUSTER BY (col0, col1);
Python
(spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
)
Scala
spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Warning
Delta Lake-tabellen waarvoor liquid clustering is ingeschakeld, gebruiken Delta Writer versie 7 en lezer versie 3. Delta-clients die deze protocollen niet ondersteunen, kunnen deze tabellen niet lezen. U kunt tabelprotocolversies niet downgraden. Bekijk de compatibiliteit en protocollen van Delta Lake-functies.
Als u de standaardinschakeling van functies, zoals verwijderingsvectoren, wilt overschrijven, raadpleegt u Standaardinschakeling van functies overschrijven (optioneel).
Inschakelen voor bestaande tabellen
Ga als volgt te werk om liquide clustering in te schakelen voor een bestaande niet-gepartitioneerde Delta Lake-tabel:
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)
Houd rekening met het volgende voor beheerde Apache Iceberg-tabellen:
- Voor tabellen met de v2-specificatie moet u verwijderingsvectoren en rijtracering expliciet uitschakelen bij het inschakelen van liquide clustering op een bestaande tabel.
- Voor tabellen met de v3-specificatie is het uitschakelen van deze functies niet vereist omdat verwijderingsvectoren en het bijhouden van rijen worden ondersteund. Zie Apache Iceberg v3-functies gebruiken.
Opmerking
Het standaardgedrag past clustering niet toe op eerder geschreven gegevens. Als u het opnieuw clusteren wilt afdwingen, gebruikt OPTIMIZE FULL of OPTIMIZE FULL WHERE <predicate>. Zie Force reclustering.
Een gepartitioneerde tabel converteren naar liquide clustering
In Databricks Runtime 18.1 en hoger gebruikt u REPLACE PARTITIONED BY WITH CLUSTER BY in een ALTER TABLE-instructie om een bestaande gepartitioneerde Delta Lake-tabel te converteren naar liquid clustering. Conversie minimaliseert de downtime van lezer en schrijver en ondersteunt zowel externe als beheerde tabellen. Na de conversie ondersteunt de tabel leesbewerkingen met Databricks Runtime 13.3 LTS en hoger.
Opmerking
Voor beheerde Iceberg-tabellen is conversie niet nodig omdat deze tabellen partitiedefinities gebruiken als liquide clusteringsleutels. Als u de conversieopdracht uitvoert, wordt er een fout gegenereerd.
De voordelen van het converteren van gepartitioneerde tabellen naar liquide clustering zijn onder andere:
- Prestatieverbeteringen voor tabellen die last hebben van onvoldoende gegevensoverslag of overpartitionering.
- Automatische prestatieverbeteringen, met behulp van
CLUSTER BY AUTO, voor tabellen met vaak veranderende querypatronen. - Clusteringkolommen zijn flexibel en eenvoudig te wijzigen, terwijl partitionering stijf en moeilijk te wijzigen is.
- Verminderde schrijfconflicten omdat tabellen met liquide clustering gelijktijdigheid op rijniveau mogelijk maken. Zie concurrentie op rijniveau.
Syntax
ALTER TABLE <table_name>
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]
De CLUSTER BY component ondersteunt de volgende opties:
-
( <clustering_columns> ): Hiermee geeft u nieuwe clusteringkolommen op. Databricks raadt aan om de nieuwe clusteringkolommen vergelijkbaar te houden met de oorspronkelijke partitiekolommen. Het gebruik van zeer verschillende kolommen activeert een grote herclusteringsbewerking tijdens de eersteOPTIMIZEuitvoering. -
AUTO: Gebruikt de huidige partitiekolommen als de eerste clusteringkolommen en laat voorspellende optimalisatie in de loop van de tijd aanpassen. Alleen beschikbaar voor beheerde tabellen in Unity Catalog. Zie Automatische vloeistofclustering. - Er zijn geen opties opgegeven: gebruikt de huidige partitiekolommen als de nieuwe clusteringkolommen.
Zie Migreren van partitionering of Z-volgorde voor hulp bij het kiezen van clustersleutels bij het migreren vanuit gepartitioneerde tabellen.
Voorbeelden
Ga als volgt te werk om te clusteren op andere kolommen dan de oorspronkelijke partitiekolommen, zoals voor een tabel die is gepartitioneerd op (year, month, day):
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (day, id);
OPTIMIZE t1;
Opmerking
Als u wilt profiteren van het wijzigen van clusterkolommen, moet u uitvoeren OPTIMIZE.
Ga als volgt te werk om automatische vloeistofclustering te gebruiken en te beginnen met de huidige partitiekolommen:
ALTER TABLE t2 REPLACE PARTITIONED BY WITH CLUSTER BY AUTO;
Ga als volgt te werk om de huidige partitiekolommen als clusterkolommen te behouden:
ALTER TABLE t3 REPLACE PARTITIONED BY WITH CLUSTER BY;
Gelijktijdige lees- en schrijfbewerkingen verwerken tijdens conversie
Na de conversie wordt Databricks Runtime 13.3 LTS en hoger ondersteund voor lees- en schrijfbewerkingen. Azure Databricks raadt Databricks Runtime 15.4 LTS en hoger aan voor workloads die tijdens de conversie naar de tabel lezen of schrijven.
Zie de volgende tabel voor het verwerken van gelijktijdige lees- en schrijfworkloads tijdens de conversie:
| Werkbelastingtype | Leesacties tijdens conversie | Schrijfacties tijdens conversie |
|---|---|---|
| Batch | Geen downtime. Alle Databricks Runtime-versies kunnen de tabel lezen tijdens de conversie. | Geen downtime voor Databricks Runtime 15.4 en hoger. Voor Databricks Runtime 15.3 en lager raadt Databricks u aan workloads te onderbreken voordat u workloads converteert en vervolgens opnieuw start nadat de conversie is voltooid. |
| Streaming |
Met schematracering en kolomtoewijzing: Start de stream opnieuw zonder commits te verliezen. Zonder schematracking en kolomtoewijzing: De gegevensstroom veroorzaakt een uitzondering. Start opnieuw op met een nieuwe controlepuntlocatie en startversie. Commits raken niet verloren. |
Herstart de stream zonder commits te verliezen. |
Een conversie controleren of terugdraaien
Voer deze opdracht uit DESCRIBE EXTENDED om de nieuwe clusteringkolommen te bekijken om de conversie te bevestigen. Voer DESCRIBE HISTORY uit om een reeks REORG bewerkingen, een UPGRADE PROTOCOL bewerking en een REPLACE PARTITIONED BY WITH CLUSTER BY bewerking weer te geven.
Om een conversie terug te draaien, gebruikt u RESTORE om terug te keren naar de vorige versie. U kunt de tabel ook herschrijven met behulp van REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ....
Voer de volgende opdrachten uit om terug te keren met behulp van RESTORE:
ALTER TABLE my_table CLUSTER BY NONE;
ALTER TABLE my_table UNSET TBLPROPERTIES ('delta.liquid.hierarchicalClusteringColumns');
RESTORE TABLE my_table TO VERSION AS OF <version_number_before_conversion>;
Zie RESTORE.
Een tabel converteren die is gepartitioneerd door een tijdstempelkolom
Als u een tabel (t1) wilt converteren die is gepartitioneerd door een tijdstempelkolom (timestamp_col) en de tijdstempelkolom als clustersleutel wilt gebruiken, moet u aanvullende configuraties instellen:
SET spark.databricks.delta.liquidConversion.statsGeneration.enabled = false;
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (timestamp_col, id);
ANALYZE TABLE t1 COMPUTE DELTA STATISTICS;
Als u een tijdstempelpartitiekolom probeert te converteren naar een clusterkolom zonder deze configuraties, treedt er een fout op:
ALTER TABLE REPLACE PARTITIONED BY WITH CLUSTER BY cannot auto-generate stats on table with column event_ts due to unsupported type: timestamp. Disable stats auto-generation by setting 'spark.databricks.delta.liquidConversion.statsGeneration.enabled' to 'false' and retry the command again. SQLSTATE: 42000
Beperkingen voor conversie
De volgende beperkingen gelden voor de REPLACE PARTITIONED BY WITH CLUSTER BY conversieopdracht:
- Streamingtabellen en gematerialiseerde weergaven die zijn gemaakt in de declaratieve pijplijnen van Lakeflow Spark worden niet ondersteund. Als u liquide clustering wilt gebruiken, moet u de definitie van de pijplijn bijwerken voor gebruik
CLUSTER BYin plaats vanPARTITIONED BY. - Tabellen die Gebruikmaken van Delta Delen met partitiefilters worden niet ondersteund. Zie Tabelpartities opgeven om te delen voor informatie over het filteren van partities voor Delta Sharing.
Clusteringsleutels verwijderen
Gebruik de volgende syntaxis om clustersleutels te verwijderen:
ALTER TABLE table_name CLUSTER BY NONE;
Clusteringsleutels kiezen
Kies clusteringsleutels op basis van de kolommen die het meest worden gebruikt in queryfilters. De juiste sleutels verbeteren het overslaan van gegevens en queryprestaties aanzienlijk.
Tip
Databricks raadt u aan om automatische liquide clustering te gebruiken om op intelligente wijze clusteringsleutels te selecteren op basis van uw querypatronen. Zie Automatische vloeistofclustering.
Richtlijnen voor sleutelselectie
Wanneer u handmatig clustersleutels opgeeft, kiest u kolommen op basis van de kolommen die het meest worden gebruikt in queryfilters. U kunt clusteringsleutels in elke volgorde definiëren. Als twee kolommen sterk zijn gecorreleerd, hoeft u slechts een van deze kolommen op te nemen als clusteringsleutel.
U kunt maximaal vier clustersleutels opgeven. Voor kleinere tabellen (minder dan 10 TB) kan het gebruik van meer clustersleutels de prestaties verminderen bij het filteren op één kolom. Filteren met vier sleutels presteert bijvoorbeeld slechter dan filteren met twee sleutels. Naarmate de tabelgrootte toeneemt, wordt dit prestatieverschil echter verwaarloosbaar voor query's met één kolom.
Clusteringsleutels moeten kolommen zijn waarop statistieken zijn verzameld. Delta Lake-tabellen verzamelen standaard statistieken voor de eerste 32 kolommen. Zie Specificeren van statistiekkolommen.
Ondersteunde gegevenstypen
Clustering ondersteunt deze gegevenstypen voor clustersleutels:
- Date
- Timestamp
- TimestampNTZ (Databricks Runtime 14.3 LTS en hoger)
- String
- Geheel getal, lang, kort, byte
- Float, Double, Decimal
U kunt groeperen op basis van een StructField met de puntnotatie, zoals CLUSTER BY (struct_col.field). Geneste structvelden worden ondersteund voor elke diepte, zoals CLUSTER BY (struct_col.nested.field). Het gegevenstype van het veld moet een van de ondersteunde typen in de voorgaande lijst zijn.
U kunt niet clusteren op een van de volgende manieren:
- Complexe typen, zoals
StructType,MapTypeofArrayType -
MapTypeenArrayType-elementen, zoalsmap_col['key'],array_col[0], ofmap_col.key.
Migreren van partitioneren of Z-ordering
Important
Databricks raadt u aan de automatische conversie met de opdracht REPLACE PARTITIONED BY WITH CLUSTER BY te gebruiken. Zie Een gepartitioneerde tabel converteren naar liquide clustering.
Als u een bestaande tabel converteert, kunt u de volgende aanbevelingen overwegen:
| Huidige techniek voor gegevensoptimalisatie | Aanbeveling voor clustersleutels |
|---|---|
| Partitionering in Hive-stijl | Gebruik partitiekolommen als clustersleutels. |
| Indexering van Z-volgorde | Gebruik de ZORDER BY kolommen als clustersleutels. |
| Hive-stijl partitioneren en Z-volgorde | Gebruik zowel partitiekolommen als ZORDER BY kolommen als clustersleutels. |
| Gegenereerde kolommen om kardinaliteit te verminderen (bijvoorbeeld datum voor een tijdstempel) | Gebruik de oorspronkelijke kolom als clustersleutel en maak geen gegenereerde kolom. |
Automatische vloeistofclustering
In Databricks Runtime 15.4 LTS en hoger kunt u automatische liquide clustering inschakelen voor door Unity Catalog beheerde Delta Lake-tabellen. Voor Apache Iceberg v3-tabellen die door Unity Catalog worden beheerd, is voor automatische liquide clustering Databricks Runtime 18.0 en hoger vereist. Met automatische vloeistofclustering kunnen Azure Databricks op intelligente wijze clusteringsleutels kiezen om de queryprestaties te optimaliseren met behulp van de CLUSTER BY AUTO-component.
Opmerking
Automatische liquid clustering wordt ook ondersteund voor gematerialiseerde weergaven en streamingtabellen, waaronder Lakeflow Spark Declarative Pipelines en zelfstandige pijplijnen. Geef CLUSTER BY AUTO in uw pijplijn of SQL-definitie op.
Hoe automatische vloeistofclustering werkt
Automatische vloeistofclustering vereist voorspellende optimalisatie voor automatische sleutelselectie- en clusterbewerkingen en wordt asynchroon uitgevoerd. Zie Voorspellende optimalisatie voor beheerde tabellen in Unity Catalog.
Automatische vloeistofclustering past intelligente optimalisaties toe op basis van uw gebruikspatronen:
- Analyseert de queryworkload: Azure Databricks analyseert de historische queryworkload van de tabel en identificeert de beste kandidaatkolommen voor clustering.
- Past zich aan wijzigingen aan: als uw querypatronen of gegevensdistributies na verloop van tijd veranderen, selecteert automatische liquide clustering nieuwe sleutels om de prestaties te optimaliseren.
- Kostenbewuste selectie: Azure Databricks wijzigt clusteringsleutels alleen wanneer de voorspelde kostenbesparingen door gegevens overslaan opwegen tegen de kosten voor gegevensclustering.
Automatische groepering van vloeistoffen kan om de volgende redenen niet in staat zijn om sleutels te selecteren:
- De tabel is te klein om te profiteren van vloeistofclustering.
- De tabel heeft al een effectief clusteringschema, ofwel uit eerdere handmatige sleutels of natuurlijke invoegvolgorde die overeenkomt met querypatronen.
- De tabel heeft geen frequente query's.
- U gebruikt Databricks Runtime 15.4 LTS of hoger niet.
U kunt automatische liquide clustering toepassen voor alle beheerde Unity Catalog-tabellen, ongeacht de gegevens- en querykenmerken. De heuristiek bepaalt of het voordelig is om clustersleutels te selecteren.
Compatibiliteit van Databricks Runtime-versies
U kunt tabellen lezen of schrijven waarvoor automatische clustering is ingeschakeld vanuit alle Databricks Runtime-versies die ondersteuning bieden voor liquide clustering. Intelligente sleutelselectie is echter afhankelijk van metagegevens die zijn geïntroduceerd in Databricks Runtime 15.4 LTS.
Gebruik Databricks Runtime 15.4 LTS of hoger om ervoor te zorgen dat automatisch geselecteerde sleutels profiteren van al uw workloads en dat deze workloads worden overwogen bij het selecteren van nieuwe sleutels.
Automatische vloeistofclustering in- of uitschakelen
SQL
Een tabel maken met automatische vloeistofclustering:
CREATE OR REPLACE TABLE table1 (column01 int, column02 string) CLUSTER BY AUTO;
Automatische liquide clustering inschakelen voor een bestaande tabel, inclusief tabellen met handmatig opgegeven sleutels:
ALTER TABLE table1 CLUSTER BY AUTO;
Als u initiële tips voor clusteringkolommen voor het selecteren van sleutels wilt instellen, stelt u de clusteringsleutels in en schakelt u vervolgens automatische clustering in:
ALTER TABLE table1 CLUSTER BY (c1, c2);
ALTER TABLE table1 CLUSTER BY AUTO;
U kunt ook de Python-API gebruiken om hints in één bewerking in te stellen.
Om het automatisch clusteren van vloeistoffen uit te schakelen:
ALTER TABLE table1 CLUSTER BY NONE;
Automatische vloeistofclustering uitschakelen en clusteringkolommen opgeven:
ALTER TABLE table1 CLUSTER BY (column01, column02);
Als voor een bestaande tabel automatische liquid clustering is ingeschakeld, wordt automatische clustering uitgeschakeld wanneer CREATE OR REPLACE table_name zonder CLUSTER BY AUTO wordt uitgevoerd, en blijven de clusteringkolommen niet behouden. Als u automatische vloeistofclustering en eerder geselecteerde kolommen wilt behouden, neemt u CLUSTER BY AUTO op in de replace-instructie. Voorspellende CLUSTER BY AUTOoptimalisatie maakt gebruik van de historische queryworkload voor de tabel om de beste clusteringsleutels te identificeren.
Python
De Python-API is beschikbaar in Databricks Runtime 16.4 en hoger. U kunt Python alleen gebruiken wanneer u een tabel maakt of vervangt. Gebruik SQL om de clusterByAuto status van een bestaande tabel te wijzigen.
Een tabel met automatische vloeistofclustering maken met behulp van DataFrameWriter:
df = spark.read.table("table1")
df.write
.format("delta")
.option("clusterByAuto", "true")
.saveAsTable(...)
Initiële clusteringkolomhints instellen voor sleutelselectie met behulp van DataFrameWriter:
df.write
.format("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.saveAsTable(...)
Een tabel met automatische vloeistofclustering maken met behulp van DataFrameWriterV2:
df.writeTo(...).using("delta")
.option("clusterByAuto", "true")
.create()
Initiële clusteringkolomhints instellen voor sleutelselectie met behulp van DataFrameWriterV2:
df.writeTo(...).using("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.create()
Een streamingtabel maken met automatische liquid clustering:
spark.readStream.table("source_table")
.writeStream
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Initiële clusteringkolomhints instellen voor sleutelselectie in een streamingtabel:
spark.readStream.table("source_table")
.writeStream
.clusterBy("column1", "column2")
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Wanneer u .clusterBy gebruikt voor selectiehints voor clustersleutels in combinatie met .option('clusterByAuto', 'true'), is het gedrag als volgt:
- Als hiermee automatische vloeistofclustering voor het eerst wordt ingesteld, worden de clusterkolommen ingesteld op de opgegeven kolommen in
.clusterBy. - Als dit een bestaande tabel is waarvoor automatische liquide clustering is ingeschakeld, wordt er slechts eenmaal een
.clusterByhint geaccepteerd. De kolommen die zijn opgegeven door.clusterBy, worden bijvoorbeeld alleen ingesteld als de tabel geen clusterkolommen heeft ingesteld.
Important
Wanneer u DataFrame-API's gebruikt, kan de optie alleen worden ingesteld wanneer u de clusterByAuto modus gebruikt overwrite . U kunt clusterByAuto niet instellen wanneer u de modus append gebruikt. Deze beperking is hetzelfde als bij het handmatig instellen van clusterkolommen. U kunt clusterinstellingen alleen configureren tijdens het maken van tabellen of vervangingsbewerkingen met behulp van overwrite de modus.
Als tijdelijke oplossing, als u de clusterByAuto status van een bestaande tabel wilt wijzigen tijdens het toevoegen van gegevens, gebruikt u SQL-opdrachten ALTER TABLE om de clusterconfiguratie afzonderlijk van uw schrijfbewerkingen voor gegevens te wijzigen.
Controleren of automatische clustering ingeschakeld is
Om te controleren of een tabel automatische liquid clustering heeft ingeschakeld, gebruikt u DESCRIBE TABLE of SHOW TBLPROPERTIES.
Als automatische vloeistofclustering is ingeschakeld, wordt de clusterByAuto eigenschap ingesteld op true. De clusteringColumns eigenschap toont de huidige clusterkolommen die automatisch of handmatig zijn geselecteerd.
Beperkingen
Automatische vloeistofclustering is niet beschikbaar voor beheerde Apache Iceberg v2-tabellen. Het wordt ondersteund voor beheerde Apache Iceberg v3-tabellen in Databricks Runtime 18.0 en hoger.
Gegevens schrijven naar een geclusterde tabel
Als u naar een geclusterde Delta Lake-tabel wilt schrijven, moet u een Delta Writer-client gebruiken die alle functies van delta-schrijfprotocoltabellen ondersteunt die worden gebruikt door liquid clustering. Als u naar een geclusterde Iceberg-tabel wilt schrijven, kunt u de Iceberg REST Catalog-API van Unity Catalog gebruiken. In Azure Databricks moet u Databricks Runtime 13.3 LTS en hoger gebruiken.
Bewerkingen die clustering ondersteunen bij schrijven
Bewerkingen die clusteren bij het schrijven zijn onder andere:
-
INSERT INTObewerkingen -
CTASenRTASuitspraken -
COPY INTOvanuit Parquet-formaat spark.write.mode("append")
Drempelwaarden voor grootte voor clustering
Clustering bij schrijven wordt alleen geactiveerd wanneer de gegevens in de transactie voldoen aan een groottedrempel. Deze drempelwaarden variëren per aantal clusterkolommen en zijn lager voor beheerde Unity Catalog-tabellen dan andere Delta Lake-tabellen.
| Aantal clusterkolommen | Drempelwaarde voor beheerde tabellen in Unity Catalog | Drempelwaarde voor andere Delta Lake-tabellen |
|---|---|---|
| 1 | 64 MB | 256 MB |
| 2 | 256 MB | 1 GB |
| 3 | 512 MB | 2 GB |
| 4 | 1 GB | 4 GB |
Omdat niet alle bewerkingen liquid clustering toepassen, beveelt Databricks aan om OPTIMIZE regelmatig uit te voeren, zodat alle gegevens efficiënt worden geclusterd.
Streaming-werkbelastingen
Structured Streaming-workloads ondersteunen clustering bij schrijven wanneer u de Spark-configuratie instelt spark.databricks.delta.liquid.eagerClustering.streaming.enabled op true. Clustering voor deze workloads wordt alleen geactiveerd als ten minste één van de laatste vijf streaming-updates een drempelwaarde overschrijdt uit de bovenstaande tabel.
Hoe clustering te activeren
Voorspellende optimalisatie voert OPTIMIZE automatisch opdrachten uit voor ingeschakelde tabellen. Zie Voorspellende optimalisatie voor beheerde tabellen in Unity Catalog. Wanneer u predictive optimization gebruikt, raadt Databricks aan om geplande OPTIMIZE taken uit te schakelen.
Als u clustering wilt activeren, moet u Databricks Runtime 13.3 LTS of hoger gebruiken. Databricks raadt Databricks Runtime 17.3 LTS en hoger aan voor snellere OPTIMIZE prestaties op grote tabellen. Gebruik de OPTIMIZE opdracht in de tabel:
OPTIMIZE table_name;
Liquid clustering is incrementeel, wat betekent dat OPTIMIZE alleen gegevens worden herschreven als dat nodig is om tegemoet te komen aan gegevens die clustering nodig hebben.
OPTIMIZE herschrijft geen gegevensbestanden met clustersleutels die niet overeenkomen met de gegevens die worden geclusterd. Zie Force reclustering.
Als u geen voorspellende optimalisatie gebruikt, raadt Databricks aan om regelmatige OPTIMIZE taken te plannen voor het clusteren van gegevens. Voor tabellen met veel updates of invoegingen raadt Databricks aan om elke één of twee uur een OPTIMIZE taak te plannen. Omdat liquide clustering incrementeel is, worden de meeste OPTIMIZE taken voor geclusterde tabellen snel uitgevoerd.
Opnieuw clusteren forceren
In Databricks Runtime 16.4 LTS en hoger kunt u het opnieuw clusteren van alle records in een tabel afdwingen met de volgende syntaxis:
OPTIMIZE table_name FULL;
Important
Als u OPTIMIZE FULL uitvoert, worden alle bestaande gegevens indien nodig opnieuw geclusterd. Voor grote tabellen die nog niet eerder zijn geclusterd op de opgegeven sleutels, kan deze bewerking uren duren.
Voer OPTIMIZE FULL uit wanneer u clustering voor de eerste keer inschakelt of clusteringsleutels wijzigt. Als u eerder OPTIMIZE FULL hebt uitgevoerd en er geen wijzigingen zijn aangebracht in clustersleutels, wordt OPTIMIZE FULL hetzelfde uitgevoerd als OPTIMIZE. In dit scenario OPTIMIZE wordt gebruikgemaakt van een incrementele benadering en worden alleen bestanden herschreven die nog niet eerder zijn gecomprimeerd. Gebruik altijd OPTIMIZE FULL om ervoor te zorgen dat de gegevensindeling de huidige clusteringsleutels weerspiegelt.
Gedeeltelijke herclustering
In Databricks Runtime 18.1 en hoger kunt u reclustering afdwingen voor een subset van records met behulp van OPTIMIZE FULL WHERE <predicate>. Een bestand wordt opgenomen als een deel van het bereik overlapt met het predicaat. Zie Parameters.
OPTIMIZE events FULL WHERE event_date >= '2025-01-01';
Gegevens uit een geclusterde tabel lezen
U kunt gegevens lezen in een geclusterde Delta Lake-tabel met behulp van een Delta Lake-client die ondersteuning biedt voor het lezen van verwijderingsvectoren. Met behulp van de REST Catalog-API van Iceberg kunt u gegevens lezen in een geclusterde Iceberg-tabel. Liquid clustering verbetert de queryprestaties door het automatisch overslaan van gegevens bij het filteren op clustersleutels.
SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";
Clusteringsleutels beheren
Bekijk hoe een tabel is geclusterd
U kunt opdrachten gebruiken DESCRIBE om de clustersleutels voor een tabel weer te geven, zoals in de volgende voorbeelden:
DESCRIBE TABLE table_name;
DESCRIBE DETAIL table_name;
Wijzig clusteringssleutels
U kunt clustersleutels voor een tabel op elk gewenst moment wijzigen door een ALTER TABLE opdracht uit te voeren, zoals in het volgende voorbeeld:
ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);
Wanneer u clustersleutels wijzigt, gebruiken volgende OPTIMIZE bewerkingen en schrijfbewerkingen de nieuwe clusteringbenadering, maar worden bestaande gegevens niet opnieuw geschreven. Zie Force reclustering als u bestaande gegevens wilt herschrijven met de bijgewerkte clustersleutels.
U kunt clustering ook uitschakelen door de sleutels in te stellen op NONE, zoals in het volgende voorbeeld:
ALTER TABLE table_name CLUSTER BY NONE;
Bij het instellen van clustersleutels op NONE worden geclusterde gegevens niet herschreven, maar wordt voorkomen dat toekomstige OPTIMIZE-bewerkingen clustersleutels gebruiken.
Gebruiken van liquid clustering vanuit een externe engine
U kunt vloeistofclustering inschakelen op beheerde Iceberg-tabellen van externe Iceberg-engines. Als u vloeistofclustering wilt inschakelen, geeft u partitiekolommen op bij het maken van een tabel. Unity Catalog interpreteert de partities als clusteringsleutels. Voer bijvoorbeeld de onderstaande opdracht uit in OSS Spark:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY c1;
Om liquid clustering uit te schakelen:
ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;
Clusteringsleutels wijzigen met Iceberg-partitie-evolutie:
ALTER TABLE main.schema.icebergTable ADD PARTITION FIELD c2;
Als u een partitie opgeeft met behulp van een buckettransformatie, wordt de expressie in Unity Catalog verwijderd en wordt de kolom gebruikt als clusteringsleutel:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));
Compatibiliteit voor tabellen met vloeibare clustering
Liquid clustering maakt gebruik van Delta Lake-tabelfuncties waarvoor specifieke Databricks Runtime-versies nodig zijn voor lezen en schrijven. Tabellen die zijn gemaakt met liquide clustering in Databricks Runtime 14.3 LTS en hoger, gebruiken standaard controlepunt V2. U kunt tabellen lezen en schrijven met controlepunt V2 in Databricks Runtime 13.3 LTS en hoger. Zie Controlepunt V2.
Als u lezers wilt ondersteunen die Databricks Runtime 12.2 LTS naar 13.2 gebruiken, schakelt u controlepunt V2 uit en downgradet u het tabelprotocol. Zie Downgraden naar de klassieke versie.
Standaardinstellingen voor inschakelen van functie overschrijven (optioneel)
U kunt de standaardinschakeling van Delta Lake-tabel functies overschrijven bij het inschakelen van liquid clustering. Hiermee voorkomt u upgrades van de lezer- en schrijfprotocollen die zijn gekoppeld aan deze tabelfuncties. U moet een bestaande tabel hebben om de volgende stappen uit te voeren:
Hiermee
ALTER TABLEstelt u de tabeleigenschap in waarmee een of meer functies worden uitgeschakeld. Als u bijvoorbeeld verwijderingsvectoren wilt uitschakelen, voert u het volgende uit:ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);Schakel vloeistofclustering in de tabel in door het volgende uit te voeren:
ALTER TABLE <table_name> CLUSTER BY (<clustering_columns>)
De volgende tabel bevat informatie over de Delta-functies die u kunt overschrijven en hoe het inschakelen van invloed is op de compatibiliteit met Databricks Runtime-versies:
| Delta-functie | Runtime-compatibiliteit | Eigenschap om activering te overschrijven | Effecten op vloeistofclustering indien uitgeschakeld |
|---|---|---|---|
| Verwijderingsvectoren | Lees- en schrijfbewerkingen vereisen Databricks Runtime 12.2 LTS en hoger. | 'delta.enableDeletionVectors' = false |
Als u verwijderingsvectoren uitschakelt, schakelt u ook gelijktijdige verwerking op rijniveau uit, waardoor de kans groter wordt dat transacties en clusterbewerkingen met elkaar conflicteren. Zie concurrentie op rijniveau.DELETE, MERGEen UPDATE opdrachten kunnen langzamer worden uitgevoerd. |
| Rijvolgsysteem | Schrijvers vereisen Databricks Runtime 13.3 LTS en hoger. Kan worden gelezen uit elke Databricks Runtime-versie. | 'delta.enableRowTracking' = false |
Als u het bijhouden van rijen uitschakelt, wordt ook concurrency op rijniveau uitgeschakeld, waardoor transacties en clusteringbewerkingen meer kans hebben op conflicten. Zie concurrentie op rijniveau. |
| Controlepunt V2 | Lees- en schrijfbewerkingen vereisen Databricks Runtime 13.3 LTS en hoger. | 'delta.checkpointPolicy' = 'classic' |
Geen effect op het clusteringsgedrag van vloeistof. Zie Controlepunt V2. |
Beperkingen
- Databricks Runtime 15.1 en lager: Clustering bij het schrijven ondersteunt geen query's van bronnen die filters, joins of aggregaties bevatten.
- Databricks Runtime 15.4 LTS en hieronder: u kunt geen tabel maken waarvoor liquide clustering is ingeschakeld met behulp van een Structured Streaming-schrijfbewerking. U kunt Structured Streaming gebruiken om gegevens naar een bestaande tabel te schrijven waarvoor liquide clustering is ingeschakeld.
-
Apache Iceberg v2: gelijktijdigheid op rijniveau wordt niet ondersteund in beheerde Apache Iceberg v2-tabellen, omdat verwijderingsvectoren en rijtracering niet worden ondersteund.
- Gelijktijdigheid op rijniveau wordt ondersteund in beheerde Apache Iceberg v3-tabellen omdat de v3-specificatie verwijderingsvectoren en rijtracering ondersteunt. Zie Apache Iceberg v3-functies gebruiken.