All Products
Search
Document Center

MaxCompute:Contoh Open Storage SDK - Java SDK

Last Updated:Jun 24, 2026

MaxCompute memungkinkan mesin pihak ketiga seperti Spark on EMR, StarRocks, Presto, PAI, dan Hologres menggunakan SDK untuk memanggil Storage API dan mengakses data MaxCompute secara langsung. Topik ini menyediakan contoh kode untuk mengakses MaxCompute menggunakan Java SDK.

Ikhtisar

Antarmuka utama untuk mengakses MaxCompute menggunakan Java SDK tercantum dalam tabel berikut.

Main interface

Description

TableReadSessionBuilder

Membuat sesi baca tabel MaxCompute.

TableBatchReadSession

Merepresentasikan sesi untuk membaca data dari tabel MaxCompute.

SplitReader

Membaca satu partisi data yang termasuk dalam sesi baca data.

Jika menggunakan Maven, cari Repositori Maven untuk odps-sdk-table-api guna mendapatkan berbagai versi Java SDK. Konfigurasi terkait adalah sebagai berikut.

<dependency>
	<groupId>com.aliyun.odps</groupId>
	<artifactId>odps-sdk-table-api</artifactId>
	<version>0.48.8-public</version>
</dependency>

MaxCompute menyediakan API terkait open storage. Untuk informasi selengkapnya, lihat odps-sdk-table-api.

TableReadSessionBuilder

Antarmuka TableReadSessionBuilder membuat sesi baca tabel MaxCompute. Metode utamanya didefinisikan sebagai berikut. Untuk informasi selengkapnya, lihat Java-sdk-doc.

Definisi antarmuka

public class TableReadSessionBuilder {

    public TableReadSessionBuilder table(Table table);

    public TableReadSessionBuilder identifier(TableIdentifier identifier);

    public TableReadSessionBuilder requiredDataColumns(List<String> requiredDataColumns);

    public TableReadSessionBuilder requiredPartitionColumns(List<String> requiredPartitionColumns);

    public TableReadSessionBuilder requiredPartitions(List<PartitionSpec> requiredPartitions);

    public TableReadSessionBuilder requiredBucketIds(List<Integer> requiredBucketIds);

    public TableReadSessionBuilder withSplitOptions(SplitOptions splitOptions);

    public TableReadSessionBuilder withArrowOptions(ArrowOptions arrowOptions);

    public TableReadSessionBuilder withFilterPredicate(Predicate filterPredicate);

    public TableReadSessionBuilder withSettings(EnvironmentSettings settings);

    public TableReadSessionBuilder withSessionId(String sessionId);

    public TableBatchReadSession buildBatchReadSession();
}

Deskripsi metode

Method Name

Description

table(Table table)

Menetapkan parameter Table input sebagai tabel target untuk sesi saat ini.

identifier(TableIdentifier identifier)

Menetapkan parameter TableIdentifier input sebagai tabel target untuk sesi saat ini.

requiredDataColumns(List<String> requiredDataColumns)

Membaca data dari bidang tertentu. Urutan bidang dalam data yang dikembalikan sesuai dengan urutan yang ditentukan dalam parameter requiredDataColumns. Gunakan metode ini untuk pemangkasan bidang data.

Catatan

Jika parameter requiredDataColumns kosong, semua data partisi dikembalikan.

requiredPartitionColumns(List<String> requiredPartitionColumns)

Membaca data dari kolom tertentu dalam partisi tertentu dari sebuah tabel. Gunakan metode ini untuk Pemangkasan partisi.

Catatan

Jika parameter requiredPartitionColumns kosong, semua data partisi dikembalikan.

requiredPartitions(List<PartitionSpec> requiredPartitions)

Membaca data dari partisi tertentu dari sebuah tabel. Gunakan metode ini untuk Pemangkasan partisi.

Catatan

Jika parameter requiredPartitions kosong, semua data partisi dikembalikan.

requiredBucketIds(List<Integer> requiredBucketIds)

Membaca data dari bucket tertentu. Metode ini hanya berlaku untuk Tabel terkluster dan digunakan untuk pemangkasan bucket.

Catatan

Jika parameter requiredBucketIds kosong, semua data bucket dikembalikan.

withSplitOptions(SplitOptions splitOptions)

Memisahkan data tabel. Untuk informasi selengkapnya, lihat SplitOptions.

