Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Open Storage SDK examples - Java SDK

Son Güncelleme:Oct 10, 2026

MaxCompute; EMR üzerindeki Spark, StarRocks, Presto, PAI ve Hologres gibi üçüncü taraf motorların bir SDK aracılığıyla Storage API'yi çağırmasına ve MaxCompute verilerine doğrudan erişmesine olanak tanır. Bu konuda, Java SDK kullanarak MaxCompute'a erişim için kod örnekleri sunulmaktadır.

Genel Bakış

Java SDK kullanarak MaxCompute'a erişmek için kullanılan ana arayüzler aşağıdaki tabloda listelenmiştir.


Ana arayüz


Açıklama


TableReadSessionBuilder


Bir MaxCompute tablo okuma oturumu oluşturur.


TableBatchReadSession


MaxCompute tablosundan veri okumak için bir oturumu temsil eder.


SplitReader


Bir veri okuma oturumuna dahil olan tek bir veri bölümünü okur.

Maven kullanıyorsanız, Java SDK'nın farklı sürümlerini elde etmek için Maven deposunda odps-sdk-table-api araması yapın. İlgili yapılandırma aşağıdaki gibidir.

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

MaxCompute, open storage ile ilgili API'ler sağlar. Daha fazla bilgi için bkz. odps-sdk-table-api.

TableReadSessionBuilder

TableReadSessionBuilder arayüzü, bir MaxCompute tablo okuma oturumu oluşturur. Ana yöntemler aşağıda tanımlanmıştır. Daha fazla bilgi için bkz. Java-sdk-doc.

Arayüz tanımı

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();
}

Yöntem açıklamaları

Yöntem Adı

Açıklama

table(Table table)

Girdi Table parametresini geçerli oturumun hedef tablosu olarak ayarlar.

identifier(TableIdentifier identifier)

Girdi TableIdentifier parametresini geçerli oturumun hedef tablosu olarak ayarlar.

requiredDataColumns(List<String> requiredDataColumns)

Belirtilen alanlardan veri okur. Döndürülen verideki alan sırası, requiredDataColumns parametresinde belirtilen sırayla eşleşir. Veri alanı budama işlemi için bu yöntemi kullanın.

Not

requiredDataColumns parametresi boşsa tüm bölüm verileri döndürülür.

requiredPartitionColumns(List<String> requiredPartitionColumns)

Bir tablonun belirtilen bölümlerindeki belirtilen sütunlardan veri okur. Bölüm budama işlemi için bu yöntemi kullanın.

Not

requiredPartitionColumns parametresi boşsa tüm bölüm verileri döndürülür.

requiredPartitions(List<PartitionSpec> requiredPartitions)

Bir tablonun belirtilen bölümlerinden veri okur. Bölüm budama işlemi için bu yöntemi kullanın.

Not

requiredPartitions parametresi boşsa tüm bölüm verileri döndürülür.

requiredBucketIds(List<Integer> requiredBucketIds)

Belirtilen paketlerden veri okur. Bu yöntem yalnızca kümelenmiş tablolar için geçerlidir ve paket budama işlemi için kullanılır.

Not

requiredBucketIds parametresi boşsa tüm paket verileri döndürülür.

withSplitOptions(SplitOptions splitOptions)

Tablo verilerini böler. Daha fazla bilgi için bkz. SplitOptions.

withArrowOptions(ArrowOptions arrowOptions)

Arrow veri seçeneklerini belirtir. Daha fazla bilgi için bkz. ArrowOptions.

withFilterPredicate(Predicate filterPredicate)

Yüklem itme seçeneklerini belirtir. Daha fazla bilgi için bkz. Predicate.

withSettings(EnvironmentSettings settings)

Ortam bağlamını belirtir. Daha fazla bilgi için bkz. EnvironmentSettings.

withSessionId(String sessionId)

Mevcut bir oturumu yeniden yüklemek için oturum kimliğini belirtir.

buildBatchReadSession()

Bir tablo okuma oturumu oluşturur veya alır.

  • Bir oturum kimliği sağlanırsa mevcut oturum döndürülür.

  • Aksi takdirde yeni bir oturum oluşturulur.

Not

