Topik ini menjelaskan cara menggunakan SelectObject di OSS SDK untuk Python untuk menanyakan objek dalam format CSV dan JSON.
Catatan penggunaan
Dalam topik ini, titik akhir publik wilayah Tiongkok (Hangzhou) digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir.
Dalam topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Layanan Token Keamanan (STS), lihat Inisialisasi (Python SDK V1).
Untuk menanyakan objek, Anda harus memiliki izin
oss:GetObject. Untuk informasi lebih lanjut, lihat Melampirkan Kebijakan Kustom ke Pengguna RAM.Hanya objek dalam format CSV dan JSON yang dapat ditanyakan menggunakan SelectObject.
Contoh
Berikut adalah contoh kode untuk menanyakan objek CSV dan JSON:
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def select_call_back(consumed_bytes, total_bytes = None):
print('Byte Terpakai:' + str(consumed_bytes) + '\n')
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan titik akhir. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"
# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
key ='python_select.csv'
content ='Tom Hanks,USA,45\r\n'*1024
filename ='python_select.csv'
# Unggah file CSV.
bucket.put_object(key, content)
# Konfigurasikan parameter untuk operasi SelectObject.
csv_meta_params = {'RecordDelimiter': '\r\n'}
select_csv_params = {'CsvHeaderInfo': 'None',
'RecordDelimiter': '\r\n',
'LineRange': (500, 1000)}
csv_header = bucket.create_select_object_meta(key, csv_meta_params)
print(csv_header.rows)
print(csv_header.splits)
result = bucket.select_object(key, "select * from ossobject where _3 > 44", select_call_back, select_csv_params)
select_content = result.read()
print(select_content)
result = bucket.select_object_to_file(key, filename,
"select * from ossobject where _3 > 44", select_call_back, select_csv_params)
bucket.delete_object(key)
###DOKUMEN JSON
key = 'python_select.json'
content = "{\"contacts\":[{\"key1\":1,\"key2\":\"hello world1\"},{\"key1\":2,\"key2\":\"hello world2\"}]}"
filename = 'python_select.json'
# Unggah objek DOKUMEN JSON.
bucket.put_object(key, content)
select_json_params = {'Json_Type': 'DOCUMENT'}
result = bucket.select_object(key, "select s.key2 from ossobject.contacts[*] s where s.key1 = 1", None, select_json_params)
select_content = result.read()
print(select_content)
result = bucket.select_object_to_file(key, filename,
"select s.key2 from ossobject.contacts[*] s where s.key1 = 1", None, select_json_params)
bucket.delete_object(key)
###JSON LINES
key = 'python_select_lines.json'
content = "{\"key1\":1,\"key2\":\"hello world1\"}\n{\"key1\":2,\"key2\":\"hello world2\"}"
filename = 'python_select.json'
# Unggah objek JSON LINES.
bucket.put_object(key, content)
select_json_params = {'Json_Type': 'LINES'}
json_header = bucket.create_select_object_meta(key,select_json_params)
print(json_header.rows)
print(json_header.splits)
result = bucket.select_object(key, "select s.key2 from ossobject s where s.key1 = 1", None, select_json_params)
select_content = result.read()
print(select_content)
result = bucket.select_object_to_file(key, filename,
"select s.key2 from ossobject s where s.key1 = 1", None, select_json_params)
bucket.delete_object(key)Python SelectObject
Bagian ini menjelaskan elemen-elemen yang digunakan dalam operasi SelectObject di Python, termasuk select_object, select_object_to_file, dan create_select_object_meta.
select_object
Berikut adalah contoh kode untuk menentukan parameter untuk select_object:
def select_object(self, key, sql, progress_callback=None, select_params=None byte_range=None headers=None ):Contoh kode sebelumnya digunakan untuk mengeksekusi pernyataan SQL pada objek dengan kunci tertentu dan mengembalikan hasil kueri.
sql: Pernyataan SQL yang tidak perlu dienkripsi Base64.
Progress_callback: Opsional. Parameter ini menentukan fungsi panggilan balik yang digunakan untuk melaporkan kemajuan kueri.
select_params: Parameter dan tindakan operasi SelectObject.
headers: Informasi header yang disertakan dalam permintaan. Informasi header berfungsi sama seperti untuk operasi GetObject. Misalnya, Anda dapat mengonfigurasi bidang bytes dalam header permintaan untuk menentukan rentang objek CSV yang akan ditanyakan.
Tabel berikut menjelaskan parameter yang didukung oleh select_params.
Parameter
Deskripsi
Json_Type
Secara default, objek adalah objek CSV jika parameter ini tidak ditentukan.
Objek adalah objek JSON Document jika parameter ini diatur ke DOCUMENT.
Objek adalah objek JSON LINES jika parameter ini diatur ke LINES.
CsvHeaderInfo
Informasi header objek CSV.
Nilai valid: None, Ignore, dan Use.
None: Objek ini tidak memiliki informasi header yang dikonfigurasi.
Ignore: Objek ini memiliki informasi header yang dikonfigurasi, tetapi informasi tersebut tidak digunakan saat pernyataan SQL dieksekusi.
Use: Objek ini memiliki informasi header yang dikonfigurasi, dan nama kolom dalam informasi header digunakan saat pernyataan SQL dieksekusi.
CommentCharacter
Karakter komentar dalam objek CSV. Nilai parameter ini hanya boleh satu karakter panjangnya. Nilai default adalah None, yang menunjukkan bahwa tidak ada karakter komentar yang diizinkan.
RecordDelimiter
Pemisah baris dalam objek CSV. Nilai parameter ini hanya boleh satu atau dua karakter panjangnya. Nilai default: \n.
OutputRecordDelimiter
Pemisah baris dalam hasil keluaran pernyataan SELECT. Nilai default: \n.
FieldDelimiter
Pemisah kolom dalam objek CSV. Nilai parameter ini hanya boleh satu karakter panjangnya. Nilai default adalah koma (,).
OutputFieldDelimiter
Pemisah kolom dalam hasil keluaran pernyataan SELECT. Nilai default adalah koma (,).
QuoteCharacter
Karakter kutipan untuk kolom dalam objek CSV. Nilai parameter ini hanya boleh satu karakter panjangnya. Nilai default adalah tanda kutip ganda ("). Pemisah baris dan kolom yang terlampir dalam karakter kutipan diproses sebagai karakter normal.
SplitRange
Rentang split dalam kueri multipart. Nilai parameter ini adalah interval tertutup dalam format (start, end), yang menunjukkan rentang split yang akan ditanyakan.
LineRange
Rentang baris dalam kueri multipart. Nilai parameter ini adalah interval tertutup dalam format (start, end), yang menunjukkan rentang baris yang akan ditanyakan.
CompressionType
Format dalam objek dikompresi. Nilai valid: GZIP dan None. Nilai default: None.
KeepAllColumns
Jika parameter ini diatur ke true, kolom yang dikecualikan oleh pernyataan SELECT dalam objek CSV dibiarkan kosong dalam hasil keluaran. Namun, posisi kolom tetap dipertahankan. Nilai default: False.
Misalnya, kolom dalam objek CSV adalah firstname, lastname, dan age. Pernyataan SQL adalah select firstname, age from ossobject.
Jika KeepAllColumns diatur ke true, hasil keluaran adalah firstname,,age, di mana koma tambahan (,) ditambahkan untuk menunjukkan posisi kolom lastname yang dikecualikan.
Jika KeepAllColumns diatur ke false, hasil keluaran adalah firstname,age.
CatatanParameter ini dimaksudkan untuk membuat kode yang digunakan untuk memproses GetObject tersedia untuk memproses SelectObject tanpa modifikasi.
OutputRawData
Jika parameter ini diatur ke True, SelectObject langsung mengembalikan data mentah. Jika data tidak dikembalikan dalam waktu lama, kesalahan timeout mungkin terjadi.
Jika parameter ini diatur ke False, data keluaran dienkapsulasi dalam frame. Nilai default: False.
EnablePayloadCrc
Menentukan apakah nilai pemeriksaan redundansi siklik (CRC) dihitung untuk setiap frame. Nilai default: False.
OutputHeader
Informasi header di baris pertama hasil keluaran. Parameter ini hanya berlaku untuk objek CSV.
SkipPartialDataRecord
Jika parameter ini diatur ke True untuk objek CSV, catatan saat ini dilewati ketika kolom catatan ini tidak memiliki data. Jika parameter ini diatur ke True untuk objek JSON, catatan saat ini dilewati ketika kunci catatan ini tidak ada. Jika parameter ini diatur ke False, kolom tanpa data dibiarkan kosong dalam hasil keluaran.
Misalnya, sebuah baris mencakup kolom firstname, lastname, dan age. Pernyataan SQL adalah
select _1, _4 from ossobject.Jika parameter ini diatur ke True, baris ini dilewati.
Jika parameter ini diatur ke False, firstname,\n dikembalikan.
MaxSkippedRecordsAllowed
Jumlah maksimum baris yang dilewati. Nilai default adalah 0, yang menunjukkan bahwa kesalahan dikembalikan jika sebuah baris dilewati.
ParseJsonNumberAsString
Jika parameter ini diatur ke True, semua angka dalam objek JSON diurai sebagai string.
Jika parameter ini diatur ke False, semua angka dalam objek JSON diurai sebagai bilangan bulat atau bilangan titik mengambang. Nilai default: False.
Bilangan titik mengambang presisi tinggi dalam objek JSON mengalami kehilangan presisi saat diurai sebagai bilangan titik mengambang. Untuk menjaga presisi, Anda dapat mengatur parameter ini ke True dan menggunakan fungsi CAST untuk mengonversi data yang diurai ke tipe desimal.
Hasil yang dikembalikan dari select_object: Objek SelectObjectResult dikembalikan. Anda dapat menggunakan fungsi read() atau metode _iter_ untuk mendapatkan semua hasil.
CatatanJika Anda memanggil fungsi read() untuk membaca semua hasil ketika beberapa hasil dikembalikan, sumber daya memori berlebih digunakan dan Anda harus menunggu lama. Kami sarankan Anda menggunakan metode _iter_ (foreach chunk in result) untuk mendapatkan hasil dan memproses setiap chunk dalam hasil. Metode _iter_ mengurangi penggunaan memori dan memungkinkan klien memproses setiap permintaan chunk yang diproses oleh server OSS secara tepat waktu. Dengan cara ini, klien tidak perlu menunggu sampai semua hasil dikembalikan.
select_object_to_file
def select_object_to_file(self, key, filename, sql, progress_callback=None, select_params=None headers=None ):Contoh kode sebelumnya digunakan untuk mengeksekusi pernyataan SQL pada objek dengan kunci tertentu dan menulis hasil kueri ke objek lain yang ditentukan.
Parameter lainnya sama dengan select_object.
create_select_object_meta
Sintaksis create_select_object_meta
def create_select_object_meta(self, key, select_meta_params=None, header=None):Contoh kode sebelumnya digunakan untuk membuat Select Meta untuk objek dengan kunci tertentu atau mendapatkan Select Meta dari objek tersebut. Select Meta mencakup jumlah total baris, jumlah total kolom (untuk objek CSV), dan jumlah total split dalam objek.
Jika Select Meta telah dibuat untuk objek, fungsi ini tidak membuat ulang Select Meta kecuali parameter OverwriteIfExists diatur ke true.
Untuk membuat Select Meta untuk objek, objek harus dipindai sepenuhnya.
Tabel berikut menjelaskan parameter yang didukung oleh select_meta_params.
Parameter
Deskripsi
Json_Type
Secara default, objek adalah objek CSV jika parameter ini tidak ditentukan.
Jika parameter ini ditentukan, nilai parameter ini harus LINES, yang menunjukkan bahwa objek adalah objek JSON LINES.
CatatanOperasi ini tidak berlaku untuk objek JSON Document.
RecordDelimiter
Pemisah baris dalam objek CSV.
FieldDelimiter
Pemisah kolom dalam objek CSV.
QuoteCharacter
Karakter kutipan dalam objek CSV. Pemisah baris dan kolom yang terlampir dalam karakter kutipan diproses sebagai karakter normal.
CompressionType
Format dalam objek dikompresi. Format kompresi tidak didukung. Nilai default adalah None.
OverwriteIfExists
Menentukan apakah Select Meta yang dibuat menimpa Select Meta asli. Anda tidak perlu menyetel parameter ini dalam kebanyakan kasus.
Hasil yang dikembalikan dari create_select_object_meta: Objek GetSelectObjectMetaResult dikembalikan, yang mencakup atribut rows dan splits. Untuk objek CSV, objek select_resp dalam hasil mencakup atribut columns, yang menunjukkan jumlah kolom dalam objek CSV.
Referensi
Untuk kode contoh lengkap yang digunakan untuk menanyakan objek, kunjungi GitHub.
Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk menanyakan objek, lihat SelectObject.