withArrowOptions(ArrowOptions arrowOptions)

Menentukan opsi data Arrow. Untuk informasi selengkapnya, lihat ArrowOptions.

withFilterPredicate(Predicate filterPredicate)

Menentukan opsi penurunan predikat. Untuk informasi selengkapnya, lihat Predicate.

withSettings(EnvironmentSettings settings)

Menentukan konteks lingkungan. Untuk informasi selengkapnya, lihat EnvironmentSettings.

withSessionId(String sessionId)

Menentukan ID sesi untuk memuat ulang sesi yang sudah ada.

buildBatchReadSession()

Membuat atau mengambil sesi baca tabel.

  • Jika ID sesi disediakan, sesi yang sudah ada dikembalikan.

  • Jika tidak, sesi baru dibuat.

Catatan

Pembuatan sesi memiliki overhead tinggi dan dapat memakan waktu lama ketika jumlah file besar.

TableBatchReadSession

Antarmuka TableBatchReadSession merepresentasikan sesi untuk membaca data dari tabel MaxCompute. Metode utamanya didefinisikan sebagai berikut.

Definisi antarmuka

public interface TableBatchReadSession {

    String getId();

    TableIdentifier getTableIdentifier();

    SessionStatus getStatus();

    DataSchema readSchema();
    
    InputSplitAssigner getInputSplitAssigner() throws IOException;

    SplitReader<ArrayRecord> createRecordReader(InputSplit split, ReaderOptions options) throws IOException;

    SplitReader<VectorSchemaRoot> createArrowReader(InputSplit split, ReaderOptions options) throws IOException;    

}

Deskripsi metode

Method Name

Description

String getId()

Mendapatkan ID sesi. Waktu timeout sesi default adalah 24 jam.

getTableIdentifier()

Mendapatkan nama tabel untuk sesi saat ini.

getStatus()

Mendapatkan status sesi. Nilai yang valid:

  • INIT: Status awal saat sesi dibuat.

  • NORMAL: Sesi berhasil dibuat.

  • CRITICAL: Pembuatan sesi gagal.

  • EXPIRED: Sesi melewati waktu timeout.

readSchema()

Mendapatkan skema tabel untuk sesi saat ini. Untuk informasi selengkapnya, lihat DataSchema.

getInputSplitAssigner()

Mendapatkan InputSplitAssigner untuk sesi saat ini. InputSplitAssigner mendefinisikan metode untuk menetapkan instance InputSplit dalam sesi baca saat ini. Setiap InputSplit merepresentasikan partisi data yang dapat diproses oleh satu SplitReader. Untuk informasi selengkapnya, lihat InputSplitAssigner.

createRecordReader(InputSplit split, ReaderOptions options)

Membuat objek SplitReader<ArrayRecord> . Untuk informasi selengkapnya, lihat ReaderOptions.

createArrowReader(InputSplit split, ReaderOptions options)

Membuat objek SplitReader<VectorSchemaRoot>.

SplitReader

Antarmuka SplitReader membaca data dari tabel.

Definisi antarmuka

public interface SplitReader<T> {

    boolean hasNext() throws IOException;

    T get();

    Metrics currentMetricsValues();

    void close() throws IOException;
}

Deskripsi metode

Method Name

Description

hasNext()

Memeriksa apakah masih tersedia item data lainnya. Mengembalikan true jika item lain dapat dibaca. Jika tidak, mengembalikan false.

get()

Mendapatkan item data saat ini. Panggil hasNext() sebelum memanggil metode ini untuk memastikan elemen lain tersedia.

currentMetricsValues()

Mendapatkan metrik terkait SplitReader.

close()

Menutup koneksi setelah pembacaan selesai.

