Tüm Ürünler
Search
Belge Merkezi

AnalyticDB:Harici tablo kullanarak OSS'den veri içe aktarma

Son Güncelleme:Oct 05, 2026

AnalyticDB for PostgreSQL, gpossext harici tablo özelliğini kullanarak Object Storage Service (OSS) üzerinden verileri paralel olarak içe aktarabilir. Her bir hesaplama düğümü OSS nesnelerini eş zamanlı olarak okur; bu yaklaşım, toplu veri yüklemelerinde satır satır eklemeye kıyasla çok daha hızlıdır.

Bu özellik yalnızca AnalyticDB for PostgreSQL V6.0 örnekleri için geçerlidir. V7.0 için bkz. Veri içe ve dışa aktarmak için OSS yabancı tablolarını kullanma .

Çalışma mekanizması

gpossext özelliği, AnalyticDB for PostgreSQL platformuna oss:// protokol işleyicisini ekler. oss_ext uzantısını yükledikten sonra, OSS nesneleriyle eşleşen okunabilir bir harici tablo tanımlarsınız. INSERT INTO ... SELECT * FROM komutunu çalıştırdığınızda, her bir hesaplama düğümü yoklama mekanizması aracılığıyla OSS nesnelerinin bir alt kümesini paralel olarak okur ve ardından satırları doğru hedef bölümlere yeniden dağıtır.

OSS

gpossext, GZIP sıkıştırması olsun veya olmasın TEXT ve CSV dosyalarını okuyabilir.

Harici tabloların oluşturulması ve kullanılması için söz dizimi, konumla ilgili parametrelerin söz dizimi hariç Greenplum Database ile aynıdır.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Bir AnalyticDB for PostgreSQL V6.0 örneği

  • Örneğinizle aynı bölgede bulunan bir OSS paketi

  • Pakete okuma erişimi olan bir AccessKey ID ve AccessKey secret

  • Kaynak verilerin OSS'ye TEXT veya CSV dosyaları (düz veya GZIP sıkıştırmalı) olarak zaten yüklenmiş olması

OSS'den veri içe aktarma

Adım 1: oss_ext uzantısını yükleme

OSS erişimi gereken her veritabanında aşağıdaki ifadeyi çalıştırın:

CREATE EXTENSION IF NOT EXISTS oss_ext;

Adım 2: Paralel okuma için kaynak dosyaları dağıtma

Her bir hesaplama düğümü, OSS nesnelerini talep etmek için bir yoklama mekanizması kullanır. En iyi aktarım hızını elde etmek için OSS nesnelerinin sayısını, örneğinizdeki hesaplama düğümü sayısının tam katı olacak şekilde ayarlayın. Örneğin, 4 hesaplama düğümünüz varsa 4, 8 veya 12 nesne kullanın.

Hesaplama düğümlerinin işi nasıl dağıttığı hakkında daha fazla bilgi için bkz. OSS yabancı tablolarına genel bakış.

Adım 3: Okunabilir bir harici tablo oluşturma

