GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Write feature API on Serving service · Issue #1461 · feast-dev/feast

Write feature API on Serving service #1461

New issue
Copy link
New issue
Copy link
Closed
Closed
Write feature API on Serving service#1461
Copy link
Labels
wontfixThis will not be worked onThis will not be worked on

Description

@RoyTal28
RoyTal28
opened on Apr 13, 2021
Issue body actions

Hey guys :),
According to the initial discussion that my colleague created.
I want to elaborate more about the write features API and share the proto file for initial feedback.

We think that the API should basically push feature rows for specific feature tables and projects to the online store in a similar way the ingestion logic works (RedisSinkRelation.scala).

The suggested change to the serving proto file is as follows:

image

Details explanation:
The PushOnlineFeatureRequest contains a definition of the feature table and the project.
And a key-value map containing the values of each row.

**We assume that the feature table and the project (if empty we use default) already exist and validate it.

The PushOnlineFeatureResponse contains a list of RowStatus that represent the pushing status of each row.

I would love to have your feedback so we can move forward and prepare a pull request soon.

Thanks!

Reacted by Alex Araujo, Willem Pienaar and Rami Mankevich
Reacted by Willem Pienaar

Activity

  1. woop commented on Apr 13, 2021

    @woop
    woop
    on Apr 13, 2021
    Member
    More actions

    Hi @RoyTal28,

    Thanks for the proposal!

    One question that immediately comes to mind: Are users able to push a subset of feature values for a feature table? Feast currently requires that all features in a feature table be provided during ingestion, but we could in the future make it possible to provide a subset. We'd probably need to read the existing row, mutate it, and then write it back.

    Thanks again :)

  2. RoyTal28 commented on Apr 13, 2021

    @RoyTal28
    RoyTal28
    on Apr 13, 2021
    Author
    More actions

    Hey @woop,
    In my current implementation, the user can push several features and not all the defined features.
    Should I enforce that all the defined features on the feature table are part of each row on my input?

    I am not sure I understand why we would need to read->mutate->write again the row? can u explain?

  3. woop commented on Apr 13, 2021

    @woop
    woop
    on Apr 13, 2021
    Member
    More actions

    Hey @woop,
    In my current implementation, the user can push several features and not all the defined features.
    Should I enforce that all the defined features on the feature table are part of each row on my input?

    I am not sure I understand why we would need to read->mutate->write again the row? can u explain?

    It depends on the way features are being stored. Some storage implementations will store the whole feature row as a single value. Meaning you can only update it by reading it first, otherwise some feature values may be lost if the user doesn't provide the complete row.

    Perhaps for a first cut we can just say that the full feature row should be provided, but add support for partial updates in the future?

  4. RoyTal28 commented on Apr 14, 2021

    @RoyTal28
    RoyTal28
    on Apr 14, 2021
    Author
    More actions

    Hey @woop,
    In my current implementation, the user can push several features and not all the defined features.
    Should I enforce that all the defined features on the feature table are part of each row on my input?
    I am not sure I understand why we would need to read->mutate->write again the row? can u explain?

    It depends on the way features are being stored. Some storage implementations will store the whole feature row as a single value. Meaning you can only update it by reading it first, otherwise some feature values may be lost if the user doesn't provide the complete row.

    Perhaps for a first cut we can just say that the full feature row should be provided, but add support for partial updates in the future?

    OK, that sounds good.
    Regarding the proto file - Can I proceed with my suggestion?

  5. rmankevich commented on Apr 14, 2021

    @rmankevich
    rmankevich
    on Apr 14, 2021
    More actions

    Hi @RoyTal28,

    Thanks for the proposal!

    One question that immediately comes to mind: Are users able to push a subset of feature values for a feature table? Feast currently requires that all features in a feature table be provided during ingestion, but we could in the future make it possible to provide a subset. We'd probably need to read the existing row, mutate it, and then write it back.

    Thanks again :)

    Hi,
    I just want to clarify current behaviour. I could see in existing code:
    feast/ingestion/validation/RowValidator.scala
    def allChecks: Column =
    allEntitiesPresent && atLeastOneFeatureNotNull && timestampPresent
    Do you mean that null is also a value or there is also another place to guarantee all features are provided?

  6. woop commented on Apr 15, 2021

    @woop
    woop
    on Apr 15, 2021
    Member
    More actions

    Hey @woop,
    In my current implementation, the user can push several features and not all the defined features.
    Should I enforce that all the defined features on the feature table are part of each row on my input?
    I am not sure I understand why we would need to read->mutate->write again the row? can u explain?

    It depends on the way features are being stored. Some storage implementations will store the whole feature row as a single value. Meaning you can only update it by reading it first, otherwise some feature values may be lost if the user doesn't provide the complete row.
    Perhaps for a first cut we can just say that the full feature row should be provided, but add support for partial updates in the future?

    OK, that sounds good.
    Regarding the proto file - Can I proceed with my suggestion?

    I think it's necessary to share this proposal more widely. Many folks have asked for a write/push API, so I'd like to make sure that people agree on the design. I think it would be better to create a Google document like one of these and share it to [email protected]. It doesn't have to be very long, but it should just allow people to easily comment on the proposed API and understand the functionality that will be introduced.

    Overall the design looks good to me, I just want to be sure we're not missing anything. We'd also be happy with sharing it on the mailing list if you don't have time, but we're occupied with a conference (applyconf.com) over the next week.

  7. woop commented on Apr 15, 2021

    @woop
    woop
    on Apr 15, 2021
    Member
    More actions

    Hi @RoyTal28,
    Thanks for the proposal!
    One question that immediately comes to mind: Are users able to push a subset of feature values for a feature table? Feast currently requires that all features in a feature table be provided during ingestion, but we could in the future make it possible to provide a subset. We'd probably need to read the existing row, mutate it, and then write it back.
    Thanks again :)

    Hi,
    I just want to clarify current behaviour. I could see in existing code:
    feast/ingestion/validation/RowValidator.scala
    def allChecks: Column =
    allEntitiesPresent && atLeastOneFeatureNotNull && timestampPresent
    Do you mean that null is also a value or there is also another place to guarantee all features are provided?

    I believe the current guarantees are simply that nulls will overwrite what exists in the store. So if you don't provide all features then you will reset existing values. EDIT: @pyalex has confirmed that the current Spark ingestion does allow for partial updates, but we haven't communicated this to end users.

  8. RoyTal28 commented on Apr 21, 2021

    @RoyTal28
    RoyTal28
    on Apr 21, 2021
    Author
    More actions

    Hey @woop ,
    I have created a design document that describes the proto changes and a component diagram.
    I have shared it with [email protected] and I hope to get feedback soon.
    Thanks!

  9. woop commented on Apr 27, 2021

    @woop
    woop
    on Apr 27, 2021
    Member
    More actions

    The document has been in circulation now for a few days. If no objection by the end of the week then we can go ahead.

  10. woop commented on May 12, 2021

    @woop
    woop
    on May 12, 2021
    Member
    More actions

    @RoyTal28 @rmankevich @qiuleiSFDC we've left comments in the document. I think we're close to getting this pushed over the line. Would you mind having a look?

  11. RoyTal28 commented on Aug 12, 2021

    @RoyTal28
    RoyTal28
    on Aug 12, 2021
    Author
    More actions

    @woop sorry for the big delay.
    Our team couldn't find the resources to continue the Push API contribution work.
    Now we are starting a new version in which we are planning to contribute features push API and delete API.
    A pull request of the push will be created in a few days by my college.

  12. woop commented on Aug 17, 2021

    @woop
    woop
    on Aug 17, 2021
    Member
    More actions

    Thanks @RoyTal28

  13. stale commented on Dec 15, 2021

    @stale
    staleBot
    on Dec 15, 2021
    More actions

    This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

  14. stale
    added
    wontfixThis will not be worked onThis will not be worked on
    on Dec 15, 2021
  15. stale
    closed this as completedon Dec 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    wontfixThis will not be worked onThis will not be worked on

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402503 — GeezerVison does not store the pages you look up.
      Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.