Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Datastore/dataset question #690

Closed
abelino opened this issue Jun 25, 2015 · 11 comments
Closed

Datastore/dataset question #690

abelino opened this issue Jun 25, 2015 · 11 comments
Assignees
Labels
api: datastore Issues related to the Datastore API. type: question Request for information or clarification. Not an issue.

Comments

@abelino
Copy link

abelino commented Jun 25, 2015

is there a way to get the count/length of the entities that matched a query without actually receiving the entities data? or can something like that be achieved via BigQuery?

@jgeewax
Copy link
Contributor

jgeewax commented Jun 25, 2015

I think you might do this with a keys-only query. @stephenplusplus , how do we do that in gcloud-node?

@jgeewax jgeewax added type: question Request for information or clarification. Not an issue. api: datastore Issues related to the Datastore API. labels Jun 25, 2015
@abelino
Copy link
Author

abelino commented Jun 25, 2015

looking at GQL I think it would be the following: SELECT __key__ FROM myKind going to look at dataset class right now.

but what if the keys being returned is a ridiculous amount?

@stephenplusplus
Copy link
Contributor

You can run a keys-only query by using select('__key__') when building your query. Here's a start to finish example:

var dataset = gcloud.datastore.dataset();
var personKey = dataset.key(['Person', 'Stephen']);

dataset.save({
  key: personKey,
  data: {
    alias: 'stephenplusplus'
  }
}, function(err) {
  var normalQuery = dataset.createQuery('Person');
  var keysOnlyQuery = normalQuery.select('__key__');

  dataset.runQuery(keysOnlyQuery, function(err, results) {
    // results = [
    //   {
    //     key: {
    //       path: ['Person', 'Stephen']
    //     },
    //
    //     data: {}
    //   }
    // ]
  });

  dataset.runQuery(normalQuery, function(err, results) {
    // results = [
    //   {
    //     key: {
    //       path: ['Person', 'Stephen']
    //     },
    //
    //     data: {
    //       alias: 'stephenplusplus'
    //     }
    //   }
    // ]
  });
});

@abelino
Copy link
Author

abelino commented Jun 25, 2015

will the following construct work:

var query = dataset.createQuery('Person').filter('age >', '20').select('__key__');

dataset.runQuery(query, function(err, results) {
    // results = [
    //   {
    //     key: {
    //       path: ['Person', 'Stephen']
    //     },
    //
    //     data: {}
    //   },
    //   {
    //     key: {
    //       path: ['Person', 'Alice']
    //     },
    //
    //     data: {}
    //   },
    //   {
    //     key: {
    //       path: ['Person', 'Bob']
    //     },
    //
    //     data: {}
    //   }
    // ]
  });

will test later on, and come back if I have any questions. Thanks for the help guys @stephenplusplus @jgeewax

@dhermes
Copy link
Contributor

dhermes commented Jun 25, 2015

This will still return all the keys, which is O(n) in the payload size, when you really just want one integer, which will be O(1).

@jgeewax
Copy link
Contributor

jgeewax commented Jun 25, 2015

Is there a way to ask for COUNT(key)?

@abelino
Copy link
Author

abelino commented Jun 25, 2015

@dhermes Exactly, that is the ideal solution, but not sure if COUNT func is supported by GQL.

@stephenplusplus
Copy link
Contributor

I couldn't find anything in the docs about just getting the resulting length of a query. @pcostell might know if this is possible?

@pcostell
Copy link
Contributor

Nope, Datastore has no way to count. Even in the SDKs which offer a count method, these are all O(n).


Here be dragons and all that:

I would not recommend implementing this, but the "fastest" way to do this would be to run a your query with projection = '__key__' with offset = 1000 and limit = 0. Then keep running this counting the number of skipped_results and using the skipped_cursor to get the next batch.

This way, Datastore doesn't return any results, just the counts. However, you still have to pay for each batch (the key projection makes it only one read per batch though). More importantly, Datastore still has to load all the results, so the time it takes (and the cost) will scale with the size of your count.

@stephenplusplus
Copy link
Contributor

@abelino sorry to skip your earlier question. Your example filtering the same query should work just fine.

And thanks as always, @pcostell!

@jgeewax would it be a good idea to add an example of a keys-only query to the docs?

@jgeewax
Copy link
Contributor

