Tüm Ürünler
Search
Belge Merkezi

Hologres:INSERT OVERWRITE

Son Güncelleme:Oct 10, 2026

Hologres, saklı yordam (V2.0 ve üzeri) aracılığıyla hg_insert_overwrite ve yerel INSERT OVERWRITE sözdizimi (V3.1 ve üzeri) ile INSERT OVERWRITE işlemini destekler.

Özellik karşılaştırması

INSERT OVERWRITE davranışı tablo türüne ve kullanılan yönteme göre değişir:

  • Bölümlenmemiş tablolar: Her iki yöntem de desteklenir.

  • Fiziksel bölümlenmiş tablolar: hg_insert_overwrite saklı yordamını kullanın.

  • Mantıksal bölümlenmiş tablolar: hg_insert_overwrite saklı yordamını kullanın (dahili olarak yerel INSERT OVERWRITE çağrılır).

  • Fiziksel bölümlenmiş tablolardan mantıksal bölümlenmiş tablolara geçiş: Veri aktarım düğümlerini uyarlama.

Tablo türü

Karşılaştırma öğesi

hg_insert_overwrite

Yerel INSERT OVERWRITE

Bölümlenmemiş tablo

Desteklenir

Desteklenir

Fiziksel bölümlenmiş tablo

Üst tabloya aktarım

  • Alt tablolarla veya alt tablo olmadan aktarım

  • Belirli alt tablolara aktarım

Desteklenmez

Alt tabloya aktarım

Desteklenir (bölümlenmemiş tablo olarak işlenir)

Desteklenir (bölümlenmemiş tablo olarak işlenir)

Mantıksal bölümlenmiş tablo

Üst tabloya aktarım (alt tablo belirtilmeden)

Desteklenmez

Desteklenmez

Üst tabloya aktarım (belirtilmiş bir alt tablo ile)

Desteklenir

Desteklenir

Not

hg_insert_overwrite veya yerel INSERT OVERWRITE kullanmak için örneğinizin sürüm gereksinimlerini karşıladığından emin olun. Ayrıntılar için bkz. Örnek yükseltme. Yükseltme yapamıyorsanız INSERT OVERWRITE işlemi gerçekleştirmek için geçici tablo kullanma bölümüne bakın.

Yerel INSERT OVERWRITE kullanımı

Genel Bakış

  • Yerel INSERT OVERWRITE Hologres V3.1'den itibaren kullanılabilir.

  • Yerel INSERT OVERWRITE aşağıdaki tablo türlerini destekler:

    • Bölümlenmemiş tablolar.

    • Fiziksel bölümlenmiş tabloların alt tabloları (bölümlenmemiş tablo olarak işlenir).

    • Belirtilmiş bir bölüm içeren mantıksal bölümlenmiş tablolar.

Kısıtlamalar

  • Yerel INSERT OVERWRITE varsayılan olarak karışık DML işlemlerini etkinleştirir: SET hg_experimental_enable_transaction = on;. Hologres'teki işlem yetenekleri hakkında bilgi için bkz. SQL işlemleri.

    • INSERT OVERWRITE ve DDL deyimleri aynı işlemde karıştırılamaz.

    • Bir işlemdeki tüm DML deyimleri yalnızca COMMIT çalıştırıldığında işlenir.

  • Yerel INSERT OVERWRITE binlog oluşturmayı desteklemez. Oturum düzeyinde binlog'u devre dışı bırakın: SET hg_experimental_generate_binlog = off;.

  • Okuma atomluğu varsayılan olarak garanti edilir ancak daha yüksek meta veri ek yüküne neden olur ve DQL gecikme süresini artırabilir (ikincil sanal depolar daha fazla etkilenir). Uzun süren INSERT OVERWRITE işlemleri Data version is inconsistent veya Insert overwrite version not match gibi okuma hatalarına neden olabilir.

    • Okuma atomluğu gerekli değilse GUC'yi DQL görevleri için devre dışı bırakın: set hg_experimental_enable_check_data_version=off. Bir DQL görevi daha sonra INSERT OVERWRITE işleminden önceki ve sonraki veri dosyalarının karışımını tarayabilir.

    • Okuma atomluğu gerekli ancak DQL gecikme süresinin azaltılması gerekiyorsa DQL görevlerini birincil sanal depo üzerinde çalıştırın.

