Aracılığıyla paylaş


Hızlı Başlangıç: Java SDK ve Azure Cosmos DB ile Tablo uygulaması için API oluşturma

ŞUNLAR IÇIN GEÇERLIDIR: Masa

Bu hızlı başlangıçta, Bir Java uygulamasından Azure Cosmos DB Tabloları API'sine erişme işlemi gösterilmektedir. Azure Cosmos DB Tabloları API'si, uygulamaların yapılandırılmış NoSQL verilerini bulutta depolamasına olanak sağlayan şemasız bir veri deposudur. Veriler şemasız bir tasarımda depolandığından, tabloya yeni özniteliği olan bir nesne eklendiğinde yeni özellikler (sütunlar) tabloya otomatik olarak eklenir.

Java uygulamaları azure-data-tables istemci kitaplığını kullanarak Azure Cosmos DB Tabloları API'sine erişebilir.

Önkoşullar

Örnek uygulama Spring Boot 2.6.4'te yazılmıştır. IDE olarak Visual Studio Code veya IntelliJ IDEA kullanabilirsiniz.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Örnek uygulama

Bu öğretici için örnek uygulama depodan https://github.com/Azure-Samples/msdocs-azure-data-tables-sdk-javakopyalanabilir veya indirilebilir. Örnek depoya hem başlangıç hem de tamamlanmış uygulama eklenir.

git clone https://github.com/Azure-Samples/msdocs-azure-data-tables-sdk-java

Örnek uygulama, Tablolar API'sinin özelliklerini göstermek için örnek olarak hava durumu verilerini kullanır. Hava durumu gözlemlerini temsil eden nesneler, Tablolar API'sinin şemasız özelliklerini göstermek üzere nesneleri ek özelliklerle depolama da dahil olmak üzere Tablo API'si kullanılarak depolanır ve alınır.

Tablo API'sini kullanarak Azure Cosmos DB tablosunda depolanan verileri gösteren tamamlanmış uygulamanın ekran görüntüsü.

1 - Azure Cosmos DB hesabı oluşturma

İlk olarak, uygulamanızda kullanılan tabloları içerecek bir Azure Cosmos DB Tabloları API hesabı oluşturmanız gerekir. Bu işlem Azure portalı, Azure CLI veya Azure PowerShell kullanılarak yapılabilir.

Azure portalında oturum açın ve bir Azure Cosmos DB hesabı oluşturmak için bu adımları izleyin.

Yönergeler Ekran görüntüsü
Azure portalında:
  1. Azure portalının üst kısmındaki arama çubuğuna "Azure Cosmos DB" yazın.
  2. Arama çubuğunun altında görüntülenen menüde, Hizmetler'in altında Azure Cosmos DB etiketli öğeyi seçin.
Azure'da Azure Cosmos DB hesaplarını bulmak için üst araç çubuğundaki arama kutusunun nasıl kullanılacağını gösteren ekran görüntüsü.
Azure Cosmos DB sayfasında +Oluştur'u seçin. Azure'da Azure Cosmos DB hesapları sayfasındaki Oluştur düğmesi konumunu gösteren ekran görüntüsü.
API seç seçeneği sayfasında Azure Tablosu seçeneğini belirleyin. Seçecek doğru seçenek olarak Azure Tablo seçeneğini gösteren ekran görüntüsü.
Azure Cosmos DB Hesabı - Azure Tablosu Oluştur sayfasında formu aşağıdaki gibi doldurun.
  1. Kaynak grubu altındaki Yeni oluştur bağlantısını seçerek adlı rg-msdocs-tables-sdk-demo depolama hesabı için yeni bir kaynak grubu oluşturun.
  2. Benzersiz bir hesap adı oluşturmak için depolama hesabınıza XYZ'nin cosmos-msdocs-tables-sdk-demo-XYZ rastgele üç karakter olduğu bir ad verin. Azure Cosmos DB hesap adlarının uzunluğu 3 ile 44 karakter arasında olmalıdır ve yalnızca küçük harfler, sayılar veya kısa çizgi (-) karakteri içerebilir.
  3. Depolama hesabınız için bölge seçin.
  4. Standart performans'ı seçin.
  5. Bu örnek için Kapasite modu altında Sağlanan aktarım hızı'nu seçin.
  6. Bu örnek için Ücretsiz Katman İndirimi Uygula altında Uygula'yı seçin.
  7. Azure Cosmos DB hesabınızı oluşturmak için ekranın alt kısmındaki Gözden Geçir + oluştur düğmesini ve ardından özet ekranında "Oluştur"u seçin. Bu işlem birkaç dakika sürebilir.
