全部产品
Search
文档中心

Object Storage Service:Mengambil objek

更新时间:Jul 02, 2025

Anda dapat memanggil operasi SelectObject untuk mengeksekusi pernyataan SQL pada sebuah objek dan mendapatkan hasil eksekusinya.

Informasi latar belakang

Anda dapat langsung memproses data dalam Object Storage Service (OSS) saat menjalankan Hadoop 3.0 atau menggunakan layanan seperti Spark, Hive, dan Presto di E-MapReduce (EMR). Layanan Alibaba Cloud seperti MaxCompute dan Data Lake Analytics (DLA) juga didukung di OSS.

Operasi GetObject yang disediakan oleh OSS mengharuskan platform big data untuk mengunduh objek OSS ke komputer lokal Anda untuk analisis dan penyaringan. Akibatnya, banyak bandwidth dan sumber daya klien terbuang dalam berbagai skenario query.

Operasi SelectObject digunakan untuk mengatasi masalah ini. Operasi ini memungkinkan OSS menyaring data secara awal dengan menggunakan kondisi dan proyeksi yang diberikan oleh platform big data. Dengan demikian, hanya data yang relevan yang dikembalikan ke platform big data. Hal ini mengurangi penggunaan bandwidth dan memungkinkan pemrosesan data yang lebih efisien, sehingga meminimalkan penggunaan CPU dan memori. Ini membuat gudang data dan analitik data berbasis OSS lebih sesuai dengan kebutuhan bisnis Anda.

Aturan penagihan

Anda akan dikenakan biaya berdasarkan ukuran objek yang dipindai saat memanggil operasi SelectObject. Untuk informasi lebih lanjut, lihat Biaya Pemrosesan Data.

Jenis objek yang didukung

Berikut adalah jenis objek yang didukung oleh operasi SelectObject:

  • Objek CSV (dan objek mirip CSV seperti objek TSV) yang sesuai dengan RFC 4180. Anda dapat menentukan pembatas baris dan kolom kustom serta karakter kutipan dalam objek CSV.

  • Objek JSON yang dikodekan UTF-8. Operasi SelectObject mendukung objek JSON dalam format DOCUMENT dan LINES.

    • Objek JSON DOCUMENT berisi satu objek.

    • Objek JSON LINES terdiri dari baris-baris objek yang dipisahkan oleh line feed. Namun, seluruh objek bukanlah objek JSON yang valid. SelectObject mendukung pembatas umum, seperti \n dan \r\n. Anda tidak perlu menentukan pembatas.

  • Objek Standar dan Infrequent Access (IA). Objek Archive, Cold Archive, dan Deep Cold Archive harus dipulihkan sebelum operasi SelectObject dipanggil pada objek tersebut.

  • Objek yang sepenuhnya dikelola dan dienkripsi oleh OSS atau dienkripsi menggunakan kunci master pelanggan (CMK) yang dikelola oleh Key Management Service (KMS).

Sintaks SQL yang didukung

  • Pernyataan SQL: SELECT FROM WHERE

  • Tipe data: string, int(64-bit), double(64-bit), decimal(128-bit), timestamp, dan bool.

  • Operator: operator logika (AND, OR, dan NOT), operator aritmatika (+, -, *, /, dan %), operator perbandingan (>, =, <, >=, <=, dan !=), dan operator string (LIKE dan ||).

    Penting

    Pencocokan fuzzy berbasis LIKE bersifat case-sensitive.

Tipe data yang didukung

Secara default, data CSV di OSS bertipe String. Anda dapat menggunakan fungsi CAST untuk mengonversi tipe data.

Contoh pernyataan SQL berikut digunakan untuk mengonversi data di kolom pertama dan kedua menjadi data bertipe Integer: SELECT * FROM ossobject WHERE CAST(_1 AS INT) > CAST(_2 AS INT).

Operasi SelectObject memungkinkan Anda untuk secara implisit mengonversi tipe data menggunakan klausa WHERE. Sebagai contoh, pernyataan SQL berikut mengonversi data di kolom pertama dan kedua menjadi data bertipe Integer:

