全部产品
Search
文档中心

Object Storage Service:Menanyakan objek menggunakan OSS SDK untuk Python 1.0

更新时间:Aug 12, 2025

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.

      Catatan

      Parameter 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.

      Catatan

      Jika 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.

      Catatan

      Operasi 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.