Infogning

Infoga från urvals frågor

INSERT INTO [TABLE] [db_name.]table_name [PARTITION part_spec] select_statement

INSERT OVERWRITE TABLE [db_name.]table_name [PARTITION part_spec] select_statement

part_spec:
  : (part_col_name1=val1 [, part_col_name2=val2, ...])

Infoga data i en tabell eller partition från resultat tabellen i en SELECT-instruktion. Data infogas med ordnings tal (sortering av kolumner) och inte efter namn.

Anteckning

(Delta Lake på Azure Databricks) Om en kolumn har en NOT NULL begränsning, och en INSERT INTO instruktion anger ett kolumn värde till NULL , SparkException genereras en.

OVERWRITE

Skriv över befintliga data i tabellen eller partitionen. Annars läggs nya data till.

Exempel

-- Creates a partitioned native parquet table
CREATE TABLE data_source_tab1 (col1 INT, p1 INT, p2 INT)
  USING PARQUET PARTITIONED BY (p1, p2)

-- Appends two rows into the partition (p1 = 3, p2 = 4)
INSERT INTO data_source_tab1 PARTITION (p1 = 3, p2 = 4)
  SELECT id FROM RANGE(1, 3)

-- Overwrites the partition (p1 = 3, p2 = 4) using two new rows
INSERT OVERWRITE TABLE default.data_source_tab1 PARTITION (p1 = 3, p2 = 4)
  SELECT id FROM RANGE(3, 5)

Infoga värden i tabeller

INSERT INTO [TABLE] [db_name.]table_name [PARTITION part_spec] VALUES values_row [, values_row ...]

INSERT OVERWRITE TABLE [db_name.]table_name [PARTITION part_spec] VALUES values_row [, values_row ...]

values_row:
    : (val1 [, val2, ...])

Infoga data i en tabell eller partition från en rad värde lista.

OVERWRITE

Skriv över befintliga data i tabellen eller partitionen. Annars läggs nya data till.

Exempel

-- Creates a partitioned hive serde table (using the HiveQL syntax)
CREATE TABLE hive_serde_tab1 (col1 INT, p1 INT, p2 INT)
  USING HIVE OPTIONS(fileFormat 'PARQUET') PARTITIONED BY (p1, p2)

-- Appends two rows into the partition (p1 = 3, p2 = 4)
INSERT INTO hive_serde_tab1 PARTITION (p1 = 3, p2 = 4)
  VALUES (1), (2)

-- Overwrites the partition (p1 = 3, p2 = 4) using two new rows
INSERT OVERWRITE TABLE hive_serde_tab1 PARTITION (p1 = 3, p2 = 4)
  VALUES (3), (4)

Dynamiska partitions infogningar

I part_spec är partitionens kolumn värden valfri. Om du part_spec inte har angett någon korrekt infogning, kallas sådana infogningar för dynamiska partitions infogningar eller infogningar med flera partitioner. När värdena inte anges kallas dessa kolumner dynamiska partitions kolumner. annars är de statiska partitions kolumner. Till exempel (p1 = 3, p2, p3) innehåller partitionsfunktionen en statisk partitionstabell ( p1 ) och två dynamiska partitions kolumner ( p2 och p3 ).

I part_spec måste statiska partitionsnyckel finnas före de dynamiska partitionernas nycklar. Det innebär att alla partitionstyper med konstanta värden måste visas innan andra diskpartitioner som inte har ett tilldelat konstantvärde.

Partitionens värden för dynamiska partitioner beräknas under körningen. Kolumnerna dynamiska partitioner måste anges sist i både part_spec och i den angivna resultat uppsättningen (i rad värde listorna eller i urvals frågan). De löses efter position, i stället för efter namn. Därför måste orderna exakt matchas.

DataFrameWriter-API: erna har inget gränssnitt för att ange partitionsalternativ. insertInto()API: et använder därför alltid dynamiskt partitionerings läge.

Viktigt

I läget dynamisk partition kan den angivna resultat uppsättningen resultera i ett stort antal dynamiska partitioner och genererar därmed ett stort antal partition kataloger.

OVERWRITE

Semantiken är olika beroende på typen av mål tabell.

  • Hive SerDe-tabeller: INSERT OVERWRITE tar inte bort partitioner i förväg och skriver bara över de partitioner som innehåller data som skrivs till den vid körning. Detta matchar Apache Hive semantik. För Hive SerDe-tabeller respekterar Spark SQL den Hive-relaterade konfigurationen, inklusive hive.exec.dynamic.partition och hive.exec.dynamic.partition.mode .
  • Tabeller med interna data Källor: INSERT OVERWRITE först tar bort alla partitioner som matchar partitionsnumret (t. ex. partition (a = 1, b)) och infogar sedan alla återstående värden. Beteendet för interna data käll tabeller kan ändras så att de överensstämmer med Hive SerDe-tabeller genom att ändra den sessionsbaserade konfigurationen spark.sql.sources.partitionOverwriteMode till DYNAMIC . Standardläget är STATIC.

Exempel