SELECT _1 FROM ossobject WHERE _1 + _2 > 100

Jika Anda tidak menggunakan fungsi CAST, tipe data dalam objek JSON tetap tidak berubah. Objek JSON standar dapat mendukung berbagai tipe data, termasuk Null, Bool, Int64, Double, dan String.

Contoh pernyataan SQL

Contoh pernyataan SQL disediakan untuk objek CSV dan JSON.

  • CSV

    Skenario

    Pernyataan SQL

    Kembalikan 10 baris pertama.

    SELECT * FROM ossobject LIMIT 10

    Kembalikan bilangan bulat di kolom pertama dan ketiga. Nilai integer di kolom pertama lebih besar dari nilai integer di kolom ketiga.

    SELECT _1, _3 FROM ossobject WHERE CAST(_1 AS INT) > CAST(_3 AS INT)

    Kembalikan jumlah rekaman di mana data di kolom pertama dimulai dengan X. Karakter Cina yang ditentukan setelah LIKE harus dikodekan UTF-8.

    SELECT COUNT(*) FROM ossobject WHERE _1 LIKE 'X%'

    Kembalikan semua rekaman di mana nilai waktu di kolom kedua lebih dari 2018-08-09 11:30:25 dan nilai di kolom ketiga lebih dari 200.

    SELECT * FROM ossobject WHERE _2 > CAST('2018-08-09 11:30:25' AS TIMESTAMP) AND _3 > 200

    Kembalikan nilai rata-rata, jumlah, nilai maksimum, dan nilai minimum dari angka floating-point di kolom kedua.

    SELECT AVG(CAST(_6 AS DOUBLE)), SUM(CAST(_6 AS DOUBLE)), MAX(CAST(_6 AS DOUBLE)), MIN(CAST(_6 AS DOUBLE)) FROM ossobject

    Kembalikan semua rekaman di mana string yang digabungkan oleh data di kolom pertama dan ketiga dimulai dengan Tom dan diakhiri dengan Anderson.

    SELECT * FROM ossobject WHERE (_1 || _3) LIKE 'Tom%Anderson'

    Kembalikan semua rekaman di mana nilai di kolom pertama habis dibagi 3.

    SELECT * FROM ossobject WHERE (_1 % 3) = 0

    Kembalikan semua rekaman di mana nilai di kolom pertama berada antara 1995 dan 2012.

    SELECT * FROM ossobject WHERE _1 BETWEEN 1995 AND 2012

    Kembalikan semua rekaman di mana nilai di kolom kelima adalah N, M, G, atau L.

    SELECT * FROM ossobject WHERE _5 IN ('N', 'M', 'G', 'L')

    Kembalikan semua rekaman di mana produk dari nilai di kolom kedua dan ketiga lebih besar dari jumlah 100 dan nilai di kolom kelima.

    SELECT * FROM ossobject WHERE _2 * _3 > _5 + 100

  • JSON

    Contoh objek JSON:

    {
      "contacts":[
    {
      "firstName": "John",
      "lastName": "Smith",
      "isAlive": true,
      "age": 27,
      "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021-3100"
      },
      "phoneNumbers": [
        {
          "type": "home",
          "number": "212 555-1234"
        },
        {
          "type": "office",
          "number": "646 555-4567"
        },
        {
          "type": "mobile",
          "number": "123 456-7890"
        }
      ],
      "children": [],
      "spouse": null
    }, …… # Node serupa lainnya dihilangkan.
    ]}

    Tabel berikut menjelaskan contoh pernyataan SQL untuk objek JSON.

    Skenario

    Pernyataan SQL

    Kembalikan semua rekaman di mana nilai age adalah 27.

    SELECT * FROM ossobject.contacts[*] s WHERE s.age = 27

    Kembalikan semua nomor telepon rumah.

    SELECT s.number FROM ossobject.contacts[*].phoneNumbers[*] s WHERE s.type = "home"

    Kembalikan semua rekaman di mana nilai spouse adalah null.

    SELECT * FROM ossobject s WHERE s.spouse IS NULL

    Kembalikan semua rekaman di mana nilai children adalah 0.

    SELECT * FROM ossobject s WHERE s.children[0] IS NULL

    Catatan

    Pernyataan di atas digunakan untuk menentukan array kosong karena tidak ada metode lain yang tersedia.

