Accumulo Range - End Key Not Inclusive












0














I am learning Accumulo and cannot seem to get the end key specified in a Range to be inclusive. My code is below. I have tried explicitly setting the endKeyInclusive to true in Range, but that didn't help.



BatchWriter writer = conn.createBatchWriter("table", config);

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

String rowId = "3015551212<ll>";
String columnFamily = "deter";
for (int i = 0; i < 10; i++) {
String deterTime = "20181112:21:46:33" + i;
deterTimes.add(deterTime);
writer.addMutation(makeRecord(rowId, columnFamily, deterTime, "DETER" + i));
}

writer.flush();
writer.close();

Scanner scan = conn.createScanner("table", auths);

Key startKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(1).getBytes());
Key endKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(4).getBytes());
Range range = new Range(startKey, endKey);
if (range.isEndKeyInclusive()) System.out.println("true");
scan.setRange(range);

for (Entry<Key,Value> entry : scan) {
Text row = entry.getKey().getRow();
Text cq = entry.getKey().getColumnQualifier();
Value value = entry.getValue();
System.out.println("Fetched row " + row + " with value: " + value + ", cq=" + cq);
}


Output:



true
Fetched row 3015551212<ll> with value: DETER1, cq='20181112:21:46:331'
Fetched row 3015551212<ll> with value: DETER2, cq='20181112:21:46:332'
Fetched row 3015551212<ll> with value: DETER3, cq='20181112:21:46:333'









