Topik ini menjelaskan fitur-fitur perintah Tunnel dan cara menggunakannya untuk mengunggah serta mengunduh data.
Tool yang didukung
Anda dapat menjalankan perintah Tunnel di odpscmd dan MaxCompute Studio. Untuk informasi selengkapnya, lihat Koneksi menggunakan client lokal (odpscmd) dan Pengenalan MaxCompute Studio.
Fitur perintah Tunnel
Perintah Tunnel yang tersedia di client menggantikan tool Dship. Perintah ini dapat digunakan untuk mengunggah dan mengunduh data, dengan rincian sebagai berikut:
-
Upload: Mengunggah data dari file lokal ke tabel MaxCompute. Setiap operasi unggah hanya dapat menulis data ke satu tabel atau satu partition. Untuk tabel partisi, Anda harus menentukan partisi tujuan. Untuk tabel partisi multi-level, Anda harus menentukan partisi level terendah. Untuk informasi selengkapnya, lihat Upload.
-
Download: Mengunduh data dari tabel MaxCompute atau hasil instans tertentu ke file lokal. Setiap operasi unduh hanya dapat mengunduh satu tabel atau satu partisi ke satu file. Untuk tabel partisi, Anda harus menentukan partisi sumber. Untuk tabel partisi multi-level, Anda harus menentukan partisi level terendah. Untuk informasi selengkapnya, lihat Download.
-
Resume: Jika unggahan gagal karena masalah jaringan atau error layanan Tunnel, Anda dapat menggunakan perintah
Resumeuntuk melanjutkan unggahan file tersebut. Perintah ini melanjutkan operasi unggah sebelumnya. Saat ini, perintah Resume tidak mendukung operasi unduh. Untuk informasi selengkapnya, lihat Resume. -
Show: Menampilkan informasi tentang tugas historis. Untuk informasi selengkapnya, lihat Show.
-
Purge: Membersihkan direktori sesi. Secara default, perintah ini menghapus log dari tiga hari terakhir. Untuk informasi selengkapnya, lihat Purge.
-
Help: Menampilkan informasi bantuan. Format perintah singkat didukung untuk setiap perintah dan opsi.
-
Upsert: Menulis data menggunakan kombinasi semantik Update dan Insert. Perintah ini hanya didukung untuk tabel Transaction Table 2.0.
Jika data yang sesuai tidak ditemukan di tabel tujuan, data baru akan dimasukkan. Jika data sudah ada, data tersebut akan diperbarui.
Batasan unggah dan unduh Tunnel
-
Fitur Tunnel dan software development kit (SDK) Tunnel saat ini tidak mendukung operasi pada tabel eksternal. Anda dapat menggunakan Tunnel untuk mengunggah data langsung ke tabel internal MaxCompute atau mengunggah data ke OSS menggunakan OSS Python SDK, lalu membuat tabel eksternal di MaxCompute untuk memetakan data tersebut. Untuk informasi selengkapnya tentang tabel eksternal, lihat Ikhtisar tabel eksternal.
-
Perintah Tunnel tidak mendukung pengunggahan atau pengunduhan data dengan tipe data ARRAY, MAP, atau STRUCT.
-
Siklus hidup setiap sesi Tunnel di sisi server adalah 24 jam. Sesi dapat digunakan dalam waktu 24 jam setelah dibuat dan dapat dipakai bersama lintas proses atau thread. Namun, Anda harus memastikan bahwa BlockId yang sama tidak digunakan ulang.
CatatanSesi Tunnel: Server membuat sesi untuk setiap unggahan atau unduhan dan menghasilkan UploadId atau DownloadId unik untuk mengidentifikasi operasi tersebut. Siklus hidup sesi Tunnel di sisi server adalah 24 jam. Setelah 24 jam, sesi menjadi tidak aktif.
-
Saat mengunduh data menggunakan sesi, perhatikan bahwa sesi yang dibuat oleh Akun Alibaba Cloud hanya dapat digunakan untuk unduhan oleh Akun Alibaba Cloud tersebut atau Pengguna RAM-nya.
Mengunggah dan mengunduh data tabel
Sebelum memulai, siapkan file data bernama data.txt dan simpan di d:\data.txt. File tersebut berisi data berikut.
shopx,x_id,100
shopy,y_id,200
shopz,z_id
Baris ketiga data dalam file data.txt tidak sesuai dengan skema tabel partisi sale_detail yang akan dibuat. Tabel sale_detail didefinisikan dengan tiga kolom, tetapi baris ini hanya memiliki dua.
Langkah-langkah berikut menjelaskan cara mengunggah dan mengunduh data tabel.
-
Di client MaxCompute, jalankan pernyataan berikut untuk membuat tabel partisi sale_detail dan menambahkan partisi ke dalamnya.
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'); -
Gunakan perintah
uploaduntuk mengunggah file data data.txt ke tabel partisi sale_detail.-
Contoh perintah
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false; -
Nilai kembalian
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 delimiterCatatanKarena data.txt berisi data kotor, impor data gagal. ID sesi dan pesan error dikembalikan.
-
-
Jalankan pernyataan berikut untuk memverifikasi data.
-
Contoh perintah
select * from sale_detail where sale_date='201312'; -
Nilai kembalian
ID = 20230505xxxxxxxxxxxvc61z5 +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+CatatanImpor data gagal karena data kotor, sehingga tabel tetap kosong.
-
-
Gunakan perintah
showuntuk menanyakan ID sesi dari unggahan yang gagal.-
Contoh perintah
tunnel show history; -
Hasil yang dikembalikan
20230505xxxxxxxxxxxb0b02dbb6bd failed 'upload d:\data.txt sale_detail/sale_date=201312,region=Hangzhou -s false'
-
-
Ubah file data sampel data.txt agar berisi data berikut, yang sesuai dengan skema tabel sale_detail.
shopx,x_id,100 shopy,y_id,200 -
Jalankan perintah
resumeuntuk melanjutkan unggahan data. Dalam perintah ini, 20230505xxxxxxxxxxxb0b02dbb6bd adalah ID sesi dari unggahan yang gagal.-
Contoh perintah
tunnel resume 20230505xxxxxxxxxxxb0b02dbb6bd --force; -
Nilai kembalian
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
-
-
Jalankan pernyataan berikut untuk memverifikasi data. Unggahan berhasil.
-
Contoh perintah
select * from sale_detail where sale_date='201312'; -
Nilai kembalian
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| +-----------+-------------+-------------+-----------+--------+
-
-
Jalankan perintah
downloaduntuk mengunduh data dari tabel sale_detail ke file lokal bernama result.txt.CatatanKonvensi penamaan untuk path lokal path tempat data diunduh adalah sebagai berikut:
-
Untuk menyimpan file langsung ke direktori bin client MaxCompute, atur path menjadi
filename.extension. -
Untuk menyimpan file ke path lain, seperti folder test di drive D, atur path menjadi
D:\test\filename.extension. -
Jika file lokal dengan nama yang sama sudah ada, file tersebut akan ditimpa.
tunnel download sale_detail/sale_date=201312,region=hangzhou result.txt; -
-
Verifikasi isi file result.txt. File tersebut berisi konten berikut, yang menunjukkan bahwa unduhan berhasil.
CatatanFile yang diunduh hanya menampilkan nilai bidang non-partisi.
shopx,x_id,100.0 shopy,y_id,200.0
Unduh data Instans
-
Metode 1: Gunakan perintah tunnel download untuk mengunduh hasil eksekusi instans tertentu ke file lokal.
-
Jalankan pernyataan SELECT untuk menanyakan tabel sale_detail.
select * from sale_detail;CatatanJika pemindaian tabel penuh dinonaktifkan untuk tabel partisi sale_detail, perintah ini mengembalikan error
Table(xxxx) is full scan with all partitions, please specify partition predicates. Untuk informasi selengkapnya tentang cara mengatasi masalah ini, lihat Lampiran: Kode error. -
Jalankan perintah Tunnel berikut untuk mengunduh hasil eksekusi ke file lokal.
--View the instance ID of the SELECT command show p; --Run the download command tunnel download instance://20170724071705393ge3csfb8 result.txt;
-
-
Metode 2: Konfigurasikan parameter untuk mengeluarkan hasil kueri SQL melalui InstanceTunnel secara default.
Setelah Anda mengaktifkan opsi
use_instance_tunneldi client MaxCompute, kueri SELECT secara default menggunakan InstanceTunnel untuk mengunduh hasil. Hal ini membantu menghindari error timeout dan batasan volume data saat mengambil hasil kueri SQL dari platform MaxCompute. Anda dapat mengaktifkan konfigurasi ini dengan salah satu dari dua cara berikut:CatatanUntuk informasi selengkapnya tentang batasan dan limitasi InstanceTunnel, lihat Batasan dan limitasi InstanceTunnel.
-
Pada versi terbaru client, opsi ini diaktifkan secara default dalam file odps_config.ini, dan
instance_tunnel_max_recorddiatur ke 10000 secara default.# 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=10000CatatanParameter
instance_tunnel_max_recordmenentukan jumlah maksimum hasil kueri SQL yang diunduh melalui InstanceTunnel. Jika Anda tidak mengatur parameter ini, jumlah record yang diunduh tidak dibatasi. -
Jalankan perintah
set console.sql.result.instancetunnel=trueuntuk mengaktifkan fitur ini.-
Aktifkan opsi Instance Tunnel.
set console.sql.result.instancetunnel=true; -
Jalankan kueri select.
select * from wc_in;Hasil berikut dikembalikan.
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
CatatanSaat Anda menggunakan InstanceTunnel untuk mengeluarkan hasil kueri SELECT, sistem mencetak pesan pada baris terakhir. Pada contoh ini, eksekusi instans mengembalikan total 8 record. Demikian pula, Anda dapat menjalankan perintah
set console.sql.result.instancetunnel = falseuntuk menonaktifkan fitur ini. -
-