Sözdizimi

INSERT OVERWRITE <target_table_name> 
  [ PARTITION (<partition_key> = '<partition_value>') [, ...]]
  VALUES ( <expression>  [, ...] ) [, ...] | <query>;

Parametreler

Parametre

Gerekli

Açıklama

target_table_name

Evet

Hedef tablonun adı.

partition_key ve partition_value

Hayır

Bölüm anahtarı ve değeri. Mantıksal bölümlenmiş tablolar için gereklidir.

expression

Hayır

Hedef tablodaki ilgili sütun için bir ifade veya değer.

query

Hayır

SELECT deyimi; sonucu target_table_name tablosundaki verilerin üzerine yazar.

Not

target_table_name mantıksal bölümlenmiş bir tabloya ve partition_value bir bölüm belirtiyorsa yalnızca o bölüme ait veriler aktarılır. Belirtilen bölümün dışındaki veriler yok sayılır ve eşleşen veri bulunamazsa bölüm temizlenir.

Örnekler

Bölümlenmemiş tabloya aktarım

-- Create table A as the target table.
CREATE TABLE public.tablea (
    cid INTEGER NOT NULL,
    cname TEXT,
    code INTEGER
    ,PRIMARY KEY (cid)
);

-- Create table B as the source.
CREATE TABLE public.tableb (
    cid INTEGER NOT NULL,
    cname TEXT,
    code INTEGER
    ,PRIMARY KEY (cid)
);

INSERT INTO public.tableb VALUES(1,'aaa',10001),(2,'bbb','10002');

-- Use the native INSERT OVERWRITE syntax to insert data from table B into table A.
INSERT OVERWRITE public.tablea SELECT * FROM public.tableb;

Mantıksal bölümlenmiş tabloya aktarım

-- Create table A as the target table.
CREATE TABLE public.tablea(
  a TEXT , 
  b INT, 
  c TIMESTAMP, 
  d TEXT,
  ds TEXT,
  PRIMARY KEY(ds,b)
  )
  LOGICAL PARTITION BY LIST(ds);

-- Create physical partitioned table B for the input.
BEGIN;
CREATE TABLE public.tableb(
  a TEXT, 
  b INT, 
  c TIMESTAMP, 
  d TEXT,
  ds TEXT,
  PRIMARY KEY(ds,b)
  )
  PARTITION BY LIST(ds);
CREATE TABLE public.holo_child_3a PARTITION OF public.tableb FOR VALUES IN('20201215');
CREATE TABLE public.holo_child_3b PARTITION OF public.tableb FOR VALUES IN('20201216');
CREATE TABLE public.holo_child_3c PARTITION OF public.tableb FOR VALUES IN('20201217');
COMMIT;

INSERT INTO public.holo_child_3a VALUES('a',1,'2034-10-19','a','20201215');
INSERT INTO public.holo_child_3b VALUES('b',2,'2034-10-20','b','20201216');
INSERT INTO public.holo_child_3c VALUES('c',3,'2034-10-21','c','20201217');

-- Use the native INSERT OVERWRITE syntax to insert data from table B into table A.
INSERT OVERWRITE public.tablea PARTITION (ds = '20201215') SELECT * FROM public.tableb WHERE ds='20201215';

hg_insert_overwrite aracılığıyla INSERT OVERWRITE uygulaması

