Commit 6bc91c2
feat: BigTable online store (feast-dev#3140)
* Initial implementation of BigTable online store.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Attempt to run bigtable integration tests.
Currently focusing on just getting the tests running locally. I've only
build python3.8 requirements.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Got the BigTable tests running in local containers
Signed-off-by: Abhin Chhabra <chhabra.abhin@gmail.com>
* Set serialization version when computing entity ID
Signed-off-by: Abhin Chhabra <chhabra.abhin@gmail.com>
* Switch to the recommended layout in bigtable.
This was recommended by the BigTable dev team. Details of this layout
will be added to the documentation in a future commit.
Signed-off-by: Abhin Chhabra <chhabra.abhin@gmail.com>
* Minor bugfixes.
- If a row is empty when fetching data, don't process it more.
- If a task in the threadpool fails, bubble up that failure.
- If a `created_ts` is not available, use an empty string. `None` does
not automatically serialize to bytes.
Signed-off-by: Abhin Chhabra <chhabra.abhin@gmail.com>
* Move BigTable online store out of contrib
As per feedback on the PR.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Attempt to run integration tests in CI.
Provide the GCP project and the bigtable instance ID for the tests to
connect to.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Delete tables for entity-less feature views.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Table names should be smaller than 50 characters
This is BigTable's table length limit and it's causing test failures.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Optimize bigtable reads.
- Fetch all the rows in one bigtable fetch.
- Get only the columns that are necessary (using a column regex filter).
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* dynamodb: switch to `mock_dynamodb`
The latest rebuilding of requirements has upgraded the `moto` library
past the `4.0.0` release, which has a couple of breaking changes.
Specifically, the `mock_dynamodb2` decorator has been deprecated. See
https://github.com/spulec/moto/blob/master/CHANGELOG.md#400 for more
details.
The actual PR (getmoto/moto#4919) mentions that
it's because the `mock_dynamodb` decorator is now equivalent to the
`mock_dynamodb2` decorator.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* minor: rename `BigTable` to `Bigtable`
This matches the GCP docs.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Wrote some Bigtable documentation.
Closely mirrors the docs for the other online stores.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Bugfix: Deal with missing row keys.
It looks like the bigtable client will just skip over non-existent row
keys.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Fix linting issues.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Generate requirements files.
- As of version `1.49`, the various python packages in the [grpc
repo](https://github.com/grpc/grpc/tree/master/src/python) require
`protobuf>=4.21.3`. Unfortunately, this is incompatible with all
versions of `tensorflow-metadata` (see [this
issue](tensorflow/metadata#37)). And since
`piptools` doesn't backtrack during dependency resolution, the
requirement files cannot be regenerated without adding an upper limit
on these grpc libraries directly in `setup.py`.
- The previous attempt to upgrade usages of the `mock_dynamodb2`
decorator to the newest version failed. Since I'm not an expert in
dynamodb, it made sense to just cap the test tool to the version
already being used in CI.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Don't bother materializing created timestamp.
Had a discussion with Danny about whether it's useful to copy this
column. He agreed that there's no value to storing this in the online
store.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Remove `tensorflow-metadata`.
Turns out that this dependency is not required. We removed all
references to it in [this
PR](feast-dev#2063), but did not remove it
from `setup.py`. Removing it has caused many of the restrictions imposed
in previous commits to be unnecessary.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* Minor fix to Bigtable documentation.
Feedback from Danny mentioned that Bigtable should be able to store
multiple versions of the same key and fetch the latest at read time.
This makes sense and means that concurrent writes should work just fine.
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
* update roadmap docs
Signed-off-by: Danny Chiao <danny@tecton.ai>
* Fix roadmap doc
Signed-off-by: Danny Chiao <danny@tecton.ai>
* Change link to point to roadmap page
Signed-off-by: Danny Chiao <danny@tecton.ai>
* change order in roadmap
Signed-off-by: Danny Chiao <danny@tecton.ai>
Signed-off-by: Abhin Chhabra <abhin.chhabra@shopify.com>
Signed-off-by: Abhin Chhabra <chhabra.abhin@gmail.com>
Signed-off-by: Danny Chiao <danny@tecton.ai>
Co-authored-by: Danny Chiao <danny@tecton.ai>1 parent b9b9c54 commit 6bc91c2
File tree
19 files changed
+900
-407
lines changed- docs
- getting-started
- reference/online-stores
- specs
- sdk/python
- feast
- infra/online_stores
- templates/gcp/feature_repo
- requirements
- tests/integration/feature_repos
- universal/online_store
19 files changed
+900
-407
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
173 | 173 | | |
174 | 174 | | |
175 | 175 | | |
| 176 | + | |
176 | 177 | | |
177 | 178 | | |
178 | 179 | | |
| 180 | + | |
179 | 181 | | |
180 | | - | |
181 | | - | |
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
| 95 | + | |
95 | 96 | | |
96 | 97 | | |
97 | 98 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
29 | 33 | | |
30 | 34 | | |
31 | 35 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| 38 | + | |
37 | 39 | | |
38 | | - | |
39 | | - | |
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
95 | 118 | | |
96 | 119 | | |
97 | 120 | | |
| |||
250 | 273 | | |
251 | 274 | | |
252 | 275 | | |
253 | | - | |
| 276 | + | |
0 commit comments