Oturum oluşturma yüksek ek yüke sahiptir ve dosya sayısı büyük olduğunda uzun zaman alabilir.

TableBatchReadSession

TableBatchReadSession arayüzü, MaxCompute tablosundan veri okumak için bir oturumu temsil eder. Ana yöntemler aşağıda tanımlanmıştır.

Arayüz tanımı

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;    

}

Yöntem açıklamaları

Yöntem Adı

Açıklama

String getId()

Oturum kimliğini alır. Varsayılan oturum zaman aşımı 24 saattir.

getTableIdentifier()

Geçerli oturum için tablo adını alır.

getStatus()

Oturum durumunu alır. Geçerli değerler:

  • INIT: Bir oturum oluşturulduğundaki başlangıç durumu.

  • NORMAL: Oturum başarıyla oluşturuldu.

  • CRITICAL: Oturum oluşturma başarısız oldu.

  • EXPIRED: Oturumun süresi doldu.

readSchema()

Geçerli oturum için tablo şemasını alır. Daha fazla bilgi için bkz. DataSchema.

getInputSplitAssigner()

Geçerli oturum için InputSplitAssigner öğesini alır. InputSplitAssigner, geçerli okuma oturumundaki InputSplit örneklerini atamak için yöntemleri tanımlar. Her InputSplit, tek bir SplitReader tarafından işlenebilen bir veri bölümünü temsil eder. Daha fazla bilgi için bkz. InputSplitAssigner.

createRecordReader(InputSplit split, ReaderOptions options)

Bir SplitReader<ArrayRecord> nesnesi oluşturur. Daha fazla bilgi için bkz. ReaderOptions.

createArrowReader(InputSplit split, ReaderOptions options)

Bir SplitReader<VectorSchemaRoot> nesnesi oluşturur.

SplitReader

SplitReader arayüzü tablolardan veri okur.

Arayüz tanımı

public interface SplitReader<T> {

    boolean hasNext() throws IOException;

    T get();

    Metrics currentMetricsValues();

    void close() throws IOException;
}

Yöntem açıklamaları


Yöntem Adı


Açıklama


hasNext()


Daha fazla veri öğesinin olup olmadığını kontrol eder. Başka bir öğe okunabiliyorsa true döndürür. Aksi takdirde false döndürür.


get()


Geçerli veri öğesini alır. Başka bir öğenin mevcut olduğunu onaylamak için bu yöntemi çağırmadan önce hasNext() yöntemini çağırın.


currentMetricsValues()


SplitReader ile ilgili ölçümleri alır.


close()


Okuma işlemi bittikten sonra bağlantıyı kapatır.

Örnekler

  1. MaxCompute'a bağlanmak için ortamı yapılandırın.

    // AccessKey ID and AccessKey secret of an Alibaba Cloud account or a RAM user
    // An Alibaba Cloud account AccessKey grants full API access and poses high security risks. We strongly recommend creating and using a RAM user for API access or routine O&M. Log on to the RAM console to create a RAM user.
    // This example stores the AccessKey and AccessKey secret in environment variables. They can also be stored in a configuration file as needed.
    // Never store AccessKey and AccessKey secret in code because of the risk of key leakage.
    private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // Quota name for accessing MaxCompute
    String quotaName = "<quotaName>";
    // MaxCompute project name
    String project = "<project>";
    // Create an Odps object to connect to MaxCompute
    Account account = new AliyunAccount(accessId, accessKey);
    Odps odps = new Odps(account);
    odps.setDefaultProject(project);
    // Endpoint for MaxCompute. Only Alibaba Cloud VPC networks are supported.
    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. Yetkilendirme.

    Varsayılan olarak hiçbir hesabın (Alibaba Cloud hesapları dahil) veya rolün iş düzeyinde kotaları belirtme izni yoktur. Gerekli izinleri verin. Daha fazla bilgi için bkz. Open Storage'a Genel Bakış.

  3. Tablo verilerini okuyun.

    1. MaxCompute verilerini okumak için bir veri okuma oturumu oluşturun.

      // Table name in the MaxCompute project
      String tableName = "<table.name>";
      // Create a table data read session
      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();
      Not

      Veri hacmi büyükse veya ağ gecikme süresi yüksek ya da kararsızsa, bir veri okuma oturumu oluşturmak çok uzun sürebilir ve otomatik olarak eşzamansız bir sürece geçebilir.

    2. Her bölümdeki MaxCompute verilerini yineleyin ve her bölümden veri okumak için bir Arrow okuyucu kullanın ve verileri çıktı olarak alın.

      // Traverse all input partitions, use an Arrow reader to read each batch of data from every partition, and output the content of each 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();
      }

