René's URL Explorer Experiment


Title: Substrait-based on demand feature views · Issue #3945 · feast-dev/feast · GitHub

Open Graph Title: Substrait-based on demand feature views · Issue #3945 · feast-dev/feast

X Title: Substrait-based on demand feature views · Issue #3945 · feast-dev/feast

Description: Is your feature request related to a problem? Please describe. On demand feature views as implemented right now are very limited. The only way to specify odfvs is through a python function that takes in pandas Dataframe as input and outp...

Open Graph Description: Is your feature request related to a problem? Please describe. On demand feature views as implemented right now are very limited. The only way to specify odfvs is through a python function that tak...

X Description: Is your feature request related to a problem? Please describe. On demand feature views as implemented right now are very limited. The only way to specify odfvs is through a python function that tak...

Opengraph URL: https://github.com/feast-dev/feast/issues/3945

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Substrait-based on demand feature views","articleBody":"**Is your feature request related to a problem? Please describe.**\r\nOn demand feature views as implemented right now are very limited. The only way to specify odfvs is through a python function that takes in pandas Dataframe as input and outputs another pandas Dataframe. This leads to problems for both offline and online interfaces:\r\n\r\n- Even the most scalable offline stores are forced to collect the whole dataset as a single pandas Dataframe to apply odfv function. There's no way for offline stores to incorporate computation in their engines.\r\n- udfs in odfvs are inherently bound to pandas and python runtime. Non-python feature servers are stuck with the problem of figuring out how to run this functions if necessary. Java feature server for example has a separate python transformation service only for this reason, but that's obviously a subpar solution as the whole point of a java feature server was to avoid python runtime in feature serving in the first place.\r\n\r\n**Describe the solution you'd like**\r\nAllow constructing odfvs as substrait plans. [Substrait](https://substrait.io/) is a protobuf-based serialization format for relational algebra operations. It is meant to be used as a cross-language and cross-engine format for sharing logical or physical execution plans. It has a number of producers (tools that can generate substrait) and consumers (engines that can run substrait) in different languages.\r\n\r\n- Different offline stores will be able to inspect and incorporate substrait plans in their transformations. Even if that's impossible the default implementation inside feast to apply these functions will avoid pandas.\r\n- Most importantly, non-python feature servers like a java feature server will be able to apply the functions without a separate python component. Apache Arrow java implementation comes with java bindings to Acero query engine that can consume substrait plans. (https://arrow.apache.org/docs/java/substrait.html#executing-queries-using-substrait-plans)\r\n\r\nThe example code in my PoC implementation looks something like this:\r\n\r\n```\r\ndef generate_substrait():\r\n    import ibis\r\n    from ibis_substrait.compiler.core import SubstraitCompiler\r\n\r\n    compiler = SubstraitCompiler()\r\n\r\n    t = ibis.table([(\"conv_rate\", \"float\"), (\"acc_rate\", \"float\")], \"t\")\r\n\r\n    expr = t.select((t['conv_rate'] + t['acc_rate']).name('conv_rate_plus_acc_substrait'))\r\n\r\n    return compiler.compile(expr).SerializeToString()\r\n\r\nsubstrait_odfv = OnDemandFeatureView(\r\n    name='substrait_view',\r\n    sources=[driver_stats_fv],\r\n    schema=[\r\n        Field(name=\"conv_rate_plus_acc_substrait\", dtype=Float64)\r\n    ],\r\n    substrait_plan=generate_substrait()\r\n)\r\n```\r\nSubstait plan object that feast accepts is `bytes` and introduces no external dependency. I'm using `ibis` and `ibis-substrait` to generate the plan. Right now that's the most practical way to generate substrait plan in python with DataFrame-like API, but this could have been any other substrait producer.\r\n\r\n**Describe alternatives you've considered**\r\nAn obvious alternative to substrait is sql-based odfvs, but using SQL has a number of important downsides:\r\n\r\n1. The presence of different sql dialects means that, it will be especially hard to ensure that sql-based feature functions will behave the same way across different offline store and online store implementations.\r\n2. The user is implicitly bound to their offline store and online store of choice, because the dialect used in sql strings has to match offline store engine.\r\n\r\nHaving said that, it probably makes sense to support both substrait-based and sql-based odfvs, because at the moment it might be easier for sql-based logic to be incorporated inside offline store engines.","author":{"url":"https://github.com/tokoko","@type":"Person","name":"tokoko"},"datePublished":"2024-02-11T10:39:31.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/3945/feast/issues/3945"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:0eb88741-ab00-bc30-7648-437de3998e5d
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idD0E8:1F57E3:2B69CAB:39EF42D:6971CE2A
html-safe-noncece0bf6c2a4e222a01c122a8561a6754cad66d36ba5bda0ba69e9ed37a338fa55
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMEU4OjFGNTdFMzoyQjY5Q0FCOjM5RUY0MkQ6Njk3MUNFMkEiLCJ2aXNpdG9yX2lkIjoiODYyMzE5ODczNzUxOTQ2Mzk3OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmacb6bde89a0a703e4cb8596b9134846c79a173ee3836d39e6ca28dbbaa56a1a0e1
hovercard-subject-tagissue:2128933943
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/feast-dev/feast/3945/issue_layout
twitter:imagehttps://opengraph.githubassets.com/03f30e3dc692a7fce058dad01dfda4b51738bf8b8f463918c0414c2f7ef3eb4d/feast-dev/feast/issues/3945
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/03f30e3dc692a7fce058dad01dfda4b51738bf8b8f463918c0414c2f7ef3eb4d/feast-dev/feast/issues/3945
og:image:altIs your feature request related to a problem? Please describe. On demand feature views as implemented right now are very limited. The only way to specify odfvs is through a python function that tak...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernametokoko
hostnamegithub.com
expected-hostnamegithub.com
None7476eb4140129667a7530d10cfb7688f701883e35a4dcaa4673e3ec599af5199
turbo-cache-controlno-preview
go-importgithub.com/feast-dev/feast git https://github.com/feast-dev/feast.git
octolytics-dimension-user_id57027613
octolytics-dimension-user_loginfeast-dev
octolytics-dimension-repository_id161133770
octolytics-dimension-repository_nwofeast-dev/feast
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id161133770
octolytics-dimension-repository_network_root_nwofeast-dev/feast
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release2cc0827c872b538cd08371730242ae4951d2d61a
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/feast-dev/feast/issues/3945#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Ffeast-dev%2Ffeast%2Fissues%2F3945
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Ffeast-dev%2Ffeast%2Fissues%2F3945
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=feast-dev%2Ffeast
Reloadhttps://github.com/feast-dev/feast/issues/3945
Reloadhttps://github.com/feast-dev/feast/issues/3945
Reloadhttps://github.com/feast-dev/feast/issues/3945
feast-dev https://github.com/feast-dev
feasthttps://github.com/feast-dev/feast
Notifications https://github.com/login?return_to=%2Ffeast-dev%2Ffeast
Fork 1.2k https://github.com/login?return_to=%2Ffeast-dev%2Ffeast
Star 6.6k https://github.com/login?return_to=%2Ffeast-dev%2Ffeast
Code https://github.com/feast-dev/feast
Issues 179 https://github.com/feast-dev/feast/issues
Pull requests 62 https://github.com/feast-dev/feast/pulls
Discussions https://github.com/feast-dev/feast/discussions
Actions https://github.com/feast-dev/feast/actions
Security Uh oh! There was an error while loading. Please reload this page. https://github.com/feast-dev/feast/security
Please reload this pagehttps://github.com/feast-dev/feast/issues/3945
Insights https://github.com/feast-dev/feast/pulse
Code https://github.com/feast-dev/feast
Issues https://github.com/feast-dev/feast/issues
Pull requests https://github.com/feast-dev/feast/pulls
Discussions https://github.com/feast-dev/feast/discussions
Actions https://github.com/feast-dev/feast/actions
Security https://github.com/feast-dev/feast/security
Insights https://github.com/feast-dev/feast/pulse
New issuehttps://github.com/login?return_to=https://github.com/feast-dev/feast/issues/3945
New issuehttps://github.com/login?return_to=https://github.com/feast-dev/feast/issues/3945
#3969https://github.com/feast-dev/feast/pull/3969
Substrait-based on demand feature viewshttps://github.com/feast-dev/feast/issues/3945#top
#3969https://github.com/feast-dev/feast/pull/3969
kind/featureNew feature or requesthttps://github.com/feast-dev/feast/issues?q=state%3Aopen%20label%3A%22kind%2Ffeature%22
https://github.com/tokoko
https://github.com/tokoko
tokokohttps://github.com/tokoko
on Feb 11, 2024https://github.com/feast-dev/feast/issues/3945#issue-2128933943
Substraithttps://substrait.io/
https://arrow.apache.org/docs/java/substrait.html#executing-queries-using-substrait-planshttps://arrow.apache.org/docs/java/substrait.html#executing-queries-using-substrait-plans
kind/featureNew feature or requesthttps://github.com/feast-dev/feast/issues?q=state%3Aopen%20label%3A%22kind%2Ffeature%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.