jgeewax commented Jun 29, 2015

Yea, I think mentioning that somewhere (ever so briefly) would be a good idea...

sofisl pushed a commit that referenced this issue Oct 11, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uuid](https://togithub.com/uuidjs/uuid) | [`^8.0.0` -> `^9.0.0`](https://renovatebot.com/diffs/npm/uuid/8.3.2/9.0.0) | [![age](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/compatibility-slim/8.3.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/confidence-slim/8.3.2)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>uuidjs/uuid</summary>

### [`v9.0.0`](https://togithub.com/uuidjs/uuid/blob/HEAD/CHANGELOG.md#&#8203;900-httpsgithubcomuuidjsuuidcomparev832v900-2022-09-05)

[Compare Source](https://togithub.com/uuidjs/uuid/compare/v8.3.2...v9.0.0)

##### ⚠ BREAKING CHANGES

-   Drop Node.js 10.x support. This library always aims at supporting one EOLed LTS release which by this time now is 12.x which has reached EOL 30 Apr 2022.

-   Remove the minified UMD build from the package.

    Minified code is hard to audit and since this is a widely used library it seems more appropriate nowadays to optimize for auditability than to ship a legacy module format that, at best, serves educational purposes nowadays.

    For production browser use cases, users should be using a bundler. For educational purposes, today's online sandboxes like replit.com offer convenient ways to load npm modules, so the use case for UMD through repos like UNPKG or jsDelivr has largely vanished.

-   Drop IE 11 and Safari 10 support. Drop support for browsers that don't correctly implement const/let and default arguments, and no longer transpile the browser build to ES2015.

    This also removes the fallback on msCrypto instead of the crypto API.

    Browser tests are run in the first supported version of each supported browser and in the latest (as of this commit) version available on Browserstack.

##### Features

-   optimize uuid.v1 by 1.3x uuid.v4 by 4.3x (430%) ([#&#8203;597](https://togithub.com/uuidjs/uuid/issues/597)) ([3a033f6](https://togithub.com/uuidjs/uuid/commit/3a033f6bab6bb3780ece6d645b902548043280bc))
-   remove UMD build ([#&#8203;645](https://togithub.com/uuidjs/uuid/issues/645)) ([e948a0f](https://togithub.com/uuidjs/uuid/commit/e948a0f22bf22f4619b27bd913885e478e20fe6f)), closes [#&#8203;620](https://togithub.com/uuidjs/uuid/issues/620)
-   use native crypto.randomUUID when available ([#&#8203;600](https://togithub.com/uuidjs/uuid/issues/600)) ([c9e076c](https://togithub.com/uuidjs/uuid/commit/c9e076c852edad7e9a06baaa1d148cf4eda6c6c4))

##### Bug Fixes

-   add Jest/jsdom compatibility ([#&#8203;642](https://togithub.com/uuidjs/uuid/issues/642)) ([16f9c46](https://togithub.com/uuidjs/uuid/commit/16f9c469edf46f0786164cdf4dc980743984a6fd))
-   change default export to named function ([#&#8203;545](https://togithub.com/uuidjs/uuid/issues/545)) ([c57bc5a](https://togithub.com/uuidjs/uuid/commit/c57bc5a9a0653273aa639cda9177ce52efabe42a))
-   handle error when parameter is not set in v3 and v5 ([#&#8203;622](https://togithub.com/uuidjs/uuid/issues/622)) ([fcd7388](https://togithub.com/uuidjs/uuid/commit/fcd73881692d9fabb63872576ba28e30ff852091))
-   run npm audit fix ([#&#8203;644](https://togithub.com/uuidjs/uuid/issues/644)) ([04686f5](https://togithub.com/uuidjs/uuid/commit/04686f54c5fed2cfffc1b619f4970c4bb8532353))
-   upgrading from uuid3 broken link ([#&#8203;568](https://togithub.com/uuidjs/uuid/issues/568)) ([1c849da](https://togithub.com/uuidjs/uuid/commit/1c849da6e164259e72e18636726345b13a7eddd6))

##### build

-   drop Node.js 8.x from babel transpile target ([#&#8203;603](https://togithub.com/uuidjs/uuid/issues/603)) ([aa11485](https://togithub.com/uuidjs/uuid/commit/aa114858260402107ec8a1e1a825dea0a259bcb5))

-   drop support for legacy browsers (IE11, Safari 10) ([#&#8203;604](https://togithub.com/uuidjs/uuid/issues/604)) ([0f433e5](https://togithub.com/uuidjs/uuid/commit/0f433e5ec444edacd53016de67db021102f36148))

-   drop node 10.x to upgrade dev dependencies ([#&#8203;653](https://togithub.com/uuidjs/uuid/issues/653)) ([28a5712](https://togithub.com/uuidjs/uuid/commit/28a571283f8abda6b9d85e689f95b7d3ee9e282e)), closes [#&#8203;643](https://togithub.com/uuidjs/uuid/issues/643)

##### [8.3.2](https://togithub.com/uuidjs/uuid/compare/v8.3.1...v8.3.2) (2020-12-08)

##### Bug Fixes

-   lazy load getRandomValues ([#&#8203;537](https://togithub.com/uuidjs/uuid/issues/537)) ([16c8f6d](https://togithub.com/uuidjs/uuid/commit/16c8f6df2f6b09b4d6235602d6a591188320a82e)), closes [#&#8203;536](https://togithub.com/uuidjs/uuid/issues/536)

##### [8.3.1](https://togithub.com/uuidjs/uuid/compare/v8.3.0...v8.3.1) (2020-10-04)

##### Bug Fixes

-   support expo>=39.0.0 ([#&#8203;515](https://togithub.com/uuidjs/uuid/issues/515)) ([c65a0f3](https://togithub.com/uuidjs/uuid/commit/c65a0f3fa73b901959d638d1e3591dfacdbed867)), closes [#&#8203;375](https://togithub.com/uuidjs/uuid/issues/375)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 9am and before 3pm" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/nodejs-language).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xOTEuMCIsInVwZGF0ZWRJblZlciI6IjMyLjE5MS4wIn0=-->
sofisl pushed a commit that referenced this issue Oct 13, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uuid](https://togithub.com/uuidjs/uuid) | [`^8.0.0` -> `^9.0.0`](https://renovatebot.com/diffs/npm/uuid/8.3.2/9.0.0) | [![age](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/compatibility-slim/8.3.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/confidence-slim/8.3.2)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>uuidjs/uuid</summary>

### [`v9.0.0`](https://togithub.com/uuidjs/uuid/blob/HEAD/CHANGELOG.md#&#8203;900-httpsgithubcomuuidjsuuidcomparev832v900-2022-09-05)

[Compare Source](https://togithub.com/uuidjs/uuid/compare/v8.3.2...v9.0.0)

##### ⚠ BREAKING CHANGES

-   Drop Node.js 10.x support. This library always aims at supporting one EOLed LTS release which by this time now is 12.x which has reached EOL 30 Apr 2022.

-   Remove the minified UMD build from the package.

    Minified code is hard to audit and since this is a widely used library it seems more appropriate nowadays to optimize for auditability than to ship a legacy module format that, at best, serves educational purposes nowadays.

    For production browser use cases, users should be using a bundler. For educational purposes, today's online sandboxes like replit.com offer convenient ways to load npm modules, so the use case for UMD through repos like UNPKG or jsDelivr has largely vanished.

-   Drop IE 11 and Safari 10 support. Drop support for browsers that don't correctly implement const/let and default arguments, and no longer transpile the browser build to ES2015.

    This also removes the fallback on msCrypto instead of the crypto API.

    Browser tests are run in the first supported version of each supported browser and in the latest (as of this commit) version available on Browserstack.

##### Features

-   optimize uuid.v1 by 1.3x uuid.v4 by 4.3x (430%) ([#&#8203;597](https://togithub.com/uuidjs/uuid/issues/597)) ([3a033f6](https://togithub.com/uuidjs/uuid/commit/3a033f6bab6bb3780ece6d645b902548043280bc))
-   remove UMD build ([#&#8203;645](https://togithub.com/uuidjs/uuid/issues/645)) ([e948a0f](https://togithub.com/uuidjs/uuid/commit/e948a0f22bf22f4619b27bd913885e478e20fe6f)), closes [#&#8203;620](https://togithub.com/uuidjs/uuid/issues/620)
-   use native crypto.randomUUID when available ([#&#8203;600](https://togithub.com/uuidjs/uuid/issues/600)) ([c9e076c](https://togithub.com/uuidjs/uuid/commit/c9e076c852edad7e9a06baaa1d148cf4eda6c6c4))

##### Bug Fixes

-   add Jest/jsdom compatibility ([#&#8203;642](https://togithub.com/uuidjs/uuid/issues/642)) ([16f9c46](https://togithub.com/uuidjs/uuid/commit/16f9c469edf46f0786164cdf4dc980743984a6fd))
-   change default export to named function ([#&#8203;545](https://togithub.com/uuidjs/uuid/issues/545)) ([c57bc5a](https://togithub.com/uuidjs/uuid/commit/c57bc5a9a0653273aa639cda9177ce52efabe42a))
-   handle error when parameter is not set in v3 and v5 ([#&#8203;622](https://togithub.com/uuidjs/uuid/issues/622)) ([fcd7388](https://togithub.com/uuidjs/uuid/commit/fcd73881692d9fabb63872576ba28e30ff852091))
-   run npm audit fix ([#&#8203;644](https://togithub.com/uuidjs/uuid/issues/644)) ([04686f5](https://togithub.com/uuidjs/uuid/commit/04686f54c5fed2cfffc1b619f4970c4bb8532353))
-   upgrading from uuid3 broken link ([#&#8203;568](https://togithub.com/uuidjs/uuid/issues/568)) ([1c849da](https://togithub.com/uuidjs/uuid/commit/1c849da6e164259e72e18636726345b13a7eddd6))

##### build

-   drop Node.js 8.x from babel transpile target ([#&#8203;603](https://togithub.com/uuidjs/uuid/issues/603)) ([aa11485](https://togithub.com/uuidjs/uuid/commit/aa114858260402107ec8a1e1a825dea0a259bcb5))

-   drop support for legacy browsers (IE11, Safari 10) ([#&#8203;604](https://togithub.com/uuidjs/uuid/issues/604)) ([0f433e5](https://togithub.com/uuidjs/uuid/commit/0f433e5ec444edacd53016de67db021102f36148))

-   drop node 10.x to upgrade dev dependencies ([#&#8203;653](https://togithub.com/uuidjs/uuid/issues/653)) ([28a5712](https://togithub.com/uuidjs/uuid/commit/28a571283f8abda6b9d85e689f95b7d3ee9e282e)), closes [#&#8203;643](https://togithub.com/uuidjs/uuid/issues/643)

##### [8.3.2](https://togithub.com/uuidjs/uuid/compare/v8.3.1...v8.3.2) (2020-12-08)

##### Bug Fixes

-   lazy load getRandomValues ([#&#8203;537](https://togithub.com/uuidjs/uuid/issues/537)) ([16c8f6d](https://togithub.com/uuidjs/uuid/commit/16c8f6df2f6b09b4d6235602d6a591188320a82e)), closes [#&#8203;536](https://togithub.com/uuidjs/uuid/issues/536)

##### [8.3.1](https://togithub.com/uuidjs/uuid/compare/v8.3.0...v8.3.1) (2020-10-04)

##### Bug Fixes

-   support expo>=39.0.0 ([#&#8203;515](https://togithub.com/uuidjs/uuid/issues/515)) ([c65a0f3](https://togithub.com/uuidjs/uuid/commit/c65a0f3fa73b901959d638d1e3591dfacdbed867)), closes [#&#8203;375](https://togithub.com/uuidjs/uuid/issues/375)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 9am and before 3pm" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/nodejs-language).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xOTEuMCIsInVwZGF0ZWRJblZlciI6IjMyLjE5MS4wIn0=-->
sofisl pushed a commit that referenced this issue Nov 11, 2022
This PR was generated using Autosynth. 🌈

Synth log will be available here:
https://source.cloud.google.com/results/invocations/77002d48-428b-47fd-88e3-8db2c0feba03/targets

- [ ] To automatically regenerate this PR, check this box.

PiperOrigin-RevId: 336344634
Source-Link: googleapis/googleapis@fd31b16
sofisl pushed a commit that referenced this issue Nov 17, 2022
sofisl pushed a commit that referenced this issue Jan 24, 2023
sofisl pushed a commit that referenced this issue Jan 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api: datastore Issues related to the Datastore API. type: question Request for information or clarification. Not an issue.
Projects
None yet
Development

No branches or pull requests

5 participants