-- Create a partitioned native Parquet table
CREATE TABLE data_source_tab2 (col1 INT, p1 STRING, p2 STRING)
  USING PARQUET PARTITIONED BY (p1, p2)

-- Two partitions ('part1', 'part1') and ('part1', 'part2') are created by this dynamic insert.
-- The dynamic partition column p2 is resolved by the last column `'part' || id`
INSERT INTO data_source_tab2 PARTITION (p1 = 'part1', p2)
  SELECT id, 'part' || id FROM RANGE(1, 3)

-- A new partition ('partNew1', 'partNew2') is added by this INSERT OVERWRITE.
INSERT OVERWRITE TABLE data_source_tab2 PARTITION (p1 = 'partNew1', p2)
  VALUES (3, 'partNew2')

-- After this INSERT OVERWRITE, the two partitions ('part1', 'part1') and ('part1', 'part2') are dropped,
-- because both partitions are included by (p1 = 'part1', p2).
-- Then, two partitions ('partNew1', 'partNew2'), ('part1', 'part1') exist after this operation.
INSERT OVERWRITE TABLE data_source_tab2 PARTITION (p1 = 'part1', p2)
  VALUES (5, 'part1')

-- Create and fill a partitioned hive serde table with three partitions:
-- ('part1', 'part1'), ('part1', 'part2') and ('partNew1', 'partNew2')
CREATE TABLE hive_serde_tab2 (col1 INT, p1 STRING, p2 STRING)
  USING HIVE OPTIONS(fileFormat 'PARQUET') PARTITIONED BY (p1, p2)
INSERT INTO hive_serde_tab2 PARTITION (p1 = 'part1', p2)
  SELECT id, 'part' || id FROM RANGE(1, 3)
INSERT OVERWRITE TABLE hive_serde_tab2 PARTITION (p1 = 'partNew1', p2)
  VALUES (3, 'partNew2')

-- After this INSERT OVERWRITE, only the partitions ('part1', 'part1') is overwritten by the new value.
-- All the three partitions still exist.
INSERT OVERWRITE TABLE hive_serde_tab2 PARTITION (p1 = 'part1', p2)
  VALUES (5, 'part1')

Infoga värden i katalogen

INSERT OVERWRITE [LOCAL] DIRECTORY [directory_path]
  USING data_source [OPTIONS (key1=val1, key2=val2, ...)]
  [AS] SELECT ... FROM ...

Infoga frågeresultaten från select_statement i en katalog directory_path med hjälp av formatet Spark Native. Om den angivna sökvägen finns ersätts den med utdata från select_statement .

DIRECTORY

Sökvägen till mål katalogen i infogningen. Katalogen kan också anges i OPTIONS med hjälp av nyckeln path . Om den angivna sökvägen finns ersätts den med utdata från select_statement . Om används LOCAL , finns katalogen i det lokala fil systemet.

USING

Fil formatet som ska användas för INSERT. Ett av,,,,,, TEXT CSV JSON JDBC PARQUET ORC HIVE LIBSVM eller ett fullständigt kvalificerat klass namn för en anpassad implementering av org.apache.spark.sql.sources.DataSourceRegister .

AS

Fyll i mål katalogen med indata från SELECT-instruktionen.

Exempel

INSERT OVERWRITE DIRECTORY
USING parquet
OPTIONS ('path' '/tmp/destination/path')
SELECT key, col1, col2 FROM source_table

INSERT OVERWRITE DIRECTORY '/tmp/destination/path'
USING json
SELECT 1 as a, 'c' as b

Infoga värden i katalogen med Hive-format

INSERT OVERWRITE [LOCAL] DIRECTORY directory_path
  [ROW FORMAT row_format] [STORED AS file_format]
  [AS] select_statement

Infoga frågeresultaten i select_statement en katalog directory_path med Hive-SerDe. Om den angivna sökvägen finns ersätts den med utdata från select_statement .

Anteckning

Det här kommandot stöds bara om Hive-stöd är aktiverat.

DIRECTORY

Sökvägen till mål katalogen i infogningen. Om den angivna sökvägen finns ersätts den med utdata från select_statement . Om används LOCAL , finns katalogen i det lokala fil systemet.

ROW FORMAT

Använd SERDE satsen för att ange en anpassad SerDe för den här infogningen. Annars använder du- DELIMITED satsen för att använda den interna SerDe och anger avgränsare, escape-tecken, null-tecken och så vidare.

STORED AS

Fil formatet för den här infogningen. En av,,,, TEXTFILE SEQUENCEFILE RCFILE ORC PARQUET och AVRO . Du kan också ange egna indata och utdataformat genom INPUTFORMAT och OUTPUTFORMAT . Endast TEXTFILE , SEQUENCEFILE och RCFILE kan användas med och kan ROW FORMAT SERDE bara TEXTFILE användas med ROW FORMAT DELIMITED .

AS

Fyll i mål katalogen med indata från SELECT-instruktionen.

Exempel

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/destination/path'
STORED AS orc
SELECT * FROM source_table where key < 10