İlgili nesneler ve arayüzler

SplitOptions

SplitOptions

  • Parametre tanımı

    SplitOptions nesne parametreleri aşağıdaki gibi tanımlanmıştır:

    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();
        }
    }
  • Parametre açıklamaları

    • SplitByByteSize(long splitByteSize)

      Verileri belirtilen splitByteSize parametresine göre böler. Sunucu tarafından döndürülen her veri bölümünün boyutu splitByteSize değerini (bayt cinsinden) aşmaz.

      • Özel bölme boyutu en az 10 × 1024 × 1024 (10 MB) olmalıdır.

      • Bölme boyutunu özelleştirmek için SplitByByteSize(long splitByteSize) kullanılmazsa sistem varsayılan 256 × 1024 × 1024 (256 MB) değerini kullanır.

    • SplitByRowOffset()

      Verileri satıra göre böler ve istemcinin belirtilen bir dizinden veri okumasına olanak tanır.

    • withCrossPartition(boolean crossPartition)

      Tek bir veri parçasının birden fazla veri bölümü içermesine izin verilip verilmeyeceğini belirtir. crossPartition parametresi aşağıdaki değerleri kabul eder:

      • true (varsayılan): Tek bir veri parçasının birden fazla veri bölümü içermesine izin verir.

      • false: İzin vermez.

    • withMaxFileNum(int splitMaxFileNum)

      Bir tablonun çok sayıda dosyası olduğunda daha fazla veri bölümü oluşturmak için tek bir veri bölümündeki maksimum fiziksel dosya sayısını belirtin.

      Varsayılan olarak tek bir veri bölümündeki fiziksel dosya sayısı üzerinde bir sınır yoktur.

    • build(): Bir SplitOptions nesnesi oluşturur.

  • Örnekler

    // 1. Split data by size, set SplitSize to 256 MB
    
    SplitOptions splitOptionsByteSize = 
          SplitOptions.newBuilder().SplitByByteSize(256 * 1024L * 1024L).build()
    
    // 2. Split data by RowOffset
    
    SplitOptions splitOptionsCount = 
          SplitOptions.newBuilder().SplitByRowOffset().build()
    
    // 3. Set the maximum number of files in a single split to 1
    
    SplitOptions splitOptionsCount = 
          SplitOptions.newBuilder().SplitByRowOffset().withMaxFileNum(1).build()

ArrowOptions

ArrowOptions

  • Parametre tanımı

    ArrowOptions nesne parametreleri aşağıdaki gibi tanımlanmıştır:

    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;
        }
    }
  • Parametre açıklamaları

    • TimestampUnit

      Timestamp ve Datetime veri türleri için birimi belirtir. Geçerli değerler:

      • SECOND: saniye (s)

      • MILLI: milisaniye (ms)

      • MICRO: mikrosaniye (μs)

      • NANO: nanosaniye (ns)

    • withTimestampUnit(TimestampUnit unit)

      Timestamp veri türü için birimi belirtir. Varsayılan: NANO.

    • withDatetimeUnit(TimestampUnit unit)

      Datetime veri türü için birimi belirtir. Varsayılan: MILLI.

  • Örnekler

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

Predicate