Azure Cosmos DB Hesabı oluşturma sayfasındaki alanların nasıl doldurulduğunu gösteren ekran görüntüsü.

2 - Tablo oluşturma

Ardından, uygulamanızın kullanabilmesi için Azure Cosmos DB hesabınızda bir tablo oluşturmanız gerekir. Geleneksel bir veritabanından farklı olarak, tablodaki özellikleri (sütunları) değil, yalnızca tablonun adını belirtmeniz gerekir. Veriler tablonuza yüklendikçe, özellikler (sütunlar) gerektiğinde otomatik olarak oluşturulur.

Azure portalında aşağıdaki adımları tamamlayarak Azure Cosmos DB hesabınızın içinde bir tablo oluşturun.

Yönergeler Ekran görüntüsü
Azure portalında Azure Cosmos DB hesabının genel bakış sayfasına gidin. Üst arama çubuğuna Azure Cosmos DB hesabınızın adını (cosmos-msdocs-tables-sdk-demo-XYZ) yazarak ve kaynaklar başlığının altına bakarak Azure Cosmos DB hesabınızın genel bakış sayfasına gidebilirsiniz. Genel bakış sayfasına gitmek için Azure Cosmos DB hesabınızın adını seçin. Azure Cosmos DB hesabınızı bulmak için üst araç çubuğundaki arama kutusunun nasıl kullanılacağını gösteren ekran görüntüsü.
Genel bakış sayfasında +Tablo Ekle'yi seçin. Yeni Tablo iletişim kutusu sayfanın sağ tarafından kaydırılır. Tablo Ekle düğmesinin konumunu gösteren ekran görüntüsü.
Yeni Tablo iletişim kutusunda formu aşağıdaki gibi doldurun.
  1. Tablo Kimliği için WeatherData adını girin. Bu, tablonun adıdır.
  2. Bu örnek için Tablo aktarım hızı (otomatik ölçeklendirme) altında El ile'yi seçin.
  3. Tahmini RU/sn değerinizin altında varsayılan 400 değerini kullanın.
  4. Tabloyu oluşturmak için Tamam düğmesini seçin.
Azure Cosmos DB tablosu için Yeni Tablo iletişim kutusunun nasıl yapıldığını gösteren ekran görüntüsü.

3 - Azure Cosmos DB bağlantı dizesi alma

Azure Cosmos DB'deki tablolarınıza erişmek için uygulamanız CosmosDB Depolama hesabı için tablo bağlantı dizesi gerekir. bağlantı dizesi Azure portalı, Azure CLI veya Azure PowerShell kullanılarak alınabilir.

Yönergeler Ekran görüntüsü
Azure Cosmos DB hesap sayfasının sol tarafında, Ayarlar üst bilgisinin altındaki Bağlantı Dizesi adlı menü öğesini bulun ve seçin. Depolama hesabı için bağlantı dizesi alabildiğiniz bir sayfaya yönlendirilirsiniz. Azure Cosmos DB sayfasındaki bağlantı dizesi bağlantısının konumunu gösteren ekran görüntüsü.
Uygulamanızda kullanmak için BİRİnCİl BAĞLANTI DIZESİ değerini kopyalayın. Uygulamanızda hangi bağlantı dizesi seçilip kullanılacağını gösteren ekran görüntüsü.

Azure Cosmos DB hesabınızın bağlantı dizesi bir uygulama gizli dizisi olarak kabul edilir ve diğer uygulama gizli dizileri veya parolalar gibi korunmalıdır. Bu örnekte, geliştirme sırasında bağlantı dizesi depolamak ve uygulamanın kullanımına açmak için POM kullanılır.

<profiles>
    <profile>
        <id>local</id>
        <properties>
            <azure.tables.connection.string>
                <![CDATA[YOUR-DATA-TABLES-SERVICE-CONNECTION-STRING]]>
            </azure.tables.connection.string>
            <azure.tables.tableName>WeatherData</azure.tables.tableName>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

