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_overwritesaklı yordamını kullanın.Mantıksal bölümlenmiş tablolar:
hg_insert_overwritesaklı 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 |
|
Bölümlenmemiş tablo |
Desteklenir |
Desteklenir |
|
|
Fiziksel bölümlenmiş tablo |
Üst tabloya 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 |
|
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 OVERWRITEHologres V3.1'den itibaren kullanılabilir.-
Yerel
INSERT OVERWRITEaş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 OVERWRITEvarsayı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 OVERWRITEişlemleriData version is inconsistentveyaInsert overwrite version not matchgibi 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 sonraINSERT OVERWRITEiş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 |
|
|
Evet |
Hedef tablonun adı. |
|
|
Hayır |
Bölüm anahtarı ve değeri. Mantıksal bölümlenmiş tablolar için gereklidir. |
|
|
Hayır |
Hedef tablodaki ilgili sütun için bir ifade veya değer. |
|
|
Hayır |
Not
|
Ö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_overwritemantıksal bölümlenmiş tabloları destekler (bölüm belirtilmelidir).V3.0'dan itibaren
hg_insert_overwritedoğ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_overwritebaş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_overwritetablo 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_overwriteişlemler içinde kullanılamaz.NotDaha eski sürümlerde bir işlemde
hg_insert_overwritekullanmak kilitlenmelere veya askıda kalmalara neden olabilirdi. V3.0'dan itibaren
sqliçindekihg_insert_overwritesütun sayısı ve veri türleritarget_tableile 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:
sqlsonuç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
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 |
|
|
Mevcut bir Hologres dahili tablosu. |
|
|
Hedef bölüm.
|
|
|
MaxCompute veya Hologres tablolarını sorgulayabilir. Tek tırnak işaretlerini
|
|
|
Mevcut olmayan bölümlerin otomatik oluşturulmasını kontrol eder. Yalnızca V3.0+, yalnızca fiziksel bölümlenmiş tablolar.
|
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_overwritedavranışıParametre değeri
auto_create_partition
TRUE
FALSE
partition_valueBelirtilmemiş
-
İ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_overwritedavranışıMantıksal bölümlenmiş tablolar otomatik bölümlemeyi desteklemez;
auto_create_partitionyok sayılır.Parametre değeri
Açıklama
partition_valueBelirtilmemiş
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;
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 |
|
|
Geçici tablonun adı.
|
|
|
Mevcut tablonun adı.
|
|
Geçici tablo DDL'si |
Geçici tablo oluşturmanın iki yolu vardır:
|
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;