Contoh

  1. Konfigurasikan lingkungan untuk menghubungkan ke MaxCompute..

    // ID AccessKey dan Rahasia AccessKey dari Akun Alibaba Cloud atau Pengguna RAM
    // AccessKey Akun Alibaba Cloud memberikan akses API penuh dan menimbulkan risiko keamanan tinggi. Kami sangat menyarankan membuat dan menggunakan Pengguna RAM untuk akses API atau O&M rutin. Masuk ke Konsol RAM untuk membuat Pengguna RAM.
    // Contoh ini menyimpan AccessKey dan Rahasia AccessKey dalam Variabel lingkungan. Mereka juga dapat disimpan dalam file konfigurasi sesuai kebutuhan.
    // Jangan pernah menyimpan AccessKey dan Rahasia AccessKey dalam kode karena risiko kebocoran kunci.
    private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // Nama kuota untuk mengakses MaxCompute
    String quotaName = "<quotaName>";
    // Nama proyek MaxCompute
    String project = "<project>";
    // Buat objek Odps untuk menghubungkan ke MaxCompute
    Account account = new AliyunAccount(accessId, accessKey);
    Odps odps = new Odps(account);
    odps.setDefaultProject(project);
    // Titik akhir untuk MaxCompute. Hanya jaringan VPC Alibaba Cloud yang didukung.
    odps.setEndpoint(endpoint);
    Credentials credentials = Credentials.newBuilder().withAccount(odps.getAccount()).withAppAccount(odps.getAppAccount()).build();
    EnvironmentSettings settings = EnvironmentSettings.newBuilder().withCredentials(credentials).withServiceEndpoint(odps.getEndpoint()).withQuotaName(quotaName).build();
  2. Otorisasi.

    Secara default, tidak ada akun (termasuk Akun Alibaba Cloud) atau peran yang memiliki izin untuk menentukan kuota di tingkat pekerjaan. Berikan izin yang diperlukan. Untuk informasi selengkapnya, lihat Ikhtisar Open Storage.

  3. Baca data tabel.

    1. Buat sesi baca data untuk membaca data MaxCompute.

      // Nama tabel dalam proyek MaxCompute
      String tableName = "<table.name>";
      // Buat sesi baca data tabel
      TableReadSessionBuilder scanBuilder = new TableReadSessionBuilder();
      TableBatchReadSession scan = scanBuilder.identifier(TableIdentifier.of(project, tableName)).withSettings(settings)
              .withSplitOptions(SplitOptions.newBuilder()
                      .SplitByByteSize(256 * 1024L * 1024L)
                      .withCrossPartition(false).build())
              .requiredDataColumns(Arrays.asList("timestamp"))
              .requiredPartitionColumns(Arrays.asList("pt1"))
              .buildBatchReadSession();
      Catatan

      Jika volume data besar atau latensi jaringan tinggi atau tidak stabil, pembuatan sesi baca data mungkin memakan waktu lama dan secara otomatis beralih ke proses asinkron.

    2. Lakukan traversal data MaxCompute di setiap partisi dan gunakan pembaca Arrow untuk membaca data dari setiap partisi serta keluarkan datanya.

      // Lakukan traversal semua partisi input, gunakan pembaca Arrow untuk membaca setiap batch data dari setiap partisi, dan keluarkan konten setiap batch
      InputSplitAssigner assigner = scan.getInputSplitAssigner();
      for (InputSplit split : assigner.getAllSplits()) {
          SplitReader<VectorSchemaRoot> reader =
                  scan.createArrowReader(split, ReaderOptions.newBuilder()
                          .withSettings(settings)
                          .withCompressionCodec(CompressionCodec.ZSTD)
                          .withReuseBatch(true)
                          .build());
      
          int rowCount = 0;
          List<VectorSchemaRoot> batchList = new ArrayList<>();
          while (reader.hasNext()) {
              VectorSchemaRoot data = reader.get();
              rowCount += data.getRowCount();
              System.out.println(data.contentToTSVString());
          }
          reader.close();
      }

Objek dan antarmuka terkait

SplitOptions

