blob: 7840e0da0193628636c63e62e73fa3a40056ef63 [file]
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-libraries/cpp/getting-started" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Getting Started | Apache GraphAr</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://graphar.apache.org/img/social-card.png"><meta data-rh="true" name="twitter:image" content="https://graphar.apache.org/img/social-card.png"><meta data-rh="true" property="og:url" content="https://graphar.apache.org/docs/libraries/cpp/getting-started"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Getting Started | Apache GraphAr"><meta data-rh="true" name="description" content="This article is a quick guide that explains how to work with GraphAr"><meta data-rh="true" property="og:description" content="This article is a quick guide that explains how to work with GraphAr"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://graphar.apache.org/docs/libraries/cpp/getting-started"><link data-rh="true" rel="alternate" href="https://graphar.apache.org/docs/libraries/cpp/getting-started" hreflang="en"><link data-rh="true" rel="alternate" href="https://graphar.apache.org/docs/libraries/cpp/getting-started" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache GraphAr RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache GraphAr Atom Feed"><link rel="stylesheet" href="/assets/css/styles.91ebac22.css">
<script src="/assets/js/runtime~main.4877ee2a.js" defer="defer"></script>
<script src="/assets/js/main.0ecba576.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_zC1J" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="Logo" class="themedComponent_RIc6 themedComponent--light_aQWN"><img src="/img/logo.svg" alt="Logo" class="themedComponent_RIc6 themedComponent--dark_XAeT"></div><b class="navbar__title text--truncate">Apache GraphAr</b></a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/docs/specification/format">Format</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/">Documentation</a><a class="navbar__item navbar__link" href="/community/">Community</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">API Reference</a><ul class="dropdown__menu"><li><a href="/docs/cpp/index.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">C++ Library</a></li><li><a href="/docs/python/index.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Python Library</a></li><li><a href="/docs/java-ffi" target="_blank" rel="noopener noreferrer" class="dropdown__link">Java-FFI Library</a></li><li><a href="/docs/java-info" target="_blank" rel="noopener noreferrer" class="dropdown__link">Java-info Library</a></li><li><a href="/docs/spark/org/apache/graphar/index.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Spark Library</a></li><li><a href="/docs/pyspark/" target="_blank" rel="noopener noreferrer" class="dropdown__link">PySpark Library</a></li></ul></div><a class="navbar__item navbar__link" href="/download">Download</a><a class="navbar__item navbar__link" href="/blog">Blog</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">ASF</a><ul class="dropdown__menu"><li><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Foundation</a></li><li><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="dropdown__link">License</a></li><li><a href="https://www.apache.org/events/current-event.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Events</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Privacy</a></li><li><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Security</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship</a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks</a></li><li><a href="https://www.apache.org/foundation/policies/conduct.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Code of Conduct</a></li></ul></div><a href="https://github.com/apache/incubator-graphar" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="toggle_p7iP colorModeToggle_anb5"><button class="clean-btn toggleButton_Fmm7 toggleButtonDisabled_nKIx" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_aKVI"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_Fhhc"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_KMbj"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_B5qV"><div class="docsWrapper_jyT9"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_Xwf6" type="button"></button><div class="docRoot_vi9r"><aside class="theme-doc-sidebar-container docSidebarContainer_ZLf9"><div class="sidebarViewport_NrsM"><div class="sidebar_zfk4"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_LSiz"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/">Documentation</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/overview/">Overview</a><button aria-label="Expand sidebar category &#x27;Overview&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="true" href="/docs/category/specification">Specification</a><button aria-label="Collapse sidebar category &#x27;Specification&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/specification/format">Format Specification</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/specification/implementation-status">Implementation Status</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" href="/docs/category/libraries">Libraries</a><button aria-label="Collapse sidebar category &#x27;Libraries&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" tabindex="0" href="/docs/category/c-library">C++ Library</a><button aria-label="Collapse sidebar category &#x27;C++ Library&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/libraries/cpp/getting-started">Getting Started</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="true" tabindex="0" href="/docs/category/examples">Examples</a><button aria-label="Collapse sidebar category &#x27;Examples&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/libraries/cpp/examples/bgl">Co-Work with BGL</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/libraries/cpp/examples/graphscope">Integrate into GraphScope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/libraries/cpp/examples/out-of-core">Out-of-core Graph Algorithms</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/libraries/cpp/examples/snap-to-graphar">Convert SNAP Datasets to GraphAr Format</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/docs/libraries/java/">Java Library</a><button aria-label="Expand sidebar category &#x27;Java Library&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/docs/libraries/spark/">Spark Library</a><button aria-label="Expand sidebar category &#x27;Spark Library&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/docs/libraries/pyspark/">PySpark Library</a><button aria-label="Expand sidebar category &#x27;PySpark Library&#x27;" type="button" class="clean-btn menu__caret"></button></div></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_hkwy"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_e8Jy"><div class="docItemContainer_Ey2V"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_YdW_" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_nEiP"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/docs/category/libraries"><span itemprop="name">Libraries</span></a><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/docs/category/c-library"><span itemprop="name">C++ Library</span></a><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Getting Started</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_e53W theme-doc-toc-mobile tocMobile_jOtr"><button type="button" class="clean-btn tocCollapsibleButton_jouK">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Getting Started</h1>
<p>This article is a quick guide that explains how to work with GraphAr
C++. To begin with, please refer to the <a href="https://github.com/apache/incubator-graphar/blob/main/README.md#building-libraries" target="_blank" rel="noopener noreferrer">Building
Steps</a>
to install GraphAr.</p>
<h2 class="anchor anchorWithStickyNavbar_qibj" id="information-files">Information Files<a href="#information-files" class="hash-link" aria-label="Direct link to Information Files" title="Direct link to Information Files"></a></h2>
<p>GraphAr uses a group of Yaml files to save the meta information for a graph.</p>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="graph-information">Graph information<a href="#graph-information" class="hash-link" aria-label="Direct link to Graph information" title="Direct link to Graph information"></a></h3>
<p>The graph information file defines the most basic information of a graph
includes its name, the root directory path of the data files, the vertex
information and edge information files it contains, and the version of
GraphAr. For example, the file &quot;ldbc_sample.graph.yml&quot; defines an
example graph named &quot;ldbc_sample&quot;, which includes one type of vertices
(&quot;person&quot;) and one type of edges (&quot;person knows person&quot;).</p>
<div class="language-yaml codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-yaml codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ldbc_sample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">prefix</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ./</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">vertices</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> person.vertex.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">edges</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> person_knows_person.edge.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">version</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gar/v1</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="vertex-information">Vertex information<a href="#vertex-information" class="hash-link" aria-label="Direct link to Vertex information" title="Direct link to Vertex information"></a></h3>
<p>Each vertex information file defines a single group of vertices with the
same vertex label, e.g., &quot;person&quot; in this case. The vertex chunk size,
the relative path for vertex data files and the version of GraphAr are
specified. These vertices could have some properties, which are divided
into property groups. Each property group has its own file type (CSV,
ORC or Parquet) and the prefix of the relative path for its data files,
it also lists all properties in this group, with every property contains
the name, data type and if it is the primary key.</p>
<p>The file
<a href="https://github.com/apache/incubator-graphar-testing/blob/main/ldbc_sample/csv/person.vertex.yml" target="_blank" rel="noopener noreferrer">person.vertex.yml</a>
located inside the test data contains an example of the vertex
information file. In this example, the &quot;person&quot; vertices have two
property groups. The first group contains only one property (named &quot;id&quot;)
and the second group contains three properties (&quot;firstName&quot;, &quot;lastName&quot;
and &quot;gender&quot;).</p>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="edge-information">Edge information<a href="#edge-information" class="hash-link" aria-label="Direct link to Edge information" title="Direct link to Edge information"></a></h3>
<p>Each edge information file defines a single type of edges with specific
labels for the source vertex, destination vertex and the edge, e.g.,
&quot;person_knows_person&quot; in this case. It defines the meta information such
as the edge chunk size, the source vertex chunk size, the destination
vertex chunk size, if the edges are directed or not, the relative file
path for edge data files, the adjLists and the version of GraphAr. The
file
<a href="https://github.com/apache/incubator-graphar-testing/blob/main/ldbc_sample/csv/person_knows_person.edge.yml" target="_blank" rel="noopener noreferrer">person_knows_person.edge.yml</a>
located inside the test data contains an example of the edge information
file.</p>
<p>In GraphAr format, separate data files are used to store the structure
(called adjList) and the properties for edges. The adjList type can be
either of <strong>unordered_by_source</strong>, <strong>unordered_by_dest</strong>,
<strong>ordered_by_source</strong> or <strong>ordered_by_dest</strong>. For a specific
type of adjList, the meta information includes its file path prefix, the
file type, as well as all the property groups attached.</p>
<div class="theme-admonition theme-admonition-note admonition_Q5_n alert alert--secondary"><div class="admonitionHeading_X17j"><span class="admonitionIcon_AlVM"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_Z65i"><p>It is allowed to store different types of adjLists for a group of
edges at the same time.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_qibj" id="data-files">Data Files<a href="#data-files" class="hash-link" aria-label="Direct link to Data Files" title="Direct link to Data Files"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="property-data">Property data<a href="#property-data" class="hash-link" aria-label="Direct link to Property data" title="Direct link to Property data"></a></h3>
<p>The vertex properties are stored in vertex property chunks with the
chunk size specified by the vertex information file. Different property
groups correspond to individual groups of data files. In our example,
the property group (&quot;first name&quot;, &quot;last name&quot;, &quot;gender&quot;) for vertex
chunk 0 of &quot;person&quot; vertices are stored in
<a href="https://github.com/apache/incubator-graphar-testing/blob/main/ldbc_sample/csv/vertex/person/firstName_lastName_gender/chunk0" target="_blank" rel="noopener noreferrer">./vertex/person/firstName_lastName_gender/chunk0</a>.</p>
<p>In practice of graph processing, it is common to only query a subset of
columns of the properties. Thus, the column-oriented formats like Apache
ORC and Apache Parquet are more efficient, which eliminate the need to
read columns that are not relevant. We also provide data files in ORC
and Parquet for the example graph in the <a href="https://github.com/apache/incubator-graphar-testing/blob/main/ldbc_sample/" target="_blank" rel="noopener noreferrer">test
data</a>.</p>
<p>Similar with vertices, the edge properties are stored in edge property
chunks. For each vertex chunk, its associated edges (if the edge type is
<strong>ordered_by_source</strong> or <strong>unordered_by_source</strong>, the associated edges
are those in which the source vertex is in that chunk; otherwise, if the
edge type is <strong>ordered_by_dest</strong> or <strong>unordered_by_dest</strong>, the
associated edges are those in which the destination is in that chunk)
are maintained in some edge chunks, with the size of each chunk not
exceeding the edge chunk size specified in the edge information file.</p>
<p>For instance, the file
<a href="https://github.com/apache/incubator-graphar-testing/blob/main/ldbc_sample/csv/edge/person_knows_person/ordered_by_source/creationDate/part0/chunk0" target="_blank" rel="noopener noreferrer">./edge/person_knows_person/ordered_by_source/creationDate/part0/chunk0</a>
stores the property group &quot;creationDate&quot; of &quot;person_knows_person&quot; edges
for the first edge chunk of the first vertex chunk, and the adjList type
of the edges is <strong>ordered_by_source</strong>.</p>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="adjlist-data">AdjList data<a href="#adjlist-data" class="hash-link" aria-label="Direct link to AdjList data" title="Direct link to AdjList data"></a></h3>
<p>The adjList in GraphAr describes the topology structure, i.e., the internal
id of the source vertex and the destination vertex for each of a group
of edges. As explained in <a href="https://graphar.apache.org/docs/specification/format#edge-chunks-in-graphar" target="_blank" rel="noopener noreferrer">Edges in GraphAr</a>, the edges are separated
into edge chunks, and each edge chunk has its own adjList table and 0 or
more property tables.</p>
<p>For example, the file
<a href="https://github.com/apache/incubator-graphar-testing/blob/main/ldbc_sample/csv/edge/person_knows_person/ordered_by_source/adj_list/part0/chunk0" target="_blank" rel="noopener noreferrer">./edge/person_knows_person/ordered_by_source/adj_list/part0/chunk0</a>
saves the adjList of &quot;person_knows_person&quot; edges for the first edge
chunk of the first vertex chunk, and the adjList type of the edges is
&quot;ordered_by_source&quot;. This adjList table consists of only two columns:
one for the source and one for the destination; it can be saved in CSV,
ORC, or Parquet files.</p>
<div class="theme-admonition theme-admonition-note admonition_Q5_n alert alert--secondary"><div class="admonitionHeading_X17j"><span class="admonitionIcon_AlVM"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_Z65i"><p>If the edges are ordered, there may also be offset chunks to construct
the index for accessing edges of a single vertex. These chunks will
tore the start offset of each vertex&#x27;s edges, see
<a href="https://github.com/apache/incubator-graphar-testing/blob/main/ldbc_sample/csv/edge/person_knows_person/ordered_by_source/offset/chunk0" target="_blank" rel="noopener noreferrer">./edge/person_knows_person/ordered_by_source/offset/chunk0</a>
as an example.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_qibj" id="how-to-use-graphar">How to Use GraphAr<a href="#how-to-use-graphar" class="hash-link" aria-label="Direct link to How to Use GraphAr" title="Direct link to How to Use GraphAr"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="construct-information">Construct information<a href="#construct-information" class="hash-link" aria-label="Direct link to Construct information" title="Direct link to Construct information"></a></h3>
<p>It is convenient to construct the graphar metadata and dump it to generate
information files. We provide an <a href="https://github.com/apache/incubator-graphar/blob/main/cpp/examples/construct_info_example.cc" target="_blank" rel="noopener noreferrer">example
program</a>
located in the source code which shows how to construct and dump the
files for graph information, vertex information and edge information.</p>
<p>Also, the metadata of a graph can be constructed easily through reading
the already existed information files, as the following code
illustrates:</p>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// construct graph information from file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">string path </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// the path of the graph information file (e.g., ldbc_sample.graph.yml)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> graph_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">GraphInfo</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">Load</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">path</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// get vertex information</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> vertex_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> graph_info</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">GetVertexInfo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;person&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex_info </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">nullptr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// use vertex_info ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// get edge information</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> edge_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> graph_info</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">GetEdgeInfo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;person&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;knows&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;person&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">edge_info </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">nullptr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// use edge_info ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="read-graphar-format-files">Read GraphAr format files<a href="#read-graphar-format-files" class="hash-link" aria-label="Direct link to Read GraphAr format files" title="Direct link to Read GraphAr format files"></a></h3>
<p>GraphAr supports the flexible reading of graph data, e.g., allowing to read
data of a single vertex, a vertex chunk, or all vertices with a specific
label. In addition, necessary property groups can be selected to read
and avoid reading all properties from the files. Furthermore, GraphAr
provides convenient and flexible access to adjList, offset and property
chunks for edges.</p>
<p>As a simple case, the following example shows how to read all vertices
with label &quot;person&quot; of the graph defined by &quot;graph_info&quot; and output the
values of &quot;id&quot; and &quot;firstName&quot; for each vertex.</p>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain">graph_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> vertices </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">VerticesCollection</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">Make</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;person&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> it </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertices</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">begin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> it </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> vertices</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">end</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">++</span><span class="token plain">it</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// get a vertex and access its data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> vertex </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">it</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">IsValid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;id&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">IsValid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;firstName&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">cout </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;id=&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">property</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name keyword" style="color:#00009f">int64_t</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;id&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;, firstName=&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">property</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name">std</span><span class="token generic-function generic class-name double-colon punctuation" style="color:#393A34">::</span><span class="token generic-function generic class-name">string</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;firstName&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">endl</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The next example reads all edges with label &quot;person_knows_person&quot; from
the above graph and outputs the end vertices for each edge.</p>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain">graph_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> expect </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">EdgesCollection</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">Make</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;person&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;knows&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;person&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">AdjListType</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">ordered_by_source</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> edges </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> expect</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> it </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> edges</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">begin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> it </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> edges</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">end</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">++</span><span class="token plain">it</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// get an edge and access its data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> edge </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">it</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">cout </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;src=&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> edge</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">source</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;, dst=&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> edge</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">destination</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">endl</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="write-graphar-format-files">Write GraphAr format files<a href="#write-graphar-format-files" class="hash-link" aria-label="Direct link to Write GraphAr format files" title="Direct link to Write GraphAr format files"></a></h3>
<p>As same with the readers, the GraphAr writers provide different-level
methods to output the graph data in memory into GraphAr format files.</p>
<p>As the simplest cases, the fist example below adds vertices to
<strong>VerticesBuilder</strong>, and then dumps the data to files; the second
example constructs a collection of edges and then dumps them.</p>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain">vertex_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">prefix </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">builder</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">VerticesBuilder </span><span class="token function" style="color:#d73a49">builder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> prefix</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// add a vertex</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">builder</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Vertex v</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddProperty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;id&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">933</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddProperty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;firstName&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;Alice&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">builder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddVertex</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// add other vertices</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// write to GraphAr format files</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">builder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Dump</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain">edge_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">prefix </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vertices_num </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">builder</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">EdgesBuilder </span><span class="token function" style="color:#d73a49">builder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">edge_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> prefix</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">AdjListType</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">ordered_by_source</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> vertices_num</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// add an edge (0 -&gt; 3)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">builder</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Edge </span><span class="token function" style="color:#d73a49">e</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddProperty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;creationDate&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;2011-07-20T20:02:04.233+0000&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">builder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">AddEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// add other edges</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// write to GraphAr format files</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">builder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Dump</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="a-pagerank-example">A PageRank Example<a href="#a-pagerank-example" class="hash-link" aria-label="Direct link to A PageRank Example" title="Direct link to A PageRank Example"></a></h3>
<p>Here we will go through an example of out-of-core graph analytic
algorithms based on GraphAr which calculates the PageRank. Please look
<a href="https://en.wikipedia.org/wiki/PageRank" target="_blank" rel="noopener noreferrer">here</a> if you want a detailed
explanation of the PageRank algorithm. And the source code can be found
at
<a href="https://github.com/apache/incubator-graphar/blob/main/cpp/examples/pagerank_example.cc" target="_blank" rel="noopener noreferrer">pagerank_example.cc</a>.</p>
<p>This program first reads in the graph information file to obtain the
metadata; then, it constructs the vertex and edge collections to enable
access to the graph. After that, an implementation of the PageRank
algorithm is provided, with data for the vertices stored in memory, and
the edges streamed through disk I/O. Finally, the vertex information
with type &quot;person&quot; is extended to include a new property named
&quot;pagerank&quot; (a new vertex information file named
<em>person-new-pagerank.vertex.yml</em> is saved) and the <strong>VerticesBuilder</strong>
is used to write the results to new generated data chunks.</p>
<p>Please refer to <a href="/docs/libraries/cpp/examples/out-of-core">more examples</a> to learn
about the other available case studies utilizing GraphAr.</p>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="processing-graph-data-with-labels">Processing Graph Data with Labels<a href="#processing-graph-data-with-labels" class="hash-link" aria-label="Direct link to Processing Graph Data with Labels" title="Direct link to Processing Graph Data with Labels"></a></h3>
<p>As GraphAr supports LPG data, users can add labels for vertices and use related label filtering functions to obtain specified vertices.
The standard csv format of graph data with labels supported by GraphAr is <code>id|:LABEL|property_1|property_2</code>, if a vertex has multiple labels, use ; to separate them. Here is an example.</p>
<div class="language-csv codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-csv codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain">id|:LABEL|name|url</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">0|company;public|Kam_Air|http://dbpedia.org/resource/Kam_Air</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">1|company|Balkh_Airlines|http://dbpedia.org/resource/Balkh_Airlines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">2|company|Khyber_Afghan_Airlines|http://dbpedia.org/resource/Khyber_Afghan_Airlines</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">1575|university|Paktia_University|http://dbpedia.org/resource/Paktia_University</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>At the beginning, we need to add label information into the <code>yml</code> file of vertex. For this example, it should be as follows.</p>
<div class="language-yml codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-yml codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># organisation.vertex.yml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> organisation</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">chunk_size</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4096</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">prefix</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> vertex/organisation/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># add the label infos</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">labels</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> university</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> company</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> public</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">property_groups</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">file_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> parquet</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">properties</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> name</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">data_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> string</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">is_primary</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> url</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">data_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> string</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">is_primary</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> id</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">data_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> int64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">is_primary</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">version</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gar/v1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>When you have the data ready, you can read the file into <code>arrow::Table</code> by using arrow I/O function.</p>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain"> arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">csv</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">ReadOptions read_options</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">csv</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">ParseOptions parse_options</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">csv</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">ConvertOptions convert_options</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> parse_options</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">delimiter </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token char">&#x27;|&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> input </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">io</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">ReadableFile</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">Open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">test_data_dir </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/ldbc/organisation_0_0.csv&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">default_memory_pool</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ValueOrDie</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> reader </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">csv</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">TableReader</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">Make</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">io</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">default_io_context</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> input</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> read_options</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> parse_options</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> convert_options</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ValueOrDie</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">shared_ptr</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Table</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> table</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> table </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> reader</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">Read</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ValueOrDie</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>You can export label table to disk in parquet format, and read it back into memory in the following way.</p>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> options_parquet_builder </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token class-name">WriterOptions</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">ParquetOptionBuilder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> options_parquet_builder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">compression</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">arrow</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">Compression</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">type</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">UNCOMPRESSED</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// write arrow table as parquet chunk</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> maybe_writer </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name">VertexPropertyWriter</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">Make</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> test_data_dir </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;/ldbc/parquet/&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> options_parquet_builder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">build</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">REQUIRE</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">maybe_writer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">has_error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> writer </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> maybe_writer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">REQUIRE</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">writer</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">WriteTable</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">table</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ok</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">REQUIRE</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">writer</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">WriteVerticesNum</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">table</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">num_rows</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ok</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// read parquet chunk as arrow table</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> maybe_reader </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name">VertexPropertyArrowChunkReader</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">MakeForLabels</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;organisation&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> labels</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> SelectType</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">LABELS</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">assert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">maybe_reader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">status</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ok</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> reader </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> maybe_reader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">assert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">reader</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">seek</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ok</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">assert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">reader</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">GetLabelChunk</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">status</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ok</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">assert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">reader</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">next_chunk</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ok</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="using-label-filtering-functions">Using Label Filtering Functions<a href="#using-label-filtering-functions" class="hash-link" aria-label="Direct link to Using Label Filtering Functions" title="Direct link to Using Label Filtering Functions"></a></h3>
<p>By calling the <code>graphar::VerticesCollection::verticesWithLabel</code> or <code>graphar::VerticesCollection::verticesWithMultipleLabels</code> API, we can specify a certain type of vertices on a certain graph, then filter out all vertices that match one or more labels. Here we introduce several examples of using label filtering.</p>
<div class="language-cpp codeBlockContainer_w3PW theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Tt2Q"><pre tabindex="0" class="prism-code language-cpp codeBlock_xdHR thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Sjn8"><span class="token-line" style="color:#393A34"><span class="token plain"> graph_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> vertex_info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> graph_info</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">GetVertexInfo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;organisation&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> labels </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertex_info</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">GetLabels</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// query vertices with a specific label</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> maybe_filter_vertices_collection </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">VerticesCollection</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">verticesWithLabel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">string</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;company&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> graph_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> type</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">ASSERT</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">maybe_filter_vertices_collection</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">has_error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> filter_vertices </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> maybe_filter_vertices_collection</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// iterate vertices with label &quot;company&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> it </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> filter_vertices</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">begin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> it </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> filter_vertices</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token function" style="color:#d73a49">end</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token operator" style="color:#393A34">++</span><span class="token plain">it</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// get a node&#x27;s all labels</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> label_result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> it</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">label</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">cout </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;id: &quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> it</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">id</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot; &quot;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">label_result</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">has_error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> label </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> label_result</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">cout </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> label </span><span class="token operator" style="color:#393A34">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot; &quot;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// query vertices based on a query result</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> maybe_filter_vertices_collection </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">VerticesCollection</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">verticesWithLabel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">string</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&quot;public&quot;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> filter_vertices</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// query vertices with multi labels</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">auto</span><span class="token plain"> maybe_filter_vertices_collection </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> graphar</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token class-name">VerticesCollection</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">verticesWithMultipleLabels</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">&quot;company&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;public&quot;</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> graph_info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> type</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup_oM_0"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CGtL" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3v4"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_srdl"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Notice that, if the first two queries are executed successively, the result is equivalent to the third query.</p>
<h3 class="anchor anchorWithStickyNavbar_qibj" id="working-with-cloud-storage-s3-oss">Working with Cloud Storage (S3, OSS)<a href="#working-with-cloud-storage-s3-oss" class="hash-link" aria-label="Direct link to Working with Cloud Storage (S3, OSS)" title="Direct link to Working with Cloud Storage (S3, OSS)"></a></h3>
<p>GraphAr supports reading and writing data from and to cloud storage, including
AWS S3 and Alibaba Cloud OSS.</p>
<p>To read data from cloud storage, you can specify the path of the data files
with URI schema, e.g., &quot;s3://bucket-name/path/to/data&quot; or &quot;s3://[access-key<!-- -->:secret-key<!-- -->]@bucket-name/path/to/data&quot;.</p>
<p><a href="https://github.com/apache/incubator-graphar/blob/main/cpp/test/test_info.cc#L777-L792" target="_blank" rel="noopener noreferrer">Code example</a> demonstrates how to read data from S3.</p>
<p>Note that once you use cloud storage, you need to call <code>graphar::InitializeS3</code> to initialize S3 APIs before starting the work and call<code>graphar::FinalizeS3()</code> to shut down the APIs after the work finish.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/incubator-graphar/edit/main/docs/libraries/cpp/getting-started.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_z10d" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_lw5U"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/category/c-library"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">C++ Library</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/category/examples"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Examples</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_b1Lp thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#information-files" class="table-of-contents__link toc-highlight">Information Files</a><ul><li><a href="#graph-information" class="table-of-contents__link toc-highlight">Graph information</a></li><li><a href="#vertex-information" class="table-of-contents__link toc-highlight">Vertex information</a></li><li><a href="#edge-information" class="table-of-contents__link toc-highlight">Edge information</a></li></ul></li><li><a href="#data-files" class="table-of-contents__link toc-highlight">Data Files</a><ul><li><a href="#property-data" class="table-of-contents__link toc-highlight">Property data</a></li><li><a href="#adjlist-data" class="table-of-contents__link toc-highlight">AdjList data</a></li></ul></li><li><a href="#how-to-use-graphar" class="table-of-contents__link toc-highlight">How to Use GraphAr</a><ul><li><a href="#construct-information" class="table-of-contents__link toc-highlight">Construct information</a></li><li><a href="#read-graphar-format-files" class="table-of-contents__link toc-highlight">Read GraphAr format files</a></li><li><a href="#write-graphar-format-files" class="table-of-contents__link toc-highlight">Write GraphAr format files</a></li><li><a href="#a-pagerank-example" class="table-of-contents__link toc-highlight">A PageRank Example</a></li><li><a href="#processing-graph-data-with-labels" class="table-of-contents__link toc-highlight">Processing Graph Data with Labels</a></li><li><a href="#using-label-filtering-functions" class="table-of-contents__link toc-highlight">Using Label Filtering Functions</a></li><li><a href="#working-with-cloud-storage-s3-oss" class="table-of-contents__link toc-highlight">Working with Cloud Storage (S3, OSS)</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://lists.apache.org/list.html?dev@graphar.apache.org" target="_blank" rel="noopener noreferrer" class="footer__link-item">Mailing list<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_XAZE"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://join.slack.com/t/grapharworkspace/shared_invite/zt-1wh5vo828-yxs0MlXYBPBBNvjOGhL4kQ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_XAZE"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/specification/format">Format</a></li></ul></div><div class="col footer__col"><div class="footer__title">Repositories</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/apache/incubator-graphar" target="_blank" rel="noopener noreferrer" class="footer__link-item">GraphAr<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_XAZE"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/apache/incubator-graphar-website" target="_blank" rel="noopener noreferrer" class="footer__link-item">Website<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_XAZE"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/apache/incubator-graphar-testing" target="_blank" rel="noopener noreferrer" class="footer__link-item">Testing<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_XAZE"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://incubator.apache.org/" rel="noopener noreferrer" class="footerLogoLink_M25t"><img src="/img/apache-incubator.svg" alt="Apache Incubator logo" class="footer__logo themedComponent_RIc6 themedComponent--light_aQWN" width="200"><img src="/img/apache-incubator.svg" alt="Apache Incubator logo" class="footer__logo themedComponent_RIc6 themedComponent--dark_XAeT" width="200"></a></div><div class="footer__copyright"><div>
<p>
Apache GraphAr is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</p>
<p>
Copyright © 2026 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
</p>
</div></div></div></div></footer></div>
</body>
</html>