Sürüm geçmişi

  • V3.1'den itibaren hg_insert_overwrite mantıksal bölümlenmiş tabloları destekler (bölüm belirtilmelidir).

  • V3.0'dan itibaren hg_insert_overwrite doğrudan üst tablolara aktarımı destekler.

  • Bağımlı görünümlere sahip tablolar: V2.0.15 ve üzeri sürümlerde şu komutla etkinleştirin: set hg_experimental_hg_insert_overwrite_enable_view=on;. Materialized View bağımlılıklarına sahip tablolar desteklenmez.

    V3.0 ve üzeri sürümlerde yapılandırma gerekmez ancak Materialized View bağımlılıkları yine de desteklenmez.

  • hg_insert_overwrite başarısız olursa geçici tabloları manuel olarak temizleyin. V3.0'dan itibaren aşağıdaki SQL'i kullanın.

    -- Delete the temporary tables that were created by the system before the time specified by before_time.
    CALL hg_clean_insert_overwrite_tmp_tables(before_time::timestamptz); 

Kullanım kısıtlamaları

  • Alt küme alanı aktarımları kaynak tablo sütun sırasıyla eşleşmelidir.

  • hg_insert_overwrite tablo sahibi izni gerektirir (yalnızca süper kullanıcılar veya tablo sahipleri).

  • Bölüm anahtarı INT, TEXT veya VARCHAR türlerini destekler.

  • V3.0'dan itibaren hg_insert_overwrite işlemler içinde kullanılamaz.

    Not

    Daha eski sürümlerde bir işlemde hg_insert_overwrite kullanmak kilitlenmelere veya askıda kalmalara neden olabilirdi.

  • V3.0'dan itibaren sql içindeki hg_insert_overwrite sütun sayısı ve veri türleri target_table ile tam olarak eşleşmelidir. Uyumsuzluklar "error: table "hg_alias" has x columns available but x columns specified" gibi hatalara neden olur.

Davranış değişiklikleri

Yalnızca target_table (bir üst tablo) ve sql sağlanmışsa:

V3.0'dan önce bu işlem başarısız olurdu. V3.0'dan itibaren olası sonuçlar şunlardır:

  • sql sonuçlarındaki tüm alt tablolar mevcutsa işlem başarılı olur.

  • Herhangi bir alt tablo mevcut değilse hata oluşur.

Sözdizimi

-- Before V3.0
CALL hg_insert_overwrite('<target_table>' regclass, ['<partition_value>' TEXT], '<sql>' TEXT);

-- For Hologres V3.0 and later
CALL hg_insert_overwrite('<target_table>' regclass, ['<partition_value>' ARRAY], '<sql>' TEXT, ['<auto_create_partition>' BOOLEAN]);

Parametreler

Not

V3.0'dan itibaren hg_insert_overwrite için partition_value ARRAY türünü kabul ederek birden çok alt tabloya yazmayı etkinleştirir. partition_value için TEXT hala desteklenir ancak tek bir alt tabloyla sınırlıdır.

Parametre

Açıklama

target_table

Mevcut bir Hologres dahili tablosu.

partition_value

Hedef bölüm.

  • V3.0'dan önce: target_table fiziksel bölümlenmiş bir tabloya partition_value (TEXT türü) gereklidir. Mevcut olmayan bölümler otomatik olarak oluşturulur.

  • V3.0'dan itibaren: target_table fiziksel bölümlenmiş bir tabloya partition_value (ARRAY veya TEXT türü) isteğe bağlıdır. Davranış tablosuna bakın.

  • V3.1'den itibaren: target_table mantıksal bölümlenmiş bir tabloya partition_value (ARRAY veya TEXT türü) gereklidir.

sql

SELECT deyimi.

MaxCompute veya Hologres tablolarını sorgulayabilir. Tek tırnak işaretlerini $$sql$$ ile kaçış karakteriyle yazın.

  • V3.0'dan önce: Sonuçlar partition_value ile tam olarak eşleşmelidir.

  • V3.0'dan itibaren: Yukarıdaki kısıtlama kaldırılmıştır. Davranış tablosuna bakın.

auto_create_partition