4 - azure-data-tables paketini ekleme

Bir Java uygulamasından Azure Cosmos DB Tabloları API'sine erişmek için azure-data-tables paketini ekleyin.

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-data-tables</artifactId>
    <version>12.2.1</version>
</dependency>

5 - TableServiceConfig.java'de Tablo istemcisini yapılandırma

Azure SDK, Azure'a karşı farklı işlemler yürütmek için istemci nesnelerini kullanarak Azure ile iletişim kurar. TableClient nesnesi, Azure Cosmos DB Tabloları API'siyle iletişim kurmak için kullanılan nesnedir.

Bir uygulama genellikle uygulama genelinde kullanılacak tablo başına tek bir TableClient nesnesi oluşturur. Bir yöntemin Spring kapsayıcısı tarafından yönetilecek bir TableClient nesne çekirdeği ürettiğini ve bunu başarmak için tekil olarak belirtilmesi önerilir.

TableServiceConfig.java Uygulamanın dosyasında yöntemini aşağıdaki kod parçacığıyla eşleşecek şekilde düzenleyintableClientConfiguration():

@Configuration
public class TableServiceConfiguration {

    private static String TABLE_NAME;

    private static String CONNECTION_STRING;

    @Value("${azure.tables.connection.string}")
    public void setConnectionStringStatic(String connectionString) {
        TableServiceConfiguration.CONNECTION_STRING = connectionString;
    }

    @Value("${azure.tables.tableName}")
    public void setTableNameStatic(String tableName) {
        TableServiceConfiguration.TABLE_NAME = tableName;
    }

    @Bean
    public TableClient tableClientConfiguration() {
        return new TableClientBuilder()
                .connectionString(CONNECTION_STRING)
                .tableName(TABLE_NAME)
                .buildClient();
    }
    
}

Ayrıca dosyanın en üstüne aşağıdaki using deyimini TableServiceConfig.java de eklemeniz gerekir.

import com.azure.data.tables.TableClient;
import com.azure.data.tables.TableClientBuilder;

6 - Azure Cosmos DB tablo işlemlerini uygulama

Örnek uygulama için tüm Azure Cosmos DB tablo işlemleri Services dizininde TablesServiceImpl bulunan sınıfta uygulanır. SDK paketini içeri aktarmanız com.azure.data.tables gerekir.

import com.azure.data.tables.TableClient;
import com.azure.data.tables.models.ListEntitiesOptions;
import com.azure.data.tables.models.TableEntity;
import com.azure.data.tables.models.TableTransactionAction;
import com.azure.data.tables.models.TableTransactionActionType;

sınıfının başında TableServiceImpl TableClient nesnesi için bir üye değişkeni ve TableClient nesnesinin sınıfına eklenmesine izin vermek için bir oluşturucu ekleyin.

@Autowired
private TableClient tableClient;

Tablodan satır alma

TableClient sınıfı, tablodan satır seçmenize olanak tanıyan listEntities adlı bir yöntem içerir. Bu örnekte, yönteme hiçbir parametre geçirilmediğinden, tablodan tüm satırlar seçilir.

yöntemi ayrıca model sınıfı verilerinin döndürüleceğini belirten TableEntity türünde genel bir parametre alır. Bu durumda, tableEntity yerleşik sınıfı kullanılır, yani yöntemin sonuçları olarak bir PagedIterable<TableEntity> koleksiyon döndüreceği anlamına gelirlistEntities.

public List<WeatherDataModel> retrieveAllEntities() {
    List<WeatherDataModel> modelList = tableClient.listEntities().stream()
        .map(WeatherDataUtils::mapTableEntityToWeatherDataModel)
        .collect(Collectors.toList());
    return Collections.unmodifiableList(WeatherDataUtils.filledValue(modelList));
}

Pakette com.azure.data.tables.models tanımlanan TableEntity sınıfı, tablodaki bölüm anahtarı ve satır anahtarı değerlerinin özelliklerine sahiptir. Birlikte, tablodaki satır için benzersiz bir anahtar için bu iki değer. Bu örnek uygulamada, hava durumu istasyonunun (şehir) adı bölüm anahtarında ve gözlemin tarihi/saati satır anahtarında depolanır. Diğer tüm özellikler (sıcaklık, nem, rüzgar hızı) nesnedeki bir sözlükte TableEntity depolanır.