Predicate

  • Parametre tanımı

    Predicate nesne parametreleri aşağıdaki gibi tanımlanmıştır:

    // 1. Binary operations
    
    public class BinaryPredicate extends Predicate {
    
      public enum Operator {
        /**
         * Binary operation operators
         */
        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. Unary operations
    public class UnaryPredicate extends Predicate {
    
      public enum Operator {
        /**
         * Unary operation operators
         */
        IS_NULL("is null"),
        NOT_NULL("is not null");
      }
    
      public static UnaryPredicate isNull(Serializable operand);
      public static UnaryPredicate notNull(Serializable operand);
    }
    
    ### 3. IN and NOT IN
    public class InPredicate extends Predicate {
    
      public enum Operator {
        /**
         * IN and NOT IN operators for set membership check
         */
        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. Column names
    public class Attribute extends Predicate {
    
      public Attribute(Object value);
        
      public static Attribute of(Object value);
    }
    
    // 5. Constants
    public class Constant extends Predicate {
    
      public Constant(Object value);
    
      public static Constant of(Object value);
    }
    
    // 6. Compound operations
    public class CompoundPredicate extends Predicate {
    
      public enum Operator {
        /**
         * Compound predicate operators
         */
        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. Raw predicates (RawPredicate)
    // If existing methods do not meet requirements, assemble predicates based on SQL syntax
      public class RawPredicate extends Predicate {
          public RawPredicate(String rawExpr);
          public static RawPredicate of(String rawExpr);
      }
  • Örnekler

    // 1. c1 > 20000 and 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. Use RawPredicate to assemble predicates (supports all types)
      Predicate predicate = RawPredicate.of("c1 > 20000 and c2 < 100000");

EnvironmentSettings

EnvironmentSettings

  • Parametre tanımı

    EnvironmentSettings arayüzü aşağıdaki gibi tanımlanmıştır:

    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();
        }
    }
  • Parametre açıklamaları

    • withDefaultProject(String projectName)

      Proje adını ayarlar. projectName projectName parametresi MaxCompute proje adıdır.

      • MaxCompute konsolu adresinde oturum açın ve sol üst köşedeki bölgeyi değiştirin.

      • Manage Configurations > Projects seçeneğine giderek MaxCompute proje adını görüntüleyin.

    • withDefaultSchema(String schema)

      Varsayılan şemayı ayarlar. schema parametresi MaxCompute şema adıdır. Şemalar hakkında daha fazla bilgi için bkz. Şema işlemleri.

    • withServiceEndpoint(String endPoint)

      Hizmet uç noktasını ayarlar.Uç noktalar.

    • withTunnelEndpoint(String tunnelEndPoint)

      Tünel uç noktasını ayarlar.Uç noktalar.

    • withQuotaName(String quotaName)

      Kullanılacak kota adını belirtir.

      MaxCompute iki kaynak türünü destekler: özel Data Transmission Service kaynak grupları (abonelik) Kota adını aşağıdaki gibi alın:

      • Özel Data Transmission Service kaynak grubu

        MaxCompute konsolu adresinde oturum açın ve sol üst köşede bir bölge seçin.

        Sol gezinme bölmesinde Manage Configurations > Quotas  seçeneğine gidin.

        Kullanılabilir kotaları görüntüleyin. Daha fazla bilgi için bkz. Hesaplama kaynakları - Kota yönetimi.

      • MaxCompute konsolu adresinde oturum açın ve sol üst köşede bir bölge seçin.

        Sol gezinme bölmesinde Manage Configurations > Tenants  seçeneğine gidin.

        Tenant Property sekmesinde Storage API Switch anahtarını etkinleştirin.

    • withCredentials(Credentials credentials)

      Kimlik doğrulama bilgilerini belirtir. Daha fazla bilgi için bkz. Credentials.

Credentials

Credentials

  • Nesne tanımı

    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();
        }
    
    }
  • Parametre açıklamaları

    • withAccount(Account account)

      Odps Account nesnesini belirtir.

    • withAppAccount(AppAccount appAccount)

      Odps appAccount nesnesini belirtir.

    • withAppStsAccount(AppStsAccount appStsAccount)

      Odps appStsAccount nesnesini belirtir.

    • withRestOptions(RestOptions restOptions)

      Ağ erişimi yapılandırmasını belirtir. RestOptions aşağıdaki gibi tanımlanmıştır:

      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): userAgent bilgilerini belirtir.

      • withConnectTimeout(int connectTimeout): Altta yatan ağ bağlantısının kurulması için bağlantı zaman aşımını belirtir. Varsayılan: 10 saniye.

      • withReadTimeout(int readTimeout): Altta yatan ağ bağlantısı için okuma zaman aşımını belirtir. Varsayılan: 120 saniye.

DataSchema

  • DataSchema aşağıdaki gibi tanımlanmıştır:

    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);
    
    }
  • Parametre açıklamaları

    • getColumns(): Okunacak tablo ve bölümler için sütun bilgilerini alır.

    • getPartitionKeys(): Okunacak bölüm sütun adlarını alır.

    • getColumnNames(): Okunacak tablo ve bölümler için sütun adlarını alır.

    • getColumnDataTypes(): Okunacak tablo ve bölümler için sütun veri türlerini alır.

    • getColumn(int columnIndex): Bir sütun nesnesini dizine göre alır. Dizin aralık dışındaysa boş döndürür.

    • getColumn(String columnName): Bir sütun nesnesini ada göre alır. Sütun adı columnName tabloda yoksa boş döndürür.columnName

