Bu konu, Tunnel komutlarının özelliklerini ve bu komutları kullanarak veri yükleme ve indirme yöntemlerini açıklar.
Desteklenen araçlar
Tunnel komutlarını odpscmd ve MaxCompute Studio'da çalıştırabilirsiniz. Daha fazla bilgi için bkz. Yerel istemci (odpscmd) ile bağlanma ve MaxCompute Studio'ya giriş.
Tunnel komutu özellikleri
İstemci içindeki Tunnel komutları, Dship aracının yerini alır. Veri yüklemek ve indirmek için bu komutları kullanabilirsiniz. Komutlar aşağıda listelenmiştir:
Upload: Yerel bir dosyadaki verileri bir MaxCompute tablosuna yükler. Her yükleme işlemi tek bir tabloya veya tek bir bölüme veri yazabilir. Bölümlenmiş tablolar için hedef bölümü belirtmeniz gerekir. Çok düzeyli bölümlenmiş tablolar için en alt düzey bölümü belirtmelisiniz. Daha fazla bilgi için bkz. Upload.
Download: Bir MaxCompute tablosundaki veya belirli bir örneğin sonuçlarındaki verileri yerel bir dosyaya indirir. Her indirme işlemi, bir tabloyu veya bir bölümü tek bir dosyaya indirebilir. Bölümlenmiş tablolar için kaynak bölümü belirtmeniz gerekir. Çok düzeyli bölümlenmiş tablolar için en alt düzey bölümü belirtmelisiniz. Daha fazla bilgi için bkz. Download.
Resume: Ağ sorunları veya Tunnel hizmeti hataları nedeniyle bir yükleme başarısız olursa, dosya yüklemeye devam etmek için
Resumekomutunu kullanabilirsiniz. Bu komut önceki yükleme işlemini sürdürür. Resume komutu şu anda indirme işlemlerini desteklemez. Daha fazla bilgi için bkz. Resume.Show: Geçmiş görevlere ilişkin bilgileri görüntüler. Daha fazla bilgi için bkz. Show.
Purge: Oturum dizinini temizler. Bu komut varsayılan olarak son üç güne ait günlükleri kaldırır. Daha fazla bilgi için bkz. Purge.
Help: Yardım bilgilerini görüntüler. Her komut ve seçenek için kısa komut biçimleri desteklenir.
-
Upsert: Update ve Insert anlamlarını birleştirerek veri yazar. Bu komut yalnızca Transaction Table 2.0 tabloları için desteklenir.
Hedef tabloda eşleşen veri bulunmazsa yeni veri eklenir. Veri zaten varsa güncellenir.
Tunnel yükleme ve indirme sınırlamaları
Tunnel özelliği ve Tunnel yazılım geliştirme kiti (SDK), harici tablolar üzerinde yapılan işlemleri şu anda desteklemez. Tunnel kullanarak verileri doğrudan bir MaxCompute iç tabloya yükleyebilirsiniz. Alternatif olarak, OSS Python SDK kullanarak verileri OSS'e yükleyebilir ve ardından verilerle eşleşmesi için MaxCompute'te bir harici tablo oluşturabilirsiniz. Harici tablolar hakkında daha fazla bilgi için bkz. Harici tablolara genel bakış.
Tunnel komutları ARRAY, MAP veya STRUCT veri türündeki verilerin yüklenmesini veya indirilmesini desteklemez.
-
Sunucu tarafındaki her Tunnel oturumunun yaşam döngüsü 24 saattir. Bir oturum oluşturulduktan sonraki 24 saat içinde kullanılabilir. Ayrıca işlemler veya iş parçacıkları arasında paylaşılabilir. Ancak aynı BlockId'nin yeniden kullanılmadığından emin olmalısınız.
NotBir Tunnel Oturumu: Sunucu tarafı, her yükleme veya indirme işlemi için bir oturum oluşturur ve işlemi tanımlamak üzere benzersiz bir UploadId veya DownloadId üretir. Sunucu tarafındaki bir Tunnel oturumunun yaşam döngüsü 24 saattir. 24 saatin sonunda oturum etkinliğini yitirir.
Bir oturum kullanarak veri indirirken, bir Alibaba Cloud hesabı tarafından oluşturulan oturumun yalnızca o Alibaba Cloud hesabı veya bunun RAM kullanıcıları tarafından indirme amacıyla kullanılabileceğini unutmayın.
Tablo verilerini yükleme ve indirme
Başlamadan önce data.txt adlı bir veri dosyası hazırlayın ve d:\data.txt konumuna kaydedin. Dosya aşağıdaki verileri içerir.
shopx,x_id,100
shopy,y_id,200
shopz,z_id
data.txt dosyasındaki üçüncü veri satırı, oluşturulacak olan bölümlenmiş sale_detail tablosunun şemasıyla eşleşmez. sale_detail tablosu üç sütunla tanımlanmıştır ancak bu satırda yalnızca iki sütun bulunur.
Aşağıdaki adımlarda tablo verilerinin nasıl yükleneceği ve indirileceği açıklanmaktadır.
-
MaxCompute istemcisinde aşağıdaki ifadeleri çalıştırarak bölümlenmiş sale_detail tablosunu oluşturun ve buna bir bölüm ekleyin.
CREATE TABLE IF NOT EXISTS sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) PARTITIONED BY (sale_date STRING,region STRING); alter table sale_detail add partition (sale_date='201312', region='hangzhou'); -
data.txt veri dosyasını bölümlenmiş sale_detail tablosuna yüklemek için
uploadkomutunu kullanın.-
Örnek komut
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false; -
Dönüş değeri
Upload session: 20230505xxxxxxxxxxxb0b02dbb6bd Start upload:d:\data.txt Using \r\n to split records Upload in strict schema mode: true Total bytes:42 Split input to 1 blocks 2023-05-05 10:11:35 upload block: '1' ERROR: column mismatch -,expected 3 columns, 2 columns found, please check data or delimiterNotdata.txt dosyası hatalı veri içerdiğinden veri aktarımı başarısız olur. Bir oturum kimliği ve bir hata mesajı döndürülür.
-
-
Verileri doğrulamak için aşağıdaki ifadeyi çalıştırın.
-
Örnek komut
select * from sale_detail where sale_date='201312'; -
Dönüş değerleri
ID = 20230505xxxxxxxxxxxvc61z5 +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+NotVeri aktarımı hatalı veri nedeniyle başarısız olmuş ve tablo boş kalmıştır.
-
-
Başarısız yüklemenin oturum kimliğini sorgulamak için
showkomutunu kullanın.-
Örnek komut
tunnel show history; -
Döndürülen sonuç
20230505xxxxxxxxxxxb0b02dbb6bd failed 'upload d:\data.txt sale_detail/sale_date=201312,region=Hangzhou -s false'
-
-
data.txt örnek veri dosyasını, sale_detail tablo şemasıyla eşleşen aşağıdaki verileri içerecek şekilde değiştirin.
shopx,x_id,100 shopy,y_id,200 -
Veri yüklemesini sürdürmek için
resumekomutunu çalıştırın. Bu komutta 20230505xxxxxxxxxxxb0b02dbb6bd başarısız yüklemenin oturum kimliğidir.-
Örnek komut
tunnel resume 20230505xxxxxxxxxxxb0b02dbb6bd --force; -
Dönüş değeri
start resume 20230505xxxxxxxxxxxb0b02dbb6bd Upload session: 20230505xxxxxxxxxxxb0b02dbb6bd Start upload:d:\data.txt Using \r\n to split records Upload in strict schema mode: true Resume 1 blocks 2023-05-05 10:32:39 upload block: '1' 2023-05-05 10:32:40 upload block complete, block id: 1 upload complete, average speed is 0 bytes/s OK
-
-
Verileri doğrulamak için aşağıdaki ifadeyi çalıştırın. Yükleme başarılıdır.
-
Örnek komut
select * from sale_detail where sale_date='201312'; -
Dönüş değeri
ID = 20230505xxxxxxxxxxxx7afc9qcg +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | shopx | x_id | 100.0 | 201312 | hangzhou| | shopy | y_id | 200.0 | 201312 | hangzhou| +-----------+-------------+-------------+-----------+--------+
-
-
sale_detail tablosundaki verileri result.txt adlı yerel bir dosyaya indirmek için
downloadkomutunu çalıştırın.NotVerilerin indirildiği yerel yol path için adlandırma kuralları aşağıdaki gibidir:
Dosyayı doğrudan MaxCompute istemcisinin bin dizinine kaydetmek için path değerini
filename.extensionolarak ayarlayın.Dosyayı D sürücüsündeki test klasörü gibi başka bir yola kaydetmek için path değerini
D:\test\filename.extensionolarak ayarlayın.Aynı ada sahip yerel bir dosya varsa üzerine yazılır.
tunnel download sale_detail/sale_date=201312,region=hangzhou result.txt; -
result.txt dosyasının içeriğini doğrulayın. Dosya aşağıdaki içeriği içerir; bu da indirmenin başarılı olduğunu gösterir.
Notİndirilen dosyada yalnızca bölüm dışı alanların değerleri görüntülenir.
shopx,x_id,100.0 shopy,y_id,200.0
Örnek verilerini indirme
-
Yöntem 1: Belirli bir örneğin yürütme sonuçlarını yerel bir dosyaya indirmek için tunnel download komutunu kullanın.
-
sale_detail tablosunu sorgulamak için bir SELECT ifadesi çalıştırın.
select * from sale_detail;NotBölümlenmiş sale_detail tablosu için tam tablo taramaları devre dışı bırakılırsa bu komut
Table(xxxx) is full scan with all partitions, please specify partition predicateshatasını döndürür. Bu sorunu çözme hakkında daha fazla bilgi için bkz. Ek: Hata kodları. -
Yürütme sonuçlarını yerel bir dosyaya indirmek için aşağıdaki Tunnel komutunu çalıştırın.
--View the instance ID of the SELECT command show p; --Run the download command tunnel download instance://20170724071705393ge3csfb8 result.txt;
-
-
Yöntem 2: SQL sorgu sonuçlarını varsayılan olarak InstanceTunnel üzerinden çıktı almak için parametreleri yapılandırın.
MaxCompute istemcisinde
use_instance_tunnelseçeneğini etkinleştirdikten sonra SELECT sorguları sonuçları indirmek için varsayılan olarak InstanceTunnel kullanır. Bu yaklaşım, MaxCompute platformundan SQL sorgu sonuçlarını alırken oluşabilecek zaman aşımı hatalarını ve veri hacmi sınırlamalarını önlemenize yardımcı olur. Bu yapılandırmayı aşağıdaki iki yoldan biriyle etkinleştirebilirsiniz:NotInstanceTunnel'in kısıtlamaları ve sınırları hakkında daha fazla bilgi için bkz. InstanceTunnel kısıtlamaları ve sınırları.
-
İstemci nin en son sürümünde bu seçenek odps_config.ini dosyasında varsayılan olarak etkindir ve
instance_tunnel_max_recordvarsayılan olarak 10000 olarak ayarlanır.# Download SQL results by instance tunnel use_instance_tunnel=true # The maximum number of records to download when using instance tunnel for SQL results instance_tunnel_max_record=10000Notinstance_tunnel_max_recordparametresi, InstanceTunnel aracılığıyla indirilecek maksimum SQL sorgu sonucu sayısını belirtir. Bu parametreyi ayarlamazsanız sınırsız sayıda kayıt indirilebilir. -
Bu özelliği etkinleştirmek için
set console.sql.result.instancetunnel=truekomutunu çalıştırın.-
Instance Tunnel seçeneğini etkinleştirin.
set console.sql.result.instancetunnel=true; -
Bir select sorgusu çalıştırın.
select * from wc_in;Aşağıdaki sonuç döndürülür.
ID = 20170724081946458g14csfb8 Log view: http://logview/xxxxx..... +------------+ | key | +------------+ | slkdfj | | hellp | | apple | | tea | | peach | | apple | | tea | | teaa | +------------+ A total of 8 records fetched by instance tunnel. Max record number: 10000
NotBir SELECT sorgusunun sonuçlarını InstanceTunnel kullanarak çıktılarken sistem son satıra bir ileti yazdırır. Bu örnekte örnek yürütme toplam 8 kayıt döndürmüştür. Benzer şekilde, bu özelliği devre dışı bırakmak için
set console.sql.result.instancetunnel = falsekomutunu çalıştırabilirsiniz. -
-