TableEntity nesnesini kendi tanımınızdaki bir nesneyle eşlemek yaygın bir uygulamadır. Örnek uygulama bu amaçla Models dizininde bir sınıf WeatherDataModel tanımlar. Bu sınıf, bölüm anahtarı ve satır anahtarının eşlenecek istasyon adı ve gözlem tarihi için özelliklere sahiptir ve bu değerler için daha anlamlı özellik adları sağlar. Ardından nesnedeki diğer tüm özellikleri depolamak için bir sözlük kullanır. Bir satırda herhangi bir sayıda rastgele özellik bulunabileceğinden ve model nesnelerimizin tümünü yakalayabilmesini istediğimizden bu, Tablo depolama ile çalışırken yaygın bir desendir. Bu sınıf, sınıfındaki özellikleri listelemek için yöntemler de içerir.

public class WeatherDataModel {

    public WeatherDataModel(String stationName, String observationDate, OffsetDateTime timestamp, String etag) {
        this.stationName = stationName;
        this.observationDate = observationDate;
        this.timestamp = timestamp;
        this.etag = etag;
    }

    private String stationName;

    private String observationDate;

    private OffsetDateTime timestamp;

    private String etag;

    private Map<String, Object> propertyMap = new HashMap<String, Object>();

    public String getStationName() {
        return stationName;
    }

    public void setStationName(String stationName) {
        this.stationName = stationName;
    }

    public String getObservationDate() {
        return observationDate;
    }

    public void setObservationDate(String observationDate) {
        this.observationDate = observationDate;
    }

    public OffsetDateTime getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(OffsetDateTime timestamp) {
        this.timestamp = timestamp;
    }

    public String getEtag() {
        return etag;
    }

    public void setEtag(String etag) {
        this.etag = etag;
    }

    public Map<String, Object> getPropertyMap() {
        return propertyMap;
    }

    public void setPropertyMap(Map<String, Object> propertyMap) {
        this.propertyMap = propertyMap;
    }
}

mapTableEntityToWeatherDataModel yöntemi bir TableEntity nesnesini bir WeatherDataModel nesneye eşlemek için kullanılır. mapTableEntityToWeatherDataModel yöntemi , , TimestampRowKeyve Etag özelliklerini doğrudan eşler PartitionKeyve ardından doğrudan eşlenmiş olan özellikleri çıkararak nesnedeki TableEntity diğer özellikleri yinelemek ve bunları nesneyle eşlemek için WeatherDataModel öğesini kullanırproperties.keySet.

yöntemindeki mapTableEntityToWeatherDataModel kodu aşağıdaki kod bloğuyla eşleşecek şekilde düzenleyin.

public static WeatherDataModel mapTableEntityToWeatherDataModel(TableEntity entity) {
    WeatherDataModel observation = new WeatherDataModel(
        entity.getPartitionKey(), entity.getRowKey(),
        entity.getTimestamp(), entity.getETag());
    rearrangeEntityProperties(observation.getPropertyMap(), entity.getProperties());
    return observation;
}

private static void rearrangeEntityProperties(Map<String, Object> target, Map<String, Object> source) {
    Constants.DEFAULT_LIST_OF_KEYS.forEach(key -> {
        if (source.containsKey(key)) {
            target.put(key, source.get(key));
        }
    });
    source.keySet().forEach(key -> {
        if (Constants.DEFAULT_LIST_OF_KEYS.parallelStream().noneMatch(defaultKey -> defaultKey.equals(key))
        && Constants.EXCLUDE_TABLE_ENTITY_KEYS.parallelStream().noneMatch(defaultKey -> defaultKey.equals(key))) {
            target.put(key, source.get(key));
        }
    });
}

Tablodan döndürülen satırları filtreleme

Tablodan döndürülen satırları filtrelemek için listEntities yöntemine bir OData stili filtre dizesi geçirebilirsiniz. Örneğin, 1 Temmuz 2021 ile 2 Temmuz 2021 (dahil) gece yarısı arasında Chicago için tüm hava durumu okumalarını almak istiyorsanız aşağıdaki filtre dizesini geçirirsiniz.