Mevcut olmayan bölümlerin otomatik oluşturulmasını kontrol eder. Yalnızca V3.0+, yalnızca fiziksel bölümlenmiş tablolar.

  • TRUE: sql sonuçlarında bulunan eksik bölümleri otomatik olarak oluşturur.

  • FALSE (varsayılan): Eksik bölümleri oluşturmaz.

Davranış auto_create_partition ve partition_value parametrelerine bağlıdır. Bir bölüm SQL sonuçlarında görünüyorsa "ilgili" kabul edilir.

  • Fiziksel bölümlenmiş tablolar için hg_insert_overwrite davranışı

    Parametre değeri

    auto_create_partition

    TRUE

    FALSE

    partition_value

    Belirtilmemiş

    • İlgili bölümler: Mevcut bölümlerin üzerine yazılır. Mevcut olmayan bölümler otomatik olarak oluşturulur.

    • İlgisiz bölümler: Yok sayılır.

    • Tüm ilgili bölümler zaten mevcutsa:

      • İlgili bölümlerin üzerine yazılır.

      • İlgisiz bölümler yok sayılır.

    • Herhangi bir ilgili bölüm mevcut değilse hata verilir; diğer bölümlerde üzerine yazma işlemi gerçekleşmez.

    Belirtilmiş

    Belirtilen bölümler için:

    • Mevcut olmayan ilgili bölüm otomatik olarak oluşturulur.

    • Mevcut ilgili bölümlerin üzerine yazılır.

    • İlgisiz ve mevcut bölüm verileri temizlenir.

    Belirtilmeyen bölümler için:

    • Etkisi yoktur.

    • Belirtilen bölümler için:

      • Herhangi bir ilgili bölüm mevcut değilse hata verilir; diğer bölümlerde üzerine yazma işlemi gerçekleşmez.

      • Mevcut ilgili bölümlerin üzerine yazılır.

      • Mevcut ve ilgisiz bölümler temizlenir.

    • Belirtilmeyen bölümler için:

      • Etkisi yoktur.

  • Mantıksal bölümlenmiş tablo için hg_insert_overwrite davranışı

    Mantıksal bölümlenmiş tablolar otomatik bölümlemeyi desteklemez; auto_create_partition yok sayılır.

    Parametre değeri

    Açıklama

    partition_value

    Belirtilmemiş

    Desteklenmez.

    Belirtilmiş

    Belirtilen bölümler için:

    • İlgili bölüm verilerinin üzerine yazılır.

    • İlgisiz bölümler temizlenir.

    Belirtilmeyen bölümler için:

    • Hiçbiri etkilenmez.

Örnekler

Örnek 1: Verileri bölümlenmemiş bir tabloya aktarma

-- Create table A as the target table.
BEGIN;

CREATE TABLE public.tablea (
    cid INTEGER NOT NULL,
    cname TEXT,
    code INTEGER
    ,PRIMARY KEY (cid)
);

CALL set_table_property('public.tablea', 'orientation', 'column');
CALL set_table_property('public.tablea', 'storage_format', 'orc');
CALL set_table_property('public.tablea', 'bitmap_columns', 'cname');
CALL set_table_property('public.tablea', 'dictionary_encoding_columns', 'cname:auto');
CALL set_table_property('public.tablea', 'distribution_key', 'cid');
CALL set_table_property('public.tablea', 'time_to_live_in_seconds', '3153600000');
COMMIT;

-- Create table B for data input.
CREATE TABLE public.tableb (
    cid INTEGER NOT NULL,
    cname TEXT,
    code INTEGER
    ,PRIMARY KEY (cid)
);

INSERT INTO public.tableb VALUES(1,'aaa',10001),(2,'bbb','10002');

-- Insert data from table B into table A.
CALL hg_insert_overwrite('public.tablea' , 'SELECT * FROM public.tableb');

Örnek 2: Verileri bölümlenmiş bir tabloya (fiziksel ve mantıksal) aktarma

