blob: 9b8610d876e7340049ee1748ee949de0b53fcb6b [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" data-content_root="../../" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Row to columnar conversion &#8212; Apache Arrow v23.0.0.dev37</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
</script>
<!--
this give us a css class that will be invisible only if js is disabled
-->
<noscript>
<style>
.pst-js-only { display: none !important; }
</style>
</noscript>
<!-- Loaded before other Sphinx assets -->
<link href="../../_static/styles/theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link href="../../_static/styles/pydata-sphinx-theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="../../_static/sphinx-design.min.css?v=95c83b7e" />
<link rel="stylesheet" type="text/css" href="../../_static/theme_overrides.css?v=8dcd28dc" />
<!-- So that users can add custom icons -->
<script src="../../_static/scripts/fontawesome.js?digest=8878045cc6db502f8baf"></script>
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="../../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf" />
<link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
<script src="../../_static/documentation_options.js?v=9fc6757a"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
<script src="../../_static/copybutton.js?v=3bb21c8c"></script>
<script src="../../_static/design-tabs.js?v=f930bc37"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'cpp/examples/row_columnar_conversion';</script>
<script>
DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
DOCUMENTATION_OPTIONS.theme_switcher_json_url = '/docs/_static/versions.json';
DOCUMENTATION_OPTIONS.theme_switcher_version_match = 'dev/';
DOCUMENTATION_OPTIONS.show_version_warning_banner =
true;
</script>
<link rel="canonical" href="https://arrow.apache.org/docs/cpp/examples/row_columnar_conversion.html" />
<link rel="icon" href="../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Conversion of range of std::tuple-like to Table instances" href="tuple_range_conversion.html" />
<link rel="prev" title="Parquet column encryption" href="parquet_column_encryption.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
<meta name="docsearch:version" content="23.0.0.dev37" />
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
/* We explicitly disable cookie tracking to avoid privacy issues */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '20']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>Back to top</button>
<dialog id="pst-search-dialog">
<form class="bd-search d-flex align-items-center"
action="../../search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
placeholder="Search the docs ..."
aria-label="Search the docs ..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form>
</dialog>
<div class="pst-async-banner-revealer d-none">
<aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
<div class="bd-header__inner bd-page-width">
<button class="pst-navbar-icon sidebar-toggle primary-toggle" aria-label="Site navigation">
<span class="fa-solid fa-bars"></span>
</button>
<div class=" navbar-header-items__start">
<div class="navbar-item">
<a class="navbar-brand logo" href="../../index.html">
<img src="../../_static/arrow.png" class="logo__image only-light" alt="Apache Arrow v23.0.0.dev37 - Home"/>
<img src="../../_static/arrow-dark.png" class="logo__image only-dark pst-js-only" alt="Apache Arrow v23.0.0.dev37 - Home"/>
</a></div>
</div>
<div class=" navbar-header-items">
<div class="me-auto navbar-header-items__center">
<div class="navbar-item">
<nav>
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../format/index.html">
Specifications
</a>
</li>
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../developers/index.html">
Development
</a>
</li>
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../../implementations.html">
Implementations
</a>
</li>
</ul>
</nav></div>
</div>
<div class="navbar-header-items__end">
<div class="navbar-item navbar-persistent--container">
<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
</div>
<div class="navbar-item"><div class="kapa-ai-bot">
<script
async
src="https://widget.kapa.ai/kapa-widget.bundle.js"
data-website-id="9db461d5-ac77-4b3f-a5c5-75efa78339d2"
data-project-name="Apache Arrow"
data-project-color="#000000"
data-project-logo="https://arrow.apache.org/img/arrow-logo_chevrons_white-txt_black-bg.png"
data-modal-disclaimer="This is a custom LLM with access to all [Arrow documentation](https://arrow.apache.org/docs/). Please include the language you are using in your question, e.g., Python, C++, Java, R, etc."
data-consent-required="true"
data-user-analytics-cookie-enabled="false"
data-consent-screen-disclaimer="By clicking &quot;I agree, let's chat&quot;, you consent to the use of the AI assistant in accordance with kapa.ai's [Privacy Policy](https://www.kapa.ai/content/privacy-policy). This service uses reCAPTCHA, which requires your consent to Google's [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms). By proceeding, you explicitly agree to both kapa.ai's and Google's privacy policies."
></script>
</div>
</div>
<div class="navbar-item">
<div class="version-switcher__container dropdown pst-js-only">
<button id="pst-version-switcher-button-2"
type="button"
class="version-switcher__button btn btn-sm dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-2"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-2"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-2">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div></div>
<div class="navbar-item">
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Color mode" data-bs-title="Color mode" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Light"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Dark"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="System Settings"></i>
</button></div>
<div class="navbar-item"><ul class="navbar-icon-links"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/arrow" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://www.linkedin.com/company/apache-arrow/" title="LinkedIn" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-linkedin fa-lg" aria-hidden="true"></i>
<span class="sr-only">LinkedIn</span></a>
</li>
<li class="nav-item">
<a href="https://bsky.app/profile/arrow.apache.org" title="BlueSky" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-bluesky fa-lg" aria-hidden="true"></i>
<span class="sr-only">BlueSky</span></a>
</li>
</ul></div>
</div>
</div>
<div class="navbar-persistent--mobile">
<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
</div>
<button class="pst-navbar-icon sidebar-toggle secondary-toggle" aria-label="On this page">
<span class="fa-solid fa-outdent"></span>
</button>
</div>
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<dialog id="pst-primary-sidebar-modal"></dialog>
<div id="pst-primary-sidebar" class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
<div class="sidebar-header-items__center">
<div class="navbar-item">
<nav>
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../format/index.html">
Specifications
</a>
</li>
<li class="nav-item ">
<a class="nav-link nav-internal" href="../../developers/index.html">
Development
</a>
</li>
<li class="nav-item current active">
<a class="nav-link nav-internal" href="../../implementations.html">
Implementations
</a>
</li>
</ul>
</nav></div>
</div>
<div class="sidebar-header-items__end">
<div class="navbar-item"><div class="kapa-ai-bot">
<script
async
src="https://widget.kapa.ai/kapa-widget.bundle.js"
data-website-id="9db461d5-ac77-4b3f-a5c5-75efa78339d2"
data-project-name="Apache Arrow"
data-project-color="#000000"
data-project-logo="https://arrow.apache.org/img/arrow-logo_chevrons_white-txt_black-bg.png"
data-modal-disclaimer="This is a custom LLM with access to all [Arrow documentation](https://arrow.apache.org/docs/). Please include the language you are using in your question, e.g., Python, C++, Java, R, etc."
data-consent-required="true"
data-user-analytics-cookie-enabled="false"
data-consent-screen-disclaimer="By clicking &quot;I agree, let's chat&quot;, you consent to the use of the AI assistant in accordance with kapa.ai's [Privacy Policy](https://www.kapa.ai/content/privacy-policy). This service uses reCAPTCHA, which requires your consent to Google's [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms). By proceeding, you explicitly agree to both kapa.ai's and Google's privacy policies."
></script>
</div>
</div>
<div class="navbar-item">
<div class="version-switcher__container dropdown pst-js-only">
<button id="pst-version-switcher-button-3"
type="button"
class="version-switcher__button btn btn-sm dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-3"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-3"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-3">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div></div>
<div class="navbar-item">
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Color mode" data-bs-title="Color mode" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Light"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Dark"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="System Settings"></i>
</button></div>
<div class="navbar-item"><ul class="navbar-icon-links"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/arrow" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://www.linkedin.com/company/apache-arrow/" title="LinkedIn" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-linkedin fa-lg" aria-hidden="true"></i>
<span class="sr-only">LinkedIn</span></a>
</li>
<li class="nav-item">
<a href="https://bsky.app/profile/arrow.apache.org" title="BlueSky" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-bluesky fa-lg" aria-hidden="true"></i>
<span class="sr-only">BlueSky</span></a>
</li>
</ul></div>
</div>
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<nav class="bd-docs-nav bd-links"
aria-label="Section Navigation">
<p class="bd-links__title" role="heading" aria-level="1">Section Navigation</p>
<div class="bd-toc-item navbar-nav"><ul class="current nav bd-sidenav">
<li class="toctree-l1"><a class="reference external" href="https://arrow.apache.org/dotnet/">.NET</a></li>
<li class="toctree-l1 current active has-children"><a class="reference internal" href="../index.html">C++</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current">
<li class="toctree-l2 has-children"><a class="reference internal" href="../getting_started.html">Getting Started</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../build_system.html">Using Arrow C++ in your own project</a></li>
<li class="toctree-l3"><a class="reference internal" href="../conventions.html">Conventions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tutorials/basic_arrow.html">Basic Arrow Data Structures</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tutorials/io_tutorial.html">Arrow File I/O</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tutorials/compute_tutorial.html">Arrow Compute</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tutorials/datasets_tutorial.html">Arrow Datasets</a></li>
</ul>
</details></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../user_guide.html">User Guide</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../overview.html">High-Level Overview</a></li>
<li class="toctree-l3"><a class="reference internal" href="../memory.html">Memory Management</a></li>
<li class="toctree-l3"><a class="reference internal" href="../arrays.html">Arrays</a></li>
<li class="toctree-l3"><a class="reference internal" href="../datatypes.html">Data Types</a></li>
<li class="toctree-l3"><a class="reference internal" href="../tables.html">Tabular Data</a></li>
<li class="toctree-l3"><a class="reference internal" href="../compute.html">Compute Functions</a></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../gandiva.html">The Gandiva Expression Compiler</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../gandiva/expr_projector_filter.html">Gandiva Expression, Projector, and Filter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../gandiva/external_func.html">Gandiva External Functions Development Guide</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../acero.html">Acero: A C++ streaming execution engine</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../acero/overview.html">Acero Overview</a></li>
<li class="toctree-l4"><a class="reference internal" href="../acero/user_guide.html">Acero User’s Guide</a></li>
<li class="toctree-l4"><a class="reference internal" href="../acero/substrait.html">Using Acero with Substrait</a></li>
</ul>
</details></li>
<li class="toctree-l3"><a class="reference internal" href="../io.html">Input / output and filesystems</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ipc.html">Reading and writing the Arrow IPC format</a></li>
<li class="toctree-l3"><a class="reference internal" href="../orc.html">Reading and Writing ORC files</a></li>
<li class="toctree-l3"><a class="reference internal" href="../parquet.html">Reading and writing Parquet files</a></li>
<li class="toctree-l3"><a class="reference internal" href="../csv.html">Reading and Writing CSV files</a></li>
<li class="toctree-l3"><a class="reference internal" href="../json.html">Reading JSON files</a></li>
<li class="toctree-l3"><a class="reference internal" href="../dataset.html">Tabular Datasets</a></li>
<li class="toctree-l3"><a class="reference internal" href="../flight.html">Arrow Flight RPC</a></li>
<li class="toctree-l3"><a class="reference internal" href="../gdb.html">Debugging code using Arrow</a></li>
<li class="toctree-l3"><a class="reference internal" href="../threading.html">Thread Management</a></li>
<li class="toctree-l3"><a class="reference internal" href="../opentelemetry.html">OpenTelemetry</a></li>
<li class="toctree-l3"><a class="reference internal" href="../env_vars.html">Environment Variables</a></li>
</ul>
</details></li>
<li class="toctree-l2 current active has-children"><a class="reference internal" href="index.html">Examples</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="cmake_minimal_build.html">Minimal build using CMake</a></li>
<li class="toctree-l3"><a class="reference internal" href="compute_and_write_example.html">Compute and Write CSV Example</a></li>
<li class="toctree-l3"><a class="reference internal" href="dataset_documentation_example.html">Arrow Datasets example</a></li>
<li class="toctree-l3"><a class="reference internal" href="parquet_column_encryption.html">Parquet column encryption</a></li>
<li class="toctree-l3 current active"><a class="current reference internal" href="#">Row to columnar conversion</a></li>
<li class="toctree-l3"><a class="reference internal" href="tuple_range_conversion.html">std::tuple-like ranges to Arrow</a></li>
<li class="toctree-l3"><a class="reference internal" href="converting_recordbatch_to_tensor.html">Converting RecordBatch to Tensor</a></li>
</ul>
</details></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../api.html">API Reference</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../api/support.html">Programming Support</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/memory.html">Memory (management)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/thread.html">Thread (management)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/datatype.html">Data Types</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/array.html">Arrays</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/extension.html">Extension</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/scalar.html">Scalars</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/builder.html">Array Builders</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/table.html">Two-dimensional Datasets</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/c_abi.html">C Interfaces</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/compute.html">Compute Functions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/acero.html">Streaming Execution (Acero)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/gandiva.html">Gandiva Expression Compiler</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/tensor.html">Tensors</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/utilities.html">Utilities</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/async.html">Asynchronous programming</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/io.html">Input / output</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/ipc.html">Arrow IPC</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/formats.html">File Formats</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/cuda.html">CUDA support</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/flight.html">Arrow Flight RPC</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/flightsql.html">Arrow Flight SQL</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/filesystem.html">Filesystems</a></li>
<li class="toctree-l3"><a class="reference internal" href="../api/dataset.html">Dataset</a></li>
</ul>
</details></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../developers/cpp/index.html">C++ Development</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../../developers/cpp/building.html">Building Arrow C++</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../developers/cpp/development.html">Development Guidelines</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../developers/cpp/windows.html">Developing on Windows</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../developers/cpp/emscripten.html">Cross compiling for WebAssembly with Emscripten</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../developers/cpp/conventions.html">Conventions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../developers/cpp/fuzzing.html">Fuzzing Arrow C++</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../developers/cpp/compute.html">Developing Arrow C++ Compute</a></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../developers/cpp/acero.html">Developing Acero</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../developers/cpp/acero/swiss_table.html">Swiss Table</a></li>
</ul>
</details></li>
</ul>
</details></li>
<li class="toctree-l2"><a class="reference external" href="https://arrow.apache.org/cookbook/cpp/">C++ Cookbook</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../c_glib/index.html">C GLib</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../../c_glib/arrow-glib/index.html">Apache Arrow GLib</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../c_glib/arrow-cuda-glib/index.html">Apache Arrow CUDA GLib</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../c_glib/arrow-dataset-glib/index.html">Apache Arrow Dataset</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../c_glib/arrow-flight-glib/index.html">Apache Arrow Flight GLib</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../c_glib/arrow-flight-sql-glib/index.html">Apache Arrow Flight SQL GLib</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../c_glib/parquet-glib/index.html">Apache Parquet GLib</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../c_glib/gandiva-glib/index.html">Gandiva GLib</a></li>
</ul>
</details></li>
<li class="toctree-l1"><a class="reference external" href="https://arrow.apache.org/go/">Go</a></li>
<li class="toctree-l1"><a class="reference external" href="https://arrow.apache.org/js/current/">JavaScript</a></li>
<li class="toctree-l1"><a class="reference external" href="https://arrow.apache.org/julia/">Julia</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/apache/arrow/blob/main/matlab/README.md">MATLAB</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../../python/index.html">Python</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../../python/install.html">Installing PyArrow</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/getstarted.html">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/data.html">Data Types and In-Memory Data Model</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/compute.html">Compute Functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/memory.html">Memory and IO Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/ipc.html">Streaming, Serialization, and IPC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/filesystems.html">Filesystem Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/numpy.html">NumPy Integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/pandas.html">Pandas Integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/interchange_protocol.html">Dataframe Interchange Protocol</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/dlpack.html">The DLPack Protocol</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/timestamps.html">Timestamps</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/orc.html">Reading and Writing the Apache ORC Format</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/csv.html">Reading and Writing CSV files</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/feather.html">Feather File Format</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/json.html">Reading JSON files</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/parquet.html">Reading and Writing the Apache Parquet Format</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/dataset.html">Tabular Datasets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/flight.html">Arrow Flight RPC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/extending_types.html">Extending PyArrow</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../python/integration.html">PyArrow Integrations</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../../python/integration/substrait.html">Substrait</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../python/integration/python_r.html">Integrating PyArrow with R</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../python/integration/python_java.html">Integrating PyArrow with Java</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../python/integration/extending.html">Using pyarrow from C++ and Cython Code</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../python/integration/cuda.html">CUDA Integration</a></li>
</ul>
</details></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/env_vars.html">Environment Variables</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../../python/api.html">API Reference</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/datatypes.html">Data Types and Schemas</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.null.html">pyarrow.null</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.bool_.html">pyarrow.bool_</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.int8.html">pyarrow.int8</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.int16.html">pyarrow.int16</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.int32.html">pyarrow.int32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.int64.html">pyarrow.int64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.uint8.html">pyarrow.uint8</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.uint16.html">pyarrow.uint16</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.uint32.html">pyarrow.uint32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.uint64.html">pyarrow.uint64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.float16.html">pyarrow.float16</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.float32.html">pyarrow.float32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.float64.html">pyarrow.float64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.time32.html">pyarrow.time32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.time64.html">pyarrow.time64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.timestamp.html">pyarrow.timestamp</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.date32.html">pyarrow.date32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.date64.html">pyarrow.date64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.duration.html">pyarrow.duration</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.month_day_nano_interval.html">pyarrow.month_day_nano_interval</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.binary.html">pyarrow.binary</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.string.html">pyarrow.string</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.utf8.html">pyarrow.utf8</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.large_binary.html">pyarrow.large_binary</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.large_string.html">pyarrow.large_string</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.large_utf8.html">pyarrow.large_utf8</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.binary_view.html">pyarrow.binary_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.string_view.html">pyarrow.string_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.decimal128.html">pyarrow.decimal128</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.decimal256.html">pyarrow.decimal256</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.list_.html">pyarrow.list_</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.large_list.html">pyarrow.large_list</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.list_view.html">pyarrow.list_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.large_list_view.html">pyarrow.large_list_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.map_.html">pyarrow.map_</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.struct.html">pyarrow.struct</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dictionary.html">pyarrow.dictionary</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.run_end_encoded.html">pyarrow.run_end_encoded</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fixed_shape_tensor.html">pyarrow.fixed_shape_tensor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.union.html">pyarrow.union</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dense_union.html">pyarrow.dense_union</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.sparse_union.html">pyarrow.sparse_union</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.opaque.html">pyarrow.opaque</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.bool8.html">pyarrow.bool8</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.uuid.html">pyarrow.uuid</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.json_.html">pyarrow.json_</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.field.html">pyarrow.field</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.schema.html">pyarrow.schema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.from_numpy_dtype.html">pyarrow.from_numpy_dtype</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.unify_schemas.html">pyarrow.unify_schemas</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DataType.html">pyarrow.DataType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DictionaryType.html">pyarrow.DictionaryType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ListType.html">pyarrow.ListType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ListViewType.html">pyarrow.ListViewType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedSizeListType.html">pyarrow.FixedSizeListType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeListType.html">pyarrow.LargeListType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeListViewType.html">pyarrow.LargeListViewType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.MapType.html">pyarrow.MapType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.StructType.html">pyarrow.StructType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UnionType.html">pyarrow.UnionType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DenseUnionType.html">pyarrow.DenseUnionType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.SparseUnionType.html">pyarrow.SparseUnionType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.TimestampType.html">pyarrow.TimestampType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Time32Type.html">pyarrow.Time32Type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Time64Type.html">pyarrow.Time64Type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DurationType.html">pyarrow.DurationType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedSizeBinaryType.html">pyarrow.FixedSizeBinaryType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal32Type.html">pyarrow.Decimal32Type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal64Type.html">pyarrow.Decimal64Type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal128Type.html">pyarrow.Decimal128Type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal256Type.html">pyarrow.Decimal256Type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Field.html">pyarrow.Field</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Schema.html">pyarrow.Schema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.RunEndEncodedType.html">pyarrow.RunEndEncodedType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BaseExtensionType.html">pyarrow.BaseExtensionType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ExtensionType.html">pyarrow.ExtensionType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UnknownExtensionType.html">pyarrow.UnknownExtensionType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.register_extension_type.html">pyarrow.register_extension_type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.unregister_extension_type.html">pyarrow.unregister_extension_type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedShapeTensorType.html">pyarrow.FixedShapeTensorType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.OpaqueType.html">pyarrow.OpaqueType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.JsonType.html">pyarrow.JsonType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UuidType.html">pyarrow.UuidType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Bool8Type.html">pyarrow.Bool8Type</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_boolean.html">pyarrow.types.is_boolean</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_integer.html">pyarrow.types.is_integer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_signed_integer.html">pyarrow.types.is_signed_integer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_unsigned_integer.html">pyarrow.types.is_unsigned_integer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_int8.html">pyarrow.types.is_int8</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_int16.html">pyarrow.types.is_int16</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_int32.html">pyarrow.types.is_int32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_int64.html">pyarrow.types.is_int64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_uint8.html">pyarrow.types.is_uint8</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_uint16.html">pyarrow.types.is_uint16</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_uint32.html">pyarrow.types.is_uint32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_uint64.html">pyarrow.types.is_uint64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_floating.html">pyarrow.types.is_floating</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_float16.html">pyarrow.types.is_float16</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_float32.html">pyarrow.types.is_float32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_float64.html">pyarrow.types.is_float64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_decimal.html">pyarrow.types.is_decimal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_decimal128.html">pyarrow.types.is_decimal128</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_decimal256.html">pyarrow.types.is_decimal256</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_list.html">pyarrow.types.is_list</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_large_list.html">pyarrow.types.is_large_list</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_fixed_size_list.html">pyarrow.types.is_fixed_size_list</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_list_view.html">pyarrow.types.is_list_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_large_list_view.html">pyarrow.types.is_large_list_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_struct.html">pyarrow.types.is_struct</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_union.html">pyarrow.types.is_union</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_nested.html">pyarrow.types.is_nested</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_run_end_encoded.html">pyarrow.types.is_run_end_encoded</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_temporal.html">pyarrow.types.is_temporal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_timestamp.html">pyarrow.types.is_timestamp</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_date.html">pyarrow.types.is_date</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_date32.html">pyarrow.types.is_date32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_date64.html">pyarrow.types.is_date64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_time.html">pyarrow.types.is_time</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_time32.html">pyarrow.types.is_time32</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_time64.html">pyarrow.types.is_time64</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_duration.html">pyarrow.types.is_duration</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_interval.html">pyarrow.types.is_interval</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_null.html">pyarrow.types.is_null</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_binary.html">pyarrow.types.is_binary</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_unicode.html">pyarrow.types.is_unicode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_string.html">pyarrow.types.is_string</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_large_binary.html">pyarrow.types.is_large_binary</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_large_unicode.html">pyarrow.types.is_large_unicode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_large_string.html">pyarrow.types.is_large_string</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_binary_view.html">pyarrow.types.is_binary_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_string_view.html">pyarrow.types.is_string_view</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_fixed_size_binary.html">pyarrow.types.is_fixed_size_binary</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_map.html">pyarrow.types.is_map</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_dictionary.html">pyarrow.types.is_dictionary</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.is_primitive.html">pyarrow.types.is_primitive</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.types.TypesEnum.html">pyarrow.types.TypesEnum</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/arrays.html">Arrays and Scalars</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.array.html">pyarrow.array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.nulls.html">pyarrow.nulls</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Array.html">pyarrow.Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BooleanArray.html">pyarrow.BooleanArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FloatingPointArray.html">pyarrow.FloatingPointArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.IntegerArray.html">pyarrow.IntegerArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int8Array.html">pyarrow.Int8Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int16Array.html">pyarrow.Int16Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int32Array.html">pyarrow.Int32Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int64Array.html">pyarrow.Int64Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.NullArray.html">pyarrow.NullArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.NumericArray.html">pyarrow.NumericArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt8Array.html">pyarrow.UInt8Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt16Array.html">pyarrow.UInt16Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt32Array.html">pyarrow.UInt32Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt64Array.html">pyarrow.UInt64Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.HalfFloatArray.html">pyarrow.HalfFloatArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FloatArray.html">pyarrow.FloatArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DoubleArray.html">pyarrow.DoubleArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BinaryArray.html">pyarrow.BinaryArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.StringArray.html">pyarrow.StringArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedSizeBinaryArray.html">pyarrow.FixedSizeBinaryArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeBinaryArray.html">pyarrow.LargeBinaryArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeStringArray.html">pyarrow.LargeStringArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BinaryViewArray.html">pyarrow.BinaryViewArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.StringViewArray.html">pyarrow.StringViewArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Time32Array.html">pyarrow.Time32Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Time64Array.html">pyarrow.Time64Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Date32Array.html">pyarrow.Date32Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Date64Array.html">pyarrow.Date64Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.TimestampArray.html">pyarrow.TimestampArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DurationArray.html">pyarrow.DurationArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.MonthDayNanoIntervalArray.html">pyarrow.MonthDayNanoIntervalArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal32Array.html">pyarrow.Decimal32Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal64Array.html">pyarrow.Decimal64Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal128Array.html">pyarrow.Decimal128Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal256Array.html">pyarrow.Decimal256Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DictionaryArray.html">pyarrow.DictionaryArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ListArray.html">pyarrow.ListArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedSizeListArray.html">pyarrow.FixedSizeListArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeListArray.html">pyarrow.LargeListArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ListViewArray.html">pyarrow.ListViewArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeListViewArray.html">pyarrow.LargeListViewArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.MapArray.html">pyarrow.MapArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.RunEndEncodedArray.html">pyarrow.RunEndEncodedArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.StructArray.html">pyarrow.StructArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UnionArray.html">pyarrow.UnionArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ExtensionArray.html">pyarrow.ExtensionArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedShapeTensorArray.html">pyarrow.FixedShapeTensorArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.OpaqueArray.html">pyarrow.OpaqueArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.JsonArray.html">pyarrow.JsonArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UuidArray.html">pyarrow.UuidArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Bool8Array.html">pyarrow.Bool8Array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.scalar.html">pyarrow.scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.NA.html">pyarrow.NA</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Scalar.html">pyarrow.Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BooleanScalar.html">pyarrow.BooleanScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int8Scalar.html">pyarrow.Int8Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int16Scalar.html">pyarrow.Int16Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int32Scalar.html">pyarrow.Int32Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Int64Scalar.html">pyarrow.Int64Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.NullScalar.html">pyarrow.NullScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt8Scalar.html">pyarrow.UInt8Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt16Scalar.html">pyarrow.UInt16Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt32Scalar.html">pyarrow.UInt32Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UInt64Scalar.html">pyarrow.UInt64Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.HalfFloatScalar.html">pyarrow.HalfFloatScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FloatScalar.html">pyarrow.FloatScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DoubleScalar.html">pyarrow.DoubleScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BinaryScalar.html">pyarrow.BinaryScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.StringScalar.html">pyarrow.StringScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedSizeBinaryScalar.html">pyarrow.FixedSizeBinaryScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeBinaryScalar.html">pyarrow.LargeBinaryScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeStringScalar.html">pyarrow.LargeStringScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BinaryViewScalar.html">pyarrow.BinaryViewScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.StringViewScalar.html">pyarrow.StringViewScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Time32Scalar.html">pyarrow.Time32Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Time64Scalar.html">pyarrow.Time64Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Date32Scalar.html">pyarrow.Date32Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Date64Scalar.html">pyarrow.Date64Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.TimestampScalar.html">pyarrow.TimestampScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DurationScalar.html">pyarrow.DurationScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.MonthDayNanoIntervalScalar.html">pyarrow.MonthDayNanoIntervalScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal128Scalar.html">pyarrow.Decimal128Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Decimal256Scalar.html">pyarrow.Decimal256Scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.DictionaryScalar.html">pyarrow.DictionaryScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.RunEndEncodedScalar.html">pyarrow.RunEndEncodedScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ListScalar.html">pyarrow.ListScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedSizeListScalar.html">pyarrow.FixedSizeListScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeListScalar.html">pyarrow.LargeListScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ListViewScalar.html">pyarrow.ListViewScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.LargeListViewScalar.html">pyarrow.LargeListViewScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.MapScalar.html">pyarrow.MapScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.StructScalar.html">pyarrow.StructScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UnionScalar.html">pyarrow.UnionScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ExtensionScalar.html">pyarrow.ExtensionScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedShapeTensorScalar.html">pyarrow.FixedShapeTensorScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.OpaqueScalar.html">pyarrow.OpaqueScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.JsonScalar.html">pyarrow.JsonScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.UuidScalar.html">pyarrow.UuidScalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Bool8Scalar.html">pyarrow.Bool8Scalar</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/memory.html">Buffers and Memory</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.allocate_buffer.html">pyarrow.allocate_buffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.py_buffer.html">pyarrow.py_buffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.foreign_buffer.html">pyarrow.foreign_buffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Buffer.html">pyarrow.Buffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ResizableBuffer.html">pyarrow.ResizableBuffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Codec.html">pyarrow.Codec</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compress.html">pyarrow.compress</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.decompress.html">pyarrow.decompress</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.MemoryPool.html">pyarrow.MemoryPool</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.default_memory_pool.html">pyarrow.default_memory_pool</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.jemalloc_memory_pool.html">pyarrow.jemalloc_memory_pool</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.mimalloc_memory_pool.html">pyarrow.mimalloc_memory_pool</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.system_memory_pool.html">pyarrow.system_memory_pool</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.jemalloc_set_decay_ms.html">pyarrow.jemalloc_set_decay_ms</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.set_memory_pool.html">pyarrow.set_memory_pool</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.log_memory_allocations.html">pyarrow.log_memory_allocations</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.total_allocated_bytes.html">pyarrow.total_allocated_bytes</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/tables.html">Tables and Tensors</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.chunked_array.html">pyarrow.chunked_array</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.concat_arrays.html">pyarrow.concat_arrays</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.concat_tables.html">pyarrow.concat_tables</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.record_batch.html">pyarrow.record_batch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.concat_batches.html">pyarrow.concat_batches</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.table.html">pyarrow.table</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ChunkedArray.html">pyarrow.ChunkedArray</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.RecordBatch.html">pyarrow.RecordBatch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Table.html">pyarrow.Table</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.TableGroupBy.html">pyarrow.TableGroupBy</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.RecordBatchReader.html">pyarrow.RecordBatchReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.interchange.from_dataframe.html">pyarrow.interchange.from_dataframe</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.Tensor.html">pyarrow.Tensor</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/compute.html">Compute Functions</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.all.html">pyarrow.compute.all</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.any.html">pyarrow.compute.any</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.approximate_median.html">pyarrow.compute.approximate_median</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.count.html">pyarrow.compute.count</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.count_distinct.html">pyarrow.compute.count_distinct</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.index.html">pyarrow.compute.index</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.max.html">pyarrow.compute.max</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.mean.html">pyarrow.compute.mean</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.min.html">pyarrow.compute.min</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.min_max.html">pyarrow.compute.min_max</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.mode.html">pyarrow.compute.mode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.pivot_wider.html">pyarrow.compute.pivot_wider</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.product.html">pyarrow.compute.product</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.quantile.html">pyarrow.compute.quantile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.stddev.html">pyarrow.compute.stddev</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.sum.html">pyarrow.compute.sum</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.tdigest.html">pyarrow.compute.tdigest</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.variance.html">pyarrow.compute.variance</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cumulative_sum.html">pyarrow.compute.cumulative_sum</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cumulative_sum_checked.html">pyarrow.compute.cumulative_sum_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cumulative_prod.html">pyarrow.compute.cumulative_prod</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cumulative_prod_checked.html">pyarrow.compute.cumulative_prod_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cumulative_max.html">pyarrow.compute.cumulative_max</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cumulative_min.html">pyarrow.compute.cumulative_min</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.abs.html">pyarrow.compute.abs</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.abs_checked.html">pyarrow.compute.abs_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.add.html">pyarrow.compute.add</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.add_checked.html">pyarrow.compute.add_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.divide.html">pyarrow.compute.divide</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.divide_checked.html">pyarrow.compute.divide_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.multiply.html">pyarrow.compute.multiply</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.multiply_checked.html">pyarrow.compute.multiply_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.negate.html">pyarrow.compute.negate</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.negate_checked.html">pyarrow.compute.negate_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.power.html">pyarrow.compute.power</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.power_checked.html">pyarrow.compute.power_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.sign.html">pyarrow.compute.sign</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.sqrt.html">pyarrow.compute.sqrt</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.sqrt_checked.html">pyarrow.compute.sqrt_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.subtract.html">pyarrow.compute.subtract</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.subtract_checked.html">pyarrow.compute.subtract_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.bit_wise_and.html">pyarrow.compute.bit_wise_and</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.bit_wise_not.html">pyarrow.compute.bit_wise_not</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.bit_wise_or.html">pyarrow.compute.bit_wise_or</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.bit_wise_xor.html">pyarrow.compute.bit_wise_xor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.shift_left.html">pyarrow.compute.shift_left</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.shift_left_checked.html">pyarrow.compute.shift_left_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.shift_right.html">pyarrow.compute.shift_right</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.shift_right_checked.html">pyarrow.compute.shift_right_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ceil.html">pyarrow.compute.ceil</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.floor.html">pyarrow.compute.floor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.round.html">pyarrow.compute.round</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.round_to_multiple.html">pyarrow.compute.round_to_multiple</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.trunc.html">pyarrow.compute.trunc</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ln.html">pyarrow.compute.ln</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ln_checked.html">pyarrow.compute.ln_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.log10.html">pyarrow.compute.log10</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.log10_checked.html">pyarrow.compute.log10_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.log1p.html">pyarrow.compute.log1p</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.log1p_checked.html">pyarrow.compute.log1p_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.log2.html">pyarrow.compute.log2</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.log2_checked.html">pyarrow.compute.log2_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.logb.html">pyarrow.compute.logb</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.logb_checked.html">pyarrow.compute.logb_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.acos.html">pyarrow.compute.acos</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.acos_checked.html">pyarrow.compute.acos_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.asin.html">pyarrow.compute.asin</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.asin_checked.html">pyarrow.compute.asin_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.atan.html">pyarrow.compute.atan</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.atan2.html">pyarrow.compute.atan2</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cos.html">pyarrow.compute.cos</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cos_checked.html">pyarrow.compute.cos_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.sin.html">pyarrow.compute.sin</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.sin_checked.html">pyarrow.compute.sin_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.tan.html">pyarrow.compute.tan</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.tan_checked.html">pyarrow.compute.tan_checked</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.equal.html">pyarrow.compute.equal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.greater.html">pyarrow.compute.greater</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.greater_equal.html">pyarrow.compute.greater_equal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.less.html">pyarrow.compute.less</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.less_equal.html">pyarrow.compute.less_equal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.not_equal.html">pyarrow.compute.not_equal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.max_element_wise.html">pyarrow.compute.max_element_wise</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.min_element_wise.html">pyarrow.compute.min_element_wise</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.and_.html">pyarrow.compute.and_</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.and_kleene.html">pyarrow.compute.and_kleene</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.and_not.html">pyarrow.compute.and_not</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.and_not_kleene.html">pyarrow.compute.and_not_kleene</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.invert.html">pyarrow.compute.invert</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.or_.html">pyarrow.compute.or_</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.or_kleene.html">pyarrow.compute.or_kleene</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.xor.html">pyarrow.compute.xor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_alnum.html">pyarrow.compute.ascii_is_alnum</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_alpha.html">pyarrow.compute.ascii_is_alpha</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_decimal.html">pyarrow.compute.ascii_is_decimal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_lower.html">pyarrow.compute.ascii_is_lower</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_printable.html">pyarrow.compute.ascii_is_printable</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_space.html">pyarrow.compute.ascii_is_space</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_upper.html">pyarrow.compute.ascii_is_upper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_alnum.html">pyarrow.compute.utf8_is_alnum</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_alpha.html">pyarrow.compute.utf8_is_alpha</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_decimal.html">pyarrow.compute.utf8_is_decimal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_digit.html">pyarrow.compute.utf8_is_digit</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_lower.html">pyarrow.compute.utf8_is_lower</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_numeric.html">pyarrow.compute.utf8_is_numeric</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_printable.html">pyarrow.compute.utf8_is_printable</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_space.html">pyarrow.compute.utf8_is_space</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_upper.html">pyarrow.compute.utf8_is_upper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_is_title.html">pyarrow.compute.ascii_is_title</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_is_title.html">pyarrow.compute.utf8_is_title</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.string_is_ascii.html">pyarrow.compute.string_is_ascii</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_capitalize.html">pyarrow.compute.ascii_capitalize</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_lower.html">pyarrow.compute.ascii_lower</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_reverse.html">pyarrow.compute.ascii_reverse</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_swapcase.html">pyarrow.compute.ascii_swapcase</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_title.html">pyarrow.compute.ascii_title</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_upper.html">pyarrow.compute.ascii_upper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.binary_length.html">pyarrow.compute.binary_length</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.binary_repeat.html">pyarrow.compute.binary_repeat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.binary_replace_slice.html">pyarrow.compute.binary_replace_slice</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.binary_reverse.html">pyarrow.compute.binary_reverse</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.replace_substring.html">pyarrow.compute.replace_substring</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.replace_substring_regex.html">pyarrow.compute.replace_substring_regex</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_capitalize.html">pyarrow.compute.utf8_capitalize</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_length.html">pyarrow.compute.utf8_length</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_lower.html">pyarrow.compute.utf8_lower</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_replace_slice.html">pyarrow.compute.utf8_replace_slice</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_reverse.html">pyarrow.compute.utf8_reverse</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_swapcase.html">pyarrow.compute.utf8_swapcase</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_title.html">pyarrow.compute.utf8_title</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_upper.html">pyarrow.compute.utf8_upper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_center.html">pyarrow.compute.ascii_center</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_lpad.html">pyarrow.compute.ascii_lpad</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_rpad.html">pyarrow.compute.ascii_rpad</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_center.html">pyarrow.compute.utf8_center</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_lpad.html">pyarrow.compute.utf8_lpad</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_rpad.html">pyarrow.compute.utf8_rpad</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_zero_fill.html">pyarrow.compute.utf8_zero_fill</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_ltrim.html">pyarrow.compute.ascii_ltrim</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_ltrim_whitespace.html">pyarrow.compute.ascii_ltrim_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_rtrim.html">pyarrow.compute.ascii_rtrim</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_rtrim_whitespace.html">pyarrow.compute.ascii_rtrim_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_trim.html">pyarrow.compute.ascii_trim</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_trim_whitespace.html">pyarrow.compute.ascii_trim_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_ltrim.html">pyarrow.compute.utf8_ltrim</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_ltrim_whitespace.html">pyarrow.compute.utf8_ltrim_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_rtrim.html">pyarrow.compute.utf8_rtrim</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_rtrim_whitespace.html">pyarrow.compute.utf8_rtrim_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_trim.html">pyarrow.compute.utf8_trim</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_trim_whitespace.html">pyarrow.compute.utf8_trim_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ascii_split_whitespace.html">pyarrow.compute.ascii_split_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.split_pattern.html">pyarrow.compute.split_pattern</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.split_pattern_regex.html">pyarrow.compute.split_pattern_regex</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_split_whitespace.html">pyarrow.compute.utf8_split_whitespace</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.extract_regex.html">pyarrow.compute.extract_regex</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.binary_join.html">pyarrow.compute.binary_join</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.binary_join_element_wise.html">pyarrow.compute.binary_join_element_wise</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.binary_slice.html">pyarrow.compute.binary_slice</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.utf8_slice_codeunits.html">pyarrow.compute.utf8_slice_codeunits</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.count_substring.html">pyarrow.compute.count_substring</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.count_substring_regex.html">pyarrow.compute.count_substring_regex</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ends_with.html">pyarrow.compute.ends_with</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.find_substring.html">pyarrow.compute.find_substring</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.find_substring_regex.html">pyarrow.compute.find_substring_regex</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.index_in.html">pyarrow.compute.index_in</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.is_in.html">pyarrow.compute.is_in</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.match_like.html">pyarrow.compute.match_like</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.match_substring.html">pyarrow.compute.match_substring</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.match_substring_regex.html">pyarrow.compute.match_substring_regex</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.starts_with.html">pyarrow.compute.starts_with</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.indices_nonzero.html">pyarrow.compute.indices_nonzero</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.is_finite.html">pyarrow.compute.is_finite</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.is_inf.html">pyarrow.compute.is_inf</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.is_nan.html">pyarrow.compute.is_nan</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.is_null.html">pyarrow.compute.is_null</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.is_valid.html">pyarrow.compute.is_valid</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.true_unless_null.html">pyarrow.compute.true_unless_null</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.case_when.html">pyarrow.compute.case_when</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.choose.html">pyarrow.compute.choose</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.coalesce.html">pyarrow.compute.coalesce</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.if_else.html">pyarrow.compute.if_else</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.cast.html">pyarrow.compute.cast</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ceil_temporal.html">pyarrow.compute.ceil_temporal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.floor_temporal.html">pyarrow.compute.floor_temporal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.round_temporal.html">pyarrow.compute.round_temporal</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.run_end_decode.html">pyarrow.compute.run_end_decode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.run_end_encode.html">pyarrow.compute.run_end_encode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.strftime.html">pyarrow.compute.strftime</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.strptime.html">pyarrow.compute.strptime</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.day.html">pyarrow.compute.day</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.day_of_week.html">pyarrow.compute.day_of_week</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.day_of_year.html">pyarrow.compute.day_of_year</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.hour.html">pyarrow.compute.hour</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.iso_week.html">pyarrow.compute.iso_week</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.iso_year.html">pyarrow.compute.iso_year</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.iso_calendar.html">pyarrow.compute.iso_calendar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.is_leap_year.html">pyarrow.compute.is_leap_year</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.microsecond.html">pyarrow.compute.microsecond</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.millisecond.html">pyarrow.compute.millisecond</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.minute.html">pyarrow.compute.minute</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.month.html">pyarrow.compute.month</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.nanosecond.html">pyarrow.compute.nanosecond</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.quarter.html">pyarrow.compute.quarter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.second.html">pyarrow.compute.second</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.subsecond.html">pyarrow.compute.subsecond</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.us_week.html">pyarrow.compute.us_week</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.us_year.html">pyarrow.compute.us_year</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.week.html">pyarrow.compute.week</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.year.html">pyarrow.compute.year</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.year_month_day.html">pyarrow.compute.year_month_day</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.day_time_interval_between.html">pyarrow.compute.day_time_interval_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.days_between.html">pyarrow.compute.days_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.hours_between.html">pyarrow.compute.hours_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.microseconds_between.html">pyarrow.compute.microseconds_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.milliseconds_between.html">pyarrow.compute.milliseconds_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.minutes_between.html">pyarrow.compute.minutes_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.month_day_nano_interval_between.html">pyarrow.compute.month_day_nano_interval_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.month_interval_between.html">pyarrow.compute.month_interval_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.nanoseconds_between.html">pyarrow.compute.nanoseconds_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.quarters_between.html">pyarrow.compute.quarters_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.seconds_between.html">pyarrow.compute.seconds_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.weeks_between.html">pyarrow.compute.weeks_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.years_between.html">pyarrow.compute.years_between</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.assume_timezone.html">pyarrow.compute.assume_timezone</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.local_timestamp.html">pyarrow.compute.local_timestamp</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.dictionary_encode.html">pyarrow.compute.dictionary_encode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.unique.html">pyarrow.compute.unique</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.value_counts.html">pyarrow.compute.value_counts</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.array_filter.html">pyarrow.compute.array_filter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.array_take.html">pyarrow.compute.array_take</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.drop_null.html">pyarrow.compute.drop_null</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.filter.html">pyarrow.compute.filter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.take.html">pyarrow.compute.take</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.array_sort_indices.html">pyarrow.compute.array_sort_indices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.partition_nth_indices.html">pyarrow.compute.partition_nth_indices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.select_k_unstable.html">pyarrow.compute.select_k_unstable</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.sort_indices.html">pyarrow.compute.sort_indices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.fill_null.html">pyarrow.compute.fill_null</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.fill_null_backward.html">pyarrow.compute.fill_null_backward</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.fill_null_forward.html">pyarrow.compute.fill_null_forward</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.list_element.html">pyarrow.compute.list_element</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.list_flatten.html">pyarrow.compute.list_flatten</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.list_parent_indices.html">pyarrow.compute.list_parent_indices</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.list_slice.html">pyarrow.compute.list_slice</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.list_value_length.html">pyarrow.compute.list_value_length</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.make_struct.html">pyarrow.compute.make_struct</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.map_lookup.html">pyarrow.compute.map_lookup</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.replace_with_mask.html">pyarrow.compute.replace_with_mask</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.struct_field.html">pyarrow.compute.struct_field</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.pairwise_diff.html">pyarrow.compute.pairwise_diff</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ArraySortOptions.html">pyarrow.compute.ArraySortOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.AssumeTimezoneOptions.html">pyarrow.compute.AssumeTimezoneOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.CastOptions.html">pyarrow.compute.CastOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.CountOptions.html">pyarrow.compute.CountOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.CumulativeSumOptions.html">pyarrow.compute.CumulativeSumOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.DayOfWeekOptions.html">pyarrow.compute.DayOfWeekOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.DictionaryEncodeOptions.html">pyarrow.compute.DictionaryEncodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ElementWiseAggregateOptions.html">pyarrow.compute.ElementWiseAggregateOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ExtractRegexOptions.html">pyarrow.compute.ExtractRegexOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.FilterOptions.html">pyarrow.compute.FilterOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.IndexOptions.html">pyarrow.compute.IndexOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.JoinOptions.html">pyarrow.compute.JoinOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ListSliceOptions.html">pyarrow.compute.ListSliceOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.MakeStructOptions.html">pyarrow.compute.MakeStructOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.MapLookupOptions.html">pyarrow.compute.MapLookupOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.MatchSubstringOptions.html">pyarrow.compute.MatchSubstringOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ModeOptions.html">pyarrow.compute.ModeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.NullOptions.html">pyarrow.compute.NullOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.PadOptions.html">pyarrow.compute.PadOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ZeroFillOptions.html">pyarrow.compute.ZeroFillOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.PairwiseOptions.html">pyarrow.compute.PairwiseOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.PartitionNthOptions.html">pyarrow.compute.PartitionNthOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.PivotWiderOptions.html">pyarrow.compute.PivotWiderOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.QuantileOptions.html">pyarrow.compute.QuantileOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ReplaceSliceOptions.html">pyarrow.compute.ReplaceSliceOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ReplaceSubstringOptions.html">pyarrow.compute.ReplaceSubstringOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.RoundOptions.html">pyarrow.compute.RoundOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.RoundTemporalOptions.html">pyarrow.compute.RoundTemporalOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.RoundToMultipleOptions.html">pyarrow.compute.RoundToMultipleOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.RunEndEncodeOptions.html">pyarrow.compute.RunEndEncodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.ScalarAggregateOptions.html">pyarrow.compute.ScalarAggregateOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.SelectKOptions.html">pyarrow.compute.SelectKOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.SetLookupOptions.html">pyarrow.compute.SetLookupOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.SliceOptions.html">pyarrow.compute.SliceOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.SortOptions.html">pyarrow.compute.SortOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.SplitOptions.html">pyarrow.compute.SplitOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.SplitPatternOptions.html">pyarrow.compute.SplitPatternOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.StrftimeOptions.html">pyarrow.compute.StrftimeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.StrptimeOptions.html">pyarrow.compute.StrptimeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.StructFieldOptions.html">pyarrow.compute.StructFieldOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.TakeOptions.html">pyarrow.compute.TakeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.TDigestOptions.html">pyarrow.compute.TDigestOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.TrimOptions.html">pyarrow.compute.TrimOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.VarianceOptions.html">pyarrow.compute.VarianceOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.WeekOptions.html">pyarrow.compute.WeekOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.register_scalar_function.html">pyarrow.compute.register_scalar_function</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.UdfContext.html">pyarrow.compute.UdfContext</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.field.html">pyarrow.compute.field</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.compute.scalar.html">pyarrow.compute.scalar</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/acero.html">Acero - Streaming Execution Engine</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.Declaration.html">pyarrow.acero.Declaration</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.ExecNodeOptions.html">pyarrow.acero.ExecNodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.TableSourceNodeOptions.html">pyarrow.acero.TableSourceNodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.ScanNodeOptions.html">pyarrow.acero.ScanNodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.FilterNodeOptions.html">pyarrow.acero.FilterNodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.ProjectNodeOptions.html">pyarrow.acero.ProjectNodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.AggregateNodeOptions.html">pyarrow.acero.AggregateNodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.OrderByNodeOptions.html">pyarrow.acero.OrderByNodeOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.acero.HashJoinNodeOptions.html">pyarrow.acero.HashJoinNodeOptions</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/substrait.html">Substrait</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.run_query.html">pyarrow.substrait.run_query</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.BoundExpressions.html">pyarrow.substrait.BoundExpressions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.deserialize_expressions.html">pyarrow.substrait.deserialize_expressions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.serialize_expressions.html">pyarrow.substrait.serialize_expressions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.serialize_schema.html">pyarrow.substrait.serialize_schema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.deserialize_schema.html">pyarrow.substrait.deserialize_schema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.SubstraitSchema.html">pyarrow.substrait.SubstraitSchema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.substrait.get_supported_functions.html">pyarrow.substrait.get_supported_functions</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/files.html">Streams and File Access</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.input_stream.html">pyarrow.input_stream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.output_stream.html">pyarrow.output_stream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.memory_map.html">pyarrow.memory_map</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.create_memory_map.html">pyarrow.create_memory_map</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.NativeFile.html">pyarrow.NativeFile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.OSFile.html">pyarrow.OSFile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.PythonFile.html">pyarrow.PythonFile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BufferReader.html">pyarrow.BufferReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.BufferOutputStream.html">pyarrow.BufferOutputStream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.FixedSizeBufferWriter.html">pyarrow.FixedSizeBufferWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.MemoryMappedFile.html">pyarrow.MemoryMappedFile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.CompressedInputStream.html">pyarrow.CompressedInputStream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.CompressedOutputStream.html">pyarrow.CompressedOutputStream</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/ipc.html">Serialization and IPC</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.new_file.html">pyarrow.ipc.new_file</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.open_file.html">pyarrow.ipc.open_file</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.new_stream.html">pyarrow.ipc.new_stream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.open_stream.html">pyarrow.ipc.open_stream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.read_message.html">pyarrow.ipc.read_message</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.read_record_batch.html">pyarrow.ipc.read_record_batch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.get_record_batch_size.html">pyarrow.ipc.get_record_batch_size</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.read_tensor.html">pyarrow.ipc.read_tensor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.write_tensor.html">pyarrow.ipc.write_tensor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.get_tensor_size.html">pyarrow.ipc.get_tensor_size</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.IpcReadOptions.html">pyarrow.ipc.IpcReadOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.IpcWriteOptions.html">pyarrow.ipc.IpcWriteOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.Message.html">pyarrow.ipc.Message</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.MessageReader.html">pyarrow.ipc.MessageReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.RecordBatchFileReader.html">pyarrow.ipc.RecordBatchFileReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.RecordBatchFileWriter.html">pyarrow.ipc.RecordBatchFileWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.RecordBatchStreamReader.html">pyarrow.ipc.RecordBatchStreamReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.ipc.RecordBatchStreamWriter.html">pyarrow.ipc.RecordBatchStreamWriter</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/flight.html">Arrow Flight</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.Action.html">pyarrow.flight.Action</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ActionType.html">pyarrow.flight.ActionType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.DescriptorType.html">pyarrow.flight.DescriptorType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightDescriptor.html">pyarrow.flight.FlightDescriptor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightEndpoint.html">pyarrow.flight.FlightEndpoint</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightInfo.html">pyarrow.flight.FlightInfo</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.Location.html">pyarrow.flight.Location</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.MetadataRecordBatchReader.html">pyarrow.flight.MetadataRecordBatchReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.MetadataRecordBatchWriter.html">pyarrow.flight.MetadataRecordBatchWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.Ticket.html">pyarrow.flight.Ticket</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.Result.html">pyarrow.flight.Result</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.connect.html">pyarrow.flight.connect</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightCallOptions.html">pyarrow.flight.FlightCallOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightClient.html">pyarrow.flight.FlightClient</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightStreamReader.html">pyarrow.flight.FlightStreamReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightStreamWriter.html">pyarrow.flight.FlightStreamWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ClientMiddlewareFactory.html">pyarrow.flight.ClientMiddlewareFactory</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ClientMiddleware.html">pyarrow.flight.ClientMiddleware</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightDataStream.html">pyarrow.flight.FlightDataStream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightMetadataWriter.html">pyarrow.flight.FlightMetadataWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightServerBase.html">pyarrow.flight.FlightServerBase</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.GeneratorStream.html">pyarrow.flight.GeneratorStream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.RecordBatchStream.html">pyarrow.flight.RecordBatchStream</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ServerCallContext.html">pyarrow.flight.ServerCallContext</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ServerMiddlewareFactory.html">pyarrow.flight.ServerMiddlewareFactory</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ServerMiddleware.html">pyarrow.flight.ServerMiddleware</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ClientAuthHandler.html">pyarrow.flight.ClientAuthHandler</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.ServerAuthHandler.html">pyarrow.flight.ServerAuthHandler</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightError.html">pyarrow.flight.FlightError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightCancelledError.html">pyarrow.flight.FlightCancelledError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightInternalError.html">pyarrow.flight.FlightInternalError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightServerError.html">pyarrow.flight.FlightServerError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightTimedOutError.html">pyarrow.flight.FlightTimedOutError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightUnauthenticatedError.html">pyarrow.flight.FlightUnauthenticatedError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightUnauthorizedError.html">pyarrow.flight.FlightUnauthorizedError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightUnavailableError.html">pyarrow.flight.FlightUnavailableError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightWriteSizeExceededError.html">pyarrow.flight.FlightWriteSizeExceededError</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.FlightMethod.html">pyarrow.flight.FlightMethod</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.flight.CallInfo.html">pyarrow.flight.CallInfo</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/formats.html">Tabular File Formats</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.ConvertOptions.html">pyarrow.csv.ConvertOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.CSVStreamingReader.html">pyarrow.csv.CSVStreamingReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.CSVWriter.html">pyarrow.csv.CSVWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.ISO8601.html">pyarrow.csv.ISO8601</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.ParseOptions.html">pyarrow.csv.ParseOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.ReadOptions.html">pyarrow.csv.ReadOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.WriteOptions.html">pyarrow.csv.WriteOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.open_csv.html">pyarrow.csv.open_csv</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.read_csv.html">pyarrow.csv.read_csv</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.write_csv.html">pyarrow.csv.write_csv</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.csv.InvalidRow.html">pyarrow.csv.InvalidRow</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.feather.read_feather.html">pyarrow.feather.read_feather</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.feather.read_table.html">pyarrow.feather.read_table</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.feather.write_feather.html">pyarrow.feather.write_feather</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.json.ReadOptions.html">pyarrow.json.ReadOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.json.ParseOptions.html">pyarrow.json.ParseOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.json.open_json.html">pyarrow.json.open_json</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.json.read_json.html">pyarrow.json.read_json</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.ParquetDataset.html">pyarrow.parquet.ParquetDataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.ParquetFile.html">pyarrow.parquet.ParquetFile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.ParquetWriter.html">pyarrow.parquet.ParquetWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.read_table.html">pyarrow.parquet.read_table</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.read_metadata.html">pyarrow.parquet.read_metadata</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.read_pandas.html">pyarrow.parquet.read_pandas</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.read_schema.html">pyarrow.parquet.read_schema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.write_metadata.html">pyarrow.parquet.write_metadata</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.write_table.html">pyarrow.parquet.write_table</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.write_to_dataset.html">pyarrow.parquet.write_to_dataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.FileMetaData.html">pyarrow.parquet.FileMetaData</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.RowGroupMetaData.html">pyarrow.parquet.RowGroupMetaData</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.SortingColumn.html">pyarrow.parquet.SortingColumn</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.ColumnChunkMetaData.html">pyarrow.parquet.ColumnChunkMetaData</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.Statistics.html">pyarrow.parquet.Statistics</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.ParquetSchema.html">pyarrow.parquet.ParquetSchema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.ColumnSchema.html">pyarrow.parquet.ColumnSchema</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.ParquetLogicalType.html">pyarrow.parquet.ParquetLogicalType</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.encryption.CryptoFactory.html">pyarrow.parquet.encryption.CryptoFactory</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.encryption.KmsClient.html">pyarrow.parquet.encryption.KmsClient</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.encryption.KmsConnectionConfig.html">pyarrow.parquet.encryption.KmsConnectionConfig</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.encryption.EncryptionConfiguration.html">pyarrow.parquet.encryption.EncryptionConfiguration</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.parquet.encryption.DecryptionConfiguration.html">pyarrow.parquet.encryption.DecryptionConfiguration</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.orc.ORCFile.html">pyarrow.orc.ORCFile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.orc.ORCWriter.html">pyarrow.orc.ORCWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.orc.read_table.html">pyarrow.orc.read_table</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.orc.write_table.html">pyarrow.orc.write_table</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/filesystems.html">Filesystems</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.FileInfo.html">pyarrow.fs.FileInfo</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.FileSelector.html">pyarrow.fs.FileSelector</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.FileSystem.html">pyarrow.fs.FileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.LocalFileSystem.html">pyarrow.fs.LocalFileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.S3FileSystem.html">pyarrow.fs.S3FileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.GcsFileSystem.html">pyarrow.fs.GcsFileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.HadoopFileSystem.html">pyarrow.fs.HadoopFileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.SubTreeFileSystem.html">pyarrow.fs.SubTreeFileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.AzureFileSystem.html">pyarrow.fs.AzureFileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.PyFileSystem.html">pyarrow.fs.PyFileSystem</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.FileSystemHandler.html">pyarrow.fs.FileSystemHandler</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.FSSpecHandler.html">pyarrow.fs.FSSpecHandler</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.copy_files.html">pyarrow.fs.copy_files</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.initialize_s3.html">pyarrow.fs.initialize_s3</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.finalize_s3.html">pyarrow.fs.finalize_s3</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.resolve_s3_region.html">pyarrow.fs.resolve_s3_region</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.fs.S3LogLevel.html">pyarrow.fs.S3LogLevel</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/dataset.html">Dataset</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.dataset.html">pyarrow.dataset.dataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.parquet_dataset.html">pyarrow.dataset.parquet_dataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.partitioning.html">pyarrow.dataset.partitioning</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.field.html">pyarrow.dataset.field</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.scalar.html">pyarrow.dataset.scalar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.write_dataset.html">pyarrow.dataset.write_dataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.FileFormat.html">pyarrow.dataset.FileFormat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.CsvFileFormat.html">pyarrow.dataset.CsvFileFormat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.CsvFragmentScanOptions.html">pyarrow.dataset.CsvFragmentScanOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.IpcFileFormat.html">pyarrow.dataset.IpcFileFormat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.JsonFileFormat.html">pyarrow.dataset.JsonFileFormat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.ParquetFileFormat.html">pyarrow.dataset.ParquetFileFormat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.ParquetReadOptions.html">pyarrow.dataset.ParquetReadOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.ParquetFragmentScanOptions.html">pyarrow.dataset.ParquetFragmentScanOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.ParquetFileFragment.html">pyarrow.dataset.ParquetFileFragment</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.OrcFileFormat.html">pyarrow.dataset.OrcFileFormat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.Partitioning.html">pyarrow.dataset.Partitioning</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.PartitioningFactory.html">pyarrow.dataset.PartitioningFactory</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.DirectoryPartitioning.html">pyarrow.dataset.DirectoryPartitioning</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.HivePartitioning.html">pyarrow.dataset.HivePartitioning</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.FilenamePartitioning.html">pyarrow.dataset.FilenamePartitioning</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.Dataset.html">pyarrow.dataset.Dataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.FileSystemDataset.html">pyarrow.dataset.FileSystemDataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.FileSystemFactoryOptions.html">pyarrow.dataset.FileSystemFactoryOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.FileSystemDatasetFactory.html">pyarrow.dataset.FileSystemDatasetFactory</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.UnionDataset.html">pyarrow.dataset.UnionDataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.Fragment.html">pyarrow.dataset.Fragment</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.FragmentScanOptions.html">pyarrow.dataset.FragmentScanOptions</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.TaggedRecordBatch.html">pyarrow.dataset.TaggedRecordBatch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.Scanner.html">pyarrow.dataset.Scanner</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.Expression.html">pyarrow.dataset.Expression</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.InMemoryDataset.html">pyarrow.dataset.InMemoryDataset</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.WrittenFile.html">pyarrow.dataset.WrittenFile</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.dataset.get_partition_keys.html">pyarrow.dataset.get_partition_keys</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/cuda.html">CUDA Integration</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.Context.html">pyarrow.cuda.Context</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.CudaBuffer.html">pyarrow.cuda.CudaBuffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.new_host_buffer.html">pyarrow.cuda.new_host_buffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.HostBuffer.html">pyarrow.cuda.HostBuffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.BufferReader.html">pyarrow.cuda.BufferReader</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.BufferWriter.html">pyarrow.cuda.BufferWriter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.serialize_record_batch.html">pyarrow.cuda.serialize_record_batch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.read_record_batch.html">pyarrow.cuda.read_record_batch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.read_message.html">pyarrow.cuda.read_message</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cuda.IpcMemHandle.html">pyarrow.cuda.IpcMemHandle</a></li>
</ul>
</details></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="../../python/api/misc.html">Miscellaneous</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.cpu_count.html">pyarrow.cpu_count</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.set_cpu_count.html">pyarrow.set_cpu_count</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.io_thread_count.html">pyarrow.io_thread_count</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.set_io_thread_count.html">pyarrow.set_io_thread_count</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.get_include.html">pyarrow.get_include</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.get_libraries.html">pyarrow.get_libraries</a></li>
<li class="toctree-l4"><a class="reference internal" href="../../python/generated/pyarrow.get_library_dirs.html">pyarrow.get_library_dirs</a></li>
</ul>
</details></li>
</ul>
</details></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/getting_involved.html">Getting Involved</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../python/benchmarks.html">Benchmarks</a></li>
<li class="toctree-l2"><a class="reference external" href="https://arrow.apache.org/cookbook/py/">Python cookbook</a></li>
</ul>
</details></li>
<li class="toctree-l1"><a class="reference external" href="https://arrow.apache.org/docs/r">R</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/apache/arrow/blob/main/ruby/README.md">Ruby</a></li>
<li class="toctree-l1"><a class="reference external" href="https://docs.rs/crate/arrow/">Rust</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/apache/arrow-swift/blob/main/Arrow/README.md">Swift</a></li>
<li class="toctree-l1"><a class="reference external" href="https://arrow.apache.org/nanoarrow/">nanoarrow</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../status.html">Implementation Status</a></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
<div class="sidebar-primary-item">
<div id="ethical-ad-placement"
class="flat"
data-ea-publisher="readthedocs"
data-ea-type="readthedocs-sidebar"
data-ea-manual="true">
</div></div>
</div>
</div>
<main id="main-content" class="bd-main" role="main">
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article d-print-none">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item">
<nav aria-label="Breadcrumb" class="d-print-none">
<ul class="bd-breadcrumbs">
<li class="breadcrumb-item breadcrumb-home">
<a href="../../index.html" class="nav-link" aria-label="Home">
<i class="fa-solid fa-home"></i>
</a>
</li>
<li class="breadcrumb-item"><a href="../../implementations.html" class="nav-link">Implementations</a></li>
<li class="breadcrumb-item"><a href="../index.html" class="nav-link">C++ Implementation</a></li>
<li class="breadcrumb-item"><a href="index.html" class="nav-link">Examples</a></li>
<li class="breadcrumb-item active" aria-current="page"><span class="ellipsis">Row to columnar conversion</span></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="row-to-columnar-conversion">
<h1>Row to columnar conversion<a class="headerlink" href="#row-to-columnar-conversion" title="Link to this heading">#</a></h1>
<section id="fixed-schemas">
<h2>Fixed Schemas<a class="headerlink" href="#fixed-schemas" title="Link to this heading">#</a></h2>
<p>The following example converts an array of structs to a <a class="reference internal" href="../api/table.html#_CPPv4N5arrow5TableE" title="arrow::Table"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::Table</span></code></a>
instance, and then converts it back to the original array of structs.</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="c1">// Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="c1">// or more contributor license agreements. See the NOTICE file</span>
<span class="c1">// distributed with this work for additional information</span>
<span class="c1">// regarding copyright ownership. The ASF licenses this file</span>
<span class="c1">// to you under the Apache License, Version 2.0 (the</span>
<span class="c1">// &quot;License&quot;); you may not use this file except in compliance</span>
<span class="c1">// with the License. You may obtain a copy of the License at</span>
<span class="c1">//</span>
<span class="c1">// http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">//</span>
<span class="c1">// Unless required by applicable law or agreed to in writing,</span>
<span class="c1">// software distributed under the License is distributed on an</span>
<span class="c1">// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
<span class="c1">// KIND, either express or implied. See the License for the</span>
<span class="c1">// specific language governing permissions and limitations</span>
<span class="c1">// under the License.</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;arrow/api.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;arrow/result.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;cstdint&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;iomanip&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;iostream&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;vector&gt;</span>
<span class="k">using</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">DoubleBuilder</span><span class="p">;</span>
<span class="k">using</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Int64Builder</span><span class="p">;</span>
<span class="k">using</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ListBuilder</span><span class="p">;</span>
<span class="c1">// While we want to use columnar data structures to build efficient operations, we</span>
<span class="c1">// often receive data in a row-wise fashion from other systems. In the following,</span>
<span class="c1">// we want give a brief introduction into the classes provided by Apache Arrow by</span>
<span class="c1">// showing how to transform row-wise data into a columnar table.</span>
<span class="c1">//</span>
<span class="c1">// The table contains an id for a product, the number of components in the product</span>
<span class="c1">// and the cost of each component.</span>
<span class="c1">//</span>
<span class="c1">// The data in this example is stored in the following struct:</span>
<span class="k">struct</span><span class="w"> </span><span class="nc">data_row</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">id</span><span class="p">;</span>
<span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">components</span><span class="p">;</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span><span class="w"> </span><span class="n">component_cost</span><span class="p">;</span>
<span class="p">};</span>
<span class="c1">// Transforming a vector of structs into a columnar Table.</span>
<span class="c1">//</span>
<span class="c1">// The final representation should be an `arrow::Table` which in turn</span>
<span class="c1">// is made up of an `arrow::Schema` and a list of</span>
<span class="c1">// `arrow::ChunkedArray` instances. As the first step, we will iterate</span>
<span class="c1">// over the data and build up the arrays incrementally. For this</span>
<span class="c1">// task, we provide `arrow::ArrayBuilder` classes that help in the</span>
<span class="c1">// construction of the final `arrow::Array` instances.</span>
<span class="c1">//</span>
<span class="c1">// For each type, Arrow has a specially typed builder class. For the primitive</span>
<span class="c1">// values `id` and `components` we can use the `arrow::Int64Builder`. For the</span>
<span class="c1">// `component_cost` vector, we need to have two builders, a top-level</span>
<span class="c1">// `arrow::ListBuilder` that builds the array of offsets and a nested</span>
<span class="c1">// `arrow::DoubleBuilder` that constructs the underlying values array that</span>
<span class="c1">// is referenced by the offsets in the former array.</span>
<span class="n">arrow</span><span class="o">::</span><span class="n">Result</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Table</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">VectorToColumnarTable</span><span class="p">(</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="k">struct</span><span class="w"> </span><span class="nc">data_row</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">rows</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// The builders are more efficient using</span>
<span class="w"> </span><span class="c1">// arrow::jemalloc::MemoryPool::default_pool() as this can increase the size of</span>
<span class="w"> </span><span class="c1">// the underlying memory regions in-place. At the moment, arrow::jemalloc is only</span>
<span class="w"> </span><span class="c1">// supported on Unix systems, not Windows.</span>
<span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">MemoryPool</span><span class="o">*</span><span class="w"> </span><span class="n">pool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">default_memory_pool</span><span class="p">();</span>
<span class="w"> </span><span class="n">Int64Builder</span><span class="w"> </span><span class="nf">id_builder</span><span class="p">(</span><span class="n">pool</span><span class="p">);</span>
<span class="w"> </span><span class="n">Int64Builder</span><span class="w"> </span><span class="nf">components_builder</span><span class="p">(</span><span class="n">pool</span><span class="p">);</span>
<span class="w"> </span><span class="n">ListBuilder</span><span class="w"> </span><span class="nf">component_cost_builder</span><span class="p">(</span><span class="n">pool</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o">&lt;</span><span class="n">DoubleBuilder</span><span class="o">&gt;</span><span class="p">(</span><span class="n">pool</span><span class="p">));</span>
<span class="w"> </span><span class="c1">// The following builder is owned by component_cost_builder.</span>
<span class="w"> </span><span class="n">DoubleBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">component_item_cost_builder</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="p">(</span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">DoubleBuilder</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">component_cost_builder</span><span class="p">.</span><span class="n">value_builder</span><span class="p">()));</span>
<span class="w"> </span><span class="c1">// Now we can loop over our existing data and insert it into the builders. The</span>
<span class="w"> </span><span class="c1">// `Append` calls here may fail (e.g. we cannot allocate enough additional memory).</span>
<span class="w"> </span><span class="c1">// Thus we need to check their return values. For more information on these values,</span>
<span class="w"> </span><span class="c1">// check the documentation about `arrow::Status`.</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">data_row</span><span class="o">&amp;</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">rows</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">id_builder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="n">row</span><span class="p">.</span><span class="n">id</span><span class="p">));</span>
<span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">components_builder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="n">row</span><span class="p">.</span><span class="n">components</span><span class="p">));</span>
<span class="w"> </span><span class="c1">// Indicate the start of a new list row. This will memorise the current</span>
<span class="w"> </span><span class="c1">// offset in the values builder.</span>
<span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">component_cost_builder</span><span class="p">.</span><span class="n">Append</span><span class="p">());</span>
<span class="w"> </span><span class="c1">// Store the actual values. The same memory layout is</span>
<span class="w"> </span><span class="c1">// used for the component cost data, in this case a vector of</span>
<span class="w"> </span><span class="c1">// type double, as for the memory that Arrow uses to hold this</span>
<span class="w"> </span><span class="c1">// data and will be created.</span>
<span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">component_item_cost_builder</span><span class="o">-&gt;</span><span class="n">AppendValues</span><span class="p">(</span>
<span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">component_cost</span><span class="p">.</span><span class="n">data</span><span class="p">(),</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">component_cost</span><span class="p">.</span><span class="n">size</span><span class="p">()));</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// At the end, we finalise the arrays, declare the (type) schema and combine them</span>
<span class="w"> </span><span class="c1">// into a single `arrow::Table`:</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">&gt;</span><span class="w"> </span><span class="n">id_array</span><span class="p">;</span>
<span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">id_builder</span><span class="p">.</span><span class="n">Finish</span><span class="p">(</span><span class="o">&amp;</span><span class="n">id_array</span><span class="p">));</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">&gt;</span><span class="w"> </span><span class="n">components_array</span><span class="p">;</span>
<span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">components_builder</span><span class="p">.</span><span class="n">Finish</span><span class="p">(</span><span class="o">&amp;</span><span class="n">components_array</span><span class="p">));</span>
<span class="w"> </span><span class="c1">// No need to invoke component_item_cost_builder.Finish because it is implied by</span>
<span class="w"> </span><span class="c1">// the parent builder&#39;s Finish invocation.</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">&gt;</span><span class="w"> </span><span class="n">component_cost_array</span><span class="p">;</span>
<span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">component_cost_builder</span><span class="p">.</span><span class="n">Finish</span><span class="p">(</span><span class="o">&amp;</span><span class="n">component_cost_array</span><span class="p">));</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">schema_vector</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">&quot;id&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">int64</span><span class="p">()),</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">&quot;components&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">int64</span><span class="p">()),</span>
<span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">&quot;component_cost&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">list</span><span class="p">(</span><span class="n">arrow</span><span class="o">::</span><span class="n">float64</span><span class="p">()))};</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">schema</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Schema</span><span class="o">&gt;</span><span class="p">(</span><span class="n">schema_vector</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// The final `table` variable is the one we can then pass on to other functions</span>
<span class="w"> </span><span class="c1">// that can consume Apache Arrow memory structures. This object has ownership of</span>
<span class="w"> </span><span class="c1">// all referenced data, thus we don&#39;t have to care about undefined references once</span>
<span class="w"> </span><span class="c1">// we leave the scope of the function building the table and its underlying arrays.</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Table</span><span class="o">&gt;</span><span class="w"> </span><span class="n">table</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Table</span><span class="o">::</span><span class="n">Make</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="n">id_array</span><span class="p">,</span><span class="w"> </span><span class="n">components_array</span><span class="p">,</span><span class="w"> </span><span class="n">component_cost_array</span><span class="p">});</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">table</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">arrow</span><span class="o">::</span><span class="n">Result</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">data_row</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">ColumnarTableToVector</span><span class="p">(</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Table</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">table</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// To convert an Arrow table back into the same row-wise representation as in the</span>
<span class="w"> </span><span class="c1">// above section, we first will check that the table conforms to our expected</span>
<span class="w"> </span><span class="c1">// schema and then will build up the vector of rows incrementally.</span>
<span class="w"> </span><span class="c1">//</span>
<span class="w"> </span><span class="c1">// For the check if the table is as expected, we can utilise solely its schema.</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">schema_vector</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">&quot;id&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">int64</span><span class="p">()),</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">&quot;components&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">int64</span><span class="p">()),</span>
<span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">field</span><span class="p">(</span><span class="s">&quot;component_cost&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">list</span><span class="p">(</span><span class="n">arrow</span><span class="o">::</span><span class="n">float64</span><span class="p">()))};</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">expected_schema</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Schema</span><span class="o">&gt;</span><span class="p">(</span><span class="n">schema_vector</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">expected_schema</span><span class="o">-&gt;</span><span class="n">Equals</span><span class="p">(</span><span class="o">*</span><span class="n">table</span><span class="o">-&gt;</span><span class="n">schema</span><span class="p">()))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// The table doesn&#39;t have the expected schema thus we cannot directly</span>
<span class="w"> </span><span class="c1">// convert it to our target representation.</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">Invalid</span><span class="p">(</span><span class="s">&quot;Schemas are not matching!&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// As we have ensured that the table has the expected structure, we can unpack the</span>
<span class="w"> </span><span class="c1">// underlying arrays. For the primitive columns `id` and `components` we can use the</span>
<span class="w"> </span><span class="c1">// high level functions to get the values whereas for the nested column</span>
<span class="w"> </span><span class="c1">// `component_costs` we need to access the C-pointer to the data to copy its</span>
<span class="w"> </span><span class="c1">// contents into the resulting `std::vector&lt;double&gt;`. Here we need to be careful to</span>
<span class="w"> </span><span class="c1">// also add the offset to the pointer. This offset is needed to enable zero-copy</span>
<span class="w"> </span><span class="c1">// slicing operations. While this could be adjusted automatically for double</span>
<span class="w"> </span><span class="c1">// arrays, this cannot be done for the accompanying bitmap as often the slicing</span>
<span class="w"> </span><span class="c1">// border would be inside a byte.</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ids</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">static_pointer_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Int64Array</span><span class="o">&gt;</span><span class="p">(</span><span class="n">table</span><span class="o">-&gt;</span><span class="n">column</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">chunk</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">components</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">static_pointer_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Int64Array</span><span class="o">&gt;</span><span class="p">(</span><span class="n">table</span><span class="o">-&gt;</span><span class="n">column</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">chunk</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">component_cost</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">static_pointer_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">ListArray</span><span class="o">&gt;</span><span class="p">(</span><span class="n">table</span><span class="o">-&gt;</span><span class="n">column</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">chunk</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">component_cost_values</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">static_pointer_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">DoubleArray</span><span class="o">&gt;</span><span class="p">(</span><span class="n">component_cost</span><span class="o">-&gt;</span><span class="n">values</span><span class="p">());</span>
<span class="w"> </span><span class="c1">// To enable zero-copy slices, the native values pointer might need to account</span>
<span class="w"> </span><span class="c1">// for this slicing offset. This is not needed for the higher level functions</span>
<span class="w"> </span><span class="c1">// like Value(…) that already account for this offset internally.</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="w"> </span><span class="n">ccv_ptr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">component_cost_values</span><span class="o">-&gt;</span><span class="n">raw_values</span><span class="p">();</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">data_row</span><span class="o">&gt;</span><span class="w"> </span><span class="n">rows</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">table</span><span class="o">-&gt;</span><span class="n">num_rows</span><span class="p">();</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Another simplification in this example is that we assume that there are</span>
<span class="w"> </span><span class="c1">// no null entries, e.g. each row is fill with valid values.</span>
<span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ids</span><span class="o">-&gt;</span><span class="n">Value</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">component</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">components</span><span class="o">-&gt;</span><span class="n">Value</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="w"> </span><span class="n">first</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ccv_ptr</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">component_cost</span><span class="o">-&gt;</span><span class="n">value_offset</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ccv_ptr</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">component_cost</span><span class="o">-&gt;</span><span class="n">value_offset</span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span><span class="w"> </span><span class="n">components_vec</span><span class="p">(</span><span class="n">first</span><span class="p">,</span><span class="w"> </span><span class="n">last</span><span class="p">);</span>
<span class="w"> </span><span class="n">rows</span><span class="p">.</span><span class="n">push_back</span><span class="p">({</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">component</span><span class="p">,</span><span class="w"> </span><span class="n">components_vec</span><span class="p">});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">rows</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">RunRowConversion</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">data_row</span><span class="o">&gt;</span><span class="w"> </span><span class="n">original_rows</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="mf">10.0</span><span class="p">}},</span><span class="w"> </span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="mf">11.0</span><span class="p">,</span><span class="w"> </span><span class="mf">12.0</span><span class="p">,</span><span class="w"> </span><span class="mf">13.0</span><span class="p">}},</span><span class="w"> </span><span class="p">{</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="mf">15.0</span><span class="p">,</span><span class="w"> </span><span class="mf">25.0</span><span class="p">}}};</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Table</span><span class="o">&gt;</span><span class="w"> </span><span class="n">table</span><span class="p">;</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">data_row</span><span class="o">&gt;</span><span class="w"> </span><span class="n">converted_rows</span><span class="p">;</span>
<span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="n">table</span><span class="p">,</span><span class="w"> </span><span class="n">VectorToColumnarTable</span><span class="p">(</span><span class="n">original_rows</span><span class="p">));</span>
<span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="n">converted_rows</span><span class="p">,</span><span class="w"> </span><span class="n">ColumnarTableToVector</span><span class="p">(</span><span class="n">table</span><span class="p">));</span>
<span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="n">original_rows</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">converted_rows</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
<span class="w"> </span><span class="c1">// Print out contents of table, should get</span>
<span class="w"> </span><span class="c1">// ID Components Component prices</span>
<span class="w"> </span><span class="c1">// 1 1 10</span>
<span class="w"> </span><span class="c1">// 2 3 11 12 13</span>
<span class="w"> </span><span class="c1">// 3 2 15 25</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">setw</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;ID &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">setw</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span>
<span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Components &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">setw</span><span class="p">(</span><span class="mi">15</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Component prices &quot;</span>
<span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">converted_rows</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">setw</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">setw</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span>
<span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">components</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">cost</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">component_cost</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">setw</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">cost</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="p">}</span>
<span class="kt">int</span><span class="w"> </span><span class="n">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="o">**</span><span class="w"> </span><span class="n">argv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RunRowConversion</span><span class="p">();</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">status</span><span class="p">.</span><span class="n">ok</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">status</span><span class="p">.</span><span class="n">ToString</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">EXIT_FAILURE</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">EXIT_SUCCESS</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="dynamic-schemas">
<h2>Dynamic Schemas<a class="headerlink" href="#dynamic-schemas" title="Link to this heading">#</a></h2>
<p>In many cases, we need to convert to and from row data that does not have a
schema known at compile time. To help implement these conversions, this library
provides several utilities:</p>
<ul class="simple">
<li><p><a class="reference internal" href="../api/builder.html#_CPPv4N5arrow18RecordBatchBuilderE" title="arrow::RecordBatchBuilder"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::RecordBatchBuilder</span></code></a>: creates and manages array builders for
a full record batch.</p></li>
<li><p><a class="reference internal" href="../api/utilities.html#_CPPv4I0DpEN5arrow15VisitTypeInlineE6StatusRK8DataTypeP7VISITORDpRR4ARGS" title="arrow::VisitTypeInline"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">arrow::VisitTypeInline()</span></code></a>: dispatch to functions specialized for the given
array type.</p></li>
<li><p><a class="reference internal" href="../api/utilities.html#type-traits"><span class="std std-ref">Type Traits</span></a> (such as <code class="docutils literal notranslate"><span class="pre">arrow::enable_if_primitive_ctype</span></code>): narrow template
functions to specific Arrow types, useful in conjunction with
the <a class="reference internal" href="../datatypes.html#cpp-visitor-pattern"><span class="std std-ref">Visitor Pattern</span></a>.</p></li>
<li><p><a class="reference internal" href="../api/table.html#_CPPv4N5arrow16TableBatchReaderE" title="arrow::TableBatchReader"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::TableBatchReader</span></code></a>: read a table in a batch at a time, with each
batch being a zero-copy slice.</p></li>
</ul>
<p>The following example shows how to implement conversion between <code class="docutils literal notranslate"><span class="pre">rapidjson::Document</span></code>
and Arrow objects. You can read the full code example at
<a class="github reference external" href="https://github.com/apache/arrow/blob/main/cpp/examples/arrow/rapidjson_row_converter.cc">apache/arrow</a></p>
<section id="writing-conversions-to-arrow">
<h3>Writing conversions to Arrow<a class="headerlink" href="#writing-conversions-to-arrow" title="Link to this heading">#</a></h3>
<p>To convert rows to Arrow record batches, we’ll setup Array builders for all the columns
and then for each field iterate through row values and append to the builders.
We assume that we already know the target schema, which may have
been provided by another system or was inferred in another function. Inferring
the schema <em>during</em> conversion is a challenging proposition; many systems will
check the first N rows to infer a schema if there is none already available.</p>
<p>At the top level, we define a function <code class="docutils literal notranslate"><span class="pre">ConvertToRecordBatch</span></code>:</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="linenos">495</span><span class="n">arrow</span><span class="o">::</span><span class="n">Result</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatch</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">ConvertToRecordBatch</span><span class="p">(</span>
<span class="linenos">496</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">rows</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Schema</span><span class="o">&gt;</span><span class="w"> </span><span class="n">schema</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">497</span><span class="w"> </span><span class="c1">// RecordBatchBuilder will create array builders for us for each field in our</span>
<span class="linenos">498</span><span class="w"> </span><span class="c1">// schema. By passing the number of output rows (`rows.size()`) we can</span>
<span class="linenos">499</span><span class="w"> </span><span class="c1">// pre-allocate the correct size of arrays, except of course in the case of</span>
<span class="linenos">500</span><span class="w"> </span><span class="c1">// string, byte, and list arrays, which have dynamic lengths.</span>
<span class="linenos">501</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatchBuilder</span><span class="o">&gt;</span><span class="w"> </span><span class="n">batch_builder</span><span class="p">;</span>
<span class="linenos">502</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span>
<span class="linenos">503</span><span class="w"> </span><span class="n">batch_builder</span><span class="p">,</span>
<span class="linenos">504</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatchBuilder</span><span class="o">::</span><span class="n">Make</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">default_memory_pool</span><span class="p">(),</span><span class="w"> </span><span class="n">rows</span><span class="p">.</span><span class="n">size</span><span class="p">()));</span>
<span class="linenos">505</span>
<span class="linenos">506</span><span class="w"> </span><span class="c1">// Inner converter will take rows and be responsible for appending values</span>
<span class="linenos">507</span><span class="w"> </span><span class="c1">// to provided array builders.</span>
<span class="linenos">508</span><span class="w"> </span><span class="n">JsonValueConverter</span><span class="w"> </span><span class="nf">converter</span><span class="p">(</span><span class="n">rows</span><span class="p">);</span>
<span class="linenos">509</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">batch_builder</span><span class="o">-&gt;</span><span class="n">num_fields</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">510</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">&gt;</span><span class="w"> </span><span class="n">field</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">schema</span><span class="o">-&gt;</span><span class="n">field</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="linenos">511</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">batch_builder</span><span class="o">-&gt;</span><span class="n">GetField</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="linenos">512</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">converter</span><span class="p">.</span><span class="n">Convert</span><span class="p">(</span><span class="o">*</span><span class="n">field</span><span class="p">.</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="n">builder</span><span class="p">));</span>
<span class="linenos">513</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">514</span>
<span class="linenos">515</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatch</span><span class="o">&gt;</span><span class="w"> </span><span class="n">batch</span><span class="p">;</span>
<span class="linenos">516</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="n">batch</span><span class="p">,</span><span class="w"> </span><span class="n">batch_builder</span><span class="o">-&gt;</span><span class="n">Flush</span><span class="p">());</span>
<span class="linenos">517</span>
<span class="linenos">518</span><span class="w"> </span><span class="c1">// Use RecordBatch::ValidateFull() to make sure arrays were correctly constructed.</span>
<span class="linenos">519</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">batch</span><span class="o">-&gt;</span><span class="n">ValidateFull</span><span class="p">());</span>
<span class="linenos">520</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">batch</span><span class="p">;</span>
<span class="linenos">521</span><span class="p">}</span><span class="w"> </span><span class="c1">// ConvertToRecordBatch</span>
</pre></div>
</div>
<p>First we use <a class="reference internal" href="../api/builder.html#_CPPv4N5arrow18RecordBatchBuilderE" title="arrow::RecordBatchBuilder"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::RecordBatchBuilder</span></code></a>, which conveniently creates builders
for each field in the schema. Then we iterate over the fields of the schema, get
the builder, and call <code class="docutils literal notranslate"><span class="pre">Convert()</span></code> on our <code class="docutils literal notranslate"><span class="pre">JsonValueConverter</span></code> (to be discussed
next). At the end, we call <code class="docutils literal notranslate"><span class="pre">batch-&gt;ValidateFull()</span></code>, which checks the integrity
of our arrays to make sure the conversion was performed correctly, which is useful
for debugging new conversion implementations.</p>
<p>One level down, the <code class="docutils literal notranslate"><span class="pre">JsonValueConverter</span></code> is responsible for appending row values
for the provided field to a provided array builder. In order to specialize logic
for each data type, it implements <code class="docutils literal notranslate"><span class="pre">Visit</span></code> methods and calls <a class="reference internal" href="../api/utilities.html#_CPPv4I0DpEN5arrow15VisitTypeInlineE6StatusRK8DataTypeP7VISITORDpRR4ARGS" title="arrow::VisitTypeInline"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">arrow::VisitTypeInline()</span></code></a>.
(See more about type visitors in <a class="reference internal" href="../datatypes.html#cpp-visitor-pattern"><span class="std std-ref">Visitor Pattern</span></a>.)</p>
<p>At the end of that class is the private method <code class="docutils literal notranslate"><span class="pre">FieldValues()</span></code>, which returns
an iterator of the column values for the current field across the rows. In
row-based structures that are flat (such as a vector of values) this may be
trivial to implement. But if the schema is nested, as in the case of JSON documents,
a special iterator is needed to navigate the levels of nesting. See the
<a class="reference external" href="https://github.com/apache/arrow/blob/main/cpp/examples/arrow/rapidjson_row_converter.cc">full example</a>
for the implementation details of <code class="docutils literal notranslate"><span class="pre">DocValuesIterator</span></code>.</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="linenos">323</span><span class="k">class</span><span class="w"> </span><span class="nc">JsonValueConverter</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">324</span><span class="w"> </span><span class="k">public</span><span class="o">:</span>
<span class="linenos">325</span><span class="w"> </span><span class="k">explicit</span><span class="w"> </span><span class="n">JsonValueConverter</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">rows</span><span class="p">)</span>
<span class="linenos">326</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">rows_</span><span class="p">(</span><span class="n">rows</span><span class="p">),</span><span class="w"> </span><span class="n">array_levels_</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span>
<span class="linenos">327</span>
<span class="linenos">328</span><span class="w"> </span><span class="n">JsonValueConverter</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">rows</span><span class="p">,</span>
<span class="linenos">329</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">root_path</span><span class="p">,</span><span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">array_levels</span><span class="p">)</span>
<span class="linenos">330</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">rows_</span><span class="p">(</span><span class="n">rows</span><span class="p">),</span><span class="w"> </span><span class="n">root_path_</span><span class="p">(</span><span class="n">root_path</span><span class="p">),</span><span class="w"> </span><span class="n">array_levels_</span><span class="p">(</span><span class="n">array_levels</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span>
<span class="linenos">331</span>
<span class="linenos">332</span><span class="w"> </span><span class="c1">/// \brief For field passed in, append corresponding values to builder</span>
<span class="linenos">333</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Convert</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">&amp;</span><span class="w"> </span><span class="n">field</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">334</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Convert</span><span class="p">(</span><span class="n">field</span><span class="p">,</span><span class="w"> </span><span class="n">field</span><span class="p">.</span><span class="n">name</span><span class="p">(),</span><span class="w"> </span><span class="n">builder</span><span class="p">);</span>
<span class="linenos">335</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">336</span>
<span class="linenos">337</span><span class="w"> </span><span class="c1">/// \brief For field passed in, append corresponding values to builder</span>
<span class="linenos">338</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Convert</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">&amp;</span><span class="w"> </span><span class="n">field</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span><span class="w"> </span><span class="n">field_name</span><span class="p">,</span>
<span class="linenos">339</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">340</span><span class="w"> </span><span class="n">field_name_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">field_name</span><span class="p">;</span>
<span class="linenos">341</span><span class="w"> </span><span class="n">builder_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">;</span>
<span class="linenos">342</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">arrow</span><span class="o">::</span><span class="n">VisitTypeInline</span><span class="p">(</span><span class="o">*</span><span class="n">field</span><span class="p">.</span><span class="n">type</span><span class="p">().</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="k">this</span><span class="p">));</span>
<span class="linenos">343</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">344</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">345</span>
<span class="linenos">346</span><span class="w"> </span><span class="c1">// Default implementation</span>
<span class="linenos">347</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">DataType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">348</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">NotImplemented</span><span class="p">(</span>
<span class="linenos">349</span><span class="w"> </span><span class="s">&quot;Cannot convert json value to Arrow array of type &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">type</span><span class="p">.</span><span class="n">ToString</span><span class="p">());</span>
<span class="linenos">350</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">351</span>
<span class="linenos">352</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Int64Type</span><span class="o">&amp;</span><span class="w"> </span><span class="n">type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">353</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Int64Builder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Int64Builder</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">builder_</span><span class="p">);</span>
<span class="linenos">354</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">maybe_value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">FieldValues</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">355</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">maybe_value</span><span class="p">);</span>
<span class="linenos">356</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsNull</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">357</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">AppendNull</span><span class="p">());</span>
<span class="linenos">358</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">359</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsUint</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">360</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">GetUint</span><span class="p">()));</span>
<span class="linenos">361</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsInt</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">362</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">GetInt</span><span class="p">()));</span>
<span class="linenos">363</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsUint64</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">364</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">GetUint64</span><span class="p">()));</span>
<span class="linenos">365</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsInt64</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">366</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">GetInt64</span><span class="p">()));</span>
<span class="linenos">367</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">368</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">Invalid</span><span class="p">(</span><span class="s">&quot;Value is not an integer&quot;</span><span class="p">);</span>
<span class="linenos">369</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">370</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">371</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">372</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">373</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">374</span>
<span class="linenos">375</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">DoubleType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">376</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">DoubleBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">DoubleBuilder</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">builder_</span><span class="p">);</span>
<span class="linenos">377</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">maybe_value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">FieldValues</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">378</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">maybe_value</span><span class="p">);</span>
<span class="linenos">379</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsNull</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">380</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">AppendNull</span><span class="p">());</span>
<span class="linenos">381</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">382</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">GetDouble</span><span class="p">()));</span>
<span class="linenos">383</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">384</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">385</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">386</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">387</span>
<span class="linenos">388</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">StringType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">389</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">StringBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">StringBuilder</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">builder_</span><span class="p">);</span>
<span class="linenos">390</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">maybe_value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">FieldValues</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">391</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">maybe_value</span><span class="p">);</span>
<span class="linenos">392</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsNull</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">393</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">AppendNull</span><span class="p">());</span>
<span class="linenos">394</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">395</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">GetString</span><span class="p">()));</span>
<span class="linenos">396</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">397</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">398</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">399</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">400</span>
<span class="linenos">401</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">BooleanType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">402</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">BooleanBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">BooleanBuilder</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">builder_</span><span class="p">);</span>
<span class="linenos">403</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">maybe_value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">FieldValues</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">404</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">maybe_value</span><span class="p">);</span>
<span class="linenos">405</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsNull</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">406</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">AppendNull</span><span class="p">());</span>
<span class="linenos">407</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">408</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">GetBool</span><span class="p">()));</span>
<span class="linenos">409</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">410</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">411</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">412</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">413</span>
<span class="linenos">414</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">StructType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">415</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">StructBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">StructBuilder</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">builder_</span><span class="p">);</span>
<span class="linenos">416</span>
<span class="linenos">417</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&gt;</span><span class="w"> </span><span class="n">child_path</span><span class="p">(</span><span class="n">root_path_</span><span class="p">);</span>
<span class="linenos">418</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">field_name_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">419</span><span class="w"> </span><span class="n">child_path</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">field_name_</span><span class="p">);</span>
<span class="linenos">420</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">421</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">child_converter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">JsonValueConverter</span><span class="p">(</span><span class="n">rows_</span><span class="p">,</span><span class="w"> </span><span class="n">child_path</span><span class="p">,</span><span class="w"> </span><span class="n">array_levels_</span><span class="p">);</span>
<span class="linenos">422</span>
<span class="linenos">423</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">type</span><span class="p">.</span><span class="n">num_fields</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">424</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">&gt;</span><span class="w"> </span><span class="n">child_field</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">type</span><span class="p">.</span><span class="n">field</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="linenos">425</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayBuilder</span><span class="o">&gt;</span><span class="w"> </span><span class="n">child_builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">child_builder</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="linenos">426</span>
<span class="linenos">427</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span>
<span class="linenos">428</span><span class="w"> </span><span class="n">child_converter</span><span class="p">.</span><span class="n">Convert</span><span class="p">(</span><span class="o">*</span><span class="n">child_field</span><span class="p">.</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="n">child_builder</span><span class="p">.</span><span class="n">get</span><span class="p">()));</span>
<span class="linenos">429</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">430</span>
<span class="linenos">431</span><span class="w"> </span><span class="c1">// Make null bitmap</span>
<span class="linenos">432</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">maybe_value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">FieldValues</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">433</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">maybe_value</span><span class="p">);</span>
<span class="linenos">434</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="o">!</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsNull</span><span class="p">()));</span>
<span class="linenos">435</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">436</span>
<span class="linenos">437</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">438</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">439</span>
<span class="linenos">440</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ListType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">441</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ListBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">ListBuilder</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">builder_</span><span class="p">);</span>
<span class="linenos">442</span>
<span class="linenos">443</span><span class="w"> </span><span class="c1">// Values and offsets needs to be interleaved in ListBuilder, so first collect the</span>
<span class="linenos">444</span><span class="w"> </span><span class="c1">// values</span>
<span class="linenos">445</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayBuilder</span><span class="o">&gt;</span><span class="w"> </span><span class="n">tmp_value_builder</span><span class="p">;</span>
<span class="linenos">446</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="n">tmp_value_builder</span><span class="p">,</span>
<span class="linenos">447</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">MakeBuilder</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">value_builder</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">type</span><span class="p">()));</span>
<span class="linenos">448</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&gt;</span><span class="w"> </span><span class="n">child_path</span><span class="p">(</span><span class="n">root_path_</span><span class="p">);</span>
<span class="linenos">449</span><span class="w"> </span><span class="n">child_path</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">field_name_</span><span class="p">);</span>
<span class="linenos">450</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">child_converter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">JsonValueConverter</span><span class="p">(</span><span class="n">rows_</span><span class="p">,</span><span class="w"> </span><span class="n">child_path</span><span class="p">,</span><span class="w"> </span><span class="n">array_levels_</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="linenos">451</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span>
<span class="linenos">452</span><span class="w"> </span><span class="n">child_converter</span><span class="p">.</span><span class="n">Convert</span><span class="p">(</span><span class="o">*</span><span class="n">type</span><span class="p">.</span><span class="n">value_field</span><span class="p">().</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_value_builder</span><span class="p">.</span><span class="n">get</span><span class="p">()));</span>
<span class="linenos">453</span>
<span class="linenos">454</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">&gt;</span><span class="w"> </span><span class="n">values_array</span><span class="p">;</span>
<span class="linenos">455</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">tmp_value_builder</span><span class="o">-&gt;</span><span class="n">Finish</span><span class="p">(</span><span class="o">&amp;</span><span class="n">values_array</span><span class="p">));</span>
<span class="linenos">456</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayData</span><span class="o">&gt;</span><span class="w"> </span><span class="n">values_data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">values_array</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">();</span>
<span class="linenos">457</span>
<span class="linenos">458</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">value_builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">value_builder</span><span class="p">();</span>
<span class="linenos">459</span><span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">offset</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="linenos">460</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">maybe_value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">FieldValues</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">461</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">maybe_value</span><span class="p">);</span>
<span class="linenos">462</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">builder</span><span class="o">-&gt;</span><span class="n">Append</span><span class="p">(</span><span class="o">!</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsNull</span><span class="p">()));</span>
<span class="linenos">463</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">value</span><span class="o">-&gt;</span><span class="n">IsNull</span><span class="p">()</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">value</span><span class="o">-&gt;</span><span class="n">Size</span><span class="p">()</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">464</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span>
<span class="linenos">465</span><span class="w"> </span><span class="n">value_builder</span><span class="o">-&gt;</span><span class="n">AppendArraySlice</span><span class="p">(</span><span class="o">*</span><span class="n">values_data</span><span class="p">.</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="n">offset</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="o">-&gt;</span><span class="n">Size</span><span class="p">()));</span>
<span class="linenos">466</span><span class="w"> </span><span class="n">offset</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">value</span><span class="o">-&gt;</span><span class="n">Size</span><span class="p">();</span>
<span class="linenos">467</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">468</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">469</span>
<span class="linenos">470</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">471</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">472</span>
<span class="linenos">473</span><span class="w"> </span><span class="k">private</span><span class="o">:</span>
<span class="linenos">474</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">field_name_</span><span class="p">;</span>
<span class="linenos">475</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ArrayBuilder</span><span class="o">*</span><span class="w"> </span><span class="n">builder_</span><span class="p">;</span>
<span class="linenos">476</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">rows_</span><span class="p">;</span>
<span class="linenos">477</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&gt;</span><span class="w"> </span><span class="n">root_path_</span><span class="p">;</span>
<span class="linenos">478</span><span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">array_levels_</span><span class="p">;</span>
<span class="linenos">479</span>
<span class="linenos">480</span><span class="w"> </span><span class="c1">/// Return a flattened iterator over values at nested location</span>
<span class="linenos">481</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Iterator</span><span class="o">&lt;</span><span class="k">const</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="o">*&gt;</span><span class="w"> </span><span class="n">FieldValues</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">482</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&gt;</span><span class="w"> </span><span class="n">path</span><span class="p">(</span><span class="n">root_path_</span><span class="p">);</span>
<span class="linenos">483</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">field_name_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">484</span><span class="w"> </span><span class="n">path</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">field_name_</span><span class="p">);</span>
<span class="linenos">485</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">486</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DocValuesIterator</span><span class="p">(</span><span class="n">rows_</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">path</span><span class="p">),</span><span class="w"> </span><span class="n">array_levels_</span><span class="p">);</span>
<span class="linenos">487</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">fn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">iter</span><span class="p">]()</span><span class="w"> </span><span class="k">mutable</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Result</span><span class="o">&lt;</span><span class="k">const</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="o">*&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">488</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">iter</span><span class="p">.</span><span class="n">Next</span><span class="p">();</span>
<span class="linenos">489</span><span class="w"> </span><span class="p">};</span>
<span class="linenos">490</span>
<span class="linenos">491</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">MakeFunctionIterator</span><span class="p">(</span><span class="n">fn</span><span class="p">);</span>
<span class="linenos">492</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">493</span><span class="p">};</span><span class="w"> </span><span class="c1">// JsonValueConverter</span>
</pre></div>
</div>
</section>
<section id="writing-conversions-from-arrow">
<h3>Writing conversions from Arrow<a class="headerlink" href="#writing-conversions-from-arrow" title="Link to this heading">#</a></h3>
<p>To convert into rows <em>from</em> Arrow record batches, we’ll process the table in
smaller batches, visiting each field of the batch and filling the output rows
column-by-column.</p>
<p>At the top-level, we define <code class="docutils literal notranslate"><span class="pre">ArrowToDocumentConverter</span></code> that provides the API
for converting Arrow batches and tables to rows. In many cases, it’s more optimal
to perform conversions to rows in smaller batches, rather than doing the entire
table at once. So we define one <code class="docutils literal notranslate"><span class="pre">ConvertToVector</span></code> method to convert a single
batch, then in the other conversion method we use <a class="reference internal" href="../api/table.html#_CPPv4N5arrow16TableBatchReaderE" title="arrow::TableBatchReader"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::TableBatchReader</span></code></a>
to iterate over slices of a table. This returns Arrow’s iterator type
(<a class="reference internal" href="../api/utilities.html#_CPPv4I0EN5arrow8IteratorE" title="arrow::Iterator"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">arrow::Iterator</span></code></a>) so rows could then be processed either one-at-a-time
or be collected into a container.</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="linenos">179</span><span class="k">class</span><span class="w"> </span><span class="nc">ArrowToDocumentConverter</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">180</span><span class="w"> </span><span class="k">public</span><span class="o">:</span>
<span class="linenos">181</span><span class="w"> </span><span class="c1">/// Convert a single batch of Arrow data into Documents</span>
<span class="linenos">182</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Result</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">ConvertToVector</span><span class="p">(</span>
<span class="linenos">183</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatch</span><span class="o">&gt;</span><span class="w"> </span><span class="n">batch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">184</span><span class="w"> </span><span class="n">RowBatchBuilder</span><span class="w"> </span><span class="n">builder</span><span class="p">{</span><span class="n">batch</span><span class="o">-&gt;</span><span class="n">num_rows</span><span class="p">()};</span>
<span class="linenos">185</span>
<span class="linenos">186</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">batch</span><span class="o">-&gt;</span><span class="n">num_columns</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">187</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">SetField</span><span class="p">(</span><span class="n">batch</span><span class="o">-&gt;</span><span class="n">schema</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">field</span><span class="p">(</span><span class="n">i</span><span class="p">).</span><span class="n">get</span><span class="p">());</span>
<span class="linenos">188</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">arrow</span><span class="o">::</span><span class="n">VisitArrayInline</span><span class="p">(</span><span class="o">*</span><span class="n">batch</span><span class="o">-&gt;</span><span class="n">column</span><span class="p">(</span><span class="n">i</span><span class="p">).</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="o">&amp;</span><span class="n">builder</span><span class="p">));</span>
<span class="linenos">189</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">190</span>
<span class="linenos">191</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">builder</span><span class="p">).</span><span class="n">Rows</span><span class="p">();</span>
<span class="linenos">192</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">193</span>
<span class="linenos">194</span><span class="w"> </span><span class="c1">/// Convert an Arrow table into an iterator of Documents</span>
<span class="linenos">195</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Iterator</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;</span><span class="w"> </span><span class="n">ConvertToIterator</span><span class="p">(</span>
<span class="linenos">196</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Table</span><span class="o">&gt;</span><span class="w"> </span><span class="n">table</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">batch_size</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">197</span><span class="w"> </span><span class="c1">// Use TableBatchReader to divide table into smaller batches. The batches</span>
<span class="linenos">198</span><span class="w"> </span><span class="c1">// created are zero-copy slices with *at most* `batch_size` rows.</span>
<span class="linenos">199</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">batch_reader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">TableBatchReader</span><span class="o">&gt;</span><span class="p">(</span><span class="o">*</span><span class="n">table</span><span class="p">);</span>
<span class="linenos">200</span><span class="w"> </span><span class="n">batch_reader</span><span class="o">-&gt;</span><span class="n">set_chunksize</span><span class="p">(</span><span class="n">batch_size</span><span class="p">);</span>
<span class="linenos">201</span>
<span class="linenos">202</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">read_batch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">RecordBatch</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">batch</span><span class="p">)</span>
<span class="linenos">203</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Result</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Iterator</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">204</span><span class="w"> </span><span class="n">ARROW_ASSIGN_OR_RAISE</span><span class="p">(</span><span class="k">auto</span><span class="w"> </span><span class="n">rows</span><span class="p">,</span><span class="w"> </span><span class="n">ConvertToVector</span><span class="p">(</span><span class="n">batch</span><span class="p">));</span>
<span class="linenos">205</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">MakeVectorIterator</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">rows</span><span class="p">));</span>
<span class="linenos">206</span><span class="w"> </span><span class="p">};</span>
<span class="linenos">207</span>
<span class="linenos">208</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">nested_iter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">MakeMaybeMapIterator</span><span class="p">(</span>
<span class="linenos">209</span><span class="w"> </span><span class="n">read_batch</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">MakeIteratorFromReader</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">batch_reader</span><span class="p">)));</span>
<span class="linenos">210</span>
<span class="linenos">211</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">MakeFlattenIterator</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">nested_iter</span><span class="p">));</span>
<span class="linenos">212</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">213</span><span class="p">};</span><span class="w"> </span><span class="c1">// ArrowToDocumentConverter</span>
</pre></div>
</div>
<p>One level down, the output rows are filled in by <code class="docutils literal notranslate"><span class="pre">RowBatchBuilder</span></code>.
The <code class="docutils literal notranslate"><span class="pre">RowBatchBuilder</span></code> implements <code class="docutils literal notranslate"><span class="pre">Visit()</span></code> methods, but to save on code we
write a template method for array types that have primitive C equivalents
(booleans, integers, and floats) using <code class="docutils literal notranslate"><span class="pre">arrow::enable_if_primitive_ctype</span></code>.
See <a class="reference internal" href="../api/utilities.html#type-traits"><span class="std std-ref">Type Traits</span></a> for other type predicates.</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 57</span><span class="k">class</span><span class="w"> </span><span class="nc">RowBatchBuilder</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 58</span><span class="w"> </span><span class="k">public</span><span class="o">:</span>
<span class="linenos"> 59</span><span class="w"> </span><span class="k">explicit</span><span class="w"> </span><span class="n">RowBatchBuilder</span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">num_rows</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">field_</span><span class="p">(</span><span class="k">nullptr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 60</span><span class="w"> </span><span class="c1">// Reserve all of the space required up-front to avoid unnecessary resizing</span>
<span class="linenos"> 61</span><span class="w"> </span><span class="n">rows_</span><span class="p">.</span><span class="n">reserve</span><span class="p">(</span><span class="n">num_rows</span><span class="p">);</span>
<span class="linenos"> 62</span>
<span class="linenos"> 63</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_rows</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 64</span><span class="w"> </span><span class="n">rows_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="p">());</span>
<span class="linenos"> 65</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">SetObject</span><span class="p">();</span>
<span class="linenos"> 66</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 67</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 68</span>
<span class="linenos"> 69</span><span class="w"> </span><span class="c1">/// \brief Set which field to convert.</span>
<span class="linenos"> 70</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">SetField</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">*</span><span class="w"> </span><span class="n">field</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">field_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">field</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 71</span>
<span class="linenos"> 72</span><span class="w"> </span><span class="c1">/// \brief Retrieve converted rows from builder.</span>
<span class="linenos"> 73</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Rows</span><span class="p">()</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">rows_</span><span class="p">);</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 74</span>
<span class="linenos"> 75</span><span class="w"> </span><span class="c1">// Default implementation</span>
<span class="linenos"> 76</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">&amp;</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 77</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">NotImplemented</span><span class="p">(</span>
<span class="linenos"> 78</span><span class="w"> </span><span class="s">&quot;Cannot convert to json document for array of type &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">type</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">ToString</span><span class="p">());</span>
<span class="linenos"> 79</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 80</span>
<span class="linenos"> 81</span><span class="w"> </span><span class="c1">// Handles booleans, integers, floats</span>
<span class="linenos"> 82</span><span class="w"> </span><span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">ArrayType</span><span class="p">,</span><span class="w"> </span><span class="k">typename</span><span class="w"> </span><span class="nc">DataClass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">typename</span><span class="w"> </span><span class="nc">ArrayType</span><span class="o">::</span><span class="n">TypeClass</span><span class="o">&gt;</span>
<span class="linenos"> 83</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">enable_if_primitive_ctype</span><span class="o">&lt;</span><span class="n">DataClass</span><span class="p">,</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span>
<span class="linenos"> 84</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ArrayType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 85</span><span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="k">static_cast</span><span class="o">&lt;</span><span class="kt">int64_t</span><span class="o">&gt;</span><span class="p">(</span><span class="n">rows_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">());</span>
<span class="linenos"> 86</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 87</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">array</span><span class="p">.</span><span class="n">IsNull</span><span class="p">(</span><span class="n">i</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 88</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="nf">str_key</span><span class="p">(</span><span class="n">field_</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">(),</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos"> 89</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">AddMember</span><span class="p">(</span><span class="n">str_key</span><span class="p">,</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">Value</span><span class="p">(</span><span class="n">i</span><span class="p">),</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos"> 90</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 91</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 92</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos"> 93</span><span class="w"> </span><span class="p">}</span>
<span class="linenos"> 94</span>
<span class="linenos"> 95</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">StringArray</span><span class="o">&amp;</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 96</span><span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="k">static_cast</span><span class="o">&lt;</span><span class="kt">int64_t</span><span class="o">&gt;</span><span class="p">(</span><span class="n">rows_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">());</span>
<span class="linenos"> 97</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 98</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">array</span><span class="p">.</span><span class="n">IsNull</span><span class="p">(</span><span class="n">i</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 99</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="nf">str_key</span><span class="p">(</span><span class="n">field_</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">(),</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos">100</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string_view</span><span class="w"> </span><span class="n">value_view</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">Value</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="linenos">101</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="n">value</span><span class="p">;</span>
<span class="linenos">102</span><span class="w"> </span><span class="n">value</span><span class="p">.</span><span class="n">SetString</span><span class="p">(</span><span class="n">value_view</span><span class="p">.</span><span class="n">data</span><span class="p">(),</span>
<span class="linenos">103</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">SizeType</span><span class="o">&gt;</span><span class="p">(</span><span class="n">value_view</span><span class="p">.</span><span class="n">size</span><span class="p">()),</span>
<span class="linenos">104</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos">105</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">AddMember</span><span class="p">(</span><span class="n">str_key</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos">106</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">107</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">108</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">109</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">110</span>
<span class="linenos">111</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">StructArray</span><span class="o">&amp;</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">112</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">StructType</span><span class="o">*</span><span class="w"> </span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">struct_type</span><span class="p">();</span>
<span class="linenos">113</span>
<span class="linenos">114</span><span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="k">static_cast</span><span class="o">&lt;</span><span class="kt">int64_t</span><span class="o">&gt;</span><span class="p">(</span><span class="n">rows_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">());</span>
<span class="linenos">115</span>
<span class="linenos">116</span><span class="w"> </span><span class="n">RowBatchBuilder</span><span class="w"> </span><span class="nf">child_builder</span><span class="p">(</span><span class="n">rows_</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
<span class="linenos">117</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">type</span><span class="o">-&gt;</span><span class="n">num_fields</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">118</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">*</span><span class="w"> </span><span class="n">child_field</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">type</span><span class="o">-&gt;</span><span class="n">field</span><span class="p">(</span><span class="n">i</span><span class="p">).</span><span class="n">get</span><span class="p">();</span>
<span class="linenos">119</span><span class="w"> </span><span class="n">child_builder</span><span class="p">.</span><span class="n">SetField</span><span class="p">(</span><span class="n">child_field</span><span class="p">);</span>
<span class="linenos">120</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">arrow</span><span class="o">::</span><span class="n">VisitArrayInline</span><span class="p">(</span><span class="o">*</span><span class="n">array</span><span class="p">.</span><span class="n">field</span><span class="p">(</span><span class="n">i</span><span class="p">).</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="o">&amp;</span><span class="n">child_builder</span><span class="p">));</span>
<span class="linenos">121</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">122</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;</span><span class="w"> </span><span class="n">rows</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">child_builder</span><span class="p">).</span><span class="n">Rows</span><span class="p">();</span>
<span class="linenos">123</span>
<span class="linenos">124</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">125</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">array</span><span class="p">.</span><span class="n">IsNull</span><span class="p">(</span><span class="n">i</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">126</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="nf">str_key</span><span class="p">(</span><span class="n">field_</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">(),</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos">127</span><span class="w"> </span><span class="c1">// Must copy value to new allocator</span>
<span class="linenos">128</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="n">row_val</span><span class="p">;</span>
<span class="linenos">129</span><span class="w"> </span><span class="n">row_val</span><span class="p">.</span><span class="n">CopyFrom</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos">130</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">AddMember</span><span class="p">(</span><span class="n">str_key</span><span class="p">,</span><span class="w"> </span><span class="n">row_val</span><span class="p">,</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">());</span>
<span class="linenos">131</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">132</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">133</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">134</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">135</span>
<span class="linenos">136</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="w"> </span><span class="n">Visit</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">ListArray</span><span class="o">&amp;</span><span class="w"> </span><span class="n">array</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">137</span><span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="k">static_cast</span><span class="o">&lt;</span><span class="kt">int64_t</span><span class="o">&gt;</span><span class="p">(</span><span class="n">rows_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">());</span>
<span class="linenos">138</span><span class="w"> </span><span class="c1">// First create rows from values</span>
<span class="linenos">139</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o">&lt;</span><span class="n">arrow</span><span class="o">::</span><span class="n">Array</span><span class="o">&gt;</span><span class="w"> </span><span class="n">values</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">values</span><span class="p">();</span>
<span class="linenos">140</span><span class="w"> </span><span class="n">RowBatchBuilder</span><span class="w"> </span><span class="nf">child_builder</span><span class="p">(</span><span class="n">values</span><span class="o">-&gt;</span><span class="n">length</span><span class="p">());</span>
<span class="linenos">141</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">*</span><span class="w"> </span><span class="n">value_field</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">list_type</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">value_field</span><span class="p">().</span><span class="n">get</span><span class="p">();</span>
<span class="linenos">142</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">value_field_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">value_field</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">();</span>
<span class="linenos">143</span><span class="w"> </span><span class="n">child_builder</span><span class="p">.</span><span class="n">SetField</span><span class="p">(</span><span class="n">value_field</span><span class="p">);</span>
<span class="linenos">144</span><span class="w"> </span><span class="n">ARROW_RETURN_NOT_OK</span><span class="p">(</span><span class="n">arrow</span><span class="o">::</span><span class="n">VisitArrayInline</span><span class="p">(</span><span class="o">*</span><span class="n">values</span><span class="p">.</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="o">&amp;</span><span class="n">child_builder</span><span class="p">));</span>
<span class="linenos">145</span>
<span class="linenos">146</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;</span><span class="w"> </span><span class="n">rows</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">child_builder</span><span class="p">).</span><span class="n">Rows</span><span class="p">();</span>
<span class="linenos">147</span>
<span class="linenos">148</span><span class="w"> </span><span class="kt">int64_t</span><span class="w"> </span><span class="n">values_i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="linenos">149</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">length</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">150</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">array</span><span class="p">.</span><span class="n">IsNull</span><span class="p">(</span><span class="n">i</span><span class="p">))</span><span class="w"> </span><span class="k">continue</span><span class="p">;</span>
<span class="linenos">151</span>
<span class="linenos">152</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">::</span><span class="n">AllocatorType</span><span class="o">&amp;</span><span class="w"> </span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">GetAllocator</span><span class="p">();</span>
<span class="linenos">153</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">array_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="n">value_length</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="linenos">154</span>
<span class="linenos">155</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="n">value</span><span class="p">;</span>
<span class="linenos">156</span><span class="w"> </span><span class="n">value</span><span class="p">.</span><span class="n">SetArray</span><span class="p">();</span>
<span class="linenos">157</span><span class="w"> </span><span class="n">value</span><span class="p">.</span><span class="n">Reserve</span><span class="p">(</span><span class="n">array_len</span><span class="p">,</span><span class="w"> </span><span class="n">allocator</span><span class="p">);</span>
<span class="linenos">158</span>
<span class="linenos">159</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int64_t</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">array_len</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">j</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">160</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="n">row_val</span><span class="p">;</span>
<span class="linenos">161</span><span class="w"> </span><span class="c1">// Must copy value to new allocator</span>
<span class="linenos">162</span><span class="w"> </span><span class="n">row_val</span><span class="p">.</span><span class="n">CopyFrom</span><span class="p">(</span><span class="n">rows</span><span class="p">[</span><span class="n">values_i</span><span class="p">][</span><span class="n">value_field_name</span><span class="p">],</span><span class="w"> </span><span class="n">allocator</span><span class="p">);</span>
<span class="linenos">163</span><span class="w"> </span><span class="n">value</span><span class="p">.</span><span class="n">PushBack</span><span class="p">(</span><span class="n">row_val</span><span class="p">,</span><span class="w"> </span><span class="n">allocator</span><span class="p">);</span>
<span class="linenos">164</span><span class="w"> </span><span class="o">++</span><span class="n">values_i</span><span class="p">;</span>
<span class="linenos">165</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">166</span>
<span class="linenos">167</span><span class="w"> </span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Value</span><span class="w"> </span><span class="n">str_key</span><span class="p">(</span><span class="n">field_</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">(),</span><span class="w"> </span><span class="n">allocator</span><span class="p">);</span>
<span class="linenos">168</span><span class="w"> </span><span class="n">rows_</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">AddMember</span><span class="p">(</span><span class="n">str_key</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">allocator</span><span class="p">);</span>
<span class="linenos">169</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">170</span>
<span class="linenos">171</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Status</span><span class="o">::</span><span class="n">OK</span><span class="p">();</span>
<span class="linenos">172</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">173</span>
<span class="linenos">174</span><span class="w"> </span><span class="k">private</span><span class="o">:</span>
<span class="linenos">175</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">Field</span><span class="o">*</span><span class="w"> </span><span class="n">field_</span><span class="p">;</span>
<span class="linenos">176</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">rapidjson</span><span class="o">::</span><span class="n">Document</span><span class="o">&gt;</span><span class="w"> </span><span class="n">rows_</span><span class="p">;</span>
<span class="linenos">177</span><span class="p">};</span><span class="w"> </span><span class="c1">// RowBatchBuilder</span>
</pre></div>
</div>
</section>
</section>
</section>
</article>
<footer class="prev-next-footer d-print-none">
<div class="prev-next-area">
<a class="left-prev"
href="parquet_column_encryption.html"
title="previous page">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">Parquet column encryption</p>
</div>
</a>
<a class="right-next"
href="tuple_range_conversion.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">Conversion of range of <code class="docutils literal notranslate"><span class="pre">std::tuple</span></code>-like to <code class="docutils literal notranslate"><span class="pre">Table</span></code> instances</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<dialog id="pst-secondary-sidebar-modal"></dialog>
<div id="pst-secondary-sidebar" class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div
id="pst-page-navigation-heading-2"
class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> On this page
</div>
<nav class="bd-toc-nav page-toc" aria-labelledby="pst-page-navigation-heading-2">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#fixed-schemas">Fixed Schemas</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#dynamic-schemas">Dynamic Schemas</a><ul class="visible nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#writing-conversions-to-arrow">Writing conversions to Arrow</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#writing-conversions-from-arrow">Writing conversions from Arrow</a></li>
</ul>
</li>
</ul>
</nav></div>
<div class="sidebar-secondary-item">
<div class="tocsection editthispage">
<a href="https://github.com/apache/arrow/edit/main/docs/source/cpp/examples/row_columnar_conversion.rst">
<i class="fa-solid fa-pencil"></i>
Edit on GitHub
</a>
</div>
</div>
</div></div>
</div>
<footer class="bd-footer-content">
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script defer src="../../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf"></script>
<script defer src="../../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf"></script>
<footer class="bd-footer">
<div class="bd-footer__inner bd-page-width">
<div class="footer-items__start">
<div class="footer-item">
<p class="copyright">
© Copyright 2016-2025 Apache Software Foundation.
Apache Arrow, Arrow, Apache, the Apache logo, and the Apache Arrow project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
<br/>
</p>
</div>
<div class="footer-item">
<p class="sphinx-version">
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
<br/>
</p>
</div>
</div>
<div class="footer-items__end">
<div class="footer-item">
<p class="theme-version">
<!-- # L10n: Setting the PST URL as an argument as this does not need to be localized -->
Built with the <a href="https://pydata-sphinx-theme.readthedocs.io/en/stable/index.html">PyData Sphinx Theme</a> 0.16.1.
</p></div>
</div>
</div>
</footer>
</body>
</html>