PartitionKey eq 'Chicago' and RowKey ge '2021-07-01 12:00 AM' and RowKey le '2021-07-02 12:00 AM'

OData web sitesindeki tüm OData filtre işleçlerini Sistem Sorgu Seçeneğini Filtrele bölümünde görüntüleyebilirsiniz

Örnek uygulamada nesnesi, FilterResultsInputModel kullanıcı tarafından sağlanan filtre ölçütlerini yakalamak için tasarlanmıştır.

public class FilterResultsInputModel implements Serializable {

    private String partitionKey;

    private String rowKeyDateStart;

    private String rowKeyTimeStart;

    private String rowKeyDateEnd;

    private String rowKeyTimeEnd;

    private Double minTemperature;

    private Double maxTemperature;

    private Double minPrecipitation;

    private Double maxPrecipitation;

    public String getPartitionKey() {
        return partitionKey;
    }

    public void setPartitionKey(String partitionKey) {
        this.partitionKey = partitionKey;
    }

    public String getRowKeyDateStart() {
        return rowKeyDateStart;
    }

    public void setRowKeyDateStart(String rowKeyDateStart) {
        this.rowKeyDateStart = rowKeyDateStart;
    }

    public String getRowKeyTimeStart() {
        return rowKeyTimeStart;
    }

    public void setRowKeyTimeStart(String rowKeyTimeStart) {
        this.rowKeyTimeStart = rowKeyTimeStart;
    }

    public String getRowKeyDateEnd() {
        return rowKeyDateEnd;
    }

    public void setRowKeyDateEnd(String rowKeyDateEnd) {
        this.rowKeyDateEnd = rowKeyDateEnd;
    }

    public String getRowKeyTimeEnd() {
        return rowKeyTimeEnd;
    }

    public void setRowKeyTimeEnd(String rowKeyTimeEnd) {
        this.rowKeyTimeEnd = rowKeyTimeEnd;
    }

    public Double getMinTemperature() {
        return minTemperature;
    }

    public void setMinTemperature(Double minTemperature) {
        this.minTemperature = minTemperature;
    }

    public Double getMaxTemperature() {
        return maxTemperature;
    }

    public void setMaxTemperature(Double maxTemperature) {
        this.maxTemperature = maxTemperature;
    }

    public Double getMinPrecipitation() {
        return minPrecipitation;
    }

    public void setMinPrecipitation(Double minPrecipitation) {
        this.minPrecipitation = minPrecipitation;
    }

    public Double getMaxPrecipitation() {
        return maxPrecipitation;
    }

    public void setMaxPrecipitation(Double maxPrecipitation) {
        this.maxPrecipitation = maxPrecipitation;
    }
}

Bu nesne sınıfındaki TableServiceImpl yöntemine retrieveEntitiesByFilter geçirildiğinde, null olmayan her özellik değeri için bir filtre dizesi oluşturur. Ardından tüm değerleri bir "ve" yan tümcesiyle birleştirerek birleştirilmiş bir filtre dizesi oluşturur. Bu birleşik filtre dizesi TableClient nesnesinde listEntities yöntemine geçirilir ve yalnızca filtre dizesiyle eşleşen satırlar döndürülür. Uygulamanızın gerektirdiği şekilde uygun filtre dizeleri oluşturmak için kodunuzda benzer bir yöntem kullanabilirsiniz.