share|improve this question





























    0














    I am learning Accumulo and cannot seem to get the end key specified in a Range to be inclusive. My code is below. I have tried explicitly setting the endKeyInclusive to true in Range, but that didn't help.



    BatchWriter writer = conn.createBatchWriter("table", config);

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

    String rowId = "3015551212<ll>";
    String columnFamily = "deter";
    for (int i = 0; i < 10; i++) {
    String deterTime = "20181112:21:46:33" + i;
    deterTimes.add(deterTime);
    writer.addMutation(makeRecord(rowId, columnFamily, deterTime, "DETER" + i));
    }

    writer.flush();
    writer.close();

    Scanner scan = conn.createScanner("table", auths);

    Key startKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(1).getBytes());
    Key endKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(4).getBytes());
    Range range = new Range(startKey, endKey);
    if (range.isEndKeyInclusive()) System.out.println("true");
    scan.setRange(range);

    for (Entry<Key,Value> entry : scan) {
    Text row = entry.getKey().getRow();
    Text cq = entry.getKey().getColumnQualifier();
    Value value = entry.getValue();
    System.out.println("Fetched row " + row + " with value: " + value + ", cq=" + cq);
    }


    Output:



    true
    Fetched row 3015551212<ll> with value: DETER1, cq='20181112:21:46:331'
    Fetched row 3015551212<ll> with value: DETER2, cq='20181112:21:46:332'
    Fetched row 3015551212<ll> with value: DETER3, cq='20181112:21:46:333'









    share|improve this question



























      0












      0








      0







      I am learning Accumulo and cannot seem to get the end key specified in a Range to be inclusive. My code is below. I have tried explicitly setting the endKeyInclusive to true in Range, but that didn't help.



      BatchWriter writer = conn.createBatchWriter("table", config);

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

      String rowId = "3015551212<ll>";
      String columnFamily = "deter";
      for (int i = 0; i < 10; i++) {
      String deterTime = "20181112:21:46:33" + i;
      deterTimes.add(deterTime);
      writer.addMutation(makeRecord(rowId, columnFamily, deterTime, "DETER" + i));
      }

      writer.flush();
      writer.close();

      Scanner scan = conn.createScanner("table", auths);

      Key startKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(1).getBytes());
      Key endKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(4).getBytes());
      Range range = new Range(startKey, endKey);
      if (range.isEndKeyInclusive()) System.out.println("true");
      scan.setRange(range);

      for (Entry<Key,Value> entry : scan) {
      Text row = entry.getKey().getRow();
      Text cq = entry.getKey().getColumnQualifier();
      Value value = entry.getValue();
      System.out.println("Fetched row " + row + " with value: " + value + ", cq=" + cq);
      }


      Output:



      true
      Fetched row 3015551212<ll> with value: DETER1, cq='20181112:21:46:331'
      Fetched row 3015551212<ll> with value: DETER2, cq='20181112:21:46:332'
      Fetched row 3015551212<ll> with value: DETER3, cq='20181112:21:46:333'









      share|improve this question















      I am learning Accumulo and cannot seem to get the end key specified in a Range to be inclusive. My code is below. I have tried explicitly setting the endKeyInclusive to true in Range, but that didn't help.



      BatchWriter writer = conn.createBatchWriter("table", config);

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

      String rowId = "3015551212<ll>";
      String columnFamily = "deter";
      for (int i = 0; i < 10; i++) {
      String deterTime = "20181112:21:46:33" + i;
      deterTimes.add(deterTime);
      writer.addMutation(makeRecord(rowId, columnFamily, deterTime, "DETER" + i));
      }

      writer.flush();
      writer.close();

      Scanner scan = conn.createScanner("table", auths);

      Key startKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(1).getBytes());
      Key endKey = new Key(rowId.getBytes(), columnFamily.getBytes(), deterTimes.get(4).getBytes());
      Range range = new Range(startKey, endKey);
      if (range.isEndKeyInclusive()) System.out.println("true");
      scan.setRange(range);

      for (Entry<Key,Value> entry : scan) {
      Text row = entry.getKey().getRow();
      Text cq = entry.getKey().getColumnQualifier();
      Value value = entry.getValue();
      System.out.println("Fetched row " + row + " with value: " + value + ", cq=" + cq);
      }


      Output:



      true
      Fetched row 3015551212<ll> with value: DETER1, cq='20181112:21:46:331'
      Fetched row 3015551212<ll> with value: DETER2, cq='20181112:21:46:332'
      Fetched row 3015551212<ll> with value: DETER3, cq='20181112:21:46:333'






      java accumulo






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 15 at 23:30









      pushkin

      3,929112651




      3,929112651










      asked Nov 13 at 0:51









      codemasterg

      85




      85
























          2 Answers
          2






          active

          oldest

          votes


















          1














          You are constructing your end key with ( row, column family, column qualifier ) as byte arrays, and the remaining dimensions of the key ( column visibility, timestamp ) set to default values (specifically, an empty byte array and Long.MAX_VALUE, respectively).



          The scanner will stop at that exact key, inclusively. However, your actual data entry is almost certainly not that exact key (you didn't provide your implementation of makeRecord to verify). Even if your data actually has an empty column visibility, the timestamp is almost certainly not Long.MAX_VALUE, but rather something you set in your makeRecord implementation or it was set based on the tserver's time or some table logical counter. Since the timestamp dimension of the key is ordered descending, your scanner will stop looking for data at Long.MAX_LONG before it reaches your entries.



          This is a bit like searching a dictionary for analogy, but stopping when you reach analog: you'll miss the remaining words that begin with analog.



          This is a common pitfall when constructing ranges based on exact keys. It is generally better to construct ranges based on rows (inclusive on rows will include the entire row), rather than keys (there is a Range constructor for that). Or, to specify the end key so that it works exclusively. You can do this by appending a null byte to the end of your last meaningful element of the column. For example, you can do something like:



          Key endKey = new Key(rowId.getBytes(),
          columnFamily.getBytes(),
          (deterTimes.get(4) + "").getBytes());
          Range range = new Range(startKey, true, endKey, false);


          Another pitfall you should be careful of is using String.getBytes() to get your byte arrays, without specifying an encoding. It would be better to use something consistent, like "abc".getBytes(StandardCharsets.UTF_8) (I usually do a static import, though, so I can specify only UTF_8).






          share|improve this answer























          • Thank you very much for taking the time to fully explain this, I incorrectly assumed that if I did not give specific timestamps for the Keys in a Range, that the query would not use the time portion of the stored Keys when looking for matches. While I understand the explanation, the need to append the null byte is awkward from an API perspective. I am querying with key range because I don't want all columns to be returned and there is no meaningful column family that can group columns for the data to be processed.
            – codemasterg
            Nov 17 at 13:48










          • I agree it is awkward. Internally, we use an API called nextKey or followingKey (don't remember exactly) for such situations, but I'm on my phone now and unable to check whether that is exposed in the public API.
            – Christopher
            Nov 19 at 22:13



















          0














          The Range is running inclusively here but perhaps there's an issue with the values your adding to it



          This would be easier to diagnose with the output but is there a chance you're expecting a deter time one higher because the array begins at zero so you see a deterTime one less than expected?



          If this is not the case please share your output






          share|improve this answer





















          • Added output. Thanks. I should also add that I am using MiniAccumuloCluster, but I am assuming that shouldn't matter as far as Range is concerned.
            – codemasterg
            Nov 14 at 1:33












          • It looks like the endKey you specified was returned, the 4th entry in the array has a value of DETER3 which has been retrieved
            – A. Timms
            Nov 14 at 2:45










          • Since the range is 1 - 4 inclusive, I would have expected 4 items returned; i.e.: DETER1, DETER2, DETER3, DETER4. The 4th entry is the array is DETER4, the 0th item in the array is DETER0.
            – codemasterg
            Nov 14 at 11:46













          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272215%2faccumulo-range-end-key-not-inclusive%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          You are constructing your end key with ( row, column family, column qualifier ) as byte arrays, and the remaining dimensions of the key ( column visibility, timestamp ) set to default values (specifically, an empty byte array and Long.MAX_VALUE, respectively).



          The scanner will stop at that exact key, inclusively. However, your actual data entry is almost certainly not that exact key (you didn't provide your implementation of makeRecord to verify). Even if your data actually has an empty column visibility, the timestamp is almost certainly not Long.MAX_VALUE, but rather something you set in your makeRecord implementation or it was set based on the tserver's time or some table logical counter. Since the timestamp dimension of the key is ordered descending, your scanner will stop looking for data at Long.MAX_LONG before it reaches your entries.



          This is a bit like searching a dictionary for analogy, but stopping when you reach analog: you'll miss the remaining words that begin with analog.



          This is a common pitfall when constructing ranges based on exact keys. It is generally better to construct ranges based on rows (inclusive on rows will include the entire row), rather than keys (there is a Range constructor for that). Or, to specify the end key so that it works exclusively. You can do this by appending a null byte to the end of your last meaningful element of the column. For example, you can do something like:



          Key endKey = new Key(rowId.getBytes(),
          columnFamily.getBytes(),
          (deterTimes.get(4) + "").getBytes());
          Range range = new Range(startKey, true, endKey, false);


          Another pitfall you should be careful of is using String.getBytes() to get your byte arrays, without specifying an encoding. It would be better to use something consistent, like "abc".getBytes(StandardCharsets.UTF_8) (I usually do a static import, though, so I can specify only UTF_8).






          share|improve this answer























          • Thank you very much for taking the time to fully explain this, I incorrectly assumed that if I did not give specific timestamps for the Keys in a Range, that the query would not use the time portion of the stored Keys when looking for matches. While I understand the explanation, the need to append the null byte is awkward from an API perspective. I am querying with key range because I don't want all columns to be returned and there is no meaningful column family that can group columns for the data to be processed.
            – codemasterg
            Nov 17 at 13:48










          • I agree it is awkward. Internally, we use an API called nextKey or followingKey (don't remember exactly) for such situations, but I'm on my phone now and unable to check whether that is exposed in the public API.
            – Christopher
            Nov 19 at 22:13
















          1














          You are constructing your end key with ( row, column family, column qualifier ) as byte arrays, and the remaining dimensions of the key ( column visibility, timestamp ) set to default values (specifically, an empty byte array and Long.MAX_VALUE, respectively).



          The scanner will stop at that exact key, inclusively. However, your actual data entry is almost certainly not that exact key (you didn't provide your implementation of makeRecord to verify). Even if your data actually has an empty column visibility, the timestamp is almost certainly not Long.MAX_VALUE, but rather something you set in your makeRecord implementation or it was set based on the tserver's time or some table logical counter. Since the timestamp dimension of the key is ordered descending, your scanner will stop looking for data at Long.MAX_LONG before it reaches your entries.



          This is a bit like searching a dictionary for analogy, but stopping when you reach analog: you'll miss the remaining words that begin with analog.



          This is a common pitfall when constructing ranges based on exact keys. It is generally better to construct ranges based on rows (inclusive on rows will include the entire row), rather than keys (there is a Range constructor for that). Or, to specify the end key so that it works exclusively. You can do this by appending a null byte to the end of your last meaningful element of the column. For example, you can do something like:



          Key endKey = new Key(rowId.getBytes(),
          columnFamily.getBytes(),
          (deterTimes.get(4) + "").getBytes());
          Range range = new Range(startKey, true, endKey, false);


          Another pitfall you should be careful of is using String.getBytes() to get your byte arrays, without specifying an encoding. It would be better to use something consistent, like "abc".getBytes(StandardCharsets.UTF_8) (I usually do a static import, though, so I can specify only UTF_8).






          share|improve this answer























          • Thank you very much for taking the time to fully explain this, I incorrectly assumed that if I did not give specific timestamps for the Keys in a Range, that the query would not use the time portion of the stored Keys when looking for matches. While I understand the explanation, the need to append the null byte is awkward from an API perspective. I am querying with key range because I don't want all columns to be returned and there is no meaningful column family that can group columns for the data to be processed.
            – codemasterg
            Nov 17 at 13:48










          • I agree it is awkward. Internally, we use an API called nextKey or followingKey (don't remember exactly) for such situations, but I'm on my phone now and unable to check whether that is exposed in the public API.
            – Christopher
            Nov 19 at 22:13














          1












          1








          1






          You are constructing your end key with ( row, column family, column qualifier ) as byte arrays, and the remaining dimensions of the key ( column visibility, timestamp ) set to default values (specifically, an empty byte array and Long.MAX_VALUE, respectively).



          The scanner will stop at that exact key, inclusively. However, your actual data entry is almost certainly not that exact key (you didn't provide your implementation of makeRecord to verify). Even if your data actually has an empty column visibility, the timestamp is almost certainly not Long.MAX_VALUE, but rather something you set in your makeRecord implementation or it was set based on the tserver's time or some table logical counter. Since the timestamp dimension of the key is ordered descending, your scanner will stop looking for data at Long.MAX_LONG before it reaches your entries.



          This is a bit like searching a dictionary for analogy, but stopping when you reach analog: you'll miss the remaining words that begin with analog.



          This is a common pitfall when constructing ranges based on exact keys. It is generally better to construct ranges based on rows (inclusive on rows will include the entire row), rather than keys (there is a Range constructor for that). Or, to specify the end key so that it works exclusively. You can do this by appending a null byte to the end of your last meaningful element of the column. For example, you can do something like:



          Key endKey = new Key(rowId.getBytes(),
          columnFamily.getBytes(),
          (deterTimes.get(4) + "").getBytes());
          Range range = new Range(startKey, true, endKey, false);


          Another pitfall you should be careful of is using String.getBytes() to get your byte arrays, without specifying an encoding. It would be better to use something consistent, like "abc".getBytes(StandardCharsets.UTF_8) (I usually do a static import, though, so I can specify only UTF_8).






          share|improve this answer














          You are constructing your end key with ( row, column family, column qualifier ) as byte arrays, and the remaining dimensions of the key ( column visibility, timestamp ) set to default values (specifically, an empty byte array and Long.MAX_VALUE, respectively).



          The scanner will stop at that exact key, inclusively. However, your actual data entry is almost certainly not that exact key (you didn't provide your implementation of makeRecord to verify). Even if your data actually has an empty column visibility, the timestamp is almost certainly not Long.MAX_VALUE, but rather something you set in your makeRecord implementation or it was set based on the tserver's time or some table logical counter. Since the timestamp dimension of the key is ordered descending, your scanner will stop looking for data at Long.MAX_LONG before it reaches your entries.



          This is a bit like searching a dictionary for analogy, but stopping when you reach analog: you'll miss the remaining words that begin with analog.



          This is a common pitfall when constructing ranges based on exact keys. It is generally better to construct ranges based on rows (inclusive on rows will include the entire row), rather than keys (there is a Range constructor for that). Or, to specify the end key so that it works exclusively. You can do this by appending a null byte to the end of your last meaningful element of the column. For example, you can do something like:



          Key endKey = new Key(rowId.getBytes(),
          columnFamily.getBytes(),
          (deterTimes.get(4) + "").getBytes());
          Range range = new Range(startKey, true, endKey, false);


          Another pitfall you should be careful of is using String.getBytes() to get your byte arrays, without specifying an encoding. It would be better to use something consistent, like "abc".getBytes(StandardCharsets.UTF_8) (I usually do a static import, though, so I can specify only UTF_8).







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 15 at 23:26

























          answered Nov 15 at 23:21









          Christopher

          1,9391420




          1,9391420












          • Thank you very much for taking the time to fully explain this, I incorrectly assumed that if I did not give specific timestamps for the Keys in a Range, that the query would not use the time portion of the stored Keys when looking for matches. While I understand the explanation, the need to append the null byte is awkward from an API perspective. I am querying with key range because I don't want all columns to be returned and there is no meaningful column family that can group columns for the data to be processed.
            – codemasterg
            Nov 17 at 13:48










          • I agree it is awkward. Internally, we use an API called nextKey or followingKey (don't remember exactly) for such situations, but I'm on my phone now and unable to check whether that is exposed in the public API.
            – Christopher
            Nov 19 at 22:13


















          • Thank you very much for taking the time to fully explain this, I incorrectly assumed that if I did not give specific timestamps for the Keys in a Range, that the query would not use the time portion of the stored Keys when looking for matches. While I understand the explanation, the need to append the null byte is awkward from an API perspective. I am querying with key range because I don't want all columns to be returned and there is no meaningful column family that can group columns for the data to be processed.
            – codemasterg
            Nov 17 at 13:48










          • I agree it is awkward. Internally, we use an API called nextKey or followingKey (don't remember exactly) for such situations, but I'm on my phone now and unable to check whether that is exposed in the public API.
            – Christopher
            Nov 19 at 22:13
















          Thank you very much for taking the time to fully explain this, I incorrectly assumed that if I did not give specific timestamps for the Keys in a Range, that the query would not use the time portion of the stored Keys when looking for matches. While I understand the explanation, the need to append the null byte is awkward from an API perspective. I am querying with key range because I don't want all columns to be returned and there is no meaningful column family that can group columns for the data to be processed.
          – codemasterg
          Nov 17 at 13:48




          Thank you very much for taking the time to fully explain this, I incorrectly assumed that if I did not give specific timestamps for the Keys in a Range, that the query would not use the time portion of the stored Keys when looking for matches. While I understand the explanation, the need to append the null byte is awkward from an API perspective. I am querying with key range because I don't want all columns to be returned and there is no meaningful column family that can group columns for the data to be processed.
          – codemasterg
          Nov 17 at 13:48












          I agree it is awkward. Internally, we use an API called nextKey or followingKey (don't remember exactly) for such situations, but I'm on my phone now and unable to check whether that is exposed in the public API.
          – Christopher
          Nov 19 at 22:13




          I agree it is awkward. Internally, we use an API called nextKey or followingKey (don't remember exactly) for such situations, but I'm on my phone now and unable to check whether that is exposed in the public API.
          – Christopher
          Nov 19 at 22:13













          0














          The Range is running inclusively here but perhaps there's an issue with the values your adding to it



          This would be easier to diagnose with the output but is there a chance you're expecting a deter time one higher because the array begins at zero so you see a deterTime one less than expected?



          If this is not the case please share your output






          share|improve this answer





















          • Added output. Thanks. I should also add that I am using MiniAccumuloCluster, but I am assuming that shouldn't matter as far as Range is concerned.
            – codemasterg
            Nov 14 at 1:33












          • It looks like the endKey you specified was returned, the 4th entry in the array has a value of DETER3 which has been retrieved
            – A. Timms
            Nov 14 at 2:45










          • Since the range is 1 - 4 inclusive, I would have expected 4 items returned; i.e.: DETER1, DETER2, DETER3, DETER4. The 4th entry is the array is DETER4, the 0th item in the array is DETER0.
            – codemasterg
            Nov 14 at 11:46


















          0














          The Range is running inclusively here but perhaps there's an issue with the values your adding to it



          This would be easier to diagnose with the output but is there a chance you're expecting a deter time one higher because the array begins at zero so you see a deterTime one less than expected?



          If this is not the case please share your output






          share|improve this answer





















          • Added output. Thanks. I should also add that I am using MiniAccumuloCluster, but I am assuming that shouldn't matter as far as Range is concerned.
            – codemasterg
            Nov 14 at 1:33












          • It looks like the endKey you specified was returned, the 4th entry in the array has a value of DETER3 which has been retrieved
            – A. Timms
            Nov 14 at 2:45










          • Since the range is 1 - 4 inclusive, I would have expected 4 items returned; i.e.: DETER1, DETER2, DETER3, DETER4. The 4th entry is the array is DETER4, the 0th item in the array is DETER0.
            – codemasterg
            Nov 14 at 11:46
















          0












          0








          0






          The Range is running inclusively here but perhaps there's an issue with the values your adding to it



          This would be easier to diagnose with the output but is there a chance you're expecting a deter time one higher because the array begins at zero so you see a deterTime one less than expected?



          If this is not the case please share your output






          share|improve this answer












          The Range is running inclusively here but perhaps there's an issue with the values your adding to it



          This would be easier to diagnose with the output but is there a chance you're expecting a deter time one higher because the array begins at zero so you see a deterTime one less than expected?



          If this is not the case please share your output







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 at 1:50









          A. Timms

          764




          764












          • Added output. Thanks. I should also add that I am using MiniAccumuloCluster, but I am assuming that shouldn't matter as far as Range is concerned.
            – codemasterg
            Nov 14 at 1:33












          • It looks like the endKey you specified was returned, the 4th entry in the array has a value of DETER3 which has been retrieved
            – A. Timms
            Nov 14 at 2:45










          • Since the range is 1 - 4 inclusive, I would have expected 4 items returned; i.e.: DETER1, DETER2, DETER3, DETER4. The 4th entry is the array is DETER4, the 0th item in the array is DETER0.
            – codemasterg
            Nov 14 at 11:46




















          • Added output. Thanks. I should also add that I am using MiniAccumuloCluster, but I am assuming that shouldn't matter as far as Range is concerned.
            – codemasterg
            Nov 14 at 1:33












          • It looks like the endKey you specified was returned, the 4th entry in the array has a value of DETER3 which has been retrieved
            – A. Timms
            Nov 14 at 2:45










          • Since the range is 1 - 4 inclusive, I would have expected 4 items returned; i.e.: DETER1, DETER2, DETER3, DETER4. The 4th entry is the array is DETER4, the 0th item in the array is DETER0.
            – codemasterg
            Nov 14 at 11:46


















          Added output. Thanks. I should also add that I am using MiniAccumuloCluster, but I am assuming that shouldn't matter as far as Range is concerned.
          – codemasterg
          Nov 14 at 1:33






          Added output. Thanks. I should also add that I am using MiniAccumuloCluster, but I am assuming that shouldn't matter as far as Range is concerned.
          – codemasterg
          Nov 14 at 1:33














          It looks like the endKey you specified was returned, the 4th entry in the array has a value of DETER3 which has been retrieved
          – A. Timms
          Nov 14 at 2:45




          It looks like the endKey you specified was returned, the 4th entry in the array has a value of DETER3 which has been retrieved
          – A. Timms
          Nov 14 at 2:45












          Since the range is 1 - 4 inclusive, I would have expected 4 items returned; i.e.: DETER1, DETER2, DETER3, DETER4. The 4th entry is the array is DETER4, the 0th item in the array is DETER0.
          – codemasterg
          Nov 14 at 11:46






          Since the range is 1 - 4 inclusive, I would have expected 4 items returned; i.e.: DETER1, DETER2, DETER3, DETER4. The 4th entry is the array is DETER4, the 0th item in the array is DETER0.
          – codemasterg
          Nov 14 at 11:46




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272215%2faccumulo-range-end-key-not-inclusive%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How to pass form data using jquery Ajax to insert data in database?

          National Museum of Racing and Hall of Fame

          Guess what letter conforming each word