blob: 0c833f00343cd5595f47a920072e8fd9eff4d02f [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>iceberg-cpp: iceberg-cpp</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">iceberg-cpp
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">iceberg-cpp </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="md__2home_2runner_2work_2iceberg-cpp_2iceberg-cpp_2README"></a></p>
<p><img src="https://iceberg.apache.org/assets/images/Iceberg-logo.svg" alt="Iceberg" style="pointer-events: none;" class="inline"/></p>
<p><a href="https://apache-iceberg.slack.com/"><img src="https://img.shields.io/badge/chat-on%20Slack-brightgreen.svg" alt="Slack" style="pointer-events: none;" class="inline"/></a> <a href="https://deepwiki.com/apache/iceberg-cpp"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki" style="pointer-events: none;" class="inline"/></a></p>
<h1><a class="anchor" id="autotoc_md1"></a>
Apache Iceberg™ C++</h1>
<p>C++ implementation of <a href="https://iceberg.apache.org/">Apache Iceberg™</a>.</p>
<h2><a class="anchor" id="autotoc_md2"></a>
Requirements</h2>
<ul>
<li>CMake 3.25 or higher</li>
<li>C++23 compliant compiler (GCC 14+, Clang 16+, MSVC 2022+)</li>
</ul>
<h2><a class="anchor" id="autotoc_md3"></a>
Customizing Dependency URLs</h2>
<p>If you experience network issues when downloading dependencies, you can customize the download URLs using environment variables.</p>
<p>The following environment variables can be set to customize dependency URLs:</p>
<ul>
<li><code>ICEBERG_ARROW_URL</code>: Apache Arrow tarball URL</li>
<li><code>ICEBERG_AVRO_URL</code>: Apache Avro tarball URL</li>
<li><code>ICEBERG_AVRO_GIT_URL</code>: Apache Avro git repository URL</li>
<li><code>ICEBERG_NANOARROW_URL</code>: Nanoarrow tarball URL</li>
<li><code>ICEBERG_CROARING_URL</code>: CRoaring tarball URL</li>
<li><code>ICEBERG_NLOHMANN_JSON_URL</code>: nlohmann-json tarball URL</li>
<li><code>ICEBERG_CPR_URL</code>: cpr tarball URL</li>
</ul>
<p>Example usage:</p>
<div class="fragment"><div class="line">export ICEBERG_ARROW_URL=&quot;https://your-mirror.com/apache-arrow-22.0.0.tar.gz&quot;</div>
<div class="line">cmake -S . -B build</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md4"></a>
Build</h2>
<h3><a class="anchor" id="autotoc_md5"></a>
Build, Run Test and Install Core Libraries</h3>
<div class="fragment"><div class="line">cd iceberg-cpp</div>
<div class="line">cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/path/to/install -DICEBERG_BUILD_STATIC=ON -DICEBERG_BUILD_SHARED=ON</div>
<div class="line">cmake --build build</div>
<div class="line">ctest --test-dir build --output-on-failure</div>
<div class="line">cmake --install build</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md6"></a>
Build and Install Iceberg Bundle Library</h3>
<h4><a class="anchor" id="autotoc_md7"></a>
Vendored Apache Arrow (default)</h4>
<div class="fragment"><div class="line">cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/path/to/install -DICEBERG_BUILD_BUNDLE=ON</div>
<div class="line">cmake --build build</div>
<div class="line">ctest --test-dir build --output-on-failure</div>
<div class="line">cmake --install build</div>
</div><!-- fragment --><h4><a class="anchor" id="autotoc_md8"></a>
Provided Apache Arrow</h4>
<div class="fragment"><div class="line">cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/path/to/install -DCMAKE_PREFIX_PATH=/path/to/arrow -DICEBERG_BUILD_BUNDLE=ON</div>
<div class="line">cmake --build build</div>
<div class="line">ctest --test-dir build --output-on-failure</div>
<div class="line">cmake --install build</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md9"></a>
Build Examples</h3>
<p>After installing the core libraries, you can build the examples:</p>
<div class="fragment"><div class="line">cd iceberg-cpp/example</div>
<div class="line">cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH=/path/to/install</div>
<div class="line">cmake --build build</div>
</div><!-- fragment --><p>If you are using provided Apache Arrow, you need to include <code>/path/to/arrow</code> in <code>CMAKE_PREFIX_PATH</code> as below.</p>
<div class="fragment"><div class="line">cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH=&quot;/path/to/install;/path/to/arrow&quot;</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md10"></a>
Contribute</h2>
<p>Apache Iceberg is an active open-source project, governed under the Apache Software Foundation (ASF). Iceberg-cpp is open to people who want to contribute to it. Here are some ways to get involved:</p>
<ul>
<li>Submit <a href="https://github.com/apache/iceberg-cpp/issues/new">Issues</a> for bug report or feature requests.</li>
<li>Discuss at <a href="#" onclick="location.href='mai'+'lto:'+'dev'+'@i'+'ceb'+'er'+'g.a'+'pa'+'che'+'.o'+'rg'; return false;">dev mailing list</a> (<a href="#" onclick="location.href='mai'+'lto:'+'dev'+'-s'+'ubs'+'cr'+'ibe'+'@i'+'ceb'+'er'+'g.a'+'pa'+'che'+'.o'+'rg?'+'su'+'bje'+'ct'+'=(s'+'en'+'d%2'+'0t'+'his'+'%2'+'0em'+'ai'+'l%2'+'0t'+'o%2'+'0s'+'ubs'+'cr'+'ibe'+')'; return false;">subscribe</a> / <a href="#" onclick="location.href='mai'+'lto:'+'dev'+'-u'+'nsu'+'bs'+'cri'+'be'+'@ic'+'eb'+'erg'+'.a'+'pac'+'he'+'.or'+'g?'+'sub'+'je'+'ct='+'(s'+'end'+'%2'+'0th'+'is'+'%20'+'em'+'ail'+'%2'+'0to'+'%2'+'0un'+'su'+'bsc'+'ri'+'be)'; return false;">unsubscribe</a> / <a href="https://lists.apache.org/list.html?dev@iceberg.apache.org">archives</a>)</li>
<li>Talk to the community directly at <a href="https://join.slack.com/t/apache-iceberg/shared_invite/zt-1zbov3k6e-KtJfoaxp97YfX6dPz1Bk7A">Slack #cpp channel</a>.</li>
</ul>
<p>The Apache Iceberg community is built on the principles described in the <a href="https://www.apache.org/theapacheway/index.html">Apache Way</a> and all who engage with the community are expected to be respectful, open, come with the best interests of the community in mind, and abide by the Apache Foundation <a href="https://www.apache.org/foundation/policies/conduct.html">Code of Conduct</a>.</p>
<p>In addition, contributors using AI-assisted tools must follow the documented guidelines for AI-assisted contributions available on the Iceberg website: <a href="https://iceberg.apache.org/contribute/#guidelines-for-ai-assisted-contributions">https://iceberg.apache.org/contribute/#guidelines-for-ai-assisted-contributions</a>.</p>
<h3><a class="anchor" id="autotoc_md11"></a>
Linting</h3>
<p>Install the python package <code>pre-commit</code> and run once <code>pre-commit install</code>.</p>
<div class="fragment"><div class="line">pip install pre-commit</div>
<div class="line">pre-commit install</div>
</div><!-- fragment --><p>This will setup a git pre-commit-hook that is executed on each commit and will report the linting problems. To run all hooks on all files use <code>pre-commit run -a</code>.</p>
<h3><a class="anchor" id="autotoc_md12"></a>
Dev Containers</h3>
<p>We provide Dev Container configuration file templates.</p>
<p>To use a Dev Container as your development environment, follow the steps below, then select <code>Dev Containers: Reopen in Container</code> from VS Code's Command Palette.</p>
<div class="fragment"><div class="line">cd .devcontainer</div>
<div class="line">cp Dockerfile.template Dockerfile</div>
<div class="line">cp devcontainer.json.template devcontainer.json</div>
</div><!-- fragment --><p>If you make improvements that could benefit all developers, please update the template files and submit a pull request.</p>
<h2><a class="anchor" id="autotoc_md13"></a>
License</h2>
<p>Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> </p>
</div></div><!-- PageDoc -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>