-- Create the target table.
BEGIN;
CREATE TABLE public.tableA(
  a TEXT, 
  b INT, 
  c TIMESTAMP, 
  d TEXT,
  ds TEXT,
  PRIMARY KEY(ds,b)
  )
  PARTITION BY LIST(ds);
CALL set_table_property('public.tableA', 'orientation', 'column');
CREATE TABLE public.holo_child_1 PARTITION OF public.tableA FOR VALUES IN('20201215');
CREATE TABLE public.holo_child_2 PARTITION OF public.tableA FOR VALUES IN('20201216');
CREATE TABLE public.holo_child_3 PARTITION OF public.tableA FOR VALUES IN('20201217');
COMMIT;

-- Or, a logical partitioned table.
CREATE TABLE public.tableA_lp(
  a TEXT, 
  b INT, 
  c TIMESTAMP, 
  d TEXT,
  ds TEXT,
  PRIMARY KEY(ds,b)
  )
  LOGICAL PARTITION BY LIST(ds);

-- Create table B for input.
BEGIN;
CREATE TABLE public.tableB(
  a TEXT, 
  b INT, 
  c TIMESTAMP, 
  d TEXT,
  ds TEXT,
  PRIMARY KEY(ds,b)
  )
  PARTITION BY LIST(ds);
CALL set_table_property('public.tableB', 'orientation', 'column');
CREATE TABLE public.holo_child_3a PARTITION OF public.tableB FOR VALUES IN('20201215');
CREATE TABLE public.holo_child_3b PARTITION OF public.tableB FOR VALUES IN('20201216');
CREATE TABLE public.holo_child_3c PARTITION OF public.tableB FOR VALUES IN('20201217');
COMMIT;

INSERT INTO public.holo_child_3a VALUES('a',1,'2034-10-19','a','20201215');
INSERT INTO public.holo_child_3b VALUES('b',2,'2034-10-20','b','20201216');
INSERT INTO public.holo_child_3c VALUES('c',3,'2034-10-21','c','20201217');

-- Physical partitioned table
CALL hg_insert_overwrite('public.tableA' , '{20201215,20201216,20201217}'::text[],$$SELECT * FROM public.tableB$$);
-- Logical partitioned table
CALL hg_insert_overwrite('public.tableA_lp' , '{20201215,20201216,20201217}'::text[],$$SELECT * FROM public.tableB$$);

Örnek 3: MaxCompute bölümlenmemiş tablosundan Hologres bölümlenmemiş tablosuna veri aktarma

-- Create a non-partitioned table in MaxCompute. This example uses data from the customer table in the public_data project, which is a public dataset in MaxCompute. The following code provides the DDL statement for the table.
CREATE TABLE IF NOT EXISTS public_data.customer(
  c_customer_sk BIGINT,
  c_customer_id STRING,
  c_current_cdemo_sk BIGINT,
  c_current_hdemo_sk BIGINT,
  c_current_addr_sk BIGINT,
  c_first_shipto_date_sk BIGINT,
  c_first_sales_date_sk BIGINT,
  c_salutation STRING,
  c_first_name STRING,
  c_last_name STRING,
  c_preferred_cust_flag STRING,
  c_birth_day BIGINT,
  c_birth_month BIGINT,
  c_birth_year BIGINT,
  c_birth_country STRING,
  c_login STRING,
  c_email_address STRING,
  c_last_review_date STRING,
  useless STRING);

-- Create a foreign table in Hologres to map to the source data table in MaxCompute.
CREATE FOREIGN TABLE customer (
    "c_customer_sk" INT8,
    "c_customer_id" TEXT,
    "c_current_cdemo_sk" INT8,
    "c_current_hdemo_sk" INT8,
    "c_current_addr_sk" INT8,
    "c_first_shipto_date_sk" INT8,
    "c_first_sales_date_sk" INT8,
    "c_salutation" TEXT,
    "c_first_name" TEXT,
    "c_last_name" TEXT,
    "c_preferred_cust_flag" TEXT,
    "c_birth_day" INT8,
    "c_birth_month" INT8,
    "c_birth_year" INT8,
    "c_birth_country" TEXT,
    "c_login" TEXT,
    "c_email_address" TEXT,
    "c_last_review_date" TEXT,
    "useless" TEXT
)
SERVER odps_server
OPTIONS (project_name 'public_data', table_name 'customer');