SplitOptions

  • Definisi parameter

    Parameter objek SplitOptions didefinisikan sebagai berikut:

    public class SplitOptions {
    
        public static SplitOptions.Builder newBuilder() {
            return new Builder();
        }
    
        public static class Builder {
    
          public SplitOptions.Builder SplitByByteSize(long splitByteSize);
      
          public SplitOptions.Builder SplitByRowOffset();
      
          public SplitOptions.Builder withCrossPartition(boolean crossPartition);
      
          public SplitOptions.Builder withMaxFileNum(int splitMaxFileNum);
      
          public SplitOptions build();
        }
    }
  • Deskripsi parameter

    • SplitByByteSize(long splitByteSize)

      Memisahkan data berdasarkan parameter splitByteSize yang ditentukan. Ukuran setiap partisi data yang dikembalikan oleh server tidak melebihi splitByteSize (dalam byte).

      • Ukuran split kustom harus minimal 10 × 1024 × 1024 (10 MB).

      • Jika SplitByByteSize(long splitByteSize) tidak digunakan untuk menyesuaikan ukuran split, sistem menggunakan nilai default 256 × 1024 × 1024 (256 MB).

    • SplitByRowOffset()

      Memisahkan data berdasarkan baris, memungkinkan klien membaca data dari indeks tertentu.

    • withCrossPartition(boolean crossPartition)

      Menentukan apakah satu shard data boleh mencakup beberapa partisi data. Parameter crossPartition menerima nilai berikut:

      • true (default): mengizinkan satu shard data berisi beberapa partisi data.

      • false: tidak mengizinkannya.

    • withMaxFileNum(int splitMaxFileNum)

      Saat sebuah tabel memiliki banyak file, tentukan jumlah maksimum file fisik dalam satu partisi data untuk menghasilkan lebih banyak partisi data.

      Secara default, tidak ada batasan jumlah file fisik dalam satu partisi data.

    • build(): Membuat objek SplitOptions.

  • Contoh

    // 1. Pisahkan data berdasarkan ukuran, atur SplitSize menjadi 256 MB
    
    SplitOptions splitOptionsByteSize = 
          SplitOptions.newBuilder().SplitByByteSize(256 * 1024L * 1024L).build()
    
    // 2. Pisahkan data berdasarkan RowOffset
    
    SplitOptions splitOptionsCount = 
          SplitOptions.newBuilder().SplitByRowOffset().build()
    
    // 3. Atur jumlah maksimum file dalam satu split menjadi 1
    
    SplitOptions splitOptionsCount = 
          SplitOptions.newBuilder().SplitByRowOffset().withMaxFileNum(1).build()

ArrowOptions

ArrowOptions

  • Definisi parameter

    Parameter objek ArrowOptions didefinisikan sebagai berikut:

    public class ArrowOptions {
        
        public static Builder newBuilder() {
            return new Builder();
        }
    
        public static class Builder {
    
            public Builder withTimestampUnit(TimestampUnit unit);
    
            public Builder withDatetimeUnit(TimestampUnit unit);
    
            public ArrowOptions build();
        }
    
        public enum TimestampUnit {
            SECOND,
            MILLI,
            MICRO,
            NANO;
        }
    }
  • Deskripsi parameter

    • TimestampUnit

      Menentukan satuan untuk tipe data Timestamp dan Datetime. Nilai yang valid:

      • SECOND: detik (s)

      • MILLI: milidetik (ms)

      • MICRO: mikrodetik (μs)

      • NANO: nanodetik (ns)

    • withTimestampUnit(TimestampUnit unit)

      Menentukan satuan untuk tipe data Timestamp. Default: NANO.

    • withDatetimeUnit(TimestampUnit unit)

      Menentukan satuan untuk tipe data Datetime. Default: MILLI.

  • Contoh

    ArrowOptions options = ArrowOptions.newBuilder()
              .withDatetimeUnit(ArrowOptions.TimestampUnit.MILLI)
              .withTimestampUnit(ArrowOptions.TimestampUnit.NANO)
              .build()

Predicate

