blob: 85f09dfe895962f35a9a32b64800768d66b536c2 [file] [log] [blame]
<!doctype html><html lang=cn class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.102.3"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/favicons/android-96x96.png sizes=96x96><link rel=icon type=image/png href=/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/favicons/android-192x192.png sizes=192x192><title>HugeGraph-Loader Quick Start | HugeGraph</title><meta name=description content="1 HugeGraph-Loader 概述
HugeGraph-Loader 是 HugeGraph 的数据导入组件,能够将多种数据源的数据转化为图的顶点和边并批量导入到图数据库中。
目前支持的数据源包括:
本地磁盘文件或目录,支持 TEXT、CSV 和 JSON 格式的文件, …"><meta property="og:title" content="HugeGraph-Loader Quick Start"><meta property="og:description" content="1 HugeGraph-Loader 概述 HugeGraph-Loader 是 HugeGraph 的数据导入组件,能够将多种数据源的数据转化为图的顶点和边并批量导入到图数据库中。
目前支持的数据源包括:
本地磁盘文件或目录,支持 TEXT、CSV 和 JSON 格式的文件,支持压缩文件 HDFS 文件或目录,支持压缩文件 主流关系型数据库,如 MySQL、PostgreSQL、Oracle、SQL Server 本地磁盘文件和 HDFS 文件支持断点续传。
后面会具体说明。
注意:使用 HugeGraph-Loader 需要依赖 HugeGraph Server 服务,下载和启动 Server 请参考 HugeGraph-Server Quick Start
2 获取 HugeGraph-Loader 有两种方式可以获取 HugeGraph-Loader:
使用 Docker 镜像 (便于测试) 下载已编译的压缩包 克隆源码编译安装 2.1 使用 Docker 镜像 (便于测试) 我们可以使用 docker run -itd --name loader hugegraph/loader部署 loader 服务。对于需要加载的数据,则可以通过挂载 -v /path/to/data/file:/loader/file 或者docker cp的方式将文件复制到 loader 容器内部。
或者使用 docker-compose 启动 loader, 启动命令为 docker-compose up -d, 样例的 docker-compose."><meta property="og:type" content="article"><meta property="og:url" content="/cn/docs/quickstart/hugegraph-loader/"><meta property="article:section" content="docs"><meta property="article:modified_time" content="2024-02-01T18:09:33+08:00"><meta property="og:site_name" content="HugeGraph"><meta itemprop=name content="HugeGraph-Loader Quick Start"><meta itemprop=description content="1 HugeGraph-Loader 概述 HugeGraph-Loader 是 HugeGraph 的数据导入组件,能够将多种数据源的数据转化为图的顶点和边并批量导入到图数据库中。
目前支持的数据源包括:
本地磁盘文件或目录,支持 TEXT、CSV 和 JSON 格式的文件,支持压缩文件 HDFS 文件或目录,支持压缩文件 主流关系型数据库,如 MySQL、PostgreSQL、Oracle、SQL Server 本地磁盘文件和 HDFS 文件支持断点续传。
后面会具体说明。
注意:使用 HugeGraph-Loader 需要依赖 HugeGraph Server 服务,下载和启动 Server 请参考 HugeGraph-Server Quick Start
2 获取 HugeGraph-Loader 有两种方式可以获取 HugeGraph-Loader:
使用 Docker 镜像 (便于测试) 下载已编译的压缩包 克隆源码编译安装 2.1 使用 Docker 镜像 (便于测试) 我们可以使用 docker run -itd --name loader hugegraph/loader部署 loader 服务。对于需要加载的数据,则可以通过挂载 -v /path/to/data/file:/loader/file 或者docker cp的方式将文件复制到 loader 容器内部。
或者使用 docker-compose 启动 loader, 启动命令为 docker-compose up -d, 样例的 docker-compose."><meta itemprop=dateModified content="2024-02-01T18:09:33+08:00"><meta itemprop=wordCount content="2310"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="HugeGraph-Loader Quick Start"><meta name=twitter:description content="1 HugeGraph-Loader 概述 HugeGraph-Loader 是 HugeGraph 的数据导入组件,能够将多种数据源的数据转化为图的顶点和边并批量导入到图数据库中。
目前支持的数据源包括:
本地磁盘文件或目录,支持 TEXT、CSV 和 JSON 格式的文件,支持压缩文件 HDFS 文件或目录,支持压缩文件 主流关系型数据库,如 MySQL、PostgreSQL、Oracle、SQL Server 本地磁盘文件和 HDFS 文件支持断点续传。
后面会具体说明。
注意:使用 HugeGraph-Loader 需要依赖 HugeGraph Server 服务,下载和启动 Server 请参考 HugeGraph-Server Quick Start
2 获取 HugeGraph-Loader 有两种方式可以获取 HugeGraph-Loader:
使用 Docker 镜像 (便于测试) 下载已编译的压缩包 克隆源码编译安装 2.1 使用 Docker 镜像 (便于测试) 我们可以使用 docker run -itd --name loader hugegraph/loader部署 loader 服务。对于需要加载的数据,则可以通过挂载 -v /path/to/data/file:/loader/file 或者docker cp的方式将文件复制到 loader 容器内部。
或者使用 docker-compose 启动 loader, 启动命令为 docker-compose up -d, 样例的 docker-compose."><link rel=preload href=/scss/main.min.14ea575cb35d93d46ff8681b2334f40fd46243c100c5c39f5a841b931fae2d40.css as=style><link href=/scss/main.min.14ea575cb35d93d46ff8681b2334f40fd46243c100c5c39f5a841b931fae2d40.css rel=stylesheet integrity><script src=https://code.jquery.com/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script>
<link rel=stylesheet href=/css/prism.css><script type=application/javascript>var doNotTrack=!1;doNotTrack||(window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-00000000-0","auto"),ga("send","pageview"))</script><script async src=https://www.google-analytics.com/analytics.js></script></head><body class=td-page><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand href=/cn/><span class=navbar-logo><svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 16 16"><defs><style>.cls-1{fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:.5px;opacity:.3}.cls-2{fill:#229efa}.cls-3{fill:#9948f7}.cls-4{fill:#33bc7a}.cls-5{fill:url(#未命名的渐变_3)}.cls-6{fill:url(#未命名的渐变_13)}.cls-7{fill:url(#未命名的渐变_11)}</style><linearGradient id="未命名的渐变_3" x1="6.16" y1="14.63" x2="6.16" y2="6.01" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2e3192"/><stop offset="0" stop-color="#229efa"/><stop offset=".44" stop-color="#239cf8"/><stop offset=".6" stop-color="#2795f2"/><stop offset=".71" stop-color="#2d8ae8"/><stop offset=".81" stop-color="#3679d9"/><stop offset=".89" stop-color="#4263c6"/><stop offset=".95" stop-color="#5048af"/><stop offset="1" stop-color="#5c319b"/></linearGradient><linearGradient id="未命名的渐变_13" x1="10.75" y1="8.2" x2="4.49" y2="1.94" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#991146"/><stop offset="0" stop-color="#326b4e"/><stop offset=".02" stop-color="#3a685c"/><stop offset=".07" stop-color="#506180"/><stop offset=".13" stop-color="#645aa0"/><stop offset=".19" stop-color="#7554bc"/><stop offset=".26" stop-color="#8250d2"/><stop offset=".35" stop-color="#8d4ce3"/><stop offset=".45" stop-color="#944aee"/><stop offset=".6" stop-color="#9848f5"/><stop offset="1" stop-color="#9948f7"/></linearGradient><linearGradient id="未命名的渐变_11" x1="15.34" y1="6.67" x2="7.88" y2="10.98" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#33bc7a"/><stop offset=".45" stop-color="#32ba7a"/><stop offset=".61" stop-color="#2fb37c"/><stop offset=".73" stop-color="#29a87e"/><stop offset=".82" stop-color="#219782"/><stop offset=".9" stop-color="#168186"/><stop offset=".97" stop-color="#09668b"/><stop offset="1" stop-color="#03598e"/></linearGradient></defs><title>logo</title><rect class="cls-1" x="-143.14" y="-373.46" width="597.8" height="424.44"/><circle class="cls-2" cx="12.02" cy="1.83" r="1.33"/><circle class="cls-3" cx="12.02" cy="14.17" r="1.33"/><circle class="cls-4" cx="1.33" cy="8" r="1.33"/><path class="cls-5" d="M7.91 10h0a2.65 2.65.0 01-.23-3.74A1.75 1.75.0 017.91 6h0A2.66 2.66.0 014.4 6h0a1.81 1.81.0 01.24.24A2.65 2.65.0 014.4 10h0a2.62 2.62.0 00-.89 2 2.65 2.65.0 104.4-2z"/><path class="cls-6" d="M12.19 5.49a2.78 2.78.0 01-.5.11A2.64 2.64.0 018.76 3.5h0a2.65 2.65.0 10-2.6 3.17A2.6 2.6.0 007 6.53H7a2.65 2.65.0 013.44 2 2.94 2.94.0 010-.51 2.65 2.65.0 011.75-2.53z"/><path class="cls-7" d="M13 5.35a2.64 2.64.0 00-2.59 2.12h0a3 3 0 01-.08.32A2.65 2.65.0 017.54 9.58a2.86 2.86.0 00.37.41h0a2.63 2.63.0 01.9 2 2.84 2.84.0 01-.05.51 2.64 2.64.0 013.12-2.06l.32.08h0a2.6 2.6.0 00.84.14 2.65 2.65.0 100-5.3z"/></svg></span><span class=font-weight-bold>HugeGraph</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/cn/docs/><i class='fas fa-book pr-2'></i><span>Documentation</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://github.com/apache/incubator-hugegraph target=_blank><i class='fab fa-github pr-2'></i><span>GitHub</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/cn/docs/download/download/><i class='fas fa-download pr-2'></i><span>Download</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/cn/community/><span>Community</span></a></li><li class="nav-item dropdown mr-4 d-none d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>中文</a><div class=dropdown-menu aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/docs/quickstart/hugegraph-loader/>English</a></div></li></ul></div><div class="navbar-nav d-none d-lg-block"></div></nav></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-xl-nowrap"><aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><div id=td-sidebar-menu class=td-sidebar__inner><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>中文</a><div class=dropdown-menu aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/docs/quickstart/hugegraph-loader/>English</a></div></div><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-cndocs-li><a href=/cn/docs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section tree-root" id=m-cndocs><span>Documentation</span></a><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsintroductionreadme-li><a href=/cn/docs/introduction/readme/ title="Introduction with HugeGraph" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsintroductionreadme><span>Introduction</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsdownloaddownload-li><a href=/cn/docs/download/download/ title="下载 Apache HugeGraph (Incubating)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsdownloaddownload><span>Download</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-cndocsquickstart-li><a href=/cn/docs/quickstart/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocsquickstart><span>Quick Start</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsquickstarthugegraph-server-li><a href=/cn/docs/quickstart/hugegraph-server/ title="HugeGraph-Server Quick Start" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsquickstarthugegraph-server><span>安装/构建 HugeGraph-Server</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsquickstarthugegraph-loader-li><a href=/cn/docs/quickstart/hugegraph-loader/ title="HugeGraph-Loader Quick Start" class="align-left pl-0 active td-sidebar-link td-sidebar-link__page" id=m-cndocsquickstarthugegraph-loader><span class=td-sidebar-nav-active-item>使用 Loader/Spark 实时导入数据</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsquickstarthugegraph-hubble-li><a href=/cn/docs/quickstart/hugegraph-hubble/ title="HugeGraph-Hubble Quick Start" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsquickstarthugegraph-hubble><span>使用 Hubble 实现图可视化</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsquickstarthugegraph-ai-li><a href=/cn/docs/quickstart/hugegraph-ai/ title="HugeGraph-AI Quick Start" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsquickstarthugegraph-ai><span>使用 HugeGraph-AI</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsquickstarthugegraph-client-li><a href=/cn/docs/quickstart/hugegraph-client/ title="HugeGraph-Client Quick Start" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsquickstarthugegraph-client><span>使用 HugeGraph-Client 开发</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsquickstarthugegraph-tools-li><a href=/cn/docs/quickstart/hugegraph-tools/ title="HugeGraph-Tools Quick Start" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsquickstarthugegraph-tools><span>使用 HugeGraph-Tools 导出/管理图</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsquickstarthugegraph-computer-li><a href=/cn/docs/quickstart/hugegraph-computer/ title="HugeGraph-Computer Quick Start" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsquickstarthugegraph-computer><span>使用 Computer 进行 OLAP 分析</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocsconfig-li><a href=/cn/docs/config/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocsconfig><span>Config</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsconfigconfig-guide-li><a href=/cn/docs/config/config-guide/ title="HugeGraph 配置" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsconfigconfig-guide><span>参数配置</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsconfigconfig-option-li><a href=/cn/docs/config/config-option/ title="HugeGraph 配置项" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsconfigconfig-option><span>配置项列表</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsconfigconfig-authentication-li><a href=/cn/docs/config/config-authentication/ title="HugeGraph 内置用户权限与扩展权限配置及使用" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsconfigconfig-authentication><span>权限配置</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsconfigconfig-https-li><a href=/cn/docs/config/config-https/ title="配置 HugeGraphServer 使用 https 协议" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsconfigconfig-https><span>配置 HTTPS</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsconfigconfig-computer-li><a href=/cn/docs/config/config-computer/ title="HugeGraph-Computer 配置" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsconfigconfig-computer><span>图计算 Computer 配置</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocsclients-li><a href=/cn/docs/clients/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocsclients><span>API</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocsclientsrestful-api-li><a href=/cn/docs/clients/restful-api/ title="HugeGraph RESTful API" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocsclientsrestful-api><span>RESTful API</span></a><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apischema-li><a href=/cn/docs/clients/restful-api/schema/ title="Schema API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apischema><span>Schema</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apipropertykey-li><a href=/cn/docs/clients/restful-api/propertykey/ title="PropertyKey API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apipropertykey><span>PropertyKey</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apivertexlabel-li><a href=/cn/docs/clients/restful-api/vertexlabel/ title="VertexLabel API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apivertexlabel><span>VertexLabel</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apiedgelabel-li><a href=/cn/docs/clients/restful-api/edgelabel/ title="EdgeLabel API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apiedgelabel><span>EdgeLabel</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apiindexlabel-li><a href=/cn/docs/clients/restful-api/indexlabel/ title="IndexLabel API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apiindexlabel><span>IndexLabel</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apirebuild-li><a href=/cn/docs/clients/restful-api/rebuild/ title="Rebuild API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apirebuild><span>Rebuild</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apivertex-li><a href=/cn/docs/clients/restful-api/vertex/ title="Vertex API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apivertex><span>Vertex</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apiedge-li><a href=/cn/docs/clients/restful-api/edge/ title="Edge API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apiedge><span>Edge</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apitraverser-li><a href=/cn/docs/clients/restful-api/traverser/ title="Traverser API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apitraverser><span>Traverser</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apirank-li><a href=/cn/docs/clients/restful-api/rank/ title="Rank API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apirank><span>Rank</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apivariable-li><a href=/cn/docs/clients/restful-api/variable/ title="Variable API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apivariable><span>Variable</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apigraphs-li><a href=/cn/docs/clients/restful-api/graphs/ title="Graphs API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apigraphs><span>Graphs</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apitask-li><a href=/cn/docs/clients/restful-api/task/ title="Task API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apitask><span>Task</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apigremlin-li><a href=/cn/docs/clients/restful-api/gremlin/ title="Gremlin API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apigremlin><span>Gremlin</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apicypher-li><a href=/cn/docs/clients/restful-api/cypher/ title="Cypher API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apicypher><span>Cypher</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apiauth-li><a href=/cn/docs/clients/restful-api/auth/ title="Authentication API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apiauth><span>Authentication</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apimetrics-li><a href=/cn/docs/clients/restful-api/metrics/ title="Metrics API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apimetrics><span>Metrics</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsrestful-apiother-li><a href=/cn/docs/clients/restful-api/other/ title="Other API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsrestful-apiother><span>Other</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientshugegraph-client-li><a href=/cn/docs/clients/hugegraph-client/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientshugegraph-client><span>HugeGraph Java Client</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsclientsgremlin-console-li><a href=/cn/docs/clients/gremlin-console/ title=Gremlin-Console class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsclientsgremlin-console><span>Gremlin Console</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocsguides-li><a href=/cn/docs/guides/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocsguides><span>GUIDES</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsguidesarchitectural-li><a href=/cn/docs/guides/architectural/ title="HugeGraph Architecture Overview" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsguidesarchitectural><span>架构概览</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsguidesdesgin-concept-li><a href=/cn/docs/guides/desgin-concept/ title="HugeGraph Design Concepts" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsguidesdesgin-concept><span>设计理念(legacy)</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsguidescustom-plugin-li><a href=/cn/docs/guides/custom-plugin/ title="HugeGraph Plugin 机制及插件扩展流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsguidescustom-plugin><span>HugeGraph Plugin</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsguidesbackup-restore-li><a href=/cn/docs/guides/backup-restore/ title="Backup Restore" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsguidesbackup-restore><span>备份 & 恢复</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsguidesfaq-li><a href=/cn/docs/guides/faq/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsguidesfaq><span>FAQ</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsguidessecurity-li><a href=/cn/docs/guides/security/ title=报告安全问题 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsguidessecurity><span>安全公告</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocslanguage-li><a href=/cn/docs/language/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocslanguage><span>QUERY LANGUAGE</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocslanguagehugegraph-gremlin-li><a href=/cn/docs/language/hugegraph-gremlin/ title="HugeGraph Gremlin" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocslanguagehugegraph-gremlin><span>Gremlin Query Language</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocslanguagehugegraph-example-li><a href=/cn/docs/language/hugegraph-example/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocslanguagehugegraph-example><span>HugeGraph Examples</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocsperformance-li><a href=/cn/docs/performance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocsperformance><span>PERFORMANCE</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsperformancehugegraph-benchmark-056-li><a href=/cn/docs/performance/hugegraph-benchmark-0.5.6/ title="HugeGraph BenchMark Performance" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsperformancehugegraph-benchmark-056><span>HugeGraph 基准测试</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocsperformanceapi-preformance-li><a href=/cn/docs/performance/api-preformance/ title="HugeGraph-API Performance" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocsperformanceapi-preformance><span>HugeGraph-API 性能</span></a><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsperformanceapi-preformancehugegraph-api-056-rocksdb-li><a href=/cn/docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsperformanceapi-preformancehugegraph-api-056-rocksdb><span>v0.5.6 Stand-alone(RocksDB)</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsperformanceapi-preformancehugegraph-api-056-cassandra-li><a href=/cn/docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsperformanceapi-preformancehugegraph-api-056-cassandra><span>v0.5.6 Cluster(Cassandra)</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsperformancehugegraph-loader-performance-li><a href=/cn/docs/performance/hugegraph-loader-performance/ title="HugeGraph-Loader Performance" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsperformancehugegraph-loader-performance><span>HugeGraph-Loader 性能</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocsperformancehugegraph-benchmark-044-li><a href=/cn/docs/performance/hugegraph-benchmark-0.4.4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocsperformancehugegraph-benchmark-044><span></span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocscontribution-guidelines-li><a href=/cn/docs/contribution-guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocscontribution-guidelines><span>Contribution Guidelines</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocscontribution-guidelinescontribute-li><a href=/cn/docs/contribution-guidelines/contribute/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocscontribution-guidelinescontribute><span>如何参与 HugeGraph 社区</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocscontribution-guidelinessubscribe-li><a href=/cn/docs/contribution-guidelines/subscribe/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocscontribution-guidelinessubscribe><span>订阅社区邮箱</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocscontribution-guidelinesvalidate-release-li><a href=/cn/docs/contribution-guidelines/validate-release/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocscontribution-guidelinesvalidate-release><span>验证 Apache 发版</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocscontribution-guidelineshugegraph-server-idea-setup-li><a href=/cn/docs/contribution-guidelines/hugegraph-server-idea-setup/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocscontribution-guidelineshugegraph-server-idea-setup><span>在 IDEA 中配置 Server 开发环境</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocscontribution-guidelinescommitter-guidelines-li><a href=/cn/docs/contribution-guidelines/committer-guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocscontribution-guidelinescommitter-guidelines><span>Apache HugeGraph Committer 指南</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-cndocschangelog-li><a href=/cn/docs/changelog/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-cndocschangelog><span>CHANGELOGS</span></a><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocschangeloghugegraph-0120-release-notes-li><a href=/cn/docs/changelog/hugegraph-0.12.0-release-notes/ title="HugeGraph 0.12 Release Notes" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocschangeloghugegraph-0120-release-notes><span>Release-0.12.0</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocschangeloghugegraph-100-release-notes-li><a href=/cn/docs/changelog/hugegraph-1.0.0-release-notes/ title="HugeGraph 1.0.0 Release Notes" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocschangeloghugegraph-100-release-notes><span>Release-1.0.0</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocschangeloghugegraph-120-release-notes-li><a href=/cn/docs/changelog/hugegraph-1.2.0-release-notes/ title="HugeGraph 1.2.0 Release Notes" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocschangeloghugegraph-120-release-notes><span>Release-1.2.0</span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocschangeloghugegraph-130-release-notes-li><a href=/cn/docs/changelog/hugegraph-1.3.0-release-notes/ title="HugeGraph 1.3.0 Release Notes" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocschangeloghugegraph-130-release-notes><span>Release-1.3.0</span></a></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocscla-li><a href=/cn/docs/cla/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocscla><span></span></a></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-cndocssummary-li><a href=/cn/docs/summary/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-cndocssummary><span></span></a></li></ul></li></ul></nav></div></aside><aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/incubator-hugegraph-doc/tree/master/content/cn/docs/quickstart/hugegraph-loader.md class=td-page-meta--view target=_blank rel=noopener><i class="fa fa-file-alt fa-fw"></i> View page source</a>
<a href=https://github.com/apache/incubator-hugegraph-doc/edit/master/content/cn/docs/quickstart/hugegraph-loader.md class=td-page-meta--edit target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/incubator-hugegraph-doc/new/master/content/cn/docs/quickstart/hugegraph-loader.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" class=td-page-meta--child target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/apache/incubator-hugegraph-doc/issues/new?title=HugeGraph-Loader%20Quick%20Start" class=td-page-meta--issue target=_blank rel=noopener><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
<a href=https://github.com/apache/incubator-hugegraph/issues/new class=td-page-meta--project-issue target=_blank rel=noopener><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
<a id=print href=/cn/docs/quickstart/_print/><i class="fa fa-print fa-fw"></i> Print entire section</a></div><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#1-hugegraph-loader-概述>1 HugeGraph-Loader 概述</a></li><li><a href=#2-获取-hugegraph-loader>2 获取 HugeGraph-Loader</a></li><li><a href=#3-使用流程>3 使用流程</a></li><li><a href=#4-完整示例>4 完整示例</a></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/cn/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/cn/docs/quickstart/>Quick Start</a></li><li class="breadcrumb-item active" aria-current=page><a href=/cn/docs/quickstart/hugegraph-loader/>使用 Loader/Spark 实时导入数据</a></li></ol></nav><div class=td-content><h1>HugeGraph-Loader Quick Start</h1><header class=article-meta></header><h3 id=1-hugegraph-loader-概述>1 HugeGraph-Loader 概述</h3><p>HugeGraph-Loader 是 HugeGraph 的数据导入组件,能够将多种数据源的数据转化为图的顶点和边并批量导入到图数据库中。</p><p>目前支持的数据源包括:</p><ul><li>本地磁盘文件或目录,支持 TEXT、CSV 和 JSON 格式的文件,支持压缩文件</li><li>HDFS 文件或目录,支持压缩文件</li><li>主流关系型数据库,如 MySQL、PostgreSQL、Oracle、SQL Server</li></ul><p>本地磁盘文件和 HDFS 文件支持断点续传。</p><p>后面会具体说明。</p><blockquote><p>注意:使用 HugeGraph-Loader 需要依赖 HugeGraph Server 服务,下载和启动 Server 请参考 <a href=/docs/quickstart/hugegraph-server>HugeGraph-Server Quick Start</a></p></blockquote><h3 id=2-获取-hugegraph-loader>2 获取 HugeGraph-Loader</h3><p>有两种方式可以获取 HugeGraph-Loader:</p><ul><li>使用 Docker 镜像 (便于<strong>测试</strong>)</li><li>下载已编译的压缩包</li><li>克隆源码编译安装</li></ul><h4 id=21-使用-docker-镜像-便于测试>2.1 使用 Docker 镜像 (便于<strong>测试</strong>)</h4><p>我们可以使用 <code>docker run -itd --name loader hugegraph/loader</code>部署 loader 服务。对于需要加载的数据,则可以通过挂载 <code>-v /path/to/data/file:/loader/file</code> 或者<code>docker cp</code>的方式将文件复制到 loader 容器内部。</p><p>或者使用 docker-compose 启动 loader, 启动命令为 <code>docker-compose up -d</code>, 样例的 docker-compose.yml 如下所示:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>version</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#4e9a06>&#39;3&#39;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>services</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>server</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>hugegraph/hugegraph</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>container_name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>server</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span>- <span style=color:#0000cf;font-weight:700>8080</span><span style=color:#000;font-weight:700>:</span><span style=color:#0000cf;font-weight:700>8080</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>hubble</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>hugegraph/hubble</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>container_name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>hubble</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span>- <span style=color:#0000cf;font-weight:700>8088</span><span style=color:#000;font-weight:700>:</span><span style=color:#0000cf;font-weight:700>8088</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>loader</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>hugegraph/loader</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>container_name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>loader</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#8f5902;font-style:italic># mount your own data here</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#8f5902;font-style:italic># volumes:</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#8f5902;font-style:italic># - /path/to/data/file:/loader/file</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span></code></pre></div><p>具体的数据导入流程可以参考 <a href=#45-%E4%BD%BF%E7%94%A8-docker-%E5%AF%BC%E5%85%A5>4.5 使用 docker 导入</a></p><blockquote><p>注意:</p><ol><li><p>hugegraph-loader 的 docker 镜像是一个便捷版本,用于快速启动 loader,并不是<strong>官方发布物料包方式</strong>。你可以从 <a href=https://infra.apache.org/release-distribution.html#dockerhub>ASF Release Distribution Policy</a> 中得到更多细节。</p></li><li><p>推荐使用 <code>release tag</code>(如 <code>1.2.0</code>) 以获取稳定版。使用 <code>latest</code> tag 可以使用开发中的最新功能。</p></li></ol></blockquote><h4 id=22-下载已编译的压缩包>2.2 下载已编译的压缩包</h4><p>下载最新版本的 <code>HugeGraph-Toolchain</code> Release 包,里面包含了 <code>loader + tool + hubble</code> 全套工具,如果你已经下载,可跳过重复步骤</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>wget https://downloads.apache.org/incubator/hugegraph/<span style=color:#ce5c00;font-weight:700>{</span>version<span style=color:#ce5c00;font-weight:700>}</span>/apache-hugegraph-toolchain-incubating-<span style=color:#ce5c00;font-weight:700>{</span>version<span style=color:#ce5c00;font-weight:700>}</span>.tar.gz
</span></span><span style=display:flex><span>tar zxf *hugegraph*.tar.gz
</span></span></code></pre></div><h4 id=23-克隆源码编译安装>2.3 克隆源码编译安装</h4><p>克隆最新版本的 HugeGraph-Loader 源码包:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 1. get from github</span>
</span></span><span style=display:flex><span>git clone https://github.com/apache/hugegraph-toolchain.git
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 2. get from direct url (please choose the **latest release** version)</span>
</span></span><span style=display:flex><span>wget https://downloads.apache.org/incubator/hugegraph/<span style=color:#ce5c00;font-weight:700>{</span>version<span style=color:#ce5c00;font-weight:700>}</span>/apache-hugegraph-toolchain-incubating-<span style=color:#ce5c00;font-weight:700>{</span>version<span style=color:#ce5c00;font-weight:700>}</span>-src.tar.gz
</span></span></code></pre></div><details><summary>点击展开/折叠 手动安装 ojdbc 方法</summary><p>由于 Oracle ojdbc license 的限制,需要手动安装 ojdbc 到本地 maven 仓库。
访问 <a href=https://www.oracle.com/database/technologies/appdev/jdbc-drivers-archive.html>Oracle jdbc 下载</a> 页面。选择 Oracle Database 12c Release 2 (12.2.0.1) drivers,如下图所示。</p><p>打开链接后,选择“ojdbc8.jar”</p><p>把 ojdbc8 安装到本地 maven 仓库,进入<code>ojdbc8.jar</code>所在目录,执行以下命令。</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>mvn install:install-file -Dfile=./ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
</span></span></code></pre></div></details><p>编译生成 tar 包:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#204a87>cd</span> hugegraph-loader
</span></span><span style=display:flex><span>mvn clean package -DskipTests
</span></span></code></pre></div><h3 id=3-使用流程>3 使用流程</h3><p>使用 HugeGraph-Loader 的基本流程分为以下几步:</p><ul><li>编写图模型</li><li>准备数据文件</li><li>编写输入源映射文件</li><li>执行命令导入</li></ul><h4 id=31-编写图模型>3.1 编写图模型</h4><p>这一步是建模的过程,用户需要对自己已有的数据和想要创建的图模型有一个清晰的构想,然后编写 schema 建立图模型。</p><p>比如想创建一个拥有两类顶点及两类边的图,顶点是"人"和"软件",边是"人认识人"和"人创造软件",并且这些顶点和边都带有一些属性,比如顶点"人"有:&ldquo;姓名&rdquo;、&ldquo;年龄"等属性,
&ldquo;软件"有:&ldquo;名字&rdquo;、&ldquo;售卖价格"等属性;边"认识"有:&ldquo;日期"属性等。</p><div style=text-align:center><img src=/docs/images/demo-graph-model.png alt=image><p>示例图模型</p></div><p>在设计好了图模型之后,我们可以用<code>groovy</code>编写出<code>schema</code>的定义,并保存至文件中,这里命名为<code>schema.groovy</code></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-groovy data-lang=groovy><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 创建一些属性
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asText</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asInt</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asText</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;date&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asText</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;price&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asDouble</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 创建 person 顶点类型,其拥有三个属性:name, age, city,主键是 name
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>vertexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>properties</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>primaryKeys</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 创建 software 顶点类型,其拥有两个属性:name, price,主键是 name
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>vertexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>properties</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;price&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>primaryKeys</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 创建 knows 边类型,这类边是从 person 指向 person 的
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>edgeLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;knows&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>sourceLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>targetLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 创建 created 边类型,这类边是从 person 指向 software 的
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>edgeLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;created&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>sourceLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>targetLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span></code></pre></div><blockquote><p>关于 schema 的详细说明请参考 <a href=/docs/clients/hugegraph-client>hugegraph-client</a> 中对应部分。</p></blockquote><h4 id=32-准备数据>3.2 准备数据</h4><p>目前 HugeGraph-Loader 支持的数据源包括:</p><ul><li>本地磁盘文件或目录</li><li>HDFS 文件或目录</li><li>部分关系型数据库</li><li>Kafka topic</li></ul><h5 id=321-数据源结构>3.2.1 数据源结构</h5><h6 id=3211-本地磁盘文件或目录>3.2.1.1 本地磁盘文件或目录</h6><p>用户可以指定本地磁盘文件作为数据源,如果数据分散在多个文件中,也支持以某个目录作为数据源,但暂时不支持以多个目录作为数据源。</p><p>比如:我的数据分散在多个文件中,part-0、part-1 &mldr; part-n,要想执行导入,必须保证它们是放在一个目录下的。然后在 loader 的映射文件中,将<code>path</code>指定为该目录即可。</p><p>支持的文件格式包括:</p><ul><li>TEXT</li><li>CSV</li><li>JSON</li></ul><p>TEXT 是自定义分隔符的文本文件,第一行通常是标题,记录了每一列的名称,也允许没有标题行(在映射文件中指定)。其余的每行代表一条记录,会被转化为一个顶点/边;行的每一列对应一个字段,会被转化为顶点/边的 id、label 或属性;</p><p>示例如下:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>id|name|lang|price|ISBN
</span></span><span style=display:flex><span>1|lop|java|328|ISBN978-7-107-18618-5
</span></span><span style=display:flex><span>2|ripple|java|199|ISBN978-7-100-13678-5
</span></span></code></pre></div><p>CSV 是分隔符为逗号<code>,</code>的 TEXT 文件,当列值本身包含逗号时,该列值需要用双引号包起来,如:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>marko,29,Beijing
</span></span><span style=display:flex><span>&#34;li,nary&#34;,26,&#34;Wu,han&#34;
</span></span></code></pre></div><p>JSON 文件要求每一行都是一个 JSON 串,且每行的格式需保持一致。</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;marko&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;vadas&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20160110&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>0.5</span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;marko&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;josh&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20130220&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>1.0</span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><h6 id=3212-hdfs-文件或目录>3.2.1.2 HDFS 文件或目录</h6><p>用户也可以指定 HDFS 文件或目录作为数据源,上面关于<code>本地磁盘文件或目录</code>的要求全部适用于这里。除此之外,鉴于 HDFS 上通常存储的都是压缩文件,loader 也提供了对压缩文件的支持,并且<code>本地磁盘文件或目录</code>同样支持压缩文件。</p><p>目前支持的压缩文件类型包括:GZIP、BZ2、XZ、LZMA、SNAPPY_RAW、SNAPPY_FRAMED、Z、DEFLATE、LZ4_BLOCK、LZ4_FRAMED、ORC 和 PARQUET。</p><h6 id=3213-主流关系型数据库>3.2.1.3 主流关系型数据库</h6><p>loader 还支持以部分关系型数据库作为数据源,目前支持 MySQL、PostgreSQL、Oracle 和 SQL Server。</p><p>但目前对表结构要求较为严格,如果导入过程中需要做<strong>关联查询</strong>,这样的表结构是不允许的。关联查询的意思是:在读到表的某行后,发现某列的值不能直接使用(比如外键),需要再去做一次查询才能确定该列的真实值。</p><p>举个例子:假设有三张表,person、software 和 created</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>// person 表结构
</span></span><span style=display:flex><span>id | name | age | city
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>// software 表结构
</span></span><span style=display:flex><span>id | name | lang | price
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>// created 表结构
</span></span><span style=display:flex><span>id | p_id | s_id | date
</span></span></code></pre></div><p>如果在建模(schema)时指定 person 或 software 的 id 策略是 PRIMARY_KEY,选择以 name 作为 primary keys(注意:这是 hugegraph 中 vertexlabel 的概念),在导入边数据时,由于需要拼接出源顶点和目标顶点的 id,必须拿着 p_id/s_id 去 person/software 表中查到对应的 name,这种需要做额外查询的表结构的情况,loader 暂时是不支持的。这时可以采用以下两种方式替代:</p><ol><li>仍然指定 person 和 software 的 id 策略为 PRIMARY_KEY,但是以 person 表和 software 表的 id 列作为顶点的主键属性,这样导入边时直接使用 p_id 和 s_id 和顶点的 label 拼接就能生成 id 了;</li><li>指定 person 和 software 的 id 策略为 CUSTOMIZE,然后直接以 person 表和 software 表的 id 列作为顶点 id,这样导入边时直接使用 p_id 和 s_id 即可;</li></ol><p>关键点就是要让边能直接使用 p_id 和 s_id,不要再去查一次。</p><h5 id=322-准备顶点和边数据>3.2.2 准备顶点和边数据</h5><h6 id=3221-顶点数据>3.2.2.1 顶点数据</h6><p>顶点数据文件由一行一行的数据组成,一般每一行作为一个顶点,每一列会作为顶点属性。下面以 CSV 格式作为示例进行说明。</p><ul><li>person 顶点数据(数据本身不包含 header)</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>Tom,48,Beijing
</span></span><span style=display:flex><span>Jerry,36,Shanghai
</span></span></code></pre></div><ul><li>software 顶点数据(数据本身包含 header)</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>name,price
</span></span><span style=display:flex><span>Photoshop,999
</span></span><span style=display:flex><span>Office,388
</span></span></code></pre></div><h6 id=3222-边数据>3.2.2.2 边数据</h6><p>边数据文件由一行一行的数据组成,一般每一行作为一条边,其中有部分列会作为源顶点和目标顶点的 id,其他列作为边属性。下面以 JSON 格式作为示例进行说明。</p><ul><li>knows 边数据</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Tom&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Jerry&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;2008-12-12&#34;</span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><ul><li>created 边数据</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Tom&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Photoshop&#34;</span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Tom&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Office&#34;</span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Jerry&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;Office&#34;</span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><h4 id=33-编写数据源映射文件>3.3 编写数据源映射文件</h4><h5 id=331-映射文件概述>3.3.1 映射文件概述</h5><p>输入源的映射文件用于描述如何将输入源数据与图的顶点类型/边类型建立映射关系,以<code>JSON</code>格式组织,由多个映射块组成,其中每一个映射块都负责将一个输入源映射为顶点和边。</p><p>具体而言,每个映射块包含<strong>一个输入源</strong>和多个<strong>顶点映射</strong><strong>边映射</strong>块,输入源块对应上面介绍的<code>本地磁盘文件或目录</code><code>HDFS 文件或目录</code><code>关系型数据库</code>,负责描述数据源的基本信息,比如数据在哪,是什么格式的,分隔符是什么等。顶点映射/边映射与该输入源绑定,可以选择输入源的哪些列,哪些列作为 id、哪些列作为属性,以及每一列映射成什么属性,列的值映射成属性的什么值等等。</p><p>以最通俗的话讲,每一个映射块描述了:要导入的文件在哪,文件的每一行要作为哪一类顶点/边,文件的哪些列是需要导入的,以及这些列对应顶点/边的什么属性等。</p><blockquote><p>注意:0.11.0 版本以前的映射文件与 0.11.0 以后的格式变化较大,为表述方便,下面称 0.11.0 以前的映射文件(格式)为 1.0 版本,0.11.0 以后的为 2.0 版本。并且若无特殊说明,“映射文件”表示的是 2.0 版本的。</p></blockquote><details><summary>点击展开/折叠 2.0 版本的映射文件的框架</summary><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;version&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;2.0&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;structs&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;1&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;edges&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div></details><br><p>这里直接给出两个版本的映射文件(描述了上面图模型和数据文件)</p><details><summary>点击展开/折叠 2.0 版本的映射文件</summary><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;version&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;2.0&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;structs&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;1&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;FILE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;vertex_person.csv&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;file_filter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;extensions&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;*&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;CSV&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;delimiter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;,&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;date_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;yyyy-MM-dd HH:mm:ss&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;time_zone&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;GMT+8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skipped_line&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;regex&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;(^#|^//).*|&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;compression&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;NONE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;header&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;city&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;charset&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;UTF-8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;list_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;start_symbol&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;[&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;elem_delimiter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;|&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;end_symbol&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;]&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;unfold&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;value_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;selected&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;ignored&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;null_values&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;update_strategies&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;edges&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;2&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;FILE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;vertex_software.csv&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;file_filter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;extensions&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;*&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;CSV&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;delimiter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;,&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;date_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;yyyy-MM-dd HH:mm:ss&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;time_zone&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;GMT+8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skipped_line&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;regex&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;(^#|^//).*|&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;compression&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;NONE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;header&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;charset&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;UTF-8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;list_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;start_symbol&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;elem_delimiter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;,&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;end_symbol&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;unfold&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;value_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;selected&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;ignored&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;null_values&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;update_strategies&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;edges&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;3&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;FILE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;edge_knows.json&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;file_filter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;extensions&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;*&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;JSON&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;delimiter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;date_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;yyyy-MM-dd HH:mm:ss&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;time_zone&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;GMT+8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skipped_line&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;regex&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;(^#|^//).*|&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;compression&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;NONE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;header&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;charset&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;UTF-8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;list_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;edges&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;knows&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;source_name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;unfold_source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;target_name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;unfold_target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;value_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;selected&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;ignored&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;null_values&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;update_strategies&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;4&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;FILE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;edge_created.json&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;file_filter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;extensions&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;*&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;JSON&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;delimiter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;date_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;yyyy-MM-dd HH:mm:ss&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;time_zone&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;GMT+8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skipped_line&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;regex&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;(^#|^//).*|&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;compression&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;NONE&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;header&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;charset&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;UTF-8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;list_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;edges&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;created&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skip&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;source_name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;unfold_source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;target_name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;unfold_target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>false</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;value_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;selected&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;ignored&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;null_values&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#4e9a06>&#34;&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;update_strategies&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div></details><br><details><summary>点击展开/折叠 1.0 版本的映射文件</summary><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;vertex_person.csv&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;CSV&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;header&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;charset&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;UTF-8&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;vertex_software.csv&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;CSV&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;edges&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;knows&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;edge_knows.json&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;JSON&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;created&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;edge_created.json&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;JSON&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div></details><br><p>映射文件 1.0 版本是以顶点和边为中心,设置输入源;而 2.0 版本是以输入源为中心,设置顶点和边映射。有些输入源(比如一个文件)既能生成顶点,也能生成边,如果用 1.0 版的格式写,就需要在 vertex 和 edge 映射块中各写一次 input 块,这两次的 input 块是完全一样的;而 2.0 版本只需要写一次 input。所以 2.0 版相比于 1.0 版,能省掉一些 input 的重复书写。</p><p>在 hugegraph-loader-{version} 的 bin 目录下,有一个脚本工具 <code>mapping-convert.sh</code> 能直接将 1.0 版本的映射文件转换为 2.0 版本的,使用方式如下:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>bin/mapping-convert.sh struct.json
</span></span></code></pre></div><p>会在 struct.json 的同级目录下生成一个 struct-v2.json。</p><h5 id=332-输入源>3.3.2 输入源</h5><p>输入源目前分为四类:FILE、HDFS、JDBC、KAFKA,由<code>type</code>节点区分,我们称为本地文件输入源、HDFS 输入源、JDBC 输入源和 KAFKA 输入源,下面分别介绍。</p><h6 id=3321-本地文件输入源>3.3.2.1 本地文件输入源</h6><ul><li>id: 输入源的 id,该字段用于支持一些内部功能,非必填(未填时会自动生成),强烈建议写上,对于调试大有裨益;</li><li>skip: 是否跳过该输入源,由于 JSON 文件无法添加注释,如果某次导入时不想导入某个输入源,但又不想删除该输入源的配置,则可以设置为 true 将其跳过,默认为 false,非必填;</li><li>input: 输入源映射块,复合结构<ul><li>type: 输入源类型,必须填 file 或 FILE;</li><li>path: 本地文件或目录的路径,绝对路径或相对于映射文件的相对路径,建议使用绝对路径,必填;</li><li>file_filter: 从<code>path</code>中筛选复合条件的文件,复合结构,目前只支持配置扩展名,用子节点<code>extensions</code>表示,默认为&rdquo;*",表示保留所有文件;</li><li>format: 本地文件的格式,可选值为 CSV、TEXT 及 JSON,必须大写,必填;</li><li>header: 文件各列的列名,如不指定则会以数据文件第一行作为 header;当文件本身有标题且又指定了 header,文件的第一行会被当作普通的数据行;JSON 文件不需要指定 header,选填;</li><li>delimiter: 文件行的列分隔符,默认以逗号<code>","</code>作为分隔符,<code>JSON</code>文件不需要指定,选填;</li><li>charset: 文件的编码字符集,默认<code>UTF-8</code>,选填;</li><li>date_format: 自定义的日期格式,默认值为 yyyy-MM-dd HH:mm:ss,选填;如果日期是以时间戳的形式呈现的,此项须写为<code>timestamp</code>(固定写法);</li><li>time_zone: 设置日期数据是处于哪个时区的,默认值为<code>GMT+8</code>,选填;</li><li>skipped_line: 想跳过的行,复合结构,目前只能配置要跳过的行的正则表达式,用子节点<code>regex</code>描述,默认不跳过任何行,选填;</li><li>compression: 文件的压缩格式,可选值为 NONE、GZIP、BZ2、XZ、LZMA、SNAPPY_RAW、SNAPPY_FRAMED、Z、DEFLATE、LZ4_BLOCK、LZ4_FRAMED、ORC 和 PARQUET,默认为 NONE,表示非压缩文件,选填;</li><li>list_format: 当文件 (非 JSON ) 的某列是集合结构时(对应图中的 PropertyKey 的 Cardinality 为 Set 或 List),可以用此项设置该列的起始符、分隔符、结束符,复合结构:<ul><li>start_symbol: 集合结构列的起始符 (默认值是 <code>[</code>, JSON 格式目前不支持指定)</li><li>elem_delimiter: 集合结构列的分隔符 (默认值是 <code>|</code>, JSON 格式目前只支持原生<code>,</code>分隔)</li><li>end_symbol: 集合结构列的结束符 (默认值是 <code>]</code>, JSON 格式目前不支持指定)</li></ul></li></ul></li></ul><h6 id=3322-hdfs-输入源>3.3.2.2 HDFS 输入源</h6><p>上述<code>本地文件输入源</code>的节点及含义这里基本都适用,下面仅列出 HDFS 输入源不一样的和特有的节点。</p><ul><li>type: 输入源类型,必须填 hdfs 或 HDFS,必填;</li><li>path: HDFS 文件或目录的路径,必须是 HDFS 的绝对路径,必填;</li><li>core_site_path: HDFS 集群的 core-site.xml 文件路径,重点要指明 NameNode 的地址(<code>fs.default.name</code>),以及文件系统的实现(<code>fs.hdfs.impl</code>);</li></ul><h6 id=3323-jdbc-输入源>3.3.2.3 JDBC 输入源</h6><p>前面说到过支持多种关系型数据库,但由于它们的映射结构非常相似,故统称为 JDBC 输入源,然后用<code>vendor</code>节点区分不同的数据库。</p><ul><li>type: 输入源类型,必须填 jdbc 或 JDBC,必填;</li><li>vendor: 数据库类型,可选项为 [MySQL、PostgreSQL、Oracle、SQLServer],不区分大小写,必填;</li><li>driver: jdbc 使用的 driver 类型,必填;</li><li>url: jdbc 要连接的数据库的 url,必填;</li><li>database: 要连接的数据库名,必填;</li><li>schema: 要连接的 schema 名,不同的数据库要求不一样,下面详细说明;</li><li>table: 要连接的表名,<code>custom_sql</code><code>table</code> 参数必须填其中一个;</li><li>custom_sql: 自定义 SQL 语句,<code>custom_sql</code><code>table</code> 参数必须填其中一个;</li><li>username: 连接数据库的用户名,必填;</li><li>password: 连接数据库的密码,必填;</li><li>batch_size: 按页获取表数据时的一页的大小,默认为 500,选填;</li></ul><p><strong>MYSQL</strong></p><table><thead><tr><th>节点</th><th>固定值或常见值</th></tr></thead><tbody><tr><td>vendor</td><td>MYSQL</td></tr><tr><td>driver</td><td>com.mysql.cj.jdbc.Driver</td></tr><tr><td>url</td><td>jdbc:mysql://127.0.0.1:3306</td></tr></tbody></table><p>schema: 可空,若填写必须与 database 的值一样</p><p><strong>POSTGRESQL</strong></p><table><thead><tr><th>节点</th><th>固定值或常见值</th></tr></thead><tbody><tr><td>vendor</td><td>POSTGRESQL</td></tr><tr><td>driver</td><td>org.postgresql.Driver</td></tr><tr><td>url</td><td>jdbc:postgresql://127.0.0.1:5432</td></tr></tbody></table><p>schema: 可空,默认值为“public”</p><p><strong>ORACLE</strong></p><table><thead><tr><th>节点</th><th>固定值或常见值</th></tr></thead><tbody><tr><td>vendor</td><td>ORACLE</td></tr><tr><td>driver</td><td>oracle.jdbc.driver.OracleDriver</td></tr><tr><td>url</td><td>jdbc:oracle:thin:@127.0.0.1:1521</td></tr></tbody></table><p>schema: 可空,默认值与用户名相同</p><p><strong>SQLSERVER</strong></p><table><thead><tr><th>节点</th><th>固定值或常见值</th></tr></thead><tbody><tr><td>vendor</td><td>SQLSERVER</td></tr><tr><td>driver</td><td>com.microsoft.sqlserver.jdbc.SQLServerDriver</td></tr><tr><td>url</td><td>jdbc:sqlserver://127.0.0.1:1433</td></tr></tbody></table><p>schema: 必填</p><h6 id=3324-kafka-输入源>3.3.2.4 Kafka 输入源</h6><ul><li>type:输入源类型,必须填 <code>kafka</code><code>KAFKA</code>,必填;</li><li>bootstrap_server:设置 kafka bootstrap server 列表;</li><li>topic:订阅的 topic;</li><li>group:Kafka 消费者组;</li><li>from_beginning:设置是否从头开始读取;</li><li>format:本地文件的格式,可选值为 CSV、TEXT 及 JSON,必须大写,必填;</li><li>header:文件各列的列名,如不指定则会以数据文件第一行作为 header;当文件本身有标题且又指定了 header,文件的第一行会被当作普通的数据行;JSON 文件不需要指定 header,选填;</li><li>delimiter:文件行的列分隔符,默认以逗号&rdquo;,&ldquo;作为分隔符,JSON 文件不需要指定,选填;</li><li>charset:文件的编码字符集,默认 UTF-8,选填;</li><li>date_format:自定义的日期格式,默认值为 yyyy-MM-dd HH:mm:ss,选填;如果日期是以时间戳的形式呈现的,此项须写为 timestamp(固定写法);</li><li>extra_date_formats:自定义的其他日期格式列表,默认为空,选填;列表中每一项都是一个 date_format 指定日期格式的备用日期格式;</li><li>time_zone:置日期数据是处于哪个时区的,默认值为 GMT+8,选填;</li><li>skipped_line:想跳过的行,复合结构,目前只能配置要跳过的行的正则表达式,用子节点 regex 描述,默认不跳过任何行,选填;</li><li>early_stop:某次从 Kafka broker 拉取的记录为空,停止任务,默认为 false,仅用于调试,选填;</li></ul><h5 id=333-顶点和边映射>3.3.3 顶点和边映射</h5><p>顶点和边映射的节点(JSON 文件中的一个 key)有很多相同的部分,下面先介绍相同部分,再分别介绍<code>顶点映射</code><code>边映射</code>的特有节点。</p><p><strong>相同部分的节点</strong></p><ul><li>label: 待导入的顶点/边数据所属的<code>label</code>,必填;</li><li>field_mapping: 将输入源列的列名映射为顶点/边的属性名,选填;</li><li>value_mapping: 将输入源的数据值映射为顶点/边的属性值,选填;</li><li>selected: 选择某些列插入,其他未选中的不插入,不能与<code>ignored</code>同时存在,选填;</li><li>ignored: 忽略某些列,使其不参与插入,不能与<code>selected</code>同时存在,选填;</li><li>null_values: 可以指定一些字符串代表空值,比如"NULL&rdquo;,如果该列对应的顶点/边属性又是一个可空属性,那在构造顶点/边时不会设置该属性的值,选填;</li><li>update_strategies: 如果数据需要按特定方式批量<strong>更新</strong>时可以对每个属性指定具体的更新策略 (具体见下),选填;</li><li>unfold: 是否将列展开,展开的每一列都会与其他列一起组成一行,相当于是展开成了多行;比如文件的某一列(id 列)的值是<code>[1,2,3]</code>,其他列的值是<code>18,Beijing</code>,当设置了 unfold 之后,这一行就会变成 3 行,分别是:<code>1,18,Beijing</code><code>2,18,Beijing</code><code>3,18,Beijing</code>。需要注意的是此项只会展开被选作为 id 的列。默认 false,选填;</li></ul><p><strong>更新策略</strong>支持 8 种 : (需要全大写)</p><ol><li>数值累加 : <code>SUM</code></li><li>两个数字/日期取更大的: <code>BIGGER</code></li><li>两个数字/日期取更小: <code>SMALLER</code></li><li><strong>Set</strong>属性取并集:<code>UNION</code></li><li><strong>Set</strong>属性取交集:<code>INTERSECTION</code></li><li><strong>List</strong>属性追加元素:<code>APPEND</code></li><li><strong>List/Set</strong>属性删除元素:<code>ELIMINATE</code></li><li>覆盖已有属性:<code>OVERRIDE</code></li></ol><p><strong>注意:</strong> 如果新导入的属性值为空,会采用已有的旧数据而不会采用空值,效果可以参考如下示例</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// JSON 文件中以如下方式指定更新策略
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;update_strategies&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;age&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;SMALLER&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;set&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;UNION&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;vertex_person.txt&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;TEXT&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;header&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;set&#34;</span><span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 1.写入一行带 OVERRIDE 更新策略的数据 (这里 null 代表空)
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#a40000>&#39;a</span> <span style=color:#a40000>b</span> <span style=color:#204a87;font-weight:700>null</span> <span style=color:#204a87;font-weight:700>null</span><span style=color:#a40000>&#39;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 2.再写一行
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#a40000>&#39;</span><span style=color:#204a87;font-weight:700>null</span> <span style=color:#204a87;font-weight:700>null</span> <span style=color:#a40000>c</span> <span style=color:#a40000>d&#39;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 3.最后可以得到
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#a40000>&#39;a</span> <span style=color:#a40000>b</span> <span style=color:#a40000>c</span> <span style=color:#a40000>d&#39;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>// 如果没有更新策略,则会得到
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span><span style=color:#a40000>&#39;</span><span style=color:#204a87;font-weight:700>null</span> <span style=color:#204a87;font-weight:700>null</span> <span style=color:#a40000>c</span> <span style=color:#a40000>d&#39;</span>
</span></span></code></pre></div><blockquote><p><strong>注意</strong> : 采用了批量更新的策略后, 磁盘读请求数会大幅上升, 导入速度相比纯写覆盖会慢数倍 (此时HDD磁盘<a href=https://en.wikipedia.org/wiki/IOPS>IOPS</a>会成为瓶颈, 建议采用SSD以保证速度)</p></blockquote><p><strong>顶点映射的特有节点</strong></p><ul><li>id: 指定某一列作为顶点的 id 列,当顶点 id 策略为<code>CUSTOMIZE</code>时,必填;当 id 策略为<code>PRIMARY_KEY</code>时,必须为空;</li></ul><p><strong>边映射的特有节点</strong></p><ul><li>source: 选择输入源某几列作为<strong>源顶点</strong>的 id 列,当源顶点的 id 策略为 <code>CUSTOMIZE</code>时,必须指定某一列作为顶点的 id 列;当源顶点的 id 策略为 <code>PRIMARY_KEY</code>时,必须指定一列或多列用于拼接生成顶点的 id,也就是说,不管是哪种 id 策略,此项必填;</li><li>target: 指定某几列作为<strong>目标顶点</strong>的 id 列,与 source 类似,不再赘述;</li><li>unfold_source: 是否展开文件的 source 列,效果与顶点映射中的类似,不再赘述;</li><li>unfold_target: 是否展开文件的 target 列,效果与顶点映射中的类似,不再赘述;</li></ul><h4 id=34-执行命令导入>3.4 执行命令导入</h4><p>准备好图模型、数据文件以及输入源映射关系文件后,接下来就可以将数据文件导入到图数据库中。</p><p>导入过程由用户提交的命令控制,用户可以通过不同的参数控制执行的具体流程。</p><h5 id=341-参数说明>3.4.1 参数说明</h5><table><thead><tr><th>参数</th><th>默认值</th><th>是否必传</th><th>描述信息</th></tr></thead><tbody><tr><td><code>-f</code><code>--file</code></td><td></td><td>Y</td><td>配置脚本的路径</td></tr><tr><td><code>-g</code><code>--graph</code></td><td></td><td>Y</td><td>图数据库空间</td></tr><tr><td><code>-s</code><code>--schema</code></td><td></td><td>Y</td><td>schema 文件路径</td></tr><tr><td><code>-h</code><code>--host</code></td><td>localhost</td><td></td><td>HugeGraphServer 的地址</td></tr><tr><td><code>-p</code><code>--port</code></td><td>8080</td><td></td><td>HugeGraphServer 的端口号</td></tr><tr><td><code>--username</code></td><td>null</td><td></td><td>当 HugeGraphServer 开启了权限认证时,当前图的 username</td></tr><tr><td><code>--token</code></td><td>null</td><td></td><td>当 HugeGraphServer 开启了权限认证时,当前图的 token</td></tr><tr><td><code>--protocol</code></td><td>http</td><td></td><td>向服务端发请求的协议,可选 http 或 https</td></tr><tr><td><code>--trust-store-file</code></td><td></td><td></td><td>请求协议为 https 时,客户端的证书文件路径</td></tr><tr><td><code>--trust-store-password</code></td><td></td><td></td><td>请求协议为 https 时,客户端证书密码</td></tr><tr><td><code>--clear-all-data</code></td><td>false</td><td></td><td>导入数据前是否清除服务端的原有数据</td></tr><tr><td><code>--clear-timeout</code></td><td>240</td><td></td><td>导入数据前清除服务端的原有数据的超时时间</td></tr><tr><td><code>--incremental-mode</code></td><td>false</td><td></td><td>是否使用断点续导模式,仅输入源为 FILE 和 HDFS 支持该模式,启用该模式能从上一次导入停止的地方开始导</td></tr><tr><td><code>--failure-mode</code></td><td>false</td><td></td><td>失败模式为 true 时,会导入之前失败了的数据,一般来说失败数据文件需要在人工更正编辑好后,再次进行导入</td></tr><tr><td><code>--batch-insert-threads</code></td><td>CPUs</td><td></td><td>批量插入线程池大小 (CPUs 是当前 OS 可用可用<strong>逻辑核</strong>个数)</td></tr><tr><td><code>--single-insert-threads</code></td><td>8</td><td></td><td>单条插入线程池的大小</td></tr><tr><td><code>--max-conn</code></td><td>4 * CPUs</td><td></td><td>HugeClient 与 HugeGraphServer 的最大 HTTP 连接数,<strong>调整线程</strong>的时候建议同时调整此项</td></tr><tr><td><code>--max-conn-per-route</code></td><td>2 * CPUs</td><td></td><td>HugeClient 与 HugeGraphServer 每个路由的最大 HTTP 连接数,<strong>调整线程</strong>的时候建议同时调整此项</td></tr><tr><td><code>--batch-size</code></td><td>500</td><td></td><td>导入数据时每个批次包含的数据条数</td></tr><tr><td><code>--max-parse-errors</code></td><td>1</td><td></td><td>最多允许多少行数据解析错误,达到该值则程序退出</td></tr><tr><td><code>--max-insert-errors</code></td><td>500</td><td></td><td>最多允许多少行数据插入错误,达到该值则程序退出</td></tr><tr><td><code>--timeout</code></td><td>60</td><td></td><td>插入结果返回的超时时间(秒)</td></tr><tr><td><code>--shutdown-timeout</code></td><td>10</td><td></td><td>多线程停止的等待时间(秒)</td></tr><tr><td><code>--retry-times</code></td><td>0</td><td></td><td>发生特定异常时的重试次数</td></tr><tr><td><code>--retry-interval</code></td><td>10</td><td></td><td>重试之前的间隔时间(秒)</td></tr><tr><td><code>--check-vertex</code></td><td>false</td><td></td><td>插入边时是否检查边所连接的顶点是否存在</td></tr><tr><td><code>--print-progress</code></td><td>true</td><td></td><td>是否在控制台实时打印导入条数</td></tr><tr><td><code>--dry-run</code></td><td>false</td><td></td><td>打开该模式,只解析不导入,通常用于测试</td></tr><tr><td><code>--help</code></td><td>false</td><td></td><td>打印帮助信息</td></tr></tbody></table><h5 id=342-断点续导模式>3.4.2 断点续导模式</h5><p>通常情况下,Loader 任务都需要较长时间执行,如果因为某些原因导致导入中断进程退出,而下次希望能从中断的点继续导,这就是使用断点续导的场景。</p><p>用户设置命令行参数 &ndash;incremental-mode 为 true 即打开了断点续导模式。断点续导的关键在于进度文件,导入进程退出的时候,会把退出时刻的导入进度
记录到进度文件中,进度文件位于 <code>${struct}</code> 目录下,文件名形如 <code>load-progress ${date}</code> ,${struct} 为映射文件的前缀,${date} 为导入开始
的时刻。比如:在 <code>2019-10-10 12:30:30</code> 开始的一次导入任务,使用的映射文件为 <code>struct-example.json</code>,则进度文件的路径为与 struct-example.json
同级的 <code>struct-example/load-progress 2019-10-10 12:30:30</code></p><blockquote><p>注意:进度文件的生成与 &ndash;incremental-mode 是否打开无关,每次导入结束都会生成一个进度文件。</p></blockquote><p>如果数据文件格式都是合法的,是用户自己停止(CTRL + C 或 kill,kill -9 不支持)的导入任务,也就是说没有错误记录的情况下,下一次导入只需要设置
为断点续导即可。</p><p>但如果是因为太多数据不合法或者网络异常,达到了 &ndash;max-parse-errors 或 &ndash;max-insert-errors 的限制,Loader 会把这些插入失败的原始行记录到
失败文件中,用户对失败文件中的数据行修改后,设置 &ndash;reload-failure 为 true 即可把这些"失败文件"也当作输入源进行导入(不影响正常的文件的导入),
当然如果修改后的数据行仍然有问题,则会被再次记录到失败文件中(不用担心会有重复行)。</p><p>每个顶点映射或边映射有数据插入失败时都会产生自己的失败文件,失败文件又分为解析失败文件(后缀 .parse-error)和插入失败文件(后缀 .insert-error),
它们被保存在 <code>${struct}/current</code> 目录下。比如映射文件中有一个顶点映射 person 和边映射 knows,它们各有一些错误行,当 Loader 退出后,在
<code>${struct}/current</code> 目录下会看到如下文件:</p><ul><li>person-b4cd32ab.parse-error: 顶点映射 person 解析错误的数据</li><li>person-b4cd32ab.insert-error: 顶点映射 person 插入错误的数据</li><li>knows-eb6b2bac.parse-error: 边映射 knows 解析错误的数据</li><li>knows-eb6b2bac.insert-error: 边映射 knows 插入错误的数据</li></ul><blockquote><p>.parse-error 和 .insert-error 并不总是一起存在的,只有存在解析出错的行才会有 .parse-error 文件,只有存在插入出错的行才会有 .insert-error 文件。</p></blockquote><h5 id=343-logs-目录文件说明>3.4.3 logs 目录文件说明</h5><p>程序执行过程中各日志及错误数据会写入 hugegraph-loader.log 文件中。</p><h5 id=344-执行命令>3.4.4 执行命令</h5><p>运行 bin/hugegraph-loader 并传入参数</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>bin/hugegraph-loader -g <span style=color:#ce5c00;font-weight:700>{</span>GRAPH_NAME<span style=color:#ce5c00;font-weight:700>}</span> -f <span style=color:#4e9a06>${</span><span style=color:#000>INPUT_DESC_FILE</span><span style=color:#4e9a06>}</span> -s <span style=color:#4e9a06>${</span><span style=color:#000>SCHEMA_FILE</span><span style=color:#4e9a06>}</span> -h <span style=color:#ce5c00;font-weight:700>{</span>HOST<span style=color:#ce5c00;font-weight:700>}</span> -p <span style=color:#ce5c00;font-weight:700>{</span>PORT<span style=color:#ce5c00;font-weight:700>}</span>
</span></span></code></pre></div><h3 id=4-完整示例>4 完整示例</h3><p>下面给出的是 hugegraph-loader 包中 example 目录下的例子。(<a href=https://github.com/apache/incubator-hugegraph-toolchain/tree/master/hugegraph-loader/assembly/static/example/file>GitHub 地址</a>)</p><h4 id=41-准备数据>4.1 准备数据</h4><p>顶点文件:<code>example/file/vertex_person.csv</code></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>marko,29,Beijing
</span></span><span style=display:flex><span>vadas,27,Hongkong
</span></span><span style=display:flex><span>josh,32,Beijing
</span></span><span style=display:flex><span>peter,35,Shanghai
</span></span><span style=display:flex><span>&#34;li,nary&#34;,26,&#34;Wu,han&#34;
</span></span><span style=display:flex><span>tom,null,NULL
</span></span></code></pre></div><p>顶点文件:<code>example/file/vertex_software.txt</code></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>id|name|lang|price|ISBN
</span></span><span style=display:flex><span>1|lop|java|328|ISBN978-7-107-18618-5
</span></span><span style=display:flex><span>2|ripple|java|199|ISBN978-7-100-13678-5
</span></span></code></pre></div><p>边文件:<code>example/file/edge_knows.json</code></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;marko&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;vadas&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20160110&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>0.5</span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;marko&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;josh&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20130220&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>1.0</span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p>边文件:<code>example/file/edge_created.json</code></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;aname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;marko&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;bname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;lop&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20171210&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>0.4</span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;aname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;josh&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;bname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;lop&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20091111&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>0.4</span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;aname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;josh&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;bname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;ripple&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20171210&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>1.0</span><span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span><span style=color:#204a87;font-weight:700>&#34;aname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;peter&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;bname&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;lop&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;date&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;20170324&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#204a87;font-weight:700>&#34;weight&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>0.2</span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><h4 id=42-编写-schema>4.2 编写 schema</h4><details><summary>点击展开/折叠 schema 文件:example/file/schema.groovy</summary><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-groovy data-lang=groovy><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asText</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asInt</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asText</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;weight&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asDouble</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;lang&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asText</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;date&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asText</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>propertyKey</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;price&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>asDouble</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>vertexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>properties</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>primaryKeys</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>vertexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>properties</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;lang&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;price&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>primaryKeys</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>indexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;personByAge&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>onV</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>by</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>range</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>indexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;personByCity&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>onV</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>by</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>secondary</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>indexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;personByAgeAndCity&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>onV</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>by</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>secondary</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>indexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;softwareByPrice&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>onV</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>by</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;price&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>range</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>edgeLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;knows&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>sourceLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>targetLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>properties</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;date&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;weight&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>edgeLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;created&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>sourceLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>targetLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>properties</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;date&#34;</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#4e9a06>&#34;weight&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>indexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;createdByDate&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>onE</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;created&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>by</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;date&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>secondary</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>indexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;createdByWeight&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>onE</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;created&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>by</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;weight&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>range</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span><span style=display:flex><span><span style=color:#000>schema</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>indexLabel</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;knowsByWeight&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>onE</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;knows&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>by</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;weight&#34;</span><span style=color:#ce5c00;font-weight:700>).</span><span style=color:#c4a000>range</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>ifNotExist</span><span style=color:#ce5c00;font-weight:700>().</span><span style=color:#c4a000>create</span><span style=color:#ce5c00;font-weight:700>();</span>
</span></span></code></pre></div></details><h4 id=43-编写输入源映射文件examplefilestructjson>4.3 编写输入源映射文件<code>example/file/struct.json</code></h4><details><summary>点击展开/折叠 源映射文件 example/file/struct.json</summary><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;vertices&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;person&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;example/file/vertex_person.csv&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;CSV&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;header&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;age&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;city&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;charset&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;UTF-8&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;skipped_line&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;regex&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;(^#|^//).*&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;null_values&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;NULL&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;null&#34;</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>&#34;&#34;</span><span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;software&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;example/file/vertex_software.txt&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;TEXT&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;delimiter&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;|&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;charset&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;GBK&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;id&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;id&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;ignored&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;ISBN&#34;</span><span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;edges&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;knows&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;example/file/edge_knows.json&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;JSON&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;date_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;yyyyMMdd&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;label&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;created&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;target&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>&#34;target_id&#34;</span><span style=color:#000;font-weight:700>],</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;input&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;type&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;file&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;path&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;example/file/edge_created.json&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;JSON&#34;</span><span style=color:#000;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;date_format&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;yyyy-MM-dd&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;field_mapping&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>&#34;source_name&#34;</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>&#34;name&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div></details><h4 id=44-执行命令导入>4.4 执行命令导入</h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>sh bin/hugegraph-loader.sh -g hugegraph -f example/file/struct.json -s example/file/schema.groovy
</span></span></code></pre></div><p>导入结束后,会出现类似如下统计信息:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>vertices/edges has been loaded this <span style=color:#204a87>time</span> : 8/6
</span></span><span style=display:flex><span>--------------------------------------------------
</span></span><span style=display:flex><span>count metrics
</span></span><span style=display:flex><span> input <span style=color:#204a87>read</span> success : <span style=color:#0000cf;font-weight:700>14</span>
</span></span><span style=display:flex><span> input <span style=color:#204a87>read</span> failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> vertex parse success : <span style=color:#0000cf;font-weight:700>8</span>
</span></span><span style=display:flex><span> vertex parse failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> vertex insert success : <span style=color:#0000cf;font-weight:700>8</span>
</span></span><span style=display:flex><span> vertex insert failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> edge parse success : <span style=color:#0000cf;font-weight:700>6</span>
</span></span><span style=display:flex><span> edge parse failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> edge insert success : <span style=color:#0000cf;font-weight:700>6</span>
</span></span><span style=display:flex><span> edge insert failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span></code></pre></div><h4 id=45-使用-docker-导入>4.5 使用 docker 导入</h4><h5 id=451-使用-docker-exec-直接导入数据>4.5.1 使用 docker exec 直接导入数据</h5><h6 id=4511-数据准备>4.5.1.1 数据准备</h6><p>如果仅仅尝试使用 loader, 我们可以使用内置的 example 数据集进行导入,无需自己额外准备数据</p><p>如果使用自定义的数据,则在使用 loader 导入数据之前,我们需要将数据复制到容器内部。</p><p>首先我们可以根据 <a href=#41-%E5%87%86%E5%A4%87%E6%95%B0%E6%8D%AE>4.1-4.3</a> 的步骤准备数据,将准备好的数据通过 <code>docker cp</code> 复制到 loader 容器内部。</p><p>假设我们已经按照上述的步骤准备好了对应的数据集,存放在 <code>hugegraph-dataset</code> 文件夹下,文件结构如下:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>tree -f hugegraph-dataset/
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>hugegraph-dataset
</span></span><span style=display:flex><span>├── hugegraph-dataset/edge_created.json
</span></span><span style=display:flex><span>├── hugegraph-dataset/edge_knows.json
</span></span><span style=display:flex><span>├── hugegraph-dataset/schema.groovy
</span></span><span style=display:flex><span>├── hugegraph-dataset/struct.json
</span></span><span style=display:flex><span>├── hugegraph-dataset/vertex_person.csv
</span></span><span style=display:flex><span>└── hugegraph-dataset/vertex_software.txt
</span></span></code></pre></div><p>将文件复制到容器内部</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker cp hugegraph-dataset loader:/loader/dataset
</span></span><span style=display:flex><span>docker <span style=color:#204a87>exec</span> -it loader ls /loader/dataset
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>edge_created.json edge_knows.json schema.groovy struct.json vertex_person.csv vertex_software.txt
</span></span></code></pre></div><h6 id=4512-数据导入>4.5.1.2 数据导入</h6><p>以内置的 example 数据集为例,我们可以使用以下的命令对数据进行导入。</p><p>如果需要导入自己准备的数据集,则只需要修改 <code>-f</code> 配置脚本的路径 以及 <code>-s</code> schema 文件路径即可。</p><p>其他的参数可以参照 <a href=#341-%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E>3.4.1 参数说明</a></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker <span style=color:#204a87>exec</span> -it loader bin/hugegraph-loader.sh -g hugegraph -f example/file/struct.json -s example/file/schema.groovy -h server -p <span style=color:#0000cf;font-weight:700>8080</span>
</span></span></code></pre></div><p>如果导入用户自定义的数据集,按照刚才的例子,则使用:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker <span style=color:#204a87>exec</span> -it loader bin/hugegraph-loader.sh -g hugegraph -f /loader/dataset/struct.json -s /loader/dataset/schema.groovy -h server -p <span style=color:#0000cf;font-weight:700>8080</span>
</span></span></code></pre></div><blockquote><p>如果 <code>loader</code><code>server</code>位于同一 docker 网络,则可以指定 <code>-h {server_container_name}</code>, 否则需要指定 <code>server</code>的宿主机的 ip (在我们的例子中, <code>server_container_name</code><code>server</code>).</p></blockquote><p>然后我们可以观察到结果:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>HugeGraphLoader worked in NORMAL MODE
</span></span><span style=display:flex><span>vertices/edges loaded this <span style=color:#204a87>time</span> : 8/6
</span></span><span style=display:flex><span>--------------------------------------------------
</span></span><span style=display:flex><span>count metrics
</span></span><span style=display:flex><span> input <span style=color:#204a87>read</span> success : <span style=color:#0000cf;font-weight:700>14</span>
</span></span><span style=display:flex><span> input <span style=color:#204a87>read</span> failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> vertex parse success : <span style=color:#0000cf;font-weight:700>8</span>
</span></span><span style=display:flex><span> vertex parse failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> vertex insert success : <span style=color:#0000cf;font-weight:700>8</span>
</span></span><span style=display:flex><span> vertex insert failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> edge parse success : <span style=color:#0000cf;font-weight:700>6</span>
</span></span><span style=display:flex><span> edge parse failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span> edge insert success : <span style=color:#0000cf;font-weight:700>6</span>
</span></span><span style=display:flex><span> edge insert failure : <span style=color:#0000cf;font-weight:700>0</span>
</span></span><span style=display:flex><span>--------------------------------------------------
</span></span><span style=display:flex><span>meter metrics
</span></span><span style=display:flex><span> total <span style=color:#204a87>time</span> : 0.199s
</span></span><span style=display:flex><span> <span style=color:#204a87>read</span> <span style=color:#204a87>time</span> : 0.046s
</span></span><span style=display:flex><span> load <span style=color:#204a87>time</span> : 0.153s
</span></span><span style=display:flex><span> vertex load <span style=color:#204a87>time</span> : 0.077s
</span></span><span style=display:flex><span> vertex load rate<span style=color:#ce5c00;font-weight:700>(</span>vertices/s<span style=color:#ce5c00;font-weight:700>)</span> : <span style=color:#0000cf;font-weight:700>103</span>
</span></span><span style=display:flex><span> edge load <span style=color:#204a87>time</span> : 0.112s
</span></span><span style=display:flex><span> edge load rate<span style=color:#ce5c00;font-weight:700>(</span>edges/s<span style=color:#ce5c00;font-weight:700>)</span> : <span style=color:#0000cf;font-weight:700>53</span>
</span></span></code></pre></div><p>也可以使用 <code>curl</code> 或者 <code>hubble</code>观察导入结果,此处以 <code>curl</code> 为例:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>&gt; curl <span style=color:#4e9a06>&#34;http://localhost:8080/graphs/hugegraph/graph/vertices&#34;</span> <span style=color:#000;font-weight:700>|</span> gunzip
</span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;vertices&#34;</span>:<span style=color:#ce5c00;font-weight:700>[{</span><span style=color:#4e9a06>&#34;id&#34;</span>:1,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;software&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;lop&#34;</span>,<span style=color:#4e9a06>&#34;lang&#34;</span>:<span style=color:#4e9a06>&#34;java&#34;</span>,<span style=color:#4e9a06>&#34;price&#34;</span>:328.0<span style=color:#ce5c00;font-weight:700>}}</span>,<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;id&#34;</span>:2,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;software&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;ripple&#34;</span>,<span style=color:#4e9a06>&#34;lang&#34;</span>:<span style=color:#4e9a06>&#34;java&#34;</span>,<span style=color:#4e9a06>&#34;price&#34;</span>:199.0<span style=color:#ce5c00;font-weight:700>}}</span>,<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;id&#34;</span>:<span style=color:#4e9a06>&#34;1:tom&#34;</span>,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;person&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;tom&#34;</span><span style=color:#ce5c00;font-weight:700>}}</span>,<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;id&#34;</span>:<span style=color:#4e9a06>&#34;1:josh&#34;</span>,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;person&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;josh&#34;</span>,<span style=color:#4e9a06>&#34;age&#34;</span>:32,<span style=color:#4e9a06>&#34;city&#34;</span>:<span style=color:#4e9a06>&#34;Beijing&#34;</span><span style=color:#ce5c00;font-weight:700>}}</span>,<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;id&#34;</span>:<span style=color:#4e9a06>&#34;1:marko&#34;</span>,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;person&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;marko&#34;</span>,<span style=color:#4e9a06>&#34;age&#34;</span>:29,<span style=color:#4e9a06>&#34;city&#34;</span>:<span style=color:#4e9a06>&#34;Beijing&#34;</span><span style=color:#ce5c00;font-weight:700>}}</span>,<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;id&#34;</span>:<span style=color:#4e9a06>&#34;1:peter&#34;</span>,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;person&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;peter&#34;</span>,<span style=color:#4e9a06>&#34;age&#34;</span>:35,<span style=color:#4e9a06>&#34;city&#34;</span>:<span style=color:#4e9a06>&#34;Shanghai&#34;</span><span style=color:#ce5c00;font-weight:700>}}</span>,<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;id&#34;</span>:<span style=color:#4e9a06>&#34;1:vadas&#34;</span>,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;person&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;vadas&#34;</span>,<span style=color:#4e9a06>&#34;age&#34;</span>:27,<span style=color:#4e9a06>&#34;city&#34;</span>:<span style=color:#4e9a06>&#34;Hongkong&#34;</span><span style=color:#ce5c00;font-weight:700>}}</span>,<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;id&#34;</span>:<span style=color:#4e9a06>&#34;1:li,nary&#34;</span>,<span style=color:#4e9a06>&#34;label&#34;</span>:<span style=color:#4e9a06>&#34;person&#34;</span>,<span style=color:#4e9a06>&#34;type&#34;</span>:<span style=color:#4e9a06>&#34;vertex&#34;</span>,<span style=color:#4e9a06>&#34;properties&#34;</span>:<span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>&#34;name&#34;</span>:<span style=color:#4e9a06>&#34;li,nary&#34;</span>,<span style=color:#4e9a06>&#34;age&#34;</span>:26,<span style=color:#4e9a06>&#34;city&#34;</span>:<span style=color:#4e9a06>&#34;Wu,han&#34;</span><span style=color:#ce5c00;font-weight:700>}}]}</span>
</span></span></code></pre></div><p>如果想检查边的导入结果,可以使用 <code>curl "http://localhost:8080/graphs/hugegraph/graph/edges" | gunzip</code></p><h5 id=452-进入-docker-容器进行导入>4.5.2 进入 docker 容器进行导入</h5><p>除了直接使用 <code>docker exec</code> 导入数据,我们也可以进入容器进行数据导入,基本流程与 <a href=#451-%E4%BD%BF%E7%94%A8-docker-exec-%E7%9B%B4%E6%8E%A5%E5%AF%BC%E5%85%A5%E6%95%B0%E6%8D%AE>4.5.1</a> 相同</p><p>使用 <code>docker exec -it loader bash</code>进入容器内部,并执行命令</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>sh bin/hugegraph-loader.sh -g hugegraph -f example/file/struct.json -s example/file/schema.groovy -h server -p <span style=color:#0000cf;font-weight:700>8080</span>
</span></span></code></pre></div><p>执行的结果如 <a href=#451-%E4%BD%BF%E7%94%A8-docker-exec-%E7%9B%B4%E6%8E%A5%E5%AF%BC%E5%85%A5%E6%95%B0%E6%8D%AE>4.5.1</a> 所示</p><h4 id=46-使用-spark-loader-导入>4.6 使用 spark-loader 导入</h4><blockquote><p>Spark 版本:Spark 3+,其他版本未测试。
HugeGraph Toolchain 版本:toolchain-1.0.0</p></blockquote><p><code>spark-loader</code> 的参数分为两部分,注意:因二者参数名缩写存在重合部分,请使用参数全称。两种参数之间无需保证先后顺序。</p><ul><li>hugegraph 参数(参考:<a href=https://hugegraph.apache.org/cn/docs/quickstart/hugegraph-loader/#341-%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E>hugegraph-loader 参数说明</a></li><li>Spark 任务提交参数(参考:<a href=https://spark.apache.org/docs/3.3.0/submitting-applications.html#content>Submitting Applications</a></li></ul><p>示例:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>sh bin/hugegraph-spark-loader.sh --master yarn <span style=color:#4e9a06>\
</span></span></span><span style=display:flex><span><span style=color:#4e9a06></span>--deploy-mode cluster --name spark-hugegraph-loader --file ./hugegraph.json <span style=color:#4e9a06>\
</span></span></span><span style=display:flex><span><span style=color:#4e9a06></span>--username admin --token admin --host xx.xx.xx.xx --port <span style=color:#0000cf;font-weight:700>8093</span> <span style=color:#4e9a06>\
</span></span></span><span style=display:flex><span><span style=color:#4e9a06></span>--graph graph-test --num-executors <span style=color:#0000cf;font-weight:700>6</span> --executor-cores <span style=color:#0000cf;font-weight:700>16</span> --executor-memory 15g
</span></span></code></pre></div><style>.feedback--answer{display:inline-block}.feedback--answer-no{margin-left:1em}.feedback--response{display:none;margin-top:1em}.feedback--response__visible{display:block}</style><script>const yesButton=document.querySelector(".feedback--answer-yes"),noButton=document.querySelector(".feedback--answer-no"),yesResponse=document.querySelector(".feedback--response-yes"),noResponse=document.querySelector(".feedback--response-no"),disableButtons=()=>{yesButton.disabled=!0,noButton.disabled=!0},sendFeedback=e=>{if(typeof ga!="function")return;const t={command:"send",hitType:"event",category:"Helpful",action:"click",label:window.location.pathname,value:e};ga(t.command,t.hitType,t.category,t.action,t.label,t.value)};yesButton.addEventListener("click",()=>{yesResponse.classList.add("feedback--response__visible"),disableButtons(),sendFeedback(1)}),noButton.addEventListener("click",()=>{noResponse.classList.add("feedback--response__visible"),disableButtons(),sendFeedback(0)})</script><br><div class="text-muted mt-5 pt-3 border-top">Last modified February 1, 2024: <a href=https://github.com/apache/incubator-hugegraph-doc/commit/d2b63d937d9f6f0d49d597081acc58ec3d4d6966>doc: sync doc about enable auth for docker image (#324) (d2b63d93)</a></div></div></main></div></div><footer class="bg-dark py-3 row d-print-none"><div class=footer-container><div class="row bg-dark"><div class=col-1></div><div class="col-4 text-center container-center"><div class=footer-row><a href=https://www.apache.org><div class=footer-apache-logo><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 7127.6 2890" enable-background="new 0 0 7127.6 2890"><path fill="#6d6e71" d="M7104.7 847.8c15.3 15.3 22.9 33.7 22.9 55.2s-7.6 39.9-22.9 55.4c-15.3 15.4-33.8 23.1-55.6 23.1s-40.2-7.6-55.4-22.9c-15.1-15.3-22.7-33.7-22.7-55.2s7.6-39.9 22.9-55.4c15.3-15.4 33.7-23.1 55.4-23.1C7070.9 824.9 7089.4 832.5 7104.7 847.8zM7098.1 951.9c13.3-13.6 20-29.8 20-48.7s-6.6-35-19.8-48.5c-13.2-13.4-29.4-20.1-48.6-20.1-19.2.0-35.4 6.7-48.7 20.2s-19.9 29.7-19.9 48.7 6.6 35.2 19.7 48.6c13.1 13.4 29.3 20.1 48.5 20.1S7084.7 965.4 7098.1 951.9zm-11-63.8c0 14-6.1 22.8-18.4 26.4l22.5 30.5H7073l-20.3-28.3h-18.6V945h-14.7v-84.6h31.8c12.8.0 22 2.2 27.6 6.6C7084.4 871.4 7087.1 878.4 7087.1 888.1zM7068.2 9e2c3-2.4 4.4-6.5 4.4-12s-1.5-9.4-4.5-11.6-8.4-3.2-16-3.2h-18v30.5h17.5C7059.7 903.6 7065.3 902.4 7068.2 9e2z"/><path fill="#6d6e71" d="M1803.6 499.8v155.4h-20V499.8h-56.8v-19.2h133.9v19.2H1803.6z"/><path fill="#6d6e71" d="M2082.2 655.2v-76.9H1977v76.9h-20V480.5h20v78.9h105.2v-78.9h20v174.7h-20z"/><path fill="#6d6e71" d="M2241.4 499.8v57.4h88.1v19.2h-88.1v59.8h101.8v19h-121.8V480.5H2340v19.2H2241.4z"/><path fill="#d22128" d="M1574.5 1852.4l417.3-997.6h80.1l417.3 997.6h-105.4l-129.3-311.9h-448.2l-127.9 311.9H1574.5zM2032.6 970l-205.1 493.2h404.7L2032.6 970z"/><path fill="#d22128" d="M2596.9 1852.4V854.8H3010c171.4.0 295.1 158.8 295.1 313.3.0 163-115.2 316.1-286.6 316.1h-324.6v368.1h-97zm97-455.3h318.9c118 0 193.9-108.2 193.9-229 0-125.1-92.7-226.2-202.3-226.2h-310.5v455.2z"/><path fill="#d22128" d="M3250.5 1852.4l417.3-997.6h80.1l417.3 997.6h-105.4l-129.3-311.9h-448.2l-127.9 311.9H3250.5zM3708.6 970l-205.1 493.2h404.7L3708.6 970z"/><path fill="#d22128" d="M4637.3 849.1c177 0 306.3 89.9 368.1 217.8l-78.7 47.8c-63.2-132.1-186.9-177-295.1-177-238.9.0-369.5 213.6-369.5 414.5.0 220.6 161.6 420.1 373.7 420.1 112.4.0 244.5-56.2 307.7-185.5l81.5 42.1c-64.6 148.9-241.7 231.8-394.8 231.8-274 0-466.5-261.3-466.5-514.2C4163.8 1106.3 4336.6 849.1 4637.3 849.1z"/><path fill="#d22128" d="M5949.1 854.8v997.6h-98.4v-466.5h-591.5v466.5h-96.9V854.8h96.9v444h591.5v-444H5949.1z"/><path fill="#d22128" d="M6844.6 1765.2v87.1h-670.2V854.8H6832v87.1h-560.6v359.7h489v82.9h-489v380.8H6844.6z"/><path fill="#6d6e71" d="M1667.6 2063.6c11.8 3.5 22.2 8.3 31 14.2l-10.3 22.6c-9-6-18.6-10.4-28.9-13.4-10.2-2.9-20-4.4-29.2-4.4-13.6.0-24.5 2.4-32.6 7.3s-12.2 11.8-12.2 20.7c0 7.6 2.3 14 6.8 19s10.2 8.9 17 11.7c6.8 2.8 16.1 6 28 9.6 14.4 4.6 26 8.9 34.7 12.9 8.8 4 16.3 9.9 22.5 17.8 6.2 7.8 9.3 18.2 9.3 31 0 11.7-3.2 21.8-9.5 30.6-6.3 8.7-15.3 15.5-26.8 20.3-11.6 4.8-24.9 7.2-40 7.2s-29.7-2.9-43.9-8.7c-14.2-5.8-26.4-13.6-36.6-23.4l10.7-21.6c9.6 9.4 20.7 16.7 33.3 21.9 12.6 5.2 24.8 7.8 36.8 7.8 15.3.0 27.3-3 36.1-8.9s13.2-13.9 13.2-23.9c0-7.8-2.3-14.3-6.9-19.4-4.6-5.1-10.3-9-17.1-11.9-6.8-2.8-16.1-6-28-9.6-14.2-4.2-25.7-8.3-34.6-12.2-8.9-3.9-16.4-9.7-22.5-17.5-6.1-7.7-9.2-17.9-9.2-30.6.0-10.9 3-20.4 9-28.6s14.6-14.6 25.6-19.1c11.1-4.5 23.8-6.8 38.2-6.8C1643.8 2058.3 1655.7 2060.1 1667.6 2063.6z"/><path fill="#6d6e71" d="M1980.1 2072.8c16.8 9.4 30.2 22.3 40 38.4 9.8 16.2 14.8 33.9 14.8 53.3.0 19.5-4.9 37.4-14.8 53.6-9.8 16.3-23.2 29.1-40 38.6s-35.3 14.3-55.2 14.3c-20.3.0-38.8-4.7-55.7-14.3-16.8-9.5-30.2-22.4-40-38.6-9.8-16.3-14.8-34.1-14.8-53.6s4.9-37.3 14.8-53.5c9.8-16.2 23.2-29 40-38.3 16.8-9.4 35.4-14 55.7-14C1944.8 2058.6 1963.2 2063.3 1980.1 2072.8zM1881.9 2092.7c-13.1 7.4-23.6 17.5-31.4 30.1-7.8 12.6-11.8 26.5-11.8 41.7.0 15.3 3.9 29.3 11.8 42 7.8 12.7 18.3 22.8 31.4 30.2 13.1 7.4 27.4 11.1 42.9 11.1s29.7-3.7 42.7-11.1 23.3-17.4 31.1-30.2c7.7-12.7 11.6-26.7 11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30s-27.2-11.2-42.6-11.2C1909.4 2081.5 1895.1 2085.2 1881.9 2092.7z"/><path fill="#6d6e71" d="M2186.5 2082.4v74h98.4v23.2h-98.4v90.2h-24.1v-210.6h133.8v23.2H2186.5z"/><path fill="#6d6e71" d="M2491.6 2082.4v187.4h-24.1v-187.4h-68.4v-23.2h161.4v23.2H2491.6z"/><path fill="#6d6e71" d="M2871.8 2269.8l-56.8-177.4-57.6 177.4h-24.5l-70.5-210.6h25.9l57.9 182.7 57.1-182.4 24.1-.3 57.7 182.7 57.1-182.7h25l-70.6 210.6H2871.8z"/><path fill="#6d6e71" d="M3087.3 2216.6l-23.5 53.2h-25.6l94.4-210.6h25l94.1 210.6h-26.1l-23.5-53.2H3087.3zM3144.5 2086.6l-46.9 106.8h94.4l-47.5-106.8z"/><path fill="#6d6e71" d="M3461.1 2202.7c-6 .4-10.7.6-14.1.6h-56v66.5h-24v-210.6h80c26.2.0 46.6 6.2 61.2 18.5 14.5 12.3 21.8 29.8 21.8 52.3.0 17.2-4.1 31.7-12.2 43.3-8.1 11.6-19.8 20-35 25l49.2 71.5h-27.3L3461.1 2202.7zM3491.3 2167.6c10.3-8.4 15.5-20.8 15.5-37 0-15.9-5.2-27.9-15.5-36s-25.1-12.2-44.3-12.2h-56v97.8h56C3466.2 2180.2 3481 2176 3491.3 2167.6z"/><path fill="#6d6e71" d="M3688.3 2082.4v69.2h106.2v23.2h-106.2v72.1h122.8v22.9h-146.9v-210.6h142.9v23.2H3688.3z"/><path fill="#6d6e71" d="M4147 2082.4v74h98.4v23.2H4147v90.2h-24.1v-210.6h133.8v23.2H4147z"/><path fill="#6d6e71" d="M4523.3 2072.8c16.8 9.4 30.2 22.3 40 38.4 9.8 16.2 14.8 33.9 14.8 53.3.0 19.5-4.9 37.4-14.8 53.6-9.8 16.3-23.2 29.1-40 38.6s-35.3 14.3-55.2 14.3c-20.3.0-38.8-4.7-55.7-14.3-16.8-9.5-30.2-22.4-40-38.6-9.8-16.3-14.8-34.1-14.8-53.6s4.9-37.3 14.8-53.5c9.8-16.2 23.2-29 40-38.3 16.8-9.4 35.4-14 55.7-14C4488.1 2058.6 4506.5 2063.3 4523.3 2072.8zM4425.2 2092.7c-13.1 7.4-23.6 17.5-31.4 30.1-7.8 12.6-11.8 26.5-11.8 41.7.0 15.3 3.9 29.3 11.8 42 7.8 12.7 18.3 22.8 31.4 30.2 13.1 7.4 27.4 11.1 42.9 11.1s29.7-3.7 42.7-11.1 23.3-17.4 31.1-30.2c7.7-12.7 11.6-26.7 11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30s-27.2-11.2-42.6-11.2C4452.6 2081.5 4438.3 2085.2 4425.2 2092.7z"/><path fill="#6d6e71" d="M4854.7 2247.7c-15.7 15.5-37.3 23.3-64.8 23.3-27.7.0-49.4-7.8-65.1-23.3-15.7-15.5-23.6-37-23.6-64.6v-124h24.1v124c0 20.3 5.8 36.1 17.3 47.5 11.6 11.4 27.3 17.1 47.3 17.1 20.1.0 35.8-5.7 47.1-17 11.4-11.3 17-27.2 17-47.7v-124h24.1v124C4878.2 2210.7 4870.4 2232.2 4854.7 2247.7z"/><path fill="#6d6e71" d="M5169.5 2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3 169.3v-169.3h23.8v210.6H5169.5z"/><path fill="#6d6e71" d="M5478.4 2073.1c16.4 9.3 29.4 21.9 38.9 37.9 9.6 16 14.3 33.9 14.3 53.5s-4.8 37.6-14.3 53.6c-9.5 16.1-22.6 28.7-39.3 37.9-16.6 9.2-35.2 13.8-55.5 13.8h-84.3v-210.6h85.2C5443.7 2059.2 5462 2063.8 5478.4 2073.1zM5362.3 2246.9h61.4c15.5.0 29.6-3.5 42.3-10.6s22.8-16.9 30.2-29.5c7.4-12.5 11.1-26.5 11.1-42s-3.8-29.4-11.3-41.9-17.7-22.3-30.6-29.6c-12.8-7.2-27-10.9-42.6-10.9h-60.5v164.5z"/><path fill="#6d6e71" d="M5668.6 2216.6l-23.5 53.2h-25.6l94.4-210.6h25l94.1 210.6h-26l-23.5-53.2H5668.6zM5725.8 2086.6l-46.9 106.8h94.4l-47.5-106.8z"/><path fill="#6d6e71" d="M5991 2082.4v187.4h-24v-187.4h-68.4v-23.2H6060v23.2h-69z"/><path fill="#6d6e71" d="M6175.9 2269.8v-210.6h24.1v210.6H6175.9z"/><path fill="#6d6e71" d="M6493.7 2072.8c16.8 9.4 30.2 22.3 40 38.4 9.8 16.2 14.8 33.9 14.8 53.3.0 19.5-4.9 37.4-14.8 53.6-9.8 16.3-23.2 29.1-40 38.6s-35.3 14.3-55.2 14.3c-20.3.0-38.8-4.7-55.7-14.3-16.8-9.5-30.2-22.4-40-38.6-9.8-16.3-14.8-34.1-14.8-53.6s4.9-37.3 14.8-53.5c9.8-16.2 23.2-29 40-38.3 16.8-9.4 35.4-14 55.7-14C6458.5 2058.6 6476.9 2063.3 6493.7 2072.8zM6395.6 2092.7c-13.1 7.4-23.6 17.5-31.4 30.1-7.8 12.6-11.8 26.5-11.8 41.7.0 15.3 3.9 29.3 11.8 42 7.8 12.7 18.3 22.8 31.4 30.2 13.1 7.4 27.4 11.1 42.9 11.1s29.7-3.7 42.7-11.1 23.3-17.4 31.1-30.2c7.7-12.7 11.6-26.7 11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30s-27.2-11.2-42.6-11.2C6423 2081.5 6408.8 2085.2 6395.6 2092.7z"/><path fill="#6d6e71" d="M6826.5 2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3 169.3v-169.3h23.8v210.6H6826.5z"/><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4516.6152" y1="-2338.7222" x2="-4108.4111" y2="-1861.3982" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset="0" style="stop-color:#F69923"/><stop offset=".3123" style="stop-color:#F79A23"/><stop offset=".8383" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_1_)" d="M1230.1 13.7c-45.3 26.8-120.6 102.5-210.5 212.3l82.6 155.9c58-82.9 116.9-157.5 176.3-221.2 4.6-5.1 7-7.5 7-7.5-2.3 2.5-4.6 5-7 7.5-19.2 21.2-77.5 89.2-165.5 224.4 84.7-4.2 214.9-21.6 321.1-39.7 31.6-177-31-258-31-258S1323.4-41.4 1230.1 13.7z"/><path fill="none" d="M1090.2 903.1c.6-.1 1.2-.2 1.8-.3l-11.9 1.3c-.7.3-1.4.7-2.1 1C1082.1 904.4 1086.2 903.7 1090.2 903.1z"/><path fill="none" d="M1005.9 1182.3c-6.7 1.5-13.7 2.7-20.7 3.7C992.3 1185 999.2 1183.8 1005.9 1182.3z"/><path fill="none" d="M432.9 1808.8c.9-2.3 1.8-4.7 2.6-7 18.2-48 36.2-94.7 54-140.1 20-51 39.8-100.4 59.3-148.3 20.6-50.4 40.9-99.2 60.9-146.3 21-49.4 41.7-97 62-142.8 16.5-37.3 32.8-73.4 48.9-108.3 5.4-11.7 10.7-23.2 16-34.6 10.5-22.7 21-44.8 31.3-66.5 9.5-20 19-39.6 28.3-58.8 3.1-6.4 6.2-12.8 9.3-19.1.5-1 1-2 1.5-3.1l-10.2 1.1-8-15.9c-.8 1.6-1.6 3.1-2.4 4.6-14.5 28.8-28.9 57.9-43.1 87.2-8.2 16.9-16.4 34-24.6 51-22.6 47.4-44.8 95.2-66.6 143.3-22.1 48.6-43.7 97.5-64.9 146.5-20.8 48.1-41.3 96.2-61.2 144.2-20 48-39.5 95.7-58.5 143.2-19.9 49.5-39.2 98.7-58 147.2-4.2 10.9-8.5 21.9-12.7 32.8-15 39.2-29.7 77.8-44 116l12.7 25.1 11.4-1.2c.4-1.1.8-2.3 1.3-3.4C396.7 1905.4 414.9 1856.4 432.9 1808.8z"/><path fill="none" d="M980 1186.8c.1.0.1.0.1-.1C980.1 1186.8 980.1 1186.8 980 1186.8z"/><path fill="#be202e" d="M952.6 1323c-10.6 1.9-21.4 3.8-32.5 5.7-.1.0-.1.1-.2.1 5.6-.8 11.2-1.7 16.6-2.6C942 1325.2 947.3 1324.1 952.6 1323z"/><path opacity=".35" fill="#be202e" d="M952.6 1323c-10.6 1.9-21.4 3.8-32.5 5.7-.1.0-.1.1-.2.1 5.6-.8 11.2-1.7 16.6-2.6C942 1325.2 947.3 1324.1 952.6 1323z"/><path fill="#be202e" d="M980.3 1186.7C980.2 1186.7 980.2 1186.7 980.3 1186.7c-.1.1-.2.1-.2.1 1.8-.2 3.5-.5 5.2-.8 7-1 13.9-2.2 20.7-3.7C997.5 1183.8 989 1185.2 980.3 1186.7z"/><path opacity=".35" fill="#be202e" d="M980.3 1186.7C980.2 1186.7 980.2 1186.7 980.3 1186.7c-.1.1-.2.1-.2.1 1.8-.2 3.5-.5 5.2-.8 7-1 13.9-2.2 20.7-3.7C997.5 1183.8 989 1185.2 980.3 1186.7z"/><linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-7537.7339" y1="-2391.4075" x2="-4625.4141" y2="-2391.4075" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_2_)" d="M858.6 784.7c25.1-46.9 50.5-92.8 76.2-137.4 26.7-46.4 53.7-91.3 80.9-134.7 1.6-2.6 3.2-5.2 4.8-7.7 27-42.7 54.2-83.7 81.6-122.9L1019.5 226c-6.2 7.6-12.5 15.3-18.8 23.2-23.8 29.7-48.6 61.6-73.9 95.5-28.6 38.2-58 78.9-87.8 121.7-27.6 39.5-55.5 80.9-83.5 123.7-23.8 36.5-47.7 74-71.4 112.5-.9 1.4-1.8 2.9-2.6 4.3L789 919.2c22.8-45.6 46.1-90.5 69.6-134.5z"/><linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-7186.1777" y1="-2099.3059" x2="-5450.7183" y2="-2099.3059" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset="0" style="stop-color:#282662"/><stop offset=".0954839" style="stop-color:#662E8D"/><stop offset=".7882" style="stop-color:#9F2064"/><stop offset=".9487" style="stop-color:#CD2032"/></linearGradient><path fill="url(#SVGID_3_)" d="M369 1981c-14.2 39.1-28.5 78.9-42.9 119.6-.2.6-.4 1.2-.6 1.8-2 5.7-4.1 11.5-6.1 17.2-9.7 27.4-18 52.1-37.3 108.2 31.7 14.5 57.1 52.5 81.1 95.6-2.6-44.7-21-86.6-56.2-119.1 156.1 7 290.6-32.4 360.1-146.6 6.2-10.2 11.9-20.9 17-32.2-31.6 40.1-70.8 57.1-144.5 53-.2.1-.3.1-.5.2.2-.1.3-.1.5-.2 108.6-48.6 163.1-95.3 211.2-172.6 11.4-18.3 22.5-38.4 33.8-60.6-94.9 97.5-205 125.3-320.9 104.2l-86.9 9.5C374.4 1966.3 371.7 1973.6 369 1981z"/><linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2418.5454" x2="-4461.8428" y2="-2418.5454" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_4_)" d="M409.6 1786.3c18.8-48.5 38.1-97.7 58-147.2 19-47.4 38.5-95.2 58.5-143.2s40.4-96.1 61.2-144.2c21.2-49 42.9-97.8 64.9-146.5 21.8-48.1 44-95.9 66.6-143.3 8.1-17.1 16.3-34.1 24.6-51 14.2-29.3 28.6-58.4 43.1-87.2.8-1.6 1.6-3.1 2.4-4.6L681.4 706.8c-1.8 2.9-3.5 5.8-5.3 8.6-25.1 40.9-50 82.7-74.4 125.4-24.7 43.1-49 87.1-72.7 131.7-20 37.6-39.6 75.6-58.6 113.9-3.8 7.8-7.6 15.5-11.3 23.2-23.4 48.2-44.6 94.8-63.7 139.5-21.7 50.7-40.7 99.2-57.5 145.1-11 30.2-21 59.4-30.1 87.4-7.5 24-14.7 47.9-21.5 71.8-16 56.3-29.9 112.4-41.2 168.3L353 1935.1c14.3-38.1 28.9-76.8 44-116C401.1 1808.2 405.4 1797.3 409.6 1786.3z"/><linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-7161.7642" y1="-2379.1431" x2="-5631.2524" y2="-2379.1431" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset="0" style="stop-color:#282662"/><stop offset=".0954839" style="stop-color:#662E8D"/><stop offset=".7882" style="stop-color:#9F2064"/><stop offset=".9487" style="stop-color:#CD2032"/></linearGradient><path fill="url(#SVGID_5_)" d="M243.5 1729.4c-13.6 68.2-23.2 136.2-28 203.8-.2 2.4-.4 4.7-.5 7.1-33.7-54-124-106.8-123.8-106.2 64.6 93.7 113.7 186.7 120.9 278-34.6 7.1-82-3.2-136.8-23.3 57.1 52.5 1e2 67 116.7 70.9-52.5 3.3-107.1 39.3-162.1 80.8 80.5-32.8 145.5-45.8 192.1-35.3C148.1 2414.2 74.1 2645 0 2890c22.7-6.7 36.2-21.9 43.9-42.6 13.2-44.4 100.8-335.6 238-718.2 3.9-10.9 7.8-21.8 11.8-32.9 1.1-3 2.2-6.1 3.3-9.2 14.5-40.1 29.5-81.1 45.1-122.9 3.5-9.5 7.1-19 10.7-28.6.1-.2.1-.4.2-.6l-107.9-213.2C244.6 1724.4 244 1726.9 243.5 1729.4z"/><linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2117.1309" x2="-4461.8428" y2="-2117.1309" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_6_)" d="M805.6 937c-3.1 6.3-6.2 12.7-9.3 19.1-9.3 19.2-18.8 38.8-28.3 58.8-10.3 21.7-20.7 43.9-31.3 66.5-5.3 11.4-10.6 22.9-16 34.6-16.1 35-32.4 71.1-48.9 108.3-20.3 45.8-41 93.4-62 142.8-20 47.1-40.3 95.9-60.9 146.3-19.5 47.9-39.3 97.3-59.3 148.3-17.8 45.4-35.9 92.1-54 140.1-.9 2.3-1.8 4.7-2.6 7-18 47.6-36.2 96.6-54.6 146.8-.4 1.1-.8 2.3-1.3 3.4l86.9-9.5c-1.7-.3-3.5-.5-5.2-.9 103.9-13 242.1-90.6 331.4-186.5 41.1-44.2 78.5-96.3 113-157.3 25.7-45.4 49.8-95.8 72.8-151.5 20.1-48.7 39.4-101.4 58-158.6-23.9 12.6-51.2 21.8-81.4 28.2-5.3 1.1-10.7 2.2-16.1 3.1-5.5 1-11 1.8-16.6 2.6.1.0.1-.1.2-.1 96.9-37.3 158-109.2 202.4-197.4-25.5 17.4-66.9 40.1-116.6 51.1-6.7 1.5-13.7 2.7-20.7 3.7-1.7.3-3.5.6-5.2.8.1.0.1.0.1-.1h.1c33.6-14.1 62-29.8 86.6-48.4 5.3-4 10.4-8.1 15.3-12.3 7.5-6.5 14.7-13.3 21.5-20.5 4.4-4.6 8.6-9.3 12.7-14.2 9.6-11.5 18.7-23.9 27.1-37.3 2.6-4.1 5.1-8.3 7.6-12.6 3.2-6.2 6.3-12.3 9.3-18.3 13.5-27.2 24.4-51.5 33-72.8 4.3-10.6 8.1-20.5 11.3-29.7 1.3-3.7 2.5-7.2 3.7-10.6 3.4-10.2 6.2-19.3 8.4-27.3 3.3-12 5.3-21.5 6.4-28.4-3.3 2.6-7.1 5.2-11.3 7.7-29.3 17.5-79.5 33.4-119.9 40.8l79.8-8.8-79.8 8.8c-.6.1-1.2.2-1.8.3-4 .7-8.1 1.3-12.2 2 .7-.3 1.4-.7 2.1-1l-273 29.9C806.6 935 806.1 936 805.6 937z"/><linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-7554.8232" y1="-2132.0981" x2="-4642.5034" y2="-2132.0981" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_7_)" d="M1112.9 385.1c-24.3 37.3-50.8 79.6-79.4 127.5-1.5 2.5-3 5.1-4.5 7.6-24.6 41.5-50.8 87.1-78.3 137-23.8 43.1-48.5 89.3-74.3 139C854 839.5 830.8 885.4 807 934l273-29.9c79.5-36.6 115.1-69.7 149.6-117.6 9.2-13.2 18.4-27 27.5-41.3 28-43.8 55.6-92 80.1-139.9 23.7-46.3 44.7-92.2 60.7-133.5 10.2-26.3 18.4-50.8 24.1-72.3 5-19 8.9-36.9 11.9-54.1C1327.9 363.5 1197.6 380.9 1112.9 385.1z"/><path fill="#be202e" d="M936.5 1326.1c-5.5 1-11 1.8-16.6 2.6C925.5 1328 931 1327.1 936.5 1326.1z"/><path opacity=".35" fill="#be202e" d="M936.5 1326.1c-5.5 1-11 1.8-16.6 2.6C925.5 1328 931 1327.1 936.5 1326.1z"/><linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2027.484" x2="-4461.8433" y2="-2027.484" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_8_)" d="M936.5 1326.1c-5.5 1-11 1.8-16.6 2.6C925.5 1328 931 1327.1 936.5 1326.1z"/><path fill="#be202e" d="M980 1186.8c1.8-.2 3.5-.5 5.2-.8C983.5 1186.3 981.8 1186.6 980 1186.8z"/><path opacity=".35" fill="#be202e" d="M980 1186.8c1.8-.2 3.5-.5 5.2-.8C983.5 1186.3 981.8 1186.6 980 1186.8z"/><linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2037.7417" x2="-4461.8433" y2="-2037.7417" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_9_)" d="M980 1186.8c1.8-.2 3.5-.5 5.2-.8C983.5 1186.3 981.8 1186.6 980 1186.8z"/><path fill="#be202e" d="M980.2 1186.7z"/><path opacity=".35" fill="#be202e" d="M980.2 1186.7z"/><linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-5738.0635" y1="-2039.799" x2="-5094.3457" y2="-2039.799" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_10_)" d="M980.2 1186.7z"/></svg></div></a><ul class=footer-link><li><a class=white href=http://www.apache.org>Foundation</a></li><li><a class=white href=http://www.apache.org/licenses/>License</a></li><li><a class=white href=https://www.apache.org/security/>Security</a></li><li><a class=white href=http://www.apache.org/events/current-event>Events</a></li><li><a class=white href=http://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a class=white href=http://www.apache.org/foundation/thanks.html>Thanks</a></li><li><a class=white href=https://privacy.apache.org/policies/privacy-policy-public.html target=_blank>Privacy</a></li></ul></div></div><div class="col-6 text-white text-center container-center"><p>Copyright &copy; 2024 The Apache Software Foundation, Licensed under the <a class=white href=https://www.apache.org/licenses/LICENSE-2.0>Apache License Version 2.0</a></p><p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p></div><div class=col-1></div></div></div></footer></div><script src=https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js integrity=sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA==" crossorigin=anonymous></script>
<script src=/js/tabpane-persist.js></script>
<script src=/js/main.min.aa9f4c5dae6a98b2c46277f4c56f1673a2b000d1756ce4ffae93784cab25e6d5.js integrity="sha256-qp9MXa5qmLLEYnf0xW8Wc6KwANF1bOT/rpN4TKsl5tU=" crossorigin=anonymous></script>
<script src=/js/prism.js></script></body></html>