public List<WeatherDataModel> retrieveEntitiesByFilter(FilterResultsInputModel model) {

    List<String> filters = new ArrayList<>();

    if (!StringUtils.isEmptyOrWhitespace(model.getPartitionKey())) {
        filters.add(String.format("PartitionKey eq '%s'", model.getPartitionKey()));
    }
    if (!StringUtils.isEmptyOrWhitespace(model.getRowKeyDateStart())
            && !StringUtils.isEmptyOrWhitespace(model.getRowKeyTimeStart())) {
        filters.add(String.format("RowKey ge '%s %s'", model.getRowKeyDateStart(), model.getRowKeyTimeStart()));
    }
    if (!StringUtils.isEmptyOrWhitespace(model.getRowKeyDateEnd())
            && !StringUtils.isEmptyOrWhitespace(model.getRowKeyTimeEnd())) {
        filters.add(String.format("RowKey le '%s %s'", model.getRowKeyDateEnd(), model.getRowKeyTimeEnd()));
    }
    if (model.getMinTemperature() != null) {
        filters.add(String.format("Temperature ge %f", model.getMinTemperature()));
    }
    if (model.getMaxTemperature() != null) {
        filters.add(String.format("Temperature le %f", model.getMaxTemperature()));
    }
    if (model.getMinPrecipitation() != null) {
        filters.add(String.format("Precipitation ge %f", model.getMinPrecipitation()));
    }
    if (model.getMaxPrecipitation() != null) {
        filters.add(String.format("Precipitation le %f", model.getMaxPrecipitation()));
    }

    List<WeatherDataModel> modelList = tableClient.listEntities(new ListEntitiesOptions()
        .setFilter(String.join(" and ", filters)), null, null).stream()
        .map(WeatherDataUtils::mapTableEntityToWeatherDataModel)
        .collect(Collectors.toList());
    return Collections.unmodifiableList(WeatherDataUtils.filledValue(modelList));
}

TableEntity nesnesi kullanarak veri ekleme

Tabloya veri eklemenin en basit yolu TableEntity nesnesi kullanmaktır. Bu örnekte veriler bir giriş modeli nesnesinden TableEntity nesnesine eşlenir. Hava durumu istasyonu adını ve gözlem tarih/saatini temsil eden giriş nesnesindeki özellikler sırasıyla ve RowKey) özelliklerine PartitionKey eşlenir ve bu özellikler birlikte tablodaki satır için benzersiz bir anahtar oluşturur. Ardından giriş modeli nesnesinde ek özellikler TableClient nesnesinde sözlük özellikleriyle eşlenir. Son olarak, tabloya veri eklemek için TableClient nesnesinde createEntity yöntemi kullanılır.

insertEntity Örnek uygulamadaki sınıfını aşağıdaki kodu içerecek şekilde değiştirin.

public void insertEntity(WeatherInputModel model) {
    tableClient.createEntity(WeatherDataUtils.createTableEntity(model));
}

TableEntity nesnesi kullanarak verileri yukarı ekleme

Bir tabloya, o tabloda zaten var olan bir bölüm anahtarı/satır anahtarı bileşimine sahip bir satır eklemeyi denerseniz bir hata alırsınız. Bu nedenle, tabloya satır eklerken genellikle yöntemi yerine insertEntity upsertEntity kullanılması tercih edilir. Verilen bölüm anahtarı/satır anahtarı bileşimi tabloda zaten varsa upsertEntity yöntemi var olan satırı güncelleştirir. Aksi takdirde, satır tabloya eklenir.

public void upsertEntity(WeatherInputModel model) {
    tableClient.upsertEntity(WeatherDataUtils.createTableEntity(model));
}

Değişken özellikleriyle veri ekleme veya ekleme

Azure Cosmos DB Tabloları API'sini kullanmanın avantajlarından biri, tabloya yüklenen bir nesne yeni özellikler içeriyorsa bu özelliklerin tabloya otomatik olarak eklenmesi ve Azure Cosmos DB'de depolanan değerlerdir. Geleneksel veritabanında olduğu gibi sütun eklemek gibi ALTER TABLE DDL deyimlerini çalıştırmanız gerekmez.

Bu model, zaman içinde yakalanması gereken verileri ekleyebilen veya değiştirebilen veri kaynaklarıyla ilgilenirken veya farklı girişler uygulamanıza farklı veriler sağladığında uygulamanıza esneklik sağlar. Örnek uygulamada, yalnızca temel hava durumu verilerini değil bazı ek değerleri de gönderen bir hava durumu istasyonu benzetimi yapabilir. Bu yeni özelliklere sahip bir nesne tabloda ilk kez depolandığında, ilgili özellikler (sütunlar) tabloya otomatik olarak eklenir.

Örnek uygulamada, sınıfı nesnedeki ExpandableWeatherObject herhangi bir özellik kümesini desteklemek için bir iç sözlük etrafında oluşturulur. Bu sınıf, bir nesnenin rastgele bir özellik kümesi içermesi gerektiğinde için tipik bir deseni temsil eder.

public class ExpandableWeatherObject {

    private String stationName;

    private String observationDate;

    private Map<String, Object> propertyMap = new HashMap<String, Object>();