Predicate

  • Definisi parameter

    Parameter objek SplitOptions didefinisikan sebagai berikut:

    // 1. Operasi biner
    
    public class BinaryPredicate extends Predicate {
    
      public enum Operator {
        /**
         * Operator operasi biner
         */
        EQUALS("="),
        NOT_EQUALS("!="),
        GREATER_THAN(">"),
        LESS_THAN("<"),
        GREATER_THAN_OR_EQUAL(">="),
        LESS_THAN_OR_EQUAL("<=");
       
      }
    
      public BinaryPredicate(Operator operator, Serializable leftOperand, Serializable rightOperand);
    
      public static BinaryPredicate equals(Serializable leftOperand, Serializable rightOperand);
    
      public static BinaryPredicate notEquals(Serializable leftOperand, Serializable rightOperand);
    
      public static BinaryPredicate greaterThan(Serializable leftOperand, Serializable rightOperand);
    
      public static BinaryPredicate lessThan(Serializable leftOperand, Serializable rightOperand);
    
      public static BinaryPredicate greaterThanOrEqual(Serializable leftOperand,
                                                       Serializable rightOperand);
    
      public static BinaryPredicate lessThanOrEqual(Serializable leftOperand,
                                                    Serializable rightOperand);
    }
    
    // 2. Operasi uner
    public class UnaryPredicate extends Predicate {
    
      public enum Operator {
        /**
         * Operator operasi uner
         */
        IS_NULL("is null"),
        NOT_NULL("is not null");
      }
    
      public static UnaryPredicate isNull(Serializable operand);
      public static UnaryPredicate notNull(Serializable operand);
    }
    
    ### 3. IN dan NOT IN
    public class InPredicate extends Predicate {
    
      public enum Operator {
        /**
         * Operator IN dan NOT IN untuk pemeriksaan keanggotaan himpunan
         */
        IN("in"),
        NOT_IN("not in");
      }
    
      public InPredicate(Operator operator, Serializable operand, List<Serializable> set);
    
      public static InPredicate in(Serializable operand, List<Serializable> set);
    
      public static InPredicate notIn(Serializable operand, List<Serializable> set);
    }
    
    // 4. Nama kolom
    public class Attribute extends Predicate {
    
      public Attribute(Object value);
        
      public static Attribute of(Object value);
    }
    
    // 5. Konstanta
    public class Constant extends Predicate {
    
      public Constant(Object value);
    
      public static Constant of(Object value);
    }
    
    // 6. Operasi majemuk
    public class CompoundPredicate extends Predicate {
    
      public enum Operator {
        /**
         * Operator predikat majemuk
         */
        AND("and"),
        OR("or"),
        NOT("not");
      }
    
      public CompoundPredicate(Operator logicalOperator, List<Predicate> predicates);
    
      public static CompoundPredicate and(Predicate... predicates);
      
      public static CompoundPredicate or(Predicate... predicates);
    
      public static CompoundPredicate not(Predicate predicates);
    
      public void addPredicate(Predicate predicate);
    }
    
    // 7. Predikat mentah (RawPredicate)
    // Jika metode yang ada tidak memenuhi persyaratan, susun predikat berdasarkan sintaksis SQL
      public class RawPredicate extends Predicate {
          public RawPredicate(String rawExpr);
          public static RawPredicate of(String rawExpr);
      }
  • Contoh

    // 1. c1 > 20000 dan c2 < 100000
    BinaryPredicate c1 = new BinaryPredicate(BinaryPredicate.Operator.GREATER_THAN, Attribute.of("c1"), Constant.of(20000));
    BinaryPredicate c2 = new BinaryPredicate(BinaryPredicate.Operator.LESS_THAN, Attribute.of("c2"), Constant.of(100000));
    CompoundPredicate predicate =
            new CompoundPredicate(CompoundPredicate.Operator.AND, ImmutableList.of(c1, c2));
    
    // 2. c1 is not null
    Predicate predicate = new UnaryPredicate(UnaryPredicate.Operator.NOT_NULL,  Attribute.of("c1"));
    
      
    // 3. c1 in (1, 10001)
    Predicate predicate =
            new InPredicate(InPredicate.Operator.IN,  Attribute.of("c1"), ImmutableList.of(Constant.of(1), Constant.of(10001)));
    
    // 4. Gunakan RawPredicate untuk menyusun predikat (mendukung semua tipe)
      Predicate predicate = RawPredicate.of("c1 > 20000 and c2 < 100000");

EnvironmentSettings

