Ekle

Seçme sorgularından Ekle

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

SELECT ifadesinin sonuç tablosundan bir tabloya veya bölüme veri ekleyin. Veriler, adlara göre değil, Ordinal (sütun sıralaması) tarafından eklenir.

Not

(Azure Databricks Delta Gölü) Bir sütunun NOT NULL kısıtlamasıvarsa ve bir INSERT INTO ifade öğesine bir sütun değeri ayarlarsa NULL , bir SparkException atılır.

OVERWRITE

Tablodaki veya bölümdeki mevcut verilerin üzerine yazın. Aksi takdirde, yeni veriler eklenir.

Örnekler

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

Tablolara değerler ekleme

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

Satır değeri listesinden bir tabloya veya bölüme veri ekleyin.

OVERWRITE

Tablodaki veya bölümdeki mevcut verilerin üzerine yazın. Aksi takdirde, yeni veriler eklenir.

Örnekler

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

Dinamik bölüm eklemeleri

part_spec' De, bölüm sütunu değerleri isteğe bağlıdır. Bölüm belirtimi tam olarak part_spec sağlanmadığında, bu tür ekler dinamik bölüm eklemeleri veya çok bölgeli ekler olarak adlandırılır. Değerler belirtilmediğinde, bu sütunlara dinamik bölüm sütunları denir; Aksi takdirde, bunlar statik bölüm sütunlarıdır. Örneğin, Bölüm belirtiminin (p1 = 3, p2, p3) statik bir bölüm sütunu ( p1 ) ve iki dinamik bölüm sütunu ( p2 ve p3 ) vardır.

İçinde part_spec , statik bölüm anahtarlarının dinamik bölüm anahtarlarından önce gelmesi gerekir. Bu, sabit değerleri bulunan tüm bölüm sütunlarının, atanmış sabit değere sahip olmayan diğer bölüm sütunlarından önce görünmesi gerektiği anlamına gelir.

Dinamik bölüm sütunlarının bölüm değerleri yürütme sırasında belirlenir. Dinamik bölüm sütunlarının her ikisi de part_spec ve giriş sonuç kümesinde (satır değeri listeleri veya SELECT sorgusu) en sonda belirtilmesi gerekir. Bunlar, adlarına göre değil, konumlarına göre çözümlenirler. Bu nedenle, siparişlerin tam olarak eşleşmesi gerekir.

DataFrameWriter API 'Lerinde bölüm değerlerini belirtmek için bir arabirim yok. Bu nedenle, insertInto() API her zaman dinamik bölüm modunu kullanıyor.

Önemli

Dinamik bölüm modunda, giriş sonuç kümesi çok sayıda dinamik bölüme neden olabilir ve bu nedenle çok sayıda bölüm dizini oluşturabilir.

OVERWRITE

Anlambilim, hedef tablonun türüne göre farklılık farklıydı.

  • Hive SerDe tabloları: daha INSERT OVERWRITE önce bölümleri silmez ve yalnızca çalışma zamanında bu veriye yazılmış olan bölümlerin üzerine yazılır. Bu, Apache Hive semantiğini eşleştirir. Hive SerDe tabloları için Spark SQL, ve dahil olmak üzere Hive ile ilgili yapılandırmayı hive.exec.dynamic.partition duyar hive.exec.dynamic.partition.mode .
  • Yerel veri kaynağı tabloları: INSERT OVERWRITE ilk olarak, Bölüm belirtimiyle eşleşen tüm bölümleri siler (ör., Bölüm (a = 1, b)) ve ardından kalan tüm değerleri ekler. Yerel veri kaynağı tablolarının davranışı, oturuma özgü yapılandırmayı olarak değiştirerek Hive SerDe tabloları ile tutarlı olacak şekilde değiştirilebilir spark.sql.sources.partitionOverwriteMode DYNAMIC . STATIC, varsayılan moddur.

Örnekler

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

Değerleri dizine ekle

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

select_statementSpark Native biçimi kullanarak bir dizine sorgu sonuçları ekleyin directory_path . Belirtilen yol varsa, çıkışı ile değiştirilmiştir select_statement .

DIRECTORY

INSERT 'in hedef dizininin yolu. Dizin, OPTIONS anahtarı kullanılarak da belirtilebilir path . Belirtilen yol varsa, çıkışı ile değiştirilmiştir select_statement . Kullanılıyorsa LOCAL , Dizin yerel dosya sistemidir.

USING

INSERT için kullanılacak dosya biçimi. ,,,,, TEXT CSV JSON JDBC PARQUET ORC , HIVE , Ve ' nin LIBSVM özel bir uygulamasının tam sınıf adından biridir org.apache.spark.sql.sources.DataSourceRegister .

AS

Hedef dizini SELECT deyimindeki giriş verileriyle doldurun.

Örnekler

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

Hive biçimindeki dizin içine değer ekleme

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

Sorgu sonuçlarını select_statement directory_path Hive serde kullanarak bir dizine ekleyin. Belirtilen yol varsa, çıkışı ile değiştirilmiştir select_statement .

Not

Bu komut yalnızca Hive desteği etkinleştirildiğinde desteklenir.

DIRECTORY

INSERT 'in hedef dizininin yolu. Belirtilen yol varsa, çıkışı ile yerine gelir select_statement . Kullanılıyorsa LOCAL , Dizin yerel dosya sistemidir.

ROW FORMAT

SERDEBu INSERT için özel bir SerDe belirtmek üzere yan tümcesini kullanın. Aksi takdirde, DELIMITED Yerel seral 'ı kullanmak için yan tümcesini kullanın ve sınırlayıcı, kaçış karakteri, null karakter vb. belirtin.

STORED AS

Bu ekleme için dosya biçimi. ,,,, Ve bunlardan biridir TEXTFILE SEQUENCEFILE RCFILE ORC PARQUET AVRO . Alternatif olarak, ve ile kendi giriş ve çıkış biçiminizi de belirtebilirsiniz INPUTFORMAT OUTPUTFORMAT . Yalnızca TEXTFILE , SEQUENCEFILE , ve RCFILE ile kullanılabilir ROW FORMAT SERDE ve yalnızca TEXTFILE ile kullanılabilir ROW FORMAT DELIMITED .

AS

Hedef dizini SELECT deyimindeki giriş verileriyle doldurun.

Örnekler

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