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.

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,QUOTEda belirtilmelidir. Yaygın seçimler:,,|,\t.QUOTE: Özel karakterler içeren sütun değerlerini sarar.DELIMITERdeğerinden farklı olmalıdır. Varsayılan:".QUOTEkarakterleri içeren değerler ayrıcaESCAPEkullanmalıdır.ESCAPE: Değişmez olarak işlenmesi gereken herhangi bir karakterden önce yerleştirilir. Varsayılan:QUOTEile 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
OSS etki alanı adları — bölgeniz için doğru uç noktayı bulun
OSS belgeleri — paketleri ve nesneleri yönetin
CREATE TABLE — tablo depolama seçenekleri için tam söz dizimi
Hata yanıtları — OSS hata kodu referansı
Hata işlemeHata işleme — zaman aşımı ve hata işleme rehberi