EnvironmentSettings

  • Definisi parameter

    Antarmuka EnvironmentSettings didefinisikan sebagai berikut:

    public class EnvironmentSettings {
    
        public static Builder newBuilder() {
            return new Builder();
        }
    
        public static class Builder {
    
            public Builder withDefaultProject(String projectName);
    
            public Builder withDefaultSchema(String schema);
    
            public Builder withServiceEndpoint(String endPoint);
    
            public Builder withTunnelEndpoint(String tunnelEndPoint);
    
            public Builder withQuotaName(String quotaName);
    
            public Builder withCredentials(Credentials credentials);
    
            public Builder withRestOptions(RestOptions restOptions);
    
            public EnvironmentSettings build();
        }
    }
  • Deskripsi parameter

    • withDefaultProject(String projectName)

      Menetapkan nama proyek.projectName Parameter projectName adalah nama proyek MaxCompute. Masuk ke Konsol MaxCompute, alihkan wilayah di pojok kiri atas, lalu pilih Manage Configurations > Projects untuk melihat nama proyek MaxCompute.

    • withDefaultSchema(String schema)

      Menetapkan skema default.schema Parameter schema adalah nama skema MaxCompute. Untuk informasi selengkapnya tentang skema, lihat Operasi skema.

    • withServiceEndpoint(String endPoint)

      Menetapkan titik akhir layanan.Titik akhir.

    • withTunnelEndpoint(String tunnelEndPoint)

      Menetapkan titik akhir saluran data.Titik akhir.

    • withQuotaName(String quotaName)

      Menentukan nama kuota yang akan digunakan.

      MaxCompute mendukung dua jenis sumber daya: kelompok sumber daya Data Transmission Service eksklusif (langganan) Dapatkan nama kuota sebagai berikut:

      • Kelompok sumber daya Data Transmission Service eksklusif

        Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

        Di panel navigasi sebelah kiri, pilih Manage Configurations > Quotas .

        Lihat kuota yang tersedia. Untuk informasi selengkapnya, lihat Sumber daya komputasi - Manajemen kuota.

      • Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

        Di panel navigasi sebelah kiri, pilih Manage Configurations > Tenants .

        Di tab Tenant Property, aktifkan sakelar Storage API Switch.

    • withCredentials(Credentials credentials)

      Menentukan informasi otentikasi. Untuk informasi selengkapnya, lihat Credentials.

Credentials

Credentials

  • Definisi objek

    public class Credentials {
    
        public static Builder newBuilder() {
            return new Builder();
        }
    
        public static class Builder {
    
            public Builder withAccount(Account account);
    
            public Builder withAppAccount(AppAccount appAccount);
    
            public Builder withAppStsAccount(AppStsAccount appStsAccount);
    
            public Credentials build();
        }
    
    }
  • Deskripsi parameter

    • withAccount(Account account)

      Menentukan objek Account Odps.

    • withAppAccount(AppAccount appAccount)

      Menentukan objek appAccount Odps.

    • withAppStsAccount(AppStsAccount appStsAccount)

      Menentukan objek appStsAccount Odps.

    • withRestOptions(RestOptions restOptions)

      Menentukan konfigurasi akses jaringan. RestOptions didefinisikan sebagai berikut:

      public class RestOptions implements Serializable {
      
          public static Builder newBuilder() {
              return new RestOptions.Builder();
          }
      
          public static class Builder {
              public Builder witUserAgent(String userAgent);
              public Builder withConnectTimeout(int connectTimeout);
              public Builder withReadTimeout(int readTimeout);
              public RestOptions build();
          }
      }
      • witUserAgent(String userAgent): Menentukan informasi userAgent.

      • withConnectTimeout(int connectTimeout): Menentukan waktu tunggu koneksi untuk membangun koneksi jaringan dasar. Default: 10 detik.

      • withReadTimeout(int readTimeout): Menentukan waktu tunggu baca untuk koneksi jaringan dasar. Default: 120 detik.

DataSchema

  • DataSchema didefinisikan sebagai berikut:

    public class DataSchema implements Serializable {
        
        List<Column> getColumns();
    
        List<String> getPartitionKeys();
    
        List<String> getColumnNames();
    
        List<TypeInfo> getColumnDataTypes();
    
        Optional<Column> getColumn(int columnIndex);
    
        Optional<Column> getColumn(String columnName);
    
    }
  • Deskripsi parameter

    • getColumns(): Mendapatkan informasi kolom untuk tabel dan partisi yang akan dibaca.

    • getPartitionKeys(): Mendapatkan nama kolom partisi yang akan dibaca.

    • getColumnNames(): Mendapatkan nama kolom untuk tabel dan partisi yang akan dibaca.

    • getColumnDataTypes(): Mendapatkan tipe data kolom untuk tabel dan partisi yang akan dibaca.

    • getColumn(int columnIndex): Mendapatkan objek kolom berdasarkan indeks. Mengembalikan null jika indeks di luar jangkauan.

    • getColumn(String columnName): Mendapatkan objek kolom berdasarkan nama. Jika nama kolom columnName tidak ada dalam tabel, mengembalikan null.columnName

InputSplitAssigner

  • InputSplitAssigner didefinisikan sebagai berikut:

    public interface InputSplitAssigner {
    
        int getSplitsCount();
    
        long getTotalRowCount();
    
        InputSplit getSplit(int index);
    
        InputSplit getSplitByRowOffset(long startIndex, long numRecord);
    }
  • Deskripsi parameter

    • getSplitsCount(): Mendapatkan jumlah partisi data dalam sesi.

      Catatan

      Saat SplitOptions adalah SplitByByteSize, metode ini mengembalikan nilai lebih besar dari atau sama dengan 0.

    • getTotalRowCount(): Mendapatkan jumlah total baris data dalam sesi.

      Catatan

      Saat SplitOptions adalah SplitByByteSize, metode ini mengembalikan nilai lebih besar dari atau sama dengan 0.

    • getSplit(int index): Mendapatkan InputSplit untuk partisi Index yang ditentukan. Parameter index berkisar dari [0,SplitsCount-1].

    • getSplitByRowOffset(long startIndex, long numRecord): Mendapatkan InputSplit yang sesuai. Parameter adalah sebagai berikut:

    • startIndex: Indeks baris awal untuk pembacaan data InputSplit. Rentang: [0,RecordCount-1].

    • numRecord: Jumlah baris data yang akan dibaca oleh InputSplit.

  • Contoh

    // 1. Jika SplitOptions adalah SplitByByteSize
    
    TableBatchReadSession scan = ...;
    InputSplitAssigner assigner = scan.getInputSplitAssigner();
    int splitCount = assigner.getSplitsCount();
    for (int k = 0; k < splitCount; k++) {
        InputSplit split = assigner.getSplit(k);
        ...
    }
    
    // 2. Jika SplitOptions adalah SplitByRowOffset
    TableBatchReadSession scan = ...;
    InputSplitAssigner assigner = scan.getInputSplitAssigner();
    long rowCount = assigner.getTotalRowCount();
    long recordsPerSplit = 10000;
    for (long offset = 0; offset < numRecords; offset += recordsPerSplit) {
        recordsPerSplit = Math.min(recordsPerSplit, numRecords - offset);
        InputSplit split = assigner.getSplitByRowOffset(offset, recordsPerSplit);
        ...
    }

ReaderOptions

  • ReaderOptions didefinisikan sebagai berikut:

    public class ReaderOptions {
        
        public static ReaderOptions.Builder newBuilder() {
            return new Builder();
        }
    
        public static class Builder {
    
            public Builder withMaxBatchRowCount(int maxBatchRowCount);
    
            public Builder withMaxBatchRawSize(long batchRawSize);
    
            public Builder withCompressionCodec(CompressionCodec codec);
    
            public Builder withBufferAllocator(BufferAllocator allocator);
    
            public Builder withReuseBatch(boolean reuseBatch);
    
            public Builder withSettings(EnvironmentSettings settings);
    
            public ReaderOptions build();
        }
    
    }
  • Deskripsi parameter

    • withMaxBatchRowCount(int maxBatchRowCount)

      Menentukan jumlah maksimum baris per batch yang dikembalikan oleh server. Parameter maxBatchRowCount defaultnya maksimal 4096.

    • withMaxBatchRawSize(long batchRawSize)

      Menentukan ukuran byte mentah maksimum per batch yang dikembalikan oleh server.

    • withCompressionCodec(CompressionCodec codec)

      Menentukan tipe kompresi data. Hanya ZSTD dan LZ4_FRAME yang didukung.

      Catatan
      • Transfer data Arrow dalam jumlah besar tanpa kompresi secara langsung dapat meningkatkan waktu transfer secara signifikan karena batasan lebar pita jaringan.

      • Jika tipe kompresi tidak ditentukan, data tidak dikompresi secara default.

    • withBufferAllocator(BufferAllocator allocator)

      Menentukan alokator memori untuk membaca data Arrow.

    • withReuseBatch(boolean reuseBatch)

      Menentukan apakah memori ArrowBatch dapat digunakan kembali.reuseBatch Nilai:

      • true (default): Memori ArrowBatch dapat digunakan kembali.

      • false: Memori ArrowBatch tidak dapat digunakan kembali.

    • withSettings(EnvironmentSettings settings)

      Menentukan informasi lingkungan runtime.

Referensi

Untuk informasi selengkapnya tentang open storage MaxCompute, lihat Ikhtisar Open Storage.