forked from substrait-io/substrait.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
21 lines (18 loc) · 27 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 rel=icon href=assets/images/favicon.png><meta name=generator content="mkdocs-1.4.2, mkdocs-material-7.2.6"><title>Home - Substrait: Cross-Language Serialization for Relational Algebra</title><link rel=stylesheet href=assets/stylesheets/main.802231af.min.css><link rel=stylesheet href=assets/stylesheets/palette.3f5d1f46.min.css><meta name=theme-color content=#e92063><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback"><style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style><link rel=stylesheet href=stylesheets/extra.css><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-57ZX8S93Q5"),document.addEventListener("DOMContentLoaded",function(){"undefined"!=typeof location$&&location$.subscribe(function(t){gtag("config","G-57ZX8S93Q5",{page_path:t.pathname})})})</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-57ZX8S93Q5"></script></head> <body dir=ltr data-md-color-scheme data-md-color-primary=pink data-md-color-accent> <script>function __prefix(e){return new URL(".",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script> <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 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 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></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.516 6.516 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 5z"/></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.516 6.516 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 5z"/></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 11h12z"/></svg> </label> <nav class=md-search__options aria-label=Search> <button type=reset class="md-search__icon md-icon" 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 12 19 6.41z"/></svg> </button> </nav> </form> <div class=md-search__output> <div class=md-search__scrollwrap 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></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"><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.81z"/></svg> </div> <div class=md-source__repository> GitHub </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class="md-tabs__inner md-grid"> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=. class="md-tabs__link md-tabs__link--active"> 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/binary_serialization/ 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> </ul> </div> </nav> <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"><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.81z"/></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" data-md-toggle=toc type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> Home <span class="md-nav__icon md-icon"></span> </label> <a href=. class="md-nav__link md-nav__link--active"> Home </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=#project-vision class=md-nav__link> Project Vision </a> </li> <li class=md-nav__item> <a href=#example-use-cases class=md-nav__link> Example Use Cases </a> </li> <li class=md-nav__item> <a href=#community-principles class=md-nav__link> Community Principles </a> </li> <li class=md-nav__item> <a href=#related-technologies class=md-nav__link> Related Technologies </a> </li> <li class=md-nav__item> <a href=#why-not-use-sql class=md-nav__link> Why not use SQL? </a> </li> <li class=md-nav__item> <a href=#why-not-just-do-this-within-an-existing-oss-project class=md-nav__link> Why not just do this within an existing OSS project? </a> </li> <li class=md-nav__item> <a href=#why-the-name-substrait class=md-nav__link> Why the name Substrait? </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_2 data-md-state=indeterminate type=checkbox id=__nav_2 checked> <label class=md-nav__link for=__nav_2> Spec <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Spec data-md-level=1> <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> Versioning </a> </li> <li class=md-nav__item> <a href=spec/specification/ class=md-nav__link> Specification </a> </li> <li class=md-nav__item> <a href=spec/technology_principles/ class=md-nav__link> Technology Principles </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_3 data-md-state=indeterminate type=checkbox id=__nav_3 checked> <label class=md-nav__link for=__nav_3> Types <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Types data-md-level=1> <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> Type System </a> </li> <li class=md-nav__item> <a href=types/type_classes/ class=md-nav__link> Type Classes </a> </li> <li class=md-nav__item> <a href=types/type_variations/ class=md-nav__link> Type Variations </a> </li> <li class=md-nav__item> <a href=types/type_parsing/ class=md-nav__link> Type Syntax Parsing </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_4 data-md-state=indeterminate type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4> Expressions <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Expressions data-md-level=1> <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> Field References </a> </li> <li class=md-nav__item> <a href=expressions/scalar_functions/ class=md-nav__link> Scalar Functions </a> </li> <li class=md-nav__item> <a href=expressions/aggregate_functions/ class=md-nav__link> Aggregate Functions </a> </li> <li class=md-nav__item> <a href=expressions/specialized_record_expressions/ class=md-nav__link> Specialized Record Expressions </a> </li> <li class=md-nav__item> <a href=expressions/window_functions/ class=md-nav__link> Window Functions </a> </li> <li class=md-nav__item> <a href=expressions/table_functions/ class=md-nav__link> Table Functions </a> </li> <li class=md-nav__item> <a href=expressions/user_defined_functions/ class=md-nav__link> User-Defined Functions </a> </li> <li class=md-nav__item> <a href=expressions/embedded_functions/ class=md-nav__link> Embedded Functions </a> </li> <li class=md-nav__item> <a href=expressions/subqueries/ class=md-nav__link> Subqueries </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_5 data-md-state=indeterminate type=checkbox id=__nav_5 checked> <label class=md-nav__link for=__nav_5> Relations <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Relations data-md-level=1> <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> Basics </a> </li> <li class=md-nav__item> <a href=relations/logical_relations/ class=md-nav__link> Logical Relations </a> </li> <li class=md-nav__item> <a href=relations/physical_relations/ class=md-nav__link> Physical Relations </a> </li> <li class=md-nav__item> <a href=relations/user_defined_relations/ class=md-nav__link> User Defined Relations </a> </li> <li class=md-nav__item> <a href=relations/embedded_relations/ class=md-nav__link> Embedded Relations </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_6 data-md-state=indeterminate type=checkbox id=__nav_6 checked> <label class=md-nav__link for=__nav_6> Serialization <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Serialization data-md-level=1> <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/binary_serialization/ class=md-nav__link> Binary Serialization </a> </li> <li class=md-nav__item> <a href=serialization/text_serialization/ class=md-nav__link> Text Serialization </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=__nav_7 data-md-state=indeterminate type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7> Extensions <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Extensions data-md-level=1> <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> Extensions </a> </li> <li class=md-nav__item> <a href=extensions/functions_aggregate_approx/ class=md-nav__link> functions_aggregate_approx.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_aggregate_generic/ class=md-nav__link> functions_aggregate_generic.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_arithmetic/ class=md-nav__link> functions_arithmetic.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_arithmetic_decimal/ class=md-nav__link> functions_arithmetic_decimal.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_boolean/ class=md-nav__link> functions_boolean.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_comparison/ class=md-nav__link> functions_comparison.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_datetime/ class=md-nav__link> functions_datetime.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_logarithmic/ class=md-nav__link> functions_logarithmic.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_rounding/ class=md-nav__link> functions_rounding.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_set/ class=md-nav__link> functions_set.yaml </a> </li> <li class=md-nav__item> <a href=extensions/functions_string/ class=md-nav__link> functions_string.yaml </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=community/ class=md-nav__link> Community </a> </li> <li class=md-nav__item> <a href=governance/ class=md-nav__link> Governance </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=project-vision>Project Vision<a class=headerlink href=#project-vision title="Permanent link">¶</a></h2> <p>Create a well-defined, cross-language <a href=spec/specification>specification</a> for data compute operations. This includes a declaration of common operations, custom operations and one or more serialized representations of this specification. The spec focuses on the semantics of each operation and a consistent way to describe.</p> <p>In many ways, the goal of this project is similar to that of the Apache Arrow project. Arrow is focused on a standardized memory representation of columnar data. Substrait is focused on what should be done to data.</p> <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> <h2 id=community-principles>Community Principles<a class=headerlink href=#community-principles title="Permanent link">¶</a></h2> <ul> <li>Be inclusive and open to all. If you want to join the project, open a PR or <a href=https://github.com/substrait-io/substrait/issues>issue</a>, start a <a href=https://groups.google.com/g/substrait>discussion</a> or <a href=https://join.slack.com/t/substrait/shared_invite/zt-10oeki45w-FARWnh4NMpXnm4x~hWyiGQ>join the Slack Channel</a>.</li> <li>Ensure a diverse set of contributors that come from multiple data backgrounds to maximize general utility.</li> <li>Build a specification based on open consensus.</li> <li>Avoid over-reliance/coupling to any single technology.</li> <li>Make the specification and all tools freely available on a permissive license (ApacheV2)</li> </ul> <h2 id=related-technologies>Related Technologies<a class=headerlink href=#related-technologies title="Permanent link">¶</a></h2> <ul> <li><a href=https://calcite.apache.org/ >Apache Calcite</a>: Many ideas in Substrait are inspired by the Calcite project. Calcite is a great JVM-based SQL query parsing and optimization framework. A key goal of the Substrait project is to expose Calcite capabilities more easily to non-JVM technologies as well as expose query planning operations as microservices.</li> <li><a href=https://arrow.apache.org/ >Apache Arrow</a>: The Arrow format for data is what the Substrait specification attempts to be for compute expressions. A key goal of Substrait is to enable Substrait producers to execute work within the Arrow Rust and C++ compute kernels.</li> </ul> <h2 id=why-not-use-sql>Why not use SQL?<a class=headerlink href=#why-not-use-sql title="Permanent link">¶</a></h2> <p>POSIX SQL is a well known language for describing queries against relational data. It is designed to be simple and allow reading and writing by humans. Substrait is not intended as a replacement for SQL and works alongside SQL to provide capabilities that SQL lacks. SQL is not a great fit for systems that actually satisfy the query because it does not provide sufficient detail and is not represented in a format that is easy for processing. Because of this, most modern systems will first translate the SQL query into a query plan, sometimes called the execution plan. There can be multiple levels of a query plan (e.g. physical and logical), a query plan may be split up and distributed across multiple systems, and a query plan often undergoes simplifying or optimizing transformations. The SQL standard does not define the format of the query or execution plan and there is no open format that is supported by a broad set of systems. Substrait was created to provide a standard and open format for these query plans.</p> <h2 id=why-not-just-do-this-within-an-existing-oss-project>Why not just do this within an existing OSS project?<a class=headerlink href=#why-not-just-do-this-within-an-existing-oss-project title="Permanent link">¶</a></h2> <p>A key goal of the Substrait project is to not be coupled to any single existing technology. Trying to get people involved in something can be difficult when it seems to be primarily driven by the opinions and habits of a single community. In many ways, this situation is similar to the early situation with Arrow. The precursor to Arrow was the Apache Drill ValueVectors concepts. As part of creating Arrow, <a href=https://www.linkedin.com/in/wesmckinn/ >Wes</a> and <a href=https://www.linkedin.com/in/jacquesnadeau/ >Jacques</a> recognized the need to create a new community to build a fresh consensus (beyond just what the Apache Drill community wanted). This separation and new independent community was a key ingredient to Arrow’s current success. The needs here are much the same: many separate communities could benefit from Substrait, but each have their own pain points, type systems, development processes and timelines. To help resolve these tensions, one of the approaches proposed in Substrait is to set a bar that at least two of the top four OSS data technologies (Arrow, Spark, Iceberg, Trino) supports something before incorporating it directly into the Substrait specification. (Another goal is to support strong extension points at key locations to avoid this bar being a limiter to broad adoption.)</p> <h2 id=why-the-name-substrait>Why the name Substrait?<a class=headerlink href=#why-the-name-substrait title="Permanent link">¶</a></h2> <p>A strait is a narrow connector of water between two other pieces of water. In analytics, data is often thought of as water. Substrait is focused on instructions related to the data. In other words, what defines or supports the movement of water between one or more larger systems. Thus, the underlayment for the strait connecting different pools of water => sub-strait.</p> </article> </div> </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> <!-- 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 11H4z"/></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-footer-social> <a href=https://twitter.com/substrait_io target=_blank rel=noopener title=twitter.com class=md-footer-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><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.253z"/></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.409db549.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "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.title": "Select version"}, "version": null}</script> <script src=assets/javascripts/bundle.756773cc.min.js></script> </body> </html>