Skenario

Dalam kebanyakan kasus, SelectObject digunakan untuk query multipart, query objek JSON, dan analisis objek log.

  • Query objek besar menggunakan query multipart

    Fitur query multipart yang disediakan oleh operasi SelectObject mirip dengan fitur unduhan multipart berbasis byte yang disediakan oleh operasi GetObject. Data dibagi menjadi bagian-bagian berdasarkan baris atau split.

    • Berdasarkan baris: Metode ini digunakan dalam kebanyakan kasus. Namun, beban yang tidak seimbang mungkin terjadi saat data jarang dibagi.

    • Berdasarkan split: Split mencakup beberapa baris. Setiap split memiliki ukuran yang hampir sama.

    Catatan

    Membagi data berdasarkan split lebih efisien.

    Jika kolom dalam objek CSV tidak termasuk line feed, Anda dapat membagi objek menjadi bagian-bagian berdasarkan byte. Metode ini sederhana karena Anda tidak perlu membuat Meta untuk objek. Jika Anda ingin menanyakan objek JSON atau objek CSV di mana kolom mencakup line feed, lakukan langkah-langkah berikut:

    1. Panggil operasi CreateSelectObjectMeta untuk mendapatkan jumlah total split untuk objek. Untuk mengurangi waktu pemindaian, kami sarankan Anda memanggil operasi SelectObject secara asinkron sebelum Anda menanyakan objek.

    2. Pilih tingkat konkurensi yang sesuai (n) berdasarkan sumber daya di klien. Bagilah jumlah total split dengan tingkat konkurensi (n) untuk mendapatkan jumlah split dalam setiap query.

    3. Konfigurasikan parameter dalam badan permintaan untuk melakukan query multipart. Misalnya, Anda dapat mengatur split-range ke 1-20.

    4. Gabungkan hasilnya.

  • Query objek JSON

    Saat Anda menanyakan objek JSON, persempit rentang jalur JSON dalam klausa FROM.

    Contoh objek JSON:

    {
      "contacts":[
    {
      "firstName": "John",
      "lastName": "Smith",
      "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021-3100"
      },
      "phoneNumbers": [
        {
          "type": "home",
          "number": "212 555-1234"
        },
        {
          "type": "office",
          "number": "646 555-4567"
        },
        {
          "type": "mobile",
          "number": "123 456-7890"
        }
      ]
    }
    ]}

    Untuk menanyakan semua alamat jalan yang kode posnya dimulai dengan 10021, eksekusi pernyataan SQL berikut: SELECT s.address.streetAddress FROM ossobject.contacts[*] s WHERE s.address.postalCode LIKE '10021%' atau SELECT s.streetAddress FROM ossobject.contacts[*].address s WHERE s.postalCode LIKE '10021%'.

    Pernyataan SQL dengan jalur JSON lebih unggul karena pernyataan tersebut lebih akurat saat Anda mengeksekusi SELECT s.streetAddress FROM ossobject.contacts[*].address s WHERE s.postalCode LIKE '10021%'.

  • Proses angka floating-point presisi tinggi dalam objek JSON

    Jika Anda ingin menghitung angka floating-point presisi tinggi dalam objek JSON, kami sarankan Anda mengatur parameter ParseJsonNumberAsString ke true dan menggunakan fungsi CAST untuk mengonversi data yang diurai ke tipe Decimal. Sebagai contoh, jika nilai atribut a adalah 123456789.123456789, Anda dapat mengeksekusi pernyataan SELECT s.a FROM ossobject s WHERE CAST(s.a AS DECIMAL) > 123456789.12345 untuk mempertahankan akurasi atribut a.

Prosedur

Gunakan konsol OSS

Penting

