閱讀128 返回首頁    go 魔獸


多方式寫入__高級特性_DataHub實時數據通道_大數據計算服務-阿裏雲

多方式數據寫入(Hash/PartitionKey

DataHub服務支持三種寫入方式:

按ShardID寫入

指定寫入某個Shard,該場景主要用於用戶需要保證每個通道中數據有序,因此需要將部分數據指定寫入到某個Shard中。樣例代碼:

  1. // 新建client
  2. Account account = new AliyunAccount("your access id", "your access key");
  3. DatahubConfiguration conf = new DatahubConfiguration(account, "datahub endpoint");
  4. DatahubClient client = new DatahubClient(conf);
  5. // 構造需要上傳的records
  6. RecordSchema schema = client.getTopic("projectName", "topicName").getRecordSchema();
  7. List<RecordEntry> recordEntries = new ArrayList<~>();
  8. RecordEntry entry = new RecordEntry(schema);
  9. for (int i=0; i<entry.getFieldCount(); i++) {
  10. entry.setBigint(i, 1);
  11. }
  12. entry.setShardId("shardId");
  13. recordEntries.add(entry);
  14. // 數據寫入
  15. client.putRecords("projectName", "topicName", recordEntries);

按HashKey寫入

指定一個128 bit的MD5值。 按照HashKey寫入,根據Shard的beginHashKey與endHashKey決定數據寫入的Shard。

該種方式的寫入場景主要用於用戶不關心數據的寫入順序,根據某個字段值或用戶維護的key來進行寫入。

  1. // 新建client
  2. Account account = new AliyunAccount("your access id", "your access key");
  3. DatahubConfiguration conf = new DatahubConfiguration(account, "datahub endpoint");
  4. DatahubClient client = new DatahubClient(conf);
  5. // 構造需要上傳的records
  6. RecordSchema schema = client.getTopic("projectName", "topicName").getRecordSchema();
  7. List<RecordEntry> recordEntries = new ArrayList<~>();
  8. RecordEntry entry = new RecordEntry(schema);
  9. for (int i=0; i<entry.getFieldCount(); i++) {
  10. entry.setBigint(i, 1);
  11. }
  12. entry.setHashKey("7FFFFFFFFFFFFFFD7FFFFFFFFFFFFFFD");
  13. recordEntries.add(entry);
  14. // 數據寫入
  15. client.putRecords("projectName", "topicName", recordEntries);

按PartitionKey寫入

指定一個String類型參數作為PartitionKey,係統根據該String的MD5值以及Shard的beginHashKey與endHashKey決定寫入的Shard。

該種方式的應用場景與按HashKey寫入方式類似,區別在於用戶不需要提供固定範圍的HashKey,而是通過一個字符串Key,係統會計算出其對應的HashKey進行寫入。

  1. // 新建client
  2. Account account = new AliyunAccount("your access id", "your access key");
  3. DatahubConfiguration conf = new DatahubConfiguration(account, "datahub endpoint");
  4. DatahubClient client = new DatahubClient(conf);
  5. // 構造需要上傳的records
  6. RecordSchema schema = client.getTopic("projectName", "topicName").getRecordSchema();
  7. List<RecordEntry> recordEntries = new ArrayList<~>();
  8. RecordEntry entry = new RecordEntry(schema);
  9. for (int i=0; i<entry.getFieldCount(); i++) {
  10. entry.setBigint(i, 1);
  11. }
  12. entry.setPartitionKey("TestPartitionKey");
  13. recordEntries.add(entry);
  14. // 數據寫入
  15. client.putRecords("projectName", "topicName", recordEntries);

最後更新:2016-11-23 18:01:58

  上一篇:go 擴容縮容Merge/Split__高級特性_DataHub實時數據通道_大數據計算服務-阿裏雲
  下一篇:go 批量數據通道概要__SDK介紹_批量數據通道_大數據計算服務-阿裏雲