Dela via


Partitioner

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Anmärkning

På hanterade Apache Iceberg-tabeller stöder Unity Catalog endast flytande klustring och tolkar partitioner som anges i PARTITION BY -satsen som klustringsnycklar för flytande klustring.

Databricks rekommenderar flytande klustring för alla nya Delta-tabeller och hanterade Isbergstabeller. Se Hanterade tabeller i Unity Catalog i Azure Databricks för Delta Lake och Apache Iceberg och Använd flytande klustring för tabeller.

En partition består av en delmängd rader i en tabell som delar samma värde för en fördefinierad delmängd av kolumner som kallas partitioneringskolumner. Att använda partitioner kan påskynda frågor mot tabellen samt datamanipulering.

Om du vill använda partitioner definierar du uppsättningen partitioneringskolumn när du skapar en tabell genom att inkludera satsen PARTITIONED BY.

När du infogar eller manipulerar rader i en tabell skickar Azure Databricks automatiskt rader till lämpliga partitioner.

Du kan också ange partitionen direkt med hjälp av en PARTITION-sats.

Den här syntaxen är också tillgänglig för tabeller som inte använder Delta Lake-format, till DROPADD eller RENAME partitioner snabbt med hjälp av -instruktionenALTER TABLE.

PARTITIONERAD AV

Satsen PARTITIONED BY angav en lista över kolumner längs vilka den nya tabellen partitioneras.

Syntax

PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )

Parametrar

  • partition_column

    En identifierare kan referera till en column_identifier i tabellen. Om du anger fler än en kolumn får det inte finnas några dubbletter. Om du refererar till alla kolumner i tabellen column_specification utlöses ett fel.

  • kolumntyp

    Om inte partition_column refererar till en column_identifier i tabellens column_specification, definierar column_type datatypen för partition_column.

    Alla datatyper som stöds av Databricks SQL stöds inte av alla datakällor.

Anteckningar

Om du inte definierar en partitioneringskolumn för en Delta Lake-tabell, flyttas de kolumner som refererar till kolumnerna i kolumnspecifikationen alltid till slutet av tabellen.

PARTITION

Du använder satsen PARTITION för att identifiera en partition som ska frågas eller manipuleras.

En partition identifieras genom att namnge alla dess kolumner och associera var och en med ett värde. Du behöver inte ange dem i en viss ordning.

Om du inte lägger till en ny partition i en befintlig tabell kan du utelämna kolumner eller värden för att indikera att åtgärden gäller för alla matchande partitioner som matchar delmängden av kolumner.

PARTITION ( { partition_column  [ = partition_value | LIKE pattern ] } [ , ... ] )

Parametrar

  • partition_column

    En kolumn som utsetts till partitionskolumn i tabellen. Du kanske inte anger samma kolumn två gånger.

  • = partition_value

    En liternal av en datatyp som motsvarar typen på partitionskolumnen. Om du utelämnar ett partitionsvärde matchar specifikationen alla värden för den här partitionskolumnen.

  • LIKE pattern

    Det här formuläret tillåts endast i ALTER SHARE LÄGG till TABLE.

    Matchar strängrepresentationen av partition_column till pattern. pattern måste vara en strängliteral som används i LIKE.

Exempel

-- Use the PARTTIONED BY clause in a table definition
> CREATE TABLE student(university STRING,
                       major      STRING,
                       name       STRING)
         PARTITIONED BY(university, major)

> CREATE TABLE professor(name STRING)
         PARTITIONED BY(university STRING,
                        department STRING);

-- Use the PARTITION specification to INSERT into a table
> INSERT INTO student
         PARTITION(university= 'TU Kaiserslautern') (major, name)
         SELECT major, name FROM freshmen;

-- Use the partition specification to add and drop a partition
> CREATE TABLE log(date DATE, id INT, event STRING)
     USING CSV
     PARTITIONED BY (date);

> ALTER TABLE log ADD PARTITION(date = DATE'2021-09-10');

> ALTER TABLE log DROP PARTITION(date = DATE'2021-09-10');

-- Drop all partitions from the named university, independent of the major.
> ALTER TABLE student DROP PARTITION(university = 'TU Kaiserslautern');