Inserir

Insira a partir de consultas selecionadas

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, ...])

Insira os dados numa tabela ou numa partição da tabela de resultados de uma declaração selecionada. Os dados são inseridos por ordinal (ordenação de colunas) e não por nomes.

Nota

(Delta Lake on Azure Databricks) Se uma coluna tiver um NOT NULL constrangimento, e uma INSERT INTO declaração define um valor de coluna para , a é NULL SparkException lançada.

OVERWRITE

Substitua os dados existentes na tabela ou na partição. Caso contrário, novos dados são anexados.

Exemplos

-- 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)

Inserir valores em tabelas

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, ...])

Insira os dados numa tabela ou numa divisória a partir de uma lista de valores de linha.

OVERWRITE

Substitua os dados existentes na tabela ou na partição. Caso contrário, novos dados são anexados.

Exemplos

-- 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)

Inserções dinâmicas de partição

Em part_spec , os valores da coluna de partição são opcionais. Quando a especificação de partição part_spec não está completamente fornecida, tais inserções são chamadas inserções dinâmicas de partição ou inserções multipartições. Quando os valores não são especificados, estas colunas são referidas como colunas dinâmicas de partição; caso contrário, são colunas de partição estática. Por exemplo, a especificação de partição (p1 = 3, p2, p3) tem uma coluna de partição estática p1 () e duas colunas dinâmicas de partição p2 p3 (e).

Em part_spec , as teclas de partição estática devem vir antes das teclas dinâmicas de partição. Isto significa que todas as colunas de partição com valores constantes devem aparecer antes de outras colunas de partição que não tenham um valor constante atribuído.

Os valores de partição das colunas dinâmicas de partição são determinados durante a execução. As colunas dinâmicas de partição devem ser especificadas em último lugar em ambos part_spec e o conjunto de resultados de entrada (das listas de valor de linha ou da consulta selecionada). São resolvidos por posição, em vez de por nomes. Assim, as ordens devem ser exatamente correspondidas.

As APIs dataFrameWriter não têm uma interface para especificar valores de partição. Portanto, a insertInto() API está sempre a utilizar o modo de partição dinâmica.

Importante

No modo de partição dinâmica, o conjunto de resultados de entrada pode resultar num grande número de divisórias dinâmicas, gerando assim um grande número de diretórios de partição.

OVERWRITE

A semântica é diferente com base no tipo da tabela alvo.

  • Hive SerDe tabelas: INSERT OVERWRITE não apaga divisórias à frente, e apenas substitui as divisórias que têm dados escritos nele em tempo de execução. Isto coincide com a semântica da Hive Apache. Para as tabelas Hive SerDe, o Spark SQL respeita a configuração relacionada com a Colmeia, incluindo hive.exec.dynamic.partition e hive.exec.dynamic.partition.mode .
  • Tabelas de INSERT OVERWRITE fontes de dados nativos: primeiro elimina todas as divisórias que correspondem à especificação de partição (por exemplo, PARTITION (a=1, b)) e depois insere todos os valores restantes. O comportamento das tabelas de fontes de dados nativas pode ser alterado para ser consistente com as tabelas Hive SerDe alterando a configuração específica da sessão spark.sql.sources.partitionOverwriteMode para DYNAMIC . O modo predefinido é STATIC.

Exemplos

-- 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')

Inserir valores no diretório

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

Insira os resultados da consulta select_statement num diretório directory_path utilizando o formato nativo Spark. Se o caminho especificado existir, é substituído pela saída do select_statement .

DIRECTORY

O caminho do diretório de destino da inserção. O diretório também pode ser especificado na OPTIONS utilização da chave path . Se o caminho especificado existir, é substituído pela saída do select_statement . Se LOCAL for utilizado, o diretório está no sistema de ficheiros local.

USING

O formato de ficheiro a utilizar para a inserção. Um dos , , , , , e TEXT , , e um nome de classe totalmente qualificado CSV de uma JSON JDBC PARQUET ORC HIVE LIBSVM implementação personalizada de org.apache.spark.sql.sources.DataSourceRegister .

AS

Povoar o diretório de destino com dados de entrada a partir da declaração selecionada.

Exemplos

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

Inserir valores no diretório com formato Hive

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

Insira os resultados da consulta select_statement num diretório directory_path utilizando o Hive SerDe. Se o caminho especificado existir, é substituído pela saída do select_statement .

Nota

Este comando só é suportado quando o suporte da Hive estiver ativado.

DIRECTORY

O caminho do diretório de destino da inserção. Se o caminho especificado existir, será substituído pela saída do select_statement . Se LOCAL for utilizado, o diretório está no sistema de ficheiros local.

ROW FORMAT

Utilize a SERDE cláusula para especificar um SerDe personalizado para esta inserção. Caso contrário, use a DELIMITED cláusula para usar o SerDe nativo e especifique o declimiter, o carácter de fuga, o carácter nulo, e assim por diante.

STORED AS

O formato de ficheiro para esta inserção. Um dos TEXTFILE , , , e ... e SEQUENCEFILE RCFILE ORC PARQUET AVRO ... Em alternativa, pode especificar o seu próprio formato de entrada e saída através INPUTFORMAT e OUTPUTFORMAT . Apenas TEXTFILE , e pode ser usado com , e só pode ser usado com SEQUENCEFILE RCFILE ROW FORMAT SERDE TEXTFILE ROW FORMAT DELIMITED .

AS

Povoar o diretório de destino com dados de entrada a partir da declaração selecionada.

Exemplos

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