OSS Load, Object Storage Service (OSS) üzerindeki yüzlerce gigabaytlık veriyi dahili ağ üzerinden ApsaraDB for SelectDB örneğinize aktarmanızı sağlar. Aktarma işlemi eşzamansızdır; işi gönderdikten sonra SelectDB dosyaları arka planda işlerken siz çalışmaya devam edebilirsiniz.
OSS Load ne zaman kullanılır?
Aşağıdaki durumlarda OSS Load tercih edilmelidir:
Büyük dosya yığınlarını (onlarca veya yüzlerce gigabayt) aktarmanız gerektiğinde
Dosyalarınız, SelectDB örneğinizle aynı bölgede bulunan bir OSS paketinde depolandığında
CSV, PARQUET veya ORC formatındaki dosyaları yüklemeniz gerektiğinde
OSS Load dahili olarak S3 protokolünü kullandığından sözdizimi AWS ve S3 anahtar kelimelerini içerir. Bu beklenen bir durumdur; ApsaraDB for SelectDB, S3 uyumlu tüm nesne depolama hizmetlerini destekler ve OSS, S3 uyumlu uç nokta üzerinden erişilir.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Bir AccessKey çifti. Bkz. AccessKey çifti oluşturma.
ApsaraDB for SelectDB örneğinizle aynı bölgede bir OSS paketi. Bkz. OSS konsolunu kullanarak başlayın.
Sanal özel bulut (VPC) üzerinden erişilebilen OSS — OSS Load, genel uç nokta yerine dahili VPC uç noktasını kullanır
Söz dizimi
LOAD LABEL <load_label>
(
data_desc1[, data_desc2, ...]
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "<region>",
"AWS_ENDPOINT" = "<endpoint>",
"AWS_ACCESS_KEY" = "<AccessKey ID>",
"AWS_SECRET_KEY" = "<AccessKey secret>"
)
PROPERTIES
(
"key1" = "value1", ...
);
OSS paket yolu s3:// ile başlamalıdır.
Parametreler
Veri açıklaması (data_desc)
Her data_desc bloğu, aktarılacak bir dosya grubunu tanımlar. Tam söz dizimi şöyledir:
[MERGE|APPEND|DELETE]
DATA INFILE
(
"file_path1"[, "file_path2", ...]
)
[NEGATIVE]
INTO TABLE `<table_name>`
[PARTITION (p1, p2, ...)]
[COLUMNS TERMINATED BY "<column_separator>"]
[FORMAT AS "<file_type>"]
[(column_list)]
[COLUMNS FROM PATH AS (c1, c2, ...)]
[PRECEDING FILTER predicate]
[SET (column_mapping)]
[WHERE predicate]
[DELETE ON expr]
[ORDER BY source_sequence]
[PROPERTIES ("key1"="value1", ...)]
| Parametre | Açıklama |
|---|---|
MERGE|APPEND|DELETE |
Veri birleştirme türü. Varsayılan: APPEND. MERGE ve DELETE yalnızca Unique Key modelindeki tablolar için geçerlidir. MERGE olarak ayarlandığında, silme_flag sütununu belirtmek için DELETE ON kullanın. DELETE olarak ayarlandığında, aktarılan veri satırları tablodan silinir. |
DATA INFILE |
Aktarılacak dosya(lar)ın yolu. Joker karakterler desteklenir. Bir dizin yolu değil, dosya yolu olmalıdır. |
NEGATIVE |
Verileri negatif yöntemle aktarır; bu yöntem, daha önce aktarılan hatalı verileri telafi etmek amacıyla SUM toplamlı sütunlardaki tamsayı değerlerini tersine çevirir. Yalnızca tamsayı sütunlarla SUM toplamı kullanan tablolar için geçerlidir. |
PARTITION (p1, p2, ...) |
Verilerin aktarılacağı bölümler. Belirtilen bölümlerin dışındaki veriler yok sayılır. |
COLUMNS TERMINATED BY |
Sütun ayırıcı. Yalnızca CSV dosyaları için geçerlidir. Tek bayt olmalıdır. |
FORMAT AS |
Dosya formatı. Geçerli değerler: CSV, PARQUET, ORC. Varsayılan: CSV. |
column_list |
Kaynak dosyadaki sütun sırası. Bkz. Kaynak verileri dönüştürme. |
COLUMNS FROM PATH AS |
Dosya yolundan çıkarılacak sütunlar. |
PRECEDING FILTER predicate |
Verileri filtrelemek için ön ayarlanan koşullar. Veriler, column list ve COLUMNS FROM PATH AS parametrelerinin değerlerine göre sırayla kaynak veri satırlarıyla birleştirilir. Ardından veriler, ön ayarlanan filtreleme koşullarına göre süzülür. |
SET (column_mapping) |
Kaynak verilere uygulanan sütun dönüşüm işlevleri. |
WHERE predicate |
Aktarılan verilerin filtreleneceği koşullar. |
DELETE ON expr |
Yalnızca MERGE türüyle birlikte kullanılır. Silme_flag sütununu ve koşulunu belirtir. Yalnızca Unique Key modelindeki tablolar için geçerlidir. |
ORDER BY |
Aktarma için sıra sütunu. Yalnızca Unique Key modelindeki tablolar için geçerlidir ve aktarma sırasında veri sırasını sağlar. |
PROPERTIES |
Ek format parametreleri. JSON dosyaları için json_root, jsonpaths ve fuzzy_parse ayarlayabilirsiniz. |
OSS bağlantı parametreleri (WITH S3)
| Parametre | Açıklama |
|---|---|
AWS_PROVIDER |
Nesne depolama sağlayıcısı. OSS olarak ayarlayın. |
AWS_REGION |
OSS paketinin bulunduğu bölge. |
AWS_ENDPOINT |
OSS verilerine erişmek için kullanılan uç nokta. Bkz. Bölgeler ve uç noktalar. OSS paketi ve SelectDB örneği aynı bölgede olmalıdır. |
AWS_ACCESS_KEY |
OSS'e erişmek için kullanılan AccessKey ID. |
AWS_SECRET_KEY |
OSS'e erişmek için kullanılan AccessKey gizli anahtarı. |
İş özellikleri (PROPERTIES)
| Parametre | Varsayılan | Açıklama |
|---|---|---|
timeout |
14400 (4 saat) |
Aktarma işi için zaman aşımı süresi (saniye cinsinden). |
max_filter_ratio |
0 |
Veri kalitesi sorunları nedeniyle filtrelenebilecek satırların maksimum oranı. Geçerli değerler: 0 ile 1 arasında. |
exec_mem_limit |
2147483648 (2 GiB) |
Aktarma işi için kullanılabilir maksimum bellek (bayt cinsinden). |
strict_mode |
false |
Aktarma işi için katı modun etkinleştirilip etkinleştirilmeyeceği. |
timezone |
Asia/Shanghai |
strftime, alignment_timestamp ve from_unixtime gibi zamanla ilgili işlevler için saat dilimi. Bkz. Tüm saat dilimlerinin listesi. |
load_parallelism |
1 |
Eşzamanlı aktarma görevlerinin sayısı. Büyük aktarmaları hızlandırmak için bu değeri artırın. |
send_batch_parallelism |
— | Verileri toplu halde göndermek için eşzamanlı görevlerin sayısı. BE yapılandırması max_send_batch_parallelism_per_job ile sınırlıdır. |
load_to_single_tablet |
false |
Tüm verilerin bölüm başına tek bir tablete aktarılıp aktarılmayacağı. Yalnızca rastgele bölümlemeli Duplicate Key modelindeki tablolar için geçerlidir. |
OSS'ten veri aktarma
Bu örnekte bir tablo oluşturulur, OSS'te örnek bir CSV dosyası hazırlanır ve OSS Load kullanılarak yüklenir.
Adım 1: Hedef tabloyu oluşturun.
CREATE TABLE test_table
(
id int,
name varchar(50),
age int,
address varchar(50),
url varchar(500)
)
DISTRIBUTED BY HASH(id) BUCKETS 4
PROPERTIES("replication_num" = "1");
Adım 2: Veri dosyanızı OSS'e yükleyin.
test_file.txt adlı bir CSV dosyasını OSS paketinize yükleyin. Dosya içeriği şu şekilde olmalıdır:
1,yang,32,shanghai,http://example.com
2,wang,22,beijing,http://example.com
3,xiao,23,shenzhen,http://example.com
Adım 3: Aktarma işini gönderin.
LOAD LABEL test_db.test_label_1
(
DATA INFILE("s3://your_bucket_name/test_file.txt")
INTO TABLE test_table
COLUMNS TERMINATED BY ","
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "oss-cn-beijing",
"AWS_ENDPOINT" = "oss-cn-beijing-internal.aliyuncs.com",
"AWS_ACCESS_KEY" = "<your_access_key>",
"AWS_SECRET_KEY" = "<your_secret_key>"
)
PROPERTIES
(
"timeout" = "3600"
);
LOAD ifadesi dört bölümden oluşur:
LABEL: Bu aktarma işi için benzersiz bir tanımlayıcı; durumunu sorgulamak ve gerekirse iptal etmek için kullanılır.
Veri bildirimi: Kaynak dosya yolu, formatı ve hedef tablo.
WITH S3: OSS bağlantı kimlik bilgileri ve uç noktası.
PROPERTIES: Zaman aşımı gibi iş düzeyindeki ayarlar.
Aktarma işlerini izleme ve yönetme
İş durumunu kontrol etme
OSS Load eşzamansızdır. İşi gönderdikten sonra ilerlemeyi takip etmek için SHOW LOAD komutunu kullanın.
SHOW LOAD
[FROM <db_name>]
[
WHERE
[LABEL [ = "your_label" | LIKE "label_matcher"]]
[STATE = ["PENDING"|"ETL"|"LOADING"|"FINISHED"|"CANCELLED"]]
]
[ORDER BY ...]
[LIMIT limit][OFFSET offset];
| Parametre | Varsayılan | Açıklama |
|---|---|---|
db_name |
Geçerli veritabanı | Sorgulanacak veritabanı. |
LABEL |
— | Etikete göre filtreleme. Tam eşleşme (=) ve desen eşleşmesi (LIKE) desteklenir. |
STATE |
— | İş durumuna göre filtreleme. |
ORDER BY |
— | Sonuçları sıralama. |
LIMIT |
Tüm kayıtlar | Döndürülecek maksimum kayıt sayısı. |
OFFSET |
0 |
Atlanacak kayıt sayısı. |
Örnekler:
example_db veritabanında etiketleri 2014_01_02 ile eşleşen işleri sorgulayın ve en eski 10 tanesini döndürün:
SHOW LOAD FROM example_db WHERE LABEL LIKE "2014_01_02" LIMIT 10;
Belirli bir işi sorgulayın ve başlangıç zamanına göre sıralayın:
SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" ORDER BY LoadStartTime DESC;
Şu anda LOADING durumunda olan işleri sorgulayın:
SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" AND STATE = "LOADING";
Sayfalama ile sorgulama yapın (ilk 5 kaydı atlayın, sonraki 10 kaydı döndürün):
SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC LIMIT 5,10;
SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC LIMIT 10 OFFSET 5;
Aktarma işini iptal etme
Henüz FINISHED veya CANCELLED durumunda olmayan bir işi iptal edin. İptal işleminin ardından, iş tarafından yazılan tüm veriler geri alınır.
CANCEL LOAD
[FROM <db_name>]
WHERE [LABEL = "<load_label>" | LABEL LIKE "<label_pattern>"];
| Parametre | Varsayılan | Açıklama |
|---|---|---|
db_name |
Geçerli veritabanı | Aktarma işini içeren veritabanı. |
load_label |
— | İptal edilecek işin etiketi. Tam eşleşme ve LABEL LIKE desen eşleşmesi desteklenir. |
Örnekler:
Belirli bir işi iptal edin:
CANCEL LOAD
FROM example_db
WHERE LABEL = "example_db_test_load_label";
Etiketleri example_ ile başlayan tüm işleri iptal edin:
CANCEL LOAD
FROM example_db
WHERE LABEL LIKE "example_";
Sorun giderme
Aktarma zaman aşımına uğruyor
Varsayılan zaman aşımı süresi 4 saattir (14400 saniye). Bir iş bu sınırı aşarsa, zaman aşımını basitçe artırmaktan kaçının; bir iş geç aşamada başarısız olursa uzun yeniden denemeler maliyetli olur.
Bunun yerine, büyük dosyaları daha küçük parçalara bölün ve birden fazla işle aktarın.
Veri hacminiz uygun aralıkta olmasına rağmen iş hala zaman aşımına uğruyorsa, daha fazla görevi eşzamanlı çalıştırmak için load_parallelism değerini artırın ve ardından timeout değerini buna göre ayarlayın.