-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
21 lines (18 loc) · 29.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Substrait is a new specification and set of tools that allow different systems to express clear data manipulation operations."><link href=https://substrait.io/ rel=canonical><link href=spec/versioning/ rel=next><link rel=icon href=assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.44"><title>Home - Substrait: Cross-Language Serialization for Relational Algebra</title><link rel=stylesheet href=assets/stylesheets/main.0253249f.min.css><link rel=stylesheet href=assets/stylesheets/palette.06af60db.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=stylesheets/extra.css><script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><script id=__analytics>function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-57ZX8S93Q5"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-57ZX8S93Q5",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-57ZX8S93Q5",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script><script>"undefined"!=typeof __md_analytics&&__md_analytics()</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=pink data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#substrait-cross-language-serialization-for-relational-algebra class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=. title="Substrait: Cross-Language Serialization for Relational Algebra" class="md-header__button md-logo" aria-label="Substrait: Cross-Language Serialization for Relational Algebra" data-md-component=logo> <img src=img/logo.svg alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> Substrait: Cross-Language Serialization for Relational Algebra </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Home </span> </div> </div> </div> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/substrait-io/substrait title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class=md-source__repository> GitHub </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class="md-tabs__item md-tabs__item--active"> <a href=. class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=spec/versioning/ class=md-tabs__link> Spec </a> </li> <li class=md-tabs__item> <a href=types/type_system/ class=md-tabs__link> Types </a> </li> <li class=md-tabs__item> <a href=expressions/field_references/ class=md-tabs__link> Expressions </a> </li> <li class=md-tabs__item> <a href=relations/basics/ class=md-tabs__link> Relations </a> </li> <li class=md-tabs__item> <a href=serialization/basics/ class=md-tabs__link> Serialization </a> </li> <li class=md-tabs__item> <a href=extensions/ class=md-tabs__link> Extensions </a> </li> <li class=md-tabs__item> <a href=community/ class=md-tabs__link> Community </a> </li> <li class=md-tabs__item> <a href=governance/ class=md-tabs__link> Governance </a> </li> <li class=md-tabs__item> <a href=about/ class=md-tabs__link> About Substrait </a> </li> <li class=md-tabs__item> <a href=tools/producer_tools/ class=md-tabs__link> Tools </a> </li> <li class=md-tabs__item> <a href=tutorial/sql_to_substrait/ class=md-tabs__link> Tutorial </a> </li> <li class=md-tabs__item> <a href=faq/ class=md-tabs__link> FAQ </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=. title="Substrait: Cross-Language Serialization for Relational Algebra" class="md-nav__button md-logo" aria-label="Substrait: Cross-Language Serialization for Relational Algebra" data-md-component=logo> <img src=img/logo.svg alt=logo> </a> Substrait: Cross-Language Serialization for Relational Algebra </label> <div class=md-nav__source> <a href=https://github.com/substrait-io/substrait title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class=md-source__repository> GitHub </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Home </span> <span class="md-nav__icon md-icon"></span> </label> <a href=. class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Home </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-is-substrait class=md-nav__link> <span class=md-ellipsis> What is Substrait? </span> </a> </li> <li class=md-nav__item> <a href=#how-does-it-work class=md-nav__link> <span class=md-ellipsis> How does it work? </span> </a> </li> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> <li class=md-nav__item> <a href=#example-use-cases class=md-nav__link> <span class=md-ellipsis> Example Use Cases </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2> <label class=md-nav__link for=__nav_2 id=__nav_2_label tabindex=0> <span class=md-ellipsis> Spec </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Spec </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=spec/versioning/ class=md-nav__link> <span class=md-ellipsis> Versioning </span> </a> </li> <li class=md-nav__item> <a href=spec/specification/ class=md-nav__link> <span class=md-ellipsis> Specification </span> </a> </li> <li class=md-nav__item> <a href=spec/technology_principles/ class=md-nav__link> <span class=md-ellipsis> Technology Principles </span> </a> </li> <li class=md-nav__item> <a href=spec/extending/ class=md-nav__link> <span class=md-ellipsis> Extending </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex=0> <span class=md-ellipsis> Types </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Types </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=types/type_system/ class=md-nav__link> <span class=md-ellipsis> Type System </span> </a> </li> <li class=md-nav__item> <a href=types/type_classes/ class=md-nav__link> <span class=md-ellipsis> Type Classes </span> </a> </li> <li class=md-nav__item> <a href=types/type_variations/ class=md-nav__link> <span class=md-ellipsis> Type Variations </span> </a> </li> <li class=md-nav__item> <a href=types/type_parsing/ class=md-nav__link> <span class=md-ellipsis> Type Syntax Parsing </span> </a> </li> <li class=md-nav__item> <a href=types/named_structs/ class=md-nav__link> <span class=md-ellipsis> Named Structs </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Expressions </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Expressions </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=expressions/field_references/ class=md-nav__link> <span class=md-ellipsis> Field References </span> </a> </li> <li class=md-nav__item> <a href=expressions/scalar_functions/ class=md-nav__link> <span class=md-ellipsis> Scalar Functions </span> </a> </li> <li class=md-nav__item> <a href=expressions/aggregate_functions/ class=md-nav__link> <span class=md-ellipsis> Aggregate Functions </span> </a> </li> <li class=md-nav__item> <a href=expressions/specialized_record_expressions/ class=md-nav__link> <span class=md-ellipsis> Specialized Record Expressions </span> </a> </li> <li class=md-nav__item> <a href=expressions/window_functions/ class=md-nav__link> <span class=md-ellipsis> Window Functions </span> </a> </li> <li class=md-nav__item> <a href=expressions/table_functions/ class=md-nav__link> <span class=md-ellipsis> Table Functions </span> </a> </li> <li class=md-nav__item> <a href=expressions/user_defined_functions/ class=md-nav__link> <span class=md-ellipsis> User-Defined Functions </span> </a> </li> <li class=md-nav__item> <a href=expressions/embedded_functions/ class=md-nav__link> <span class=md-ellipsis> Embedded Functions </span> </a> </li> <li class=md-nav__item> <a href=expressions/extended_expression/ class=md-nav__link> <span class=md-ellipsis> Extended Expression </span> </a> </li> <li class=md-nav__item> <a href=expressions/subqueries/ class=md-nav__link> <span class=md-ellipsis> Subqueries </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> Relations </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Relations </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=relations/basics/ class=md-nav__link> <span class=md-ellipsis> Basics </span> </a> </li> <li class=md-nav__item> <a href=relations/common_fields/ class=md-nav__link> <span class=md-ellipsis> Common Fields </span> </a> </li> <li class=md-nav__item> <a href=relations/logical_relations/ class=md-nav__link> <span class=md-ellipsis> Logical Relations </span> </a> </li> <li class=md-nav__item> <a href=relations/physical_relations/ class=md-nav__link> <span class=md-ellipsis> Physical Relations </span> </a> </li> <li class=md-nav__item> <a href=relations/user_defined_relations/ class=md-nav__link> <span class=md-ellipsis> User Defined Relations </span> </a> </li> <li class=md-nav__item> <a href=relations/embedded_relations/ class=md-nav__link> <span class=md-ellipsis> Embedded Relations </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Serialization </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Serialization </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=serialization/basics/ class=md-nav__link> <span class=md-ellipsis> Basics </span> </a> </li> <li class=md-nav__item> <a href=serialization/binary_serialization/ class=md-nav__link> <span class=md-ellipsis> Binary Serialization </span> </a> </li> <li class=md-nav__item> <a href=serialization/text_serialization/ class=md-nav__link> <span class=md-ellipsis> Text Serialization </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex=0> <span class=md-ellipsis> Extensions </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Extensions </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=extensions/ class=md-nav__link> <span class=md-ellipsis> Extensions </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_aggregate_approx/ class=md-nav__link> <span class=md-ellipsis> functions_aggregate_approx.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_aggregate_decimal_output/ class=md-nav__link> <span class=md-ellipsis> functions_aggregate_decimal_output.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_aggregate_generic/ class=md-nav__link> <span class=md-ellipsis> functions_aggregate_generic.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_arithmetic/ class=md-nav__link> <span class=md-ellipsis> functions_arithmetic.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_arithmetic_decimal/ class=md-nav__link> <span class=md-ellipsis> functions_arithmetic_decimal.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_boolean/ class=md-nav__link> <span class=md-ellipsis> functions_boolean.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_comparison/ class=md-nav__link> <span class=md-ellipsis> functions_comparison.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_datetime/ class=md-nav__link> <span class=md-ellipsis> functions_datetime.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_geometry/ class=md-nav__link> <span class=md-ellipsis> functions_geometry.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_logarithmic/ class=md-nav__link> <span class=md-ellipsis> functions_logarithmic.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_rounding/ class=md-nav__link> <span class=md-ellipsis> functions_rounding.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_set/ class=md-nav__link> <span class=md-ellipsis> functions_set.yaml </span> </a> </li> <li class=md-nav__item> <a href=extensions/functions_string/ class=md-nav__link> <span class=md-ellipsis> functions_string.yaml </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Community </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Community </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=community/ class=md-nav__link> <span class=md-ellipsis> Community </span> </a> </li> <li class=md-nav__item> <a href=community/powered_by/ class=md-nav__link> <span class=md-ellipsis> Powered by Substrait </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=governance/ class=md-nav__link> <span class=md-ellipsis> Governance </span> </a> </li> <li class=md-nav__item> <a href=about/ class=md-nav__link> <span class=md-ellipsis> About Substrait </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_11> <label class=md-nav__link for=__nav_11 id=__nav_11_label tabindex=0> <span class=md-ellipsis> Tools </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_11_label aria-expanded=false> <label class=md-nav__title for=__nav_11> <span class="md-nav__icon md-icon"></span> Tools </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=tools/producer_tools/ class=md-nav__link> <span class=md-ellipsis> Producer Tools </span> </a> </li> <li class=md-nav__item> <a href=tools/substrait_validator/ class=md-nav__link> <span class=md-ellipsis> Substrait Validator </span> </a> </li> <li class=md-nav__item> <a href=tools/third_party_tools/ class=md-nav__link> <span class=md-ellipsis> Third Party Tools </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_12> <label class=md-nav__link for=__nav_12 id=__nav_12_label tabindex=0> <span class=md-ellipsis> Tutorial </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_12_label aria-expanded=false> <label class=md-nav__title for=__nav_12> <span class="md-nav__icon md-icon"></span> Tutorial </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=tutorial/sql_to_substrait/ class=md-nav__link> <span class=md-ellipsis> SQL to Substrait tutorial </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=faq/ class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1 id=substrait-cross-language-serialization-for-relational-algebra>Substrait: Cross-Language Serialization for Relational Algebra<a class=headerlink href=#substrait-cross-language-serialization-for-relational-algebra title="Permanent link">¶</a></h1> <h2 id=what-is-substrait>What is Substrait?<a class=headerlink href=#what-is-substrait title="Permanent link">¶</a></h2> <p>Substrait is a format for describing compute operations on structured data. It is designed for interoperability across different languages and systems.</p> <h2 id=how-does-it-work>How does it work?<a class=headerlink href=#how-does-it-work title="Permanent link">¶</a></h2> <p>Substrait provides a well-defined, cross-language <a href=spec/specification>specification</a> for data compute operations. This includes a consistent declaration of common operations, custom operations and one or more serialized representations of this specification. The spec focuses on the semantics of each operation. In addition to the specification the Substrait ecosystem also includes a number of libraries and <a href=/tools/producer_tools/ >useful tools</a>.</p> <p>We highly recommend the <a href=/tutorial/sql_to_substrait/ >tutorial</a> to learn how a Substrait plan is constructed.</p> <h2 id=benefits>Benefits<a class=headerlink href=#benefits title="Permanent link">¶</a></h2> <ul> <li>Avoids every system needing to create a communication method between every other system – each system merely supports ingesting and producing Substrait and it instantly becomes a part of the greater ecosystem.</li> <li>Makes every part of the system upgradable. There’s a new query engine that’s ten times faster? Just plug it in!</li> <li>Enables heterogeneous environments – run on a cluster of an unknown set of execution engines!</li> <li>The text version of the Substrait plan allows you to quickly see how a plan functions without needing a visualizer (although there are Substrait visualizers as well!).</li> </ul> <h2 id=example-use-cases>Example Use Cases<a class=headerlink href=#example-use-cases title="Permanent link">¶</a></h2> <ul> <li>Communicate a compute plan between a SQL parser and an execution engine (e.g. Calcite SQL parsing to Arrow C++ compute kernel)</li> <li>Serialize a plan that represents a SQL view for consistent use in multiple systems (e.g. Iceberg views in Spark and Trino)</li> <li>Submit a plan to different execution engines (e.g. Datafusion and Postgres) and get a consistent interpretation of the semantics.</li> <li>Create an alternative plan generation implementation that can connect an existing end-user compute expression system to an existing end-user processing engine (e.g. Pandas operations executed inside SingleStore)</li> <li>Build a pluggable plan visualization tool (e.g. D3 based plan visualizer)</li> </ul> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> </main> <!--
Copyright (c) 2016-2020 Martin Donath <[email protected]>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
--> <!-- Application footer --> <footer class=md-footer> <!-- Link to previous and/or next page --> <div class=md-footer-nav> <nav class="md-footer-nav__inner md-grid" aria-label=footer.title> <!-- Link to previous page --> <!-- Link to next page --> <a href=spec/versioning/ title=Versioning class="md-footer-nav__link md-footer-nav__link--next" rel=next> <div class=md-footer-nav__title> <div class=md-ellipsis> <span class=md-footer-nav__direction> Next </span> Versioning </div> </div> <div class="md-footer-nav__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> </div> <!-- Further information --> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <!-- Copyright and theme information --> <div class=md-footer-copyright> </div> <!-- Social links --> <div class=md-social> <a href=https://twitter.com/substrait_io target=_blank rel=noopener title=twitter.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": ".", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.expand", "navigation.instant", "toc.integrate"], "search": "assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src=assets/javascripts/bundle.83f73b43.min.js></script> </body> </html>