-- Create an internal table in Hologres, such as a column-oriented table, to receive data from the MaxCompute source table.
BEGIN;
CREATE TABLE public.holo_customer (
 "c_customer_sk" INT8,
 "c_customer_id" TEXT,
 "c_current_cdemo_sk" INT8,
 "c_current_hdemo_sk" INT8,
 "c_current_addr_sk" INT8,
 "c_first_shipto_date_sk" INT8,
 "c_first_sales_date_sk" INT8,
 "c_salutation" TEXT,
 "c_first_name" TEXT,
 "c_last_name" TEXT,
 "c_preferred_cust_flag" TEXT,
 "c_birth_day" INT8,
 "c_birth_month" INT8,
 "c_birth_year" INT8,
 "c_birth_country" TEXT,
 "c_login" TEXT,
 "c_email_address" TEXT,
 "c_last_review_date" TEXT,
 "useless" TEXT
);
COMMIT;

-- Import data into Hologres.
IMPORT FOREIGN SCHEMA <project_name> LIMIT TO
(customer) FROM server odps_server INTO PUBLIC options(if_table_exist 'update');-- Update the foreign table.
SELECT pg_sleep(30);-- Wait for some time before you import data to Hologres. This prevents synchronization failures that are caused by data inconsistency due to slow updates of the metadata cache in Hologres.

CALL  hg_insert_overwrite('holo_customer', 'SELECT * FROM customer where c_birth_year > 1980');

-- Query data from the MaxCompute source table in Hologres.
SELECT * FROM holo_customer limit 10;

Örnek 4: MaxCompute bölümlenmiş tablosundan Hologres fiziksel bölümüne veri aktarma

-- Create a partitioned table in MaxCompute.
DROP TABLE IF EXISTS odps_sale_detail;

CREATE TABLE IF NOT EXISTS odps_sale_detail 
(
    shop_name STRING
    ,customer_id STRING
    ,total_price DOUBLE
)
PARTITIONED BY 
(
    sale_date STRING
)
;

-- Add the 20210815 partition to the source table.
ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210815')
;

-- Write data to the partition.
INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210815') VALUES 
('s1','c1',100.1),
('s2','c2',100.2),
('s3','c3',100.3)
;

-- Create a foreign table in Hologres to map to the source data table in MaxCompute.
DROP FOREIGN TABLE IF EXISTS odps_sale_detail;

-- Create a foreign table.
IMPORT FOREIGN SCHEMA <maxcompute_project> LIMIT TO
(
    odps_sale_detail
) 
FROM SERVER odps_server INTO public 
OPTIONS(if_table_exist 'error',if_unsupported_type 'error');

-- Create an internal table in Hologres to receive data from the MaxCompute source table.
DROP TABLE IF EXISTS holo_sale_detail;

-- Create a partitioned table (internal table) in Hologres.
BEGIN ;
CREATE TABLE IF NOT EXISTS holo_sale_detail
(
    shop_name TEXT
    ,customer_id TEXT 
    ,total_price FLOAT8
    ,sale_date TEXT
)
PARTITION BY LIST(sale_date);
COMMIT;

-- Import data into Hologres.
CALL hg_insert_overwrite('holo_sale_detail', '20210815', $$SELECT * FROM public.odps_sale_detail WHERE sale_date='20210815'$$);

-- Query data from the MaxCompute source table in Hologres.
SELECT * FROM holo_sale_detail;

Örnek 5: MaxCompute bölümlenmiş tablosundan Hologres fiziksel bölümlenmiş tablosuna veri aktarma