Anda dapat memilih dan mendapatkan hingga 40 MB data dari objek hingga 128 MB di konsol OSS.

  1. Masuk ke konsol OSS.

  2. Di panel navigasi kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.

  3. Di pohon navigasi kiri, pilih Object Management > Objects.

  4. Di sebelah kanan objek target, pilih more > Select Content di kolom Aksi.

  5. Di panel Select Content, konfigurasikan parameter. Tabel berikut menjelaskan parameter.

    Parameter

    Deskripsi

    Tipe Objek

    Nilai valid: CSV dan JSON.

    Pembatas

    Parameter ini tersedia hanya ketika Tipe Objek diatur ke CSV. Nilai valid: , dan Kustom.

    Baris Judul

    Parameter ini tersedia hanya ketika Tipe Objek diatur ke CSV. Tentukan apakah baris pertama objek berisi judul kolom.

    Mode Tampilan JSON

    Parameter ini tersedia hanya ketika Tipe Objek diatur ke JSON. Nilai valid: JSON_LINES dan JSON_DOCUMENT.

    Format Kompresi

    Pilih apakah akan mengompres objek. Hanya kompresi GZIP yang didukung.

  6. Klik Preview untuk melihat pratinjau data yang dipilih.

    Penting

    Saat Anda melihat pratinjau data yang dipilih dari objek Standar, Anda akan dikenakan biaya pemindaian data yang ditimbulkan oleh operasi SelectObject. Saat Anda melihat pratinjau data yang dipilih dari objek IA, Arsip, Arsip Dingin, atau Arsip Dingin Mendalam, Anda akan dikenakan biaya pemindaian data dan biayapengambilan data yang ditimbulkan oleh operasi SelectObject. Untuk informasi lebih lanjut, lihat Biaya Pemrosesan Data.

  7. Klik Next, lalu masukkan dan jalankan pernyataan SQL.

    Sebagai contoh, objek CSV bernama People berisi kolom-kolom berikut: Nama, Perusahaan, dan Usia.

    • Untuk menanyakan orang-orang yang berusia lebih dari 50 tahun dan nama mereka dimulai dengan Lora, eksekusi pernyataan SQL berikut. Dalam pernyataan tersebut, _1, _2, dan _3 menentukan indeks kolom. _1 menentukan indeks kolom pertama. _2 menentukan indeks kolom kedua. _3 menentukan indeks kolom ketiga.

      select * from ossobject where _1 like 'Lora*' and _3 > 50
    • Untuk menanyakan jumlah baris dalam objek, usia maksimum, dan usia minimum, eksekusi pernyataan SQL berikut:

      select count(*), max(cast(_3 as int)), min(cast(_3 as int)) from oss_object
  8. Lihat hasil eksekusi.

    Anda juga dapat mengklik Download untuk mengunduh konten terpilih ke komputer lokal Anda.

Gunakan SDK OSS

Anda hanya dapat menggunakan OSS SDK for Java dan OSS SDK for Python untuk menanyakan objek.

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;

/**
 * Contoh-contoh membuat metadata objek selektif dan memilih objek.
 *
 */
public class SelectObjectSample {
    // Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. 
    private static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // Tentukan nama bucket. Contoh: examplebucket. 
    private static String bucketName = "examplebucket";

    public static void main(String[] args) throws Exception {
      
      	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        // Tentukan jalur lengkap objek yang ingin Anda tanyakan, lalu tanyakan data objek menggunakan pernyataan SELECT. Jangan sertakan nama bucket dalam jalur lengkap. 
        // Tentukan jalur lengkap objek CSV. 
        selectCsvSample("test.csv", ossClient);
        // Tentukan jalur lengkap objek JSON. 
        selectJsonSample("test.json", ossClient);
        ossClient.shutdown();
    }

