全部产品
Search
文档中心

Object Storage Service:Kueri file (Java SDK V1)

更新时间:Nov 26, 2025

Topik ini menjelaskan cara menggunakan operasi SelectObject dari Java SDK untuk mengkueri file CSV dan JSON.

Catatan

Untuk informasi selengkapnya tentang operasi SelectObject, lihat Kueri file dan SelectObject.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail mengenai wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut mengenai cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.

  • Untuk mengkueri file, Anda harus memiliki izin oss:GetObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.

  • Hanya objek dalam format CSV dan JSON yang dapat dikueri menggunakan SelectObject.

Kode contoh

Kode berikut memberikan contoh cara mengkueri file CSV dan JSON.

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 pembuatan metadata select object dan select object.
 *
 */
public class SelectObjectSample {
    // Tetapkan endpoint ke titik akhir wilayah tempat bucket Anda berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    private static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // Tetapkan bucketName ke nama bucket Anda, misalnya examplebucket.
    private static String bucketName = "examplebucket";

    public static void main(String[] args) throws Exception {
      
      	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah ditetapkan.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tetapkan region ke ID wilayah tempat bucket Anda berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), tetapkan region ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Setelah instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        // Tentukan path lengkap objek dan kueri data dari file menggunakan pernyataan SELECT. Path lengkap objek tidak boleh mengandung nama bucket.
        // Tentukan path lengkap objek CSV.
        selectCsvSample("test.csv", ossClient);
        // Tentukan path lengkap objek JSON.
        selectJsonSample("test.json", ossClient);
        ossClient.shutdown();
    }

    private static void selectCsvSample(String key, OSS ossClient) throws Exception {
        // Tentukan konten yang akan diunggah.
        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 pemisah antar record dalam konten, misalnya \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 mengkueri semua record di mana nilai pada kolom keempat lebih besar dari 40.
        selectObjectRequest.setExpression("select * from ossobject where _4 > 40");
        OSSObject ossObject = ossClient.selectObject(selectObjectRequest);

        // Baca konten.
        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 konten yang akan diunggah.
        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 mengkueri data dari file.

        OSSObject ossObject = ossClient.selectObject(selectObjectRequest);

        // Baca konten.
        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);
    }
}

Referensi

  • Untuk kode contoh lengkap mengenai pengkuerian file, lihat contoh GitHub.

  • Untuk informasi selengkapnya tentang operasi API untuk mengkueri file, lihat SelectObject.