-- Create a partitioned table in MaxCompute.
DROP TABLE IF EXISTS odps_sale_detail;

CREATE TABLE IF NOT EXISTS odps_sale_detail 
(
    shop_name STRING
    ,customer_id STRING
    ,total_price DOUBLE
)
PARTITIONED BY 
(
    sale_date STRING
)
;

-- Add the 20210815 and 20210816 partitions to the source table.
ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210815')
;
ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210816')
;

-- Write data to the partitions.
INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210815') VALUES 
('s1','c1',100.1),
('s2','c2',100.2),
('s3','c3',100.3)
;
INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210816') VALUES 
('s1','c1',100.1),
('s2','c2',100.2),
('s3','c3',100.3)
;

-- Create a foreign table in Hologres to map to the source data table in MaxCompute.
DROP FOREIGN TABLE IF EXISTS odps_sale_detail;

-- Create a foreign table.
IMPORT FOREIGN SCHEMA <maxcompute_project> LIMIT TO
(
    odps_sale_detail
) 
FROM SERVER odps_server INTO public 
OPTIONS(if_table_exist 'error',if_unsupported_type 'error');

-- Create an internal table in Hologres to receive data from the MaxCompute source table.
DROP TABLE IF EXISTS holo_sale_detail;

-- Create a partitioned table (internal table) in Hologres.
BEGIN ;
CREATE TABLE IF NOT EXISTS holo_sale_detail
(
    shop_name TEXT
    ,customer_id TEXT 
    ,total_price FLOAT8
    ,sale_date TEXT
)
PARTITION BY LIST(sale_date);
COMMIT;

-- Import data into Hologres. Do not specify child partitions and set auto_create_partition to TRUE. The system automatically creates two child partitions and imports data.
CALL hg_insert_overwrite ('holo_sale_detail', $$SELECT * FROM public.odps_sale_detail$$, TRUE);

-- Query data in Hologres.
SELECT * FROM holo_sale_detail;
Not

maxcompute_project: MaxCompute bölümlenmiş tablosunun bulunduğu projenin adı.

Geçici tablo kullanarak INSERT OVERWRITE uygulaması

Sözdizimi

INSERT OVERWRITE uygulamak için aşağıdaki SQL'i kullanın.

BEGIN ;

-- Clear potential temporary tables.
DROP TABLE IF EXISTS <table_new>;

-- Create a temporary table.
SET hg_experimental_enable_create_table_like_properties=on;
CALL HG_CREATE_TABLE_LIKE ('<table_new>', 'select * from <table>');

COMMIT ;

-- Insert data into the temporary table.
INSERT INTO <table_new> [( <column> [, ...] )]
VALUES ( {<expression>}  [, ...] )
[, ...] | <query>}

ANALYZE <table_new>;

BEGIN ;

-- Delete the old table.
DROP TABLE IF EXISTS  <table>;

-- Rename the temporary table.
ALTER TABLE <table_new> RENAME TO <table>;

COMMIT ;

Parametreler

Parametre

Açıklama

table_new

Geçici tablonun adı.

Schema.Table biçimini destekler.

table

Mevcut tablonun adı.

Schema.Table biçimini destekler

Geçici tablo DDL'si

Geçici tablo oluşturmanın iki yolu vardır:

  • Mevcut bir tablodan kopyalama:

    SET hg_experimental_enable_create_table_like_properties=on;
    CALL HG_CREATE_TABLE_LIKE ('<table_new>', 'select * from <table>');
  • Sıfırdan oluşturma:

    CREATE TABLE IF NOT EXISTS <table_new> ([
      {
       column_name column_type [column_constraints, [...]]
       | table_constraints
       [, ...]
      }
    ]);
    
    CALL set_table_property('<table_new>', property, value);

MaxCompute ile etkileşim örnekleri

Hologres'e aktarım (bölümlenmemiş)

Hologres verilerini MaxCompute toplu iş sonuçlarıyla üzerine yazın. Bu örnekte Hologres tablosu region MaxCompute'in odps_region_10g tablosu kullanılarak tamamen üzerine yazılır.