    private static void selectCsvSample(String key, OSS ossClient) throws Exception {
        // Tentukan isi objek yang ingin Anda unggah. 
        String content = "name,school,company,age\r\n" +
                "Lora Francis,School A,Staples Inc,27\r\n" +
                "Eleanor Little,School B,\"Conectiv, Inc\",43\r\n" +
                "Rosie Hughes,School C,Western Gas Resources Inc,44\r\n" +
                "Lawrence Ross,School D,MetLife Inc.,24";

        ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));

        SelectObjectMetadata selectObjectMetadata = ossClient.createSelectObjectMetadata(
                new CreateSelectObjectMetadataRequest(bucketName, key)
                        .withInputSerialization(
                                new InputSerialization().withCsvInputFormat(
                                        // Tentukan pembatas yang digunakan untuk memisahkan catatan berbeda dalam konten. Contoh: \r\n. 
                                        new CSVFormat().withHeaderInfo(CSVFormat.Header.Use).withRecordDelimiter("\r\n"))));
        System.out.println(selectObjectMetadata.getCsvObjectMetadata().getTotalLines());
        System.out.println(selectObjectMetadata.getCsvObjectMetadata().getSplits());

        SelectObjectRequest selectObjectRequest =
                new SelectObjectRequest(bucketName, key)
                        .withInputSerialization(
                                new InputSerialization().withCsvInputFormat(
                                        new CSVFormat().withHeaderInfo(CSVFormat.Header.Use).withRecordDelimiter("\r\n")))
                        .withOutputSerialization(new OutputSerialization().withCsvOutputFormat(new CSVFormat()));
        // Gunakan pernyataan SELECT untuk menanyakan semua rekaman yang nilainya lebih besar dari 40 di kolom keempat. 
        selectObjectRequest.setExpression("select * from ossobject where _4 > 40");
        OSSObject ossObject = ossClient.selectObject(selectObjectRequest);

        // Baca isi objek. 
        BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
        while (true) {
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            System.out.println(line);
        }
        reader.close();

        ossClient.deleteObject(bucketName, key);
    }

    private static void selectJsonSample(String key, OSS ossClient) throws Exception {
        // Tentukan isi objek yang ingin Anda unggah. 
        final String content = "{\n" +
                "\t\"name\": \"Lora Francis\",\n" +
                "\t\"age\": 27,\n" +
                "\t\"company\": \"Staples Inc\"\n" +
                "}\n" +
                "{\n" +
                "\t\"name\": \"Eleanor Little\",\n" +
                "\t\"age\": 43,\n" +
                "\t\"company\": \"Conectiv, Inc\"\n" +
                "}\n" +
                "{\n" +
                "\t\"name\": \"Rosie Hughes\",\n" +
                "\t\"age\": 44,\n" +
                "\t\"company\": \"Western Gas Resources Inc\"\n" +
                "}\n" +
                "{\n" +
                "\t\"name\": \"Lawrence Ross\",\n" +
                "\t\"age\": 24,\n" +
                "\t\"company\": \"MetLife Inc.\"\n" +
                "}";

        ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));

        SelectObjectRequest selectObjectRequest =
                new SelectObjectRequest(bucketName, key)
                        .withInputSerialization(new InputSerialization()
                                .withCompressionType(CompressionType.NONE)
                                .withJsonInputFormat(new JsonFormat().withJsonType(JsonType.LINES)))
                        .withOutputSerialization(new OutputSerialization()
                                .withCrcEnabled(true)
                                .withJsonOutputFormat(new JsonFormat()))
                        .withExpression("select * from ossobject as s where s.age > 40"); // Gunakan pernyataan SELECT untuk menanyakan data dalam objek. 

        OSSObject ossObject = ossClient.selectObject(selectObjectRequest);

        // Baca isi objek. 
        BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
        while (true) {
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            System.out.println(line);
        }
        reader.close();

        ossClient.deleteObject(bucketName, key);
    }
}
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def select_call_back(consumed_bytes, total_bytes =  None):
        print('Bytes Terpakai:' + str(consumed_bytes) + '\n')

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Tentukan ID wilayah yang sesuai dengan endpoint. 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)

###JSON DOCUMENT
key =  'python_select.json'
content =  "{\"contacts\":[{\"key1\":1,\"key2\":\"hello world1\"},{\"key1\":2,\"key2\":\"hello world2\"}]}"
filename =  'python_select.json'
# Unggah objek JSON DOCUMENT. 
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)

Gunakan API OSS

Jika bisnis Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat langsung memanggil API RESTful. Untuk langsung memanggil API, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi lebih lanjut, lihat SelectObject.