Tüm Ürünler
Search
Belge Merkezi

AnalyticDB:INSERT OVERWRITE SELECT

Son Güncelleme:Oct 05, 2026

INSERT OVERWRITE SELECT ifadesi, bölümlerdeki verileri temizleyip yeni verileri toplu olarak yazarak AnalyticDB for MySQL tablolarında yüksek performanslı toplu veri yazma işlemi gerçekleştirir.

Çalışma mantığı

INSERT OVERWRITE SELECT deyimi önce bir bölümdeki tüm mevcut verileri temizler, ardından yeni verileri toplu olarak bu bölüme yazar.

  • Hedef tablo bölümlenmiş bir tabloyse, INSERT OVERWRITE SELECT yalnızca yeni verilerin ait olduğu bölümlerin üzerine yazar. Diğer bölümler etkilenmez.

  • Hedef tablo bölümlenmemiş bir tabloyse, INSERT OVERWRITE SELECT tablodaki tüm mevcut verileri temizler ve ardından yeni verileri toplu olarak yazar.

Tek bir tablo için yazma işleri sırayla çalışır (eşzamanlılık 1 olarak sabittir). Küme düzeyindeki varsayılan yazma eşzamanlılığı 2'dir. Bu değeri değiştirmeyin; performansı düşürebilir ve kümeyi aşırı yükleyebilir.

Not

Yazma eşzamanlılığını ayarlamak için teknik destekten değerlendirme istemek üzere Bir destek talebi oluşturun.

Genel Bakış

Temel özellikler:

  • Yüksek kaynak tüketimi: Küme performansını etkilememek için yoğun olmayan saatlerde çalıştırın.

  • Toplu görünürlük: Yazılan veriler yalnızca iş tamamlandıktan sonra tek seferde görünür hale gelir.

  • Bölüm üzerine yazma: Yalnızca yeni veri içeren bölümlerin üzerine yazar.

  • Otomatik dizin oluşturma: Dizinler yazma işlemi sırasında senkronize olarak oluşturulur; bu sayede iş tamamlandığında hedef tablo hemen sorgulanabilir duruma gelir.

Yaygın kullanım senaryoları:

  • Bölüm düzeyinde veri yazma işlemleri.

  • Veri başlatma (tam veri yazma).

  • Büyük ölçekli toplu veri yazma işlemleri. Düşük veri hacimleri için önerilmez.

Dikkat edilmesi gerekenler

Aynı tabloya eşzamanlı olarak yazma yapmak için INSERT OVERWRITE SELECT ifadesini ve gerçek zamanlı yazma yöntemlerini (INSERT INTO, REPLACE INTO, DELETE ve UPDATE gibi) birlikte kullanmayın. Aksi takdirde gerçek zamanlı yazma işlemlerinden gelen veriler kaybolur.

Söz dizimi

INSERT OVERWRITE table_name (column_name[,...])
select_statement

Parametreler

  • table_name: Hedef tablonun adı.

  • column_name: Hedef tablodaki bir sütunun adı.

  • select_statement: SELECT ifadesi.

    SELECT ifadesindeki her sütunun veri türü, hedef tablodaki karşılık gelen sütunun veri türüyle eşleşmelidir.

    SELECT ifadesindeki sütun sayısı hedef tablodakinden fazlaysa yazma işlemi başarısız olur. SELECT ifadesindeki sütun sayısı hedef tablodakinden azsa hedef tablodaki kalan sütunlar varsayılan değerleriyle doldurulur. Bir sütunun varsayılan değeri yoksa sistem bu sütunu NULL olarak doldurur.

Örnekler

Örnek veriler

Üzerine yazma örnekleri için test tablolarını ve verilerini hazırlayın.

  1. test_source adında bir kaynak tablo ve test_target adında bir hedef tablo oluşturun.

    CREATE TABLE test_source (a BIGINT, b BIGINT) 
    DISTRIBUTED BY HASH(a);
    CREATE TABLE test_target (a BIGINT, b BIGINT) 
    DISTRIBUTED BY HASH(a) 
    PARTITION BY VALUE(b) LIFECYCLE 10;
  2. Kaynak tablo test_source içine test verilerini yazın.

    INSERT INTO test_source VALUES (1,1);  
    INSERT INTO test_source VALUES (1,2); 
    INSERT INTO test_source VALUES (1,3);  
    INSERT INTO test_source VALUES (2,1); 
    INSERT INTO test_source VALUES (2,2); 
    INSERT INTO test_source VALUES (2,3);

Verilerin üzerine yazma

  1. test_target tablosuna ilk verileri ekleyin.

    INSERT OVERWRITE test_target 
    SELECT * FROM test_source WHERE a = 1;

    test_target tablosunu sorgulayın. Sorgu aşağıdaki sonucu döndürür.

    +-----+------+
    |1    |1     |
    |1    |2     |
    |1    |3     |
    +-----+------+
  2. test_target tablosunda b=1 olan bölümün üzerine yazın.

    INSERT OVERWRITE test_target (a,b)
    SELECT a,b FROM test_source 
    WHERE a = 2 AND b = 1;

    Üzerine yazma işleminden sonra test_target sorgulandığında aşağıdaki sonuç döner:

    +-----+------+
    |2    |1     |
    |1    |2     |
    |1    |3     |
    +-----+------+
  3. test_target tablosunda b=2 ve b=3 olan bölümlerin üzerine yazın.

    INSERT OVERWRITE test_target
    SELECT * FROM test_source 
    WHERE a = 2 AND b >= 2 AND b <= 3;

    Üzerine yazma işleminden sonra test_target sorgulandığında aşağıdaki sonuç döner:

    +-----+------+
    |2    |1     |
    |2    |2     |
    |2    |3     |
    +-----+------+

Eşzamansız yazma işlemleri

İş gönderme

SUBMIT JOB yazma işlemini arka planda eşzamansız olarak çalıştırır:

SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;

Yazma performansını optimize etme

Daha düşük kaynak tüketimiyle performansı artırmak için yazma işleminden önce /* direct_batch_load=true */ ipucunu ekleyin:

/* direct_batch_load=true*/
SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;
Not

/* direct_batch_load=true*/ çekirdek sürümü 3.1.5 veya üstünü gerektirir. Performans artmazsa yardım almak için Bir destek talebi oluşturun. Çekirdek sürümünüzü kontrol etmek için bkz. Örnek sürüm bilgilerini görüntüleme.

İş ilerlemesini sorgulama

SUBMIT JOB bir job_id döndürür. İş durumunu sorgulamak için bu kimliği kullanın:

SHOW JOB STATUS WHERE job='<job_id>';

SUCCEEDED durumu işin tamamlandığını gösterir.