    public String getStationName() {
        return stationName;
    }

    public void setStationName(String stationName) {
        this.stationName = stationName;
    }

    public String getObservationDate() {
        return observationDate;
    }

    public void setObservationDate(String observationDate) {
        this.observationDate = observationDate;
    }

    public Map<String, Object> getPropertyMap() {
        return propertyMap;
    }

    public void setPropertyMap(Map<String, Object> propertyMap) {
        this.propertyMap = propertyMap;
    }

    public boolean containsProperty(String key) {
        return this.propertyMap.containsKey(key);
    }

    public Object getPropertyValue(String key) {
        return containsProperty(key) ? this.propertyMap.get(key) : null;
    }

    public void putProperty(String key, Object value) {
        this.propertyMap.put(key, value);
    }

    public List<String> getPropertyKeys() {
        List<String> list = Collections.synchronizedList(new ArrayList<String>());
        Iterator<String> iterators = this.propertyMap.keySet().iterator();
        while (iterators.hasNext()) {
            list.add(iterators.next());
        }
        return Collections.unmodifiableList(list);
    }

    public Integer getPropertyCount() {
        return this.propertyMap.size();
    }
}

Tablo API'sini kullanarak böyle bir nesne eklemek veya eklemek için, genişletilebilir nesnenin özelliklerini bir TableEntity nesnesine eşleyin ve TableClient nesnesinde createEntity veya upsertEntity yöntemlerini uygun şekilde kullanın.

public void insertExpandableEntity(ExpandableWeatherObject model) {
    tableClient.createEntity(WeatherDataUtils.createTableEntity(model));
}

public void upsertExpandableEntity(ExpandableWeatherObject model) {
    tableClient.upsertEntity(WeatherDataUtils.createTableEntity(model));
}

Varlığı güncelleştirme

Varlıklar TableClient nesnesinde updateEntity yöntemi çağrılarak güncelleştirilebilir. Tablolar API'sini kullanarak depolanan bir varlık (satır) rastgele bir özellik kümesi içerebileceğinden, genellikle daha önce açıklanana ExpandableWeatherObject benzer bir sözlük nesnesini temel alan bir güncelleştirme nesnesi oluşturmak yararlı olur. Bu durumda tek fark, güncelleştirmeler sırasında eşzamanlılık denetimi için kullanılan bir etag özelliğin eklenmesidir.

public class UpdateWeatherObject {

    private String stationName;

    private String observationDate;

    private String etag;

    private Map<String, Object> propertyMap = new HashMap<String, Object>();

    public String getStationName() {
        return stationName;
    }

    public void setStationName(String stationName) {
        this.stationName = stationName;
    }

    public String getObservationDate() {
        return observationDate;
    }

    public void setObservationDate(String observationDate) {
        this.observationDate = observationDate;
    }

    public String getEtag() {
        return etag;
    }

    public void setEtag(String etag) {
        this.etag = etag;
    }

    public Map<String, Object> getPropertyMap() {
        return propertyMap;
    }

    public void setPropertyMap(Map<String, Object> propertyMap) {
        this.propertyMap = propertyMap;
    }
}

Örnek uygulamada, bu nesne sınıfındaki updateEntity yöntemine TableServiceImpl geçirilir. Bu yöntem önce TableClient üzerindeki getEntity yöntemini kullanarak Tablolar API'sinden mevcut varlığı yükler. Ardından bu varlık nesnesini güncelleştirir ve güncelleştirmeleri veritabanına kaydetme yöntemini kullanır updateEntity . updateEntity yönteminin nesnenin ilk yüklendiğinden beri değişmediğinden emin olmak için nesnenin geçerli Etag'ini nasıl aldığına dikkat edin. Varlığı ne olursa olsun güncelleştirmek istiyorsanız, yöntemine updateEntity değerini etag geçirebilirsiniz.

public void updateEntity(UpdateWeatherObject model) {
    TableEntity tableEntity = tableClient.getEntity(model.getStationName(), model.getObservationDate());
    Map<String, Object> propertiesMap = model.getPropertyMap();
    propertiesMap.keySet().forEach(key -> tableEntity.getProperties().put(key, propertiesMap.get(key)));
    tableClient.updateEntity(tableEntity);
}