InputSplitAssigner

  • InputSplitAssigner aşağıdaki gibi tanımlanmıştır:

    public interface InputSplitAssigner {
    
        int getSplitsCount();
    
        long getTotalRowCount();
    
        InputSplit getSplit(int index);
    
        InputSplit getSplitByRowOffset(long startIndex, long numRecord);
    }
  • Parametre açıklamaları

    • getSplitsCount(): Oturumdaki veri bölümü sayısını alır.

      Not

      SplitOptions SplitByByteSize olduğunda bu yöntem 0'dan büyük veya 0'a eşit bir değer döndürür.

    • getTotalRowCount(): Oturumdaki toplam veri satırı sayısını alır.

      Not

      SplitOptions SplitByByteSize olduğunda bu yöntem 0'dan büyük veya 0'a eşit bir değer döndürür.

    • getSplit(int index): Belirtilen bölüm Index için InputSplit öğesini alır. index parametresi [0,SplitsCount-1] aralığındadır.

    • getSplitByRowOffset(long startIndex, long numRecord): İlgili InputSplit öğesini alır. Parametreler şöyledir:

    • startIndex: InputSplit veri okuma için başlangıç satır dizini. Aralık: [0,RecordCount-1].

    • numRecord: InputSplit'in okuyacağı veri satırı sayısı.

  • Örnekler

    // 1. If SplitOptions is SplitByByteSize
    
    TableBatchReadSession scan = ...;
    InputSplitAssigner assigner = scan.getInputSplitAssigner();
    int splitCount = assigner.getSplitsCount();
    for (int k = 0; k < splitCount; k++) {
        InputSplit split = assigner.getSplit(k);
        ...
    }
    
    // 2. If SplitOptions is 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 aşağıdaki gibi tanımlanmıştır:

    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();
        }
    
    }
  • Parametre açıklamaları

    • withMaxBatchRowCount(int maxBatchRowCount)

      Sunucu tarafından döndürülen toplu iş başına maksimum satır sayısını belirtir. maxBatchRowCount parametresi varsayılan olarak en fazla 4096'dır.

    • withMaxBatchRawSize(long batchRawSize)

      Sunucu tarafından döndürülen toplu iş başına maksimum ham bayt boyutunu belirtir.

    • withCompressionCodec(CompressionCodec codec)

      Veri sıkıştırma türünü belirtir. Yalnızca ZSTD ve LZ4_FRAME desteklenir.

      Not
      • Büyük miktarda sıkıştırılmamış Arrow verisini doğrudan aktarmak, ağ bant genişliği sınırları nedeniyle aktarım süresini önemli ölçüde artırabilir.

      • Sıkıştırma türü belirtilmezse veriler varsayılan olarak sıkıştırılmaz.

    • withBufferAllocator(BufferAllocator allocator)

      Arrow verilerini okumak için bellek ayırıcıyı belirtir.

    • withReuseBatch(boolean reuseBatch)

      ArrowBatch belleğinin yeniden kullanılıp kullanılamayacağını belirtir.reuseBatch Değerler:

      • true (varsayılan): ArrowBatch belleği yeniden kullanılabilir.

      • false: ArrowBatch belleği yeniden kullanılamaz.

    • withSettings(EnvironmentSettings settings)

      Çalışma zamanı ortam bilgilerini belirtir.

Referanslar

MaxCompute open storage hakkında daha fazla bilgi için bkz. Open Storage'a Genel Bakış.