Topik ini menjelaskan fitur perintah Tunnel dan cara menggunakan perintah Tunnel untuk mengunggah atau mengunduh data.
Platform yang Didukung
MaxCompute memungkinkan Anda menggunakan klien MaxCompute (odpscmd) dan MaxCompute Studio untuk menjalankan perintah Tunnel. Untuk informasi lebih lanjut, lihat Klien MaxCompute (odpscmd) dan Apa itu MaxCompute Studio?
Fitur
Klien MaxCompute menyediakan perintah Tunnel yang mengimplementasikan fitur alat Dship. Anda dapat menggunakan perintah Tunnel untuk mengunggah atau mengunduh data. Bagian ini menjelaskan fitur dari perintah Tunnel berikut:
UPLOAD: Mengunggah data lokal ke tabel MaxCompute. Anda hanya dapat mengunggah file ke satu tabel atau satu partisi dalam tabel setiap kali. Untuk tabel terpartisi, Anda harus menentukan partisi tempat Anda ingin mengunggah data. Untuk tabel dengan partisi multi-level, Anda harus menentukan partisi tingkat terendah. Untuk informasi lebih lanjut, lihat Unggah.
DOWNLOAD: Mengunduh data tabel MaxCompute atau hasil kueri instance tertentu ke direktori lokal. Anda hanya dapat mengunduh data dari satu tabel atau partisi ke satu file lokal setiap kali. Untuk tabel terpartisi, Anda harus menentukan partisi dari mana Anda ingin mengunduh data. Untuk tabel dengan partisi multi-level, Anda harus menentukan partisi tingkat terendah. Untuk informasi lebih lanjut, lihat Unduh.
RESUME: Melanjutkan pengunggahan file ketika terjadi kesalahan karena pemutusan jaringan atau layanan Tunnel bermasalah.
Anda tidak dapat menggunakan perintah ini untuk melanjutkan pengunduhan data. Untuk informasi lebih lanjut, lihat Lanjutkan.SHOW: Menampilkan informasi tugas historis. Untuk informasi lebih lanjut, lihat Tampilkan.
PURGE: Membersihkan direktori sesi. Log dari tiga hari terakhir dihapus secara default. Untuk informasi lebih lanjut, lihat Pembersihan.
HELP: Meminta informasi bantuan. Alias perintah didukung.
UPSERT: Menggunakan semantik UPDATE dan INSERT untuk menulis data. Perintah ini dapat digunakan untuk menulis data hanya ke tabel Transaksi Tabel 2.0.
Jika tidak ada data yang cocok ditemukan di tabel tujuan, data baru akan dimasukkan ke dalam tabel. Jika data yang akan ditulis sudah ada, data akan diperbarui di tabel.
Batasan Perintah Tunnel
Perintah Tunnel dan SDK Tunnel tidak dapat digunakan untuk tabel eksternal. Anda dapat menggunakan Tunnel untuk mengunggah data ke tabel internal MaxCompute. Anda juga dapat menggunakan OSS SDK untuk Python untuk mengunggah data ke OSS dan memetakan data tersebut ke tabel eksternal di MaxCompute. Untuk informasi lebih lanjut tentang tabel eksternal, lihat Ikhtisar Tabel Eksternal.
Anda tidak dapat menjalankan perintah Tunnel untuk mengunggah atau mengunduh data bertipe ARRAY, MAP, atau STRUCT.
Di server, siklus hidup sesi adalah 24 jam setelah sesi dibuat. Sesi dapat dibagikan di antara proses dan thread di server, tetapi Anda harus memastikan bahwa setiap ID blok unik.
CatatanSesi Tunnel: Server membuat sesi untuk tugas unggah atau unduh dan menghasilkan ID unggah atau ID unduh unik untuk mengidentifikasi tugas unggah atau unduh. Siklus hidup sesi tunnel di server adalah 24 jam. Setelah 24 jam, sesi menjadi tidak tersedia.
Jika Anda mengunduh data berdasarkan sesi, hanya data dari sesi yang dibuat menggunakan akun Alibaba Cloud Anda yang dapat diunduh oleh akun ini atau pengguna RAM-nya.
Unggah dan Unduh Data Tabel
Sebelum mengunggah data tabel, Anda harus mendapatkan file data data.txt yang berisi data tabel yang ingin Anda unggah. Jalur penyimpanan adalah d:\data.txt. Contoh berikut menunjukkan data dalam file tersebut.
shopx,x_id,100
shopy,y_id,200
shopz,z_idJumlah kolom pada baris ketiga data dalam file data.txt berbeda dari jumlah kolom yang ditentukan dalam tabel terpartisi sale_detail yang dibuat dalam contoh berikut. Tabel terpartisi sale_detail berisi tiga kolom, tetapi baris data tersebut hanya berisi dua kolom.
Untuk mengunggah dan mengunduh data tabel, lakukan langkah-langkah berikut:
Di klien MaxCompute, jalankan pernyataan berikut untuk membuat tabel terpartisi bernama sale_detail dan tambahkan partisi ke tabel tersebut.
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');Jalankan perintah
UPLOADuntuk mengunggah file data.txt ke tabel sale_detail.Pernyataan contoh
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false;Hasil yang dikembalikan
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 delimiterCatatanData gagal diimpor karena file data.txt berisi data kotor. Sistem mengembalikan ID sesi dan pesan kesalahan.
Jalankan pernyataan berikut untuk memverifikasi pengunggahan data.
Pernyataan contoh
select * from sale_detail where sale_date='201312';Hasil yang dikembalikan
ID = 20230505xxxxxxxxxxxvc61z5 +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+CatatanData gagal diimpor karena file data.txt berisi data kotor. Akibatnya, tabel kosong.
Jalankan perintah
SHOWuntuk meminta ID sesi di mana pengunggahan data gagal.Pernyataan contoh
tunnel show history;Hasil yang dikembalikan
20230505xxxxxxxxxxxb0b02dbb6bd failed 'upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false'
Ubah isi file data.txt menjadi informasi berikut:
shopx,x_id,100 shopy,y_id,200Jalankan perintah
RESUMEuntuk melanjutkan pengunggahan data. 20230505xxxxxxxxxxxb0b02dbb6bd adalah ID sesi di mana pengunggahan data gagal.Pernyataan contoh
tunnel resume 20230505xxxxxxxxxxxb0b02dbb6bd --force;Hasil yang dikembalikan
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 pengunggahan data:
Pernyataan contoh
select * from sale_detail where sale_date='201312';Hasil yang dikembalikan
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 result.txt.CatatanLokasi lokal path tempat data diunduh dinamai berdasarkan aturan berikut:
Anda dapat langsung menyimpan file ke direktori bin klien MaxCompute. Dalam hal ini, Anda harus mengatur parameter path ke nilai dalam format
Nama File.Ekstensi File.Anda juga dapat menyimpan file ke direktori lain. Misalnya, Anda dapat menyimpan file ke folder test di drive D. Dalam hal ini, Anda harus mengatur parameter path ke nilai dalam format
D:\test\Nama File.Ekstensi File.Jika file di lokasi lokal memiliki nama yang sama dengan file yang ingin Anda simpan, file yang ada akan ditimpa oleh file baru.
tunnel download sale_detail/sale_date=201312,region=hangzhou result.txt;Periksa apakah file result.txt berisi konten berikut. Jika file berisi konten berikut, pengunduhan data berhasil.
CatatanFile yang diunduh hanya berisi nilai kolom non-kunci partisi.
shopx,x_id,100.0 shopy,y_id,200.0
Unduh Data Instance
Metode 1: Jalankan perintah Tunnel DOWNLOAD untuk mengunduh hasil kueri instance tertentu ke file lokal.
Jalankan pernyataan SELECT untuk meminta tabel terpartisi sale_detail.
select * from sale_detail;CatatanJika Anda menonaktifkan pemindaian tabel penuh untuk tabel terpartisi sale_detail, pesan kesalahan
Table(xxxx) is full scan with all partitions, please specify partition predicatesmuncul. Untuk informasi lebih lanjut, lihat Kesalahan SQL (ODPS-01CCCCX).Jalankan perintah berikut untuk mengunduh hasil kueri ke file lokal:
-- Lihat ID instance dalam pernyataan SELECT. show p; -- Jalankan perintah Tunnel DOWNLOAD. tunnel download instance://20170724071705393ge3csfb8 result.txt;
Metode 2: Konfigurasikan parameter yang diperlukan untuk mengunduh hasil kueri menggunakan InstanceTunnel.
Setelah Anda mengaktifkan
use_instance_tunneldi klien MaxCompute, Anda dapat menggunakan InstanceTunnel untuk mengunduh hasil kueri yang dikembalikan oleh pernyataan SELECT. Ini membantu Anda mengunduh hasil kueri dengan ukuran apa pun kapan saja. Anda dapat menggunakan salah satu metode berikut untuk mengaktifkan fitur ini:CatatanUntuk informasi lebih lanjut tentang batasan InstanceTunnel, lihat Batasan.
Masuk ke klien MaxCompute versi terbaru. Temukan file odps_config.ini dan pastikan use_instance_tunnel diatur ke true dan
instance_tunnel_max_recorddiatur ke 10000.# unduh hasil sql dengan instance tunnel use_instance_tunnel=true # jumlah maksimum rekaman saat mengunduh hasil sql dengan instance tunnel instance_tunnel_max_record=10000CatatanParameter
instance_tunnel_max_recordmenentukan jumlah maksimum rekaman hasil SQL yang dapat diunduh menggunakan InstanceTunnel. Jika Anda tidak menentukan parameter ini, jumlah hasil kueri yang dapat diunduh tidak terbatas.Atur
console.sql.result.instancetunnelke true.Aktifkan InstanceTunnel.
set console.sql.result.instancetunnel=true;Jalankan pernyataan SELECT.
select * from wc_in;Hasil berikut dikembalikan:
ID = 20170724081946458g14csfb8 Log view: http://logview/xxxxx..... +------------+ | key | +------------+ | slkdfj | | hellp | | apple | | tea | | peach | | apple | | tea | | teaa | +------------+ Total 8 rekaman diambil oleh instance tunnel. Jumlah rekaman maksimum: 10000
CatatanJika InstanceTunnel digunakan, pesan muncul di akhir hasil kueri. Pesan tersebut menunjukkan jumlah total rekaman yang diunduh setelah Anda menjalankan pernyataan SELECT. Dalam contoh ini, delapan rekaman diunduh. Anda dapat mengatur
console.sql.result.instancetunnelke false untuk menonaktifkan fitur ini.