Varlığı kaldırma

Tablodan bir varlığı kaldırmak için TableClient nesnesinde deleteEntity yöntemini, nesnenin bölüm anahtarı ve satır anahtarıyla çağırın.

public void deleteEntity(WeatherInputModel model) {
    tableClient.deleteEntity(model.getStationName(),
            WeatherDataUtils.formatRowKey(model.getObservationDate(), model.getObservationTime()));
}

7 - Kodu çalıştırma

Azure Cosmos DB Tabloları API'siyle etkileşime geçmek için örnek uygulamayı çalıştırın. Uygulamayı ilk kez çalıştırdığınızda, tablo boş olduğundan veri olmaz. Tabloya veri eklemek için uygulamanın üst kısmındaki düğmelerden herhangi birini kullanın.

Tablo API'sini kullanarak Azure Cosmos DB'ye veri eklemek için kullanılan düğmelerin konumunu gösteren uygulamanın ekran görüntüsü.

Tablo Varlığını Kullanarak Ekle düğmesinin seçilmesi, nesne kullanarak yeni satır eklemenize veya eklemenize olanak sağlayan bir TableEntity iletişim kutusu açar.

TableEntity nesnesi kullanarak veri eklemek için kullanılan iletişim kutusunu gösteren uygulamanın ekran görüntüsü.

Genişletilebilir Veri Kullanarak Ekle düğmesinin seçilmesi, Azure Cosmos DB Tabloları API'sinin gerektiğinde tabloya otomatik olarak özellikleri (sütunları) nasıl eklediğini gösteren özel özelliklere sahip bir nesne eklemenize olanak tanıyan bir iletişim kutusu getirir. Bir veya daha fazla yeni özellik eklemek ve bu özelliği göstermek için Özel Alan Ekle düğmesini kullanın.

Özel alanlara sahip bir nesne kullanarak veri eklemek için kullanılan iletişim kutusunu gösteren uygulamanın ekran görüntüsü.

Azure Cosmos DB tablonuza örnek veriler yüklemek için Örnek Veri Ekle düğmesini kullanın.

Örnek veri ekleme düğmesinin konumunu gösteren uygulamanın ekran görüntüsü.

Sonuçları Filtrele sayfasına gitmek için üstteki menüden Sonuçları Filtrele öğesini seçin. Bu sayfada, bir filtre yan tümcesinin nasıl oluşturulup Azure Cosmos DB Tabloları API'sine geçirilebileceğini göstermek için filtre ölçütlerini doldurun.

Filtre sonuçları sayfasını gösteren ve sayfaya gitmek için kullanılan menü öğesini vurgulayan uygulamanın ekran görüntüsü.

Kaynakları temizleme

Örnek uygulamayı tamamladığınızda, bu makaleyle ilgili tüm Azure kaynaklarını Azure hesabınızdan kaldırmanız gerekir. Kaynak grubunu silerek bunu yapabilirsiniz.

Aşağıdakiler yapılarak Azure portalı kullanılarak bir kaynak grubu silinebilir.

Yönergeler Ekran görüntüsü
Kaynak grubuna gitmek için, arama çubuğuna kaynak grubunun adını yazın. Ardından Kaynak Grupları sekmesinde kaynak grubunun adını seçin. Kaynak grubu arama işlemini gösteren ekran görüntüsü.
Kaynak grubu sayfasının üst kısmındaki araç çubuğundan Kaynak grubunu sil'i seçin. Kaynak grubunu sil düğmesinin konumunu gösteren ekran görüntüsü.
Ekranın sağından kaynak grubunun silinmesini onaylamanızı isteyen bir iletişim kutusu açılır.
  1. Silme işleminin açıklandığı gibi onaylanması için metin kutusuna kaynak grubunun tam adını yazın.
  2. Sayfanın en altındaki Sil düğmesini seçin.
Kaynak grubunu silmeye yönelik onay iletişim kutusunu gösteren ekran görüntüsü.

Sonraki adımlar

Bu hızlı başlangıçta Azure Cosmos DB hesabı oluşturmayı, Veri Gezgini'ni kullanarak tablo oluşturmayı ve bir uygulamayı çalıştırmayı öğrendiniz. Artık Tablo API'sini kullanarak verilerinizi sorgulayabilirsiniz.