BEGIN ;

-- Clear the existing temporary table.
DROP TABLE IF EXISTS public.region_new;

-- Create a temporary table.
SET hg_experimental_enable_create_table_like_properties=on;
CALL HG_CREATE_TABLE_LIKE ('public.region_new', 'select * from public.region');
COMMIT ;

-- Insert data into the temporary table.
INSERT INTO public.region_new
SELECT *
FROM public.odps_region_10g;

ANALYZE public.region_new;

BEGIN ;

-- Drop the old table.
DROP TABLE IF EXISTS public.region;

-- Rename the temporary table.
ALTER TABLE IF EXISTS public.region_new RENAME TO region;

COMMIT ;

Hologres'e aktarım (bölümlenmiş)

Günlük olarak güncellenen bir MaxCompute bölümlenmiş tablosu gerçek zamanlı verileri toplu işlenmiş sonuçlarla düzeltmek için bir Hologres bölümlenmiş tablosunun üzerine yazılabilir. Bu örnekte MaxCompute'in odps_lineitem_10g (günlük olarak ds ile bölümlenmiş) tablosundan Hologres'in lineitem tablosuna veri aktarılır.

BEGIN ;

-- Clear potential temporary tables.
DROP TABLE IF EXISTS public.lineitem_new_20210101;

-- Create a temporary table.
SET hg_experimental_enable_create_table_like_properties=on;
CALL HG_CREATE_TABLE_LIKE ('public.lineitem_new_20210101', 'select * from public.lineitem');
COMMIT ;

-- Insert data into the temporary table.
INSERT INTO public.lineitem_new_20210101
SELECT *
FROM public.odps_lineitem_10g
WHERE DS = '20210101'

ANALYZE public.lineitem_new_20210101;

BEGIN ;

-- Delete the old partition.
DROP TABLE IF EXISTS public.lineitem_20210101;

-- Rename the temporary table.
ALTER TABLE public.lineitem_new_20210101 RENAME TO lineitem_20210101;

-- Attach the temporary table to the specified partitioned table.
ALTER TABLE public.lineitem ATTACH PARTITION lineitem_20210101 FOR VALUES IN ('20210101');

COMMIT ;

MaxCompute'e aktarım (bölümlenmemiş)

Verileri Hologres'ten (holotable) MaxCompute'in mc_holotable tablosuna aktarmak için önce geçici bir tabloya yazın ardından mc_holotable tablosunu tamamen üzerine yazmak için yeniden adlandırın.

-- Create a temporary table for the sink table in MaxCompute.
CREATE  TABLE if not exists mc_holotable_temp(
    age INT,
    job STRING,
    name STRING
);

-- Create a mapping for the temporary table in Hologres.
CREATE FOREIGN TABLE "public"."mapping_holotable_temp" (
 "age" INT,
 "job" TEXT,
 "name" TEXT
)
SERVER odps_server
OPTIONS (project_name 'DLF_test',table_name 'mc_holotable_temp');
-- Update the source table in Hologres.
UPDATE holotable SET "job" = 'president' WHERE "name" = 'Lily';
-- Write the updated data to the mapping of the temporary table.
INSERT INTO mapping_holotable_temp SELECT * FROM holotable;

-- Delete the old sink table in MaxCompute.
DROP TABLE IF EXISTS mc_holotable;
-- Rename the temporary table to the sink table.
ALTER TABLE mc_holotable_temp RENAME TO mc_holotable;

Veri aktarımı hem kısmi hem de tam aktarımı destekler:

  • Bazı alanların dışa aktarılması:

    INSERT INTO mapping_holotable_temp
    SELECT x,x,x FROM holotable;  --You can replace x,x,x with the names of the fields that you want to export.
  • Tüm alanların dışa aktarılması:

    INSERT INTO mapping_holotable_temp
    SELECT * FROM holotable;