CREATE [READABLE] EXTERNAL TABLE tablename
    ( columnname datatype [, ...] | LIKE othertable )
    LOCATION ('ossprotocol')
    FORMAT 'TEXT'
        [( [HEADER]
           [DELIMITER [AS] 'delimiter' | 'OFF']
           [NULL [AS] 'null string']
           [ESCAPE [AS] 'escape' | 'OFF']
           [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
           [FILL MISSING FIELDS] )]
       | 'CSV'
        [( [HEADER]
           [QUOTE [AS] 'quote']
           [DELIMITER [AS] 'delimiter']
           [NULL [AS] 'null string']
           [FORCE NOT NULL column [, ...]]
           [ESCAPE [AS] 'escape']
           [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
           [FILL MISSING FIELDS] )]
    [ ENCODING 'encoding' ]
    [ [LOG ERRORS [INTO error_table]] SEGMENT REJECT LIMIT count
           [ROWS | PERCENT] ]
ossprotocol:
    oss://oss_endpoint [prefix=prefix_name|dir=[folder/[folder/]...]/file_name|filepath=[folder/[folder/]...]/file_name]
     id=userossid key=userosskey bucket=ossbucket compressiontype=[none|gzip] async=[true|false]

Gerekli parametreler

Parametre Açıklama
oss://oss_endpoint oss://oss_endpoint biçimindeki OSS uç noktası. Örnek: oss://oss-cn-hangzhou.aliyuncs.com. AnalyticDB örneğiniz bir Alibaba Cloud sunucusunda çalışıyorsa, İnternet trafiği ücretlerinden kaçınmak için dahili bir uç nokta (uç nokta URL'si internal anahtar sözcüğünü içerir) kullanın.
id AccessKey ID'niz. Bkz. AccessKey çifti oluşturma.
key AccessKey secret'iniz. Bkz. AccessKey çifti oluşturma.
bucket OSS paket adı. İçe aktarmayı çalıştırmadan önce paketi oluşturun.

Yol parametreleri (birbirini dışlar — yalnızca birini belirtin)

Parametre Açıklama
prefix OSS nesneleri için yol ön eki. Yolları ön ekle başlayan tüm nesneleri içe aktarır. Regex desteklenmez. Örneğin, prefix=test/filename/ yalnızca test/filename/aa öğesini içe aktarırken; prefix=test/filename ifadesi test/filename, test/filenamexxx, test/filename/aa, test/filenameyyy/aa ve test/filenameyyy/bb/aa öğelerini içe aktarır.
dir OSS dizin yolu. Yol / ile bitmelidir (örnek: test/mydir/). Alt dizinler hariç olmak üzere dizindeki tüm nesneleri doğrudan içe aktarır.
filepath OSS nesne yolunu içeren nesne adı. Yalnızca okunabilir harici tablolar için geçerlidir.

İsteğe bağlı parametreler

Parametre Varsayılan Açıklama
FORMAT — Dosya formatı: TEXT veya CSV.
ENCODING — Nesnelerin karakter kodlaması, örneğin utf8.
compressiontype none Sıkıştırma formatı. Geçerli değerler: none, gzip.
compressionlevel 6 OSS'ye yazılan dosyalar için sıkıştırma düzeyi. Geçerli değerler: 1–9.
async true Yardımcı iş parçacıklarını kullanarak eşzamansız içe aktarmayı etkinleştirir. Devre dışı bırakmak için false veya f olarak ayarlayın. Eşzamansız içe aktarma, düzenli veri içe aktarmaya kıyasla daha fazla donanım kaynağı tüketir.
oss_connect_timeout 10 (saniye) Bağlantı zaman aşımı.
oss_dns_cache_timeout 60 (saniye) DNS çözümleme zaman aşımı.
oss_speed_limit 1024 (bayt/sn) Minimum iletim hızı. oss_speed_time ile birlikte yapılandırılmalıdır.
oss_speed_time 15 (saniye) İletim hızının oss_speed_limit değerinin altında kalabileceği maksimum süre; bu sürenin sonunda zaman aşımı oluşur. oss_speed_limit ile birlikte yapılandırılmalıdır. Varsayılanlarla, hız 15 saniye boyunca arka arkaya 1 KB/sn'nin altında kalırsa zaman aşımı tetiklenir.
LOG ERRORS — İçe aktarılamayan satırları atlar ve bunları error_table tablosuna yazar. Hata toleransı eşiğini ayarlamak için count kullanın.

Adım 4: (İsteğe bağlı) Harici tablonun okunabilir olduğunu doğrulama

Tam içe aktarmayı çalıştırmadan önce harici tablonun OSS'den okuma yapabildiğini onaylayın:

-- Check a sample of rows
SELECT * FROM <External table> LIMIT 10;

-- Inspect the query plan to confirm parallel reads
EXPLAIN INSERT INTO <Destination table> SELECT * FROM <External table>;

Sorgu planı, tüm segmentlerde çalışan External Scan düğümlerini göstermeli ve böylece hesaplama düğümlerinin OSS nesnelerini paralel olarak okuyacağını doğrulamalıdır.

Adım 5: Paralel içe aktarmayı çalıştırma

INSERT INTO <Destination table> SELECT * FROM <External table>;

Her bir hesaplama düğümü, kendisine atanmış OSS nesnelerini okur ve satırları hedef tabloya ekler. Yeniden dağıtım hareket düğümü, satırları karmaştırır ve dağıtım anahtarına göre bunları doğru hesaplama düğümlerine yönlendirir.

Örnek

Bu örnekte, stok verileri OSS'den example adlı bir tabloya aktarılır.

1. Uzantıyı yükleyin.

CREATE EXTENSION IF NOT EXISTS oss_ext;

2. Hedef tabloyu oluşturun.

CREATE TABLE example
    (date text, time text, open float,
     high float, low float, volume int)
    DISTRIBUTED BY (date);

En iyi içe aktarma performansı için sıkıştırma ile sütun yönelimli depolama kullanın. Örneğin, aşağıdaki yan tümceyi belirtebilirsiniz: WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576). Daha fazla bilgi için bkz. CREATE TABLE.

3. Harici tabloyu oluşturun. Dosyalarınızın OSS'de nasıl organize edildiğine uygun olan yol parametresini seçin.

prefix kullanma (eşleşen yol ön ekine sahip tüm nesneleri içe aktarır, GZIP'i destekler):

CREATE READABLE EXTERNAL TABLE ossexample
    (date text, time text, open float, high float,
    low float, volume int)
    location('oss://oss-cn-hangzhou.aliyuncs.com
    prefix=osstest/example id=XXX
    key=XXX bucket=testbucket compressiontype=gzip')
    FORMAT 'csv' (QUOTE '''' DELIMITER E'\t')
    ENCODING 'utf8'
    LOG ERRORS SEGMENT REJECT LIMIT 5;

dir kullanma (dizin içindeki tüm nesneleri doğrudan içe aktarır, GZIP yok):

CREATE READABLE EXTERNAL TABLE ossexample
    (date text, time text, open float, high float,
    low float, volume int)
    location('oss://oss-cn-hangzhou.aliyuncs.com
    dir=osstest/ id=XXX
    key=XXX bucket=testbucket')
    FORMAT 'csv'
    LOG ERRORS SEGMENT REJECT LIMIT 5;

filepath kullanma (belirtilen nesneyi içe aktarır):

CREATE READABLE EXTERNAL TABLE ossexample
    (date text, time text, open float, high float,
    low float, volume int)
    location('oss://oss-cn-hangzhou.aliyuncs.com
    filepath=osstest/example.csv id=XXX
    key=XXX bucket=testbucket')
    FORMAT 'csv'
    LOG ERRORS SEGMENT REJECT LIMIT 5;

4. Verileri içe aktarın.

INSERT INTO example SELECT * FROM ossexample;

Sorgu planı, dört hesaplama düğümünün de OSS'den paralel olarak okuduğunu doğrular:

EXPLAIN INSERT INTO example SELECT * FROM ossexample;
                                            QUERY PLAN
-------------------------------------------------------------------------------------------------
 Insert (slice0; segments: 4)  (rows=250000 width=92)
   ->  Redistribute Motion 4:4  (slice1; segments: 4)  (cost=0.00..11000.00 rows=250000 width=92)
         Hash Key: ossexample.date
         ->  External Scan on ossexample  (cost=0.00..11000.00 rows=250000 width=92)
(4 rows)

TEXT ve CSV format referansı

Aşağıdaki parametreler, gpossext'in TEXT ve CSV dosyalarını nasıl ayrıştırdığını kontrol eder. Bunları CREATE EXTERNAL TABLE ifadenizin FORMAT yan tümcesinde belirtin.

  • \n: satır sınırlayıcısı (yeni satır karakteri)

  • DELIMITER: sütun ayırıcı. Belirtilirse, QUOTE da belirtilmelidir. Yaygın seçimler: ,, |, \t.

  • QUOTE: Özel karakterler içeren sütun değerlerini sarar. DELIMITER değerinden farklı olmalıdır. Varsayılan: ". QUOTE karakterleri içeren değerler ayrıca ESCAPE kullanmalıdır.

  • ESCAPE: Değişmez olarak işlenmesi gereken herhangi bir karakterden önce yerleştirilir. Varsayılan: QUOTE ile aynı. Ters eğik çizgi (\) da yaygın olarak kullanılır.

Tüm kontrol karakterleri tek baytlı olmalıdır.

Varsayılan kontrol karakterleri

Kontrol karakteri TEXT CSV
DELIMITER \t (Sekme) , (Virgül)
QUOTE " (Çift tırnak) " (Çift tırnak)
ESCAPE N/A " (Çift tırnak)
NULL \N (Ters eğik çizgi n) Tırnak işareti olmadan boş dize

Sorun giderme

İçe aktarma hatalarını inceleme

Harici tabloyu oluştururken LOG ERRORS kullandıysanız, başarısız olan satırları şu komutla alın:

SELECT * FROM gp_read_error_log('external_table_name');

İnceledikten sonra hata günlüğünü temizlemek için:

SELECT gp_truncate_error_log('external_table_name');
Harici tabloyu sildiğinizde hata günlüğü otomatik olarak silinir.

SDK hata alanlarını yorumlama

İçe aktarma günlüğündeki OSS SDK hataları aşağıdaki alanları içerir:

Alan Açıklama
code Başarısız isteğin HTTP durum kodu
error_code OSS hata kodu
error_msg OSS hata mesajı
req_id Başarısız isteğin UUID'si. Kalıcı sorunları bildirirken bunu Alibaba Cloud desteğine iletin.

OSS hata kodları hakkında ayrıntılı bilgi için bkz. Hata yanıtları.

Zaman aşımı hatalarını düzeltme

Zaman aşımı davranışını ayarlamak için oss_speed_limit ve oss_speed_time değerlerini birlikte ayarlayın. Genel OSS zaman aşımı işleme hakkında bilgi için bkz. Hata işlemeHata işleme.

Sonraki adımlar