You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@amoro.apache.org by ji...@apache.org on 2024/04/02 02:16:32 UTC

(incubator-amoro-site) branch asf-site created (now 9586215)

This is an automated email from the ASF dual-hosted git repository.

jinsongzhou pushed a change to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-amoro-site.git


      at 9586215  add static files

This branch includes the following new commits:

     new 9586215  add static files

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(incubator-amoro-site) 01/01: add static files

Posted by ji...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jinsongzhou pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-amoro-site.git

commit 9586215d0806f4fbe66c4d924818c94368ad58bd
Author: zhoujinsong <zh...@163.com>
AuthorDate: Tue Apr 2 10:16:02 2024 +0800

    add static files
---
 .gitignore                                         |   13 -
 404.html                                           |   13 +
 LICENSE                                            |  201 ---
 README.md                                          |  121 --
 amoro-docs/.hugo_build.lock                        |    0
 amoro-docs/archetypes/default.md                   |    6 -
 amoro-docs/content/README.md                       |    9 -
 amoro-docs/content/_index.md                       |   76 -
 .../admin-guides/deployment-on-kubernetes.md       |  217 ---
 amoro-docs/content/admin-guides/deployment.md      |  268 ----
 .../content/admin-guides/managing-catalogs.md      |   72 -
 .../content/admin-guides/managing-optimizers.md    |  192 ---
 amoro-docs/content/admin-guides/using-kyuubi.md    |   34 -
 amoro-docs/content/concepts/catalogs.md            |   65 -
 amoro-docs/content/concepts/self-optimizing.md     |  159 --
 amoro-docs/content/concepts/table-watermark.md     |   61 -
 amoro-docs/content/engines/flink/flink-ddl.md      |  224 ---
 amoro-docs/content/engines/flink/flink-dml.md      |  186 ---
 amoro-docs/content/engines/flink/flink-ds.md       |  211 ---
 .../content/engines/flink/flink-get-started.md     |  125 --
 amoro-docs/content/engines/flink/using-logstore.md |   89 --
 amoro-docs/content/engines/spark/spark-conf.md     |   89 --
 amoro-docs/content/engines/spark/spark-ddl.md      |  287 ----
 .../content/engines/spark/spark-get-started.md     |  137 --
 amoro-docs/content/engines/spark/spark-queries.md  |   60 -
 amoro-docs/content/engines/spark/spark-writes.md   |  193 ---
 amoro-docs/content/engines/trino.md                |  109 --
 amoro-docs/content/formats/iceberg.md              |   28 -
 amoro-docs/content/formats/mixed-hive.md           |   33 -
 amoro-docs/content/formats/mixed-iceberg.md        |   77 -
 amoro-docs/content/formats/overview.md             |   31 -
 amoro-docs/content/formats/paimon.md               |   26 -
 amoro-docs/content/user-guides/cdc-ingestion.md    |  513 -------
 amoro-docs/content/user-guides/configurations.md   |  119 --
 amoro-docs/content/user-guides/metrics.md          |   37 -
 amoro-docs/content/user-guides/using-tables.md     |  209 ---
 amoro-docs/hugo.toml                               |   56 -
 amoro-docs/themes/amoro-theme                      |    1 -
 amoro-site/.hugo_build.lock                        |    0
 amoro-site/archetypes/default.md                   |    6 -
 amoro-site/content/benchmark/benchmark-guide.md    |   69 -
 amoro-site/content/benchmark/benchmark.md          |  174 ---
 amoro-site/content/community/how-to-contribute.md  |   22 -
 amoro-site/content/community/join-community.md     |   75 -
 amoro-site/content/download.md                     |   25 -
 amoro-site/content/quickstart/quick-demo.md        |  297 ----
 amoro-site/content/quickstart/setup.md             |  131 --
 amoro-site/content/roadmap.md                      |   23 -
 amoro-site/hugo.toml                               |   82 -
 amoro-site/themes/amoro-theme                      |    1 -
 amoro-theme/LICENSE                                |   14 -
 amoro-theme/README.md                              |   63 -
 amoro-theme/amoro-theme                            |    1 -
 amoro-theme/archetypes/default.md                  |    6 -
 amoro-theme/layouts/404.html                       |   14 -
 amoro-theme/layouts/_default/baseof.html           |   24 -
 amoro-theme/layouts/_default/single.html           |   16 -
 amoro-theme/layouts/index.html                     |   31 -
 amoro-theme/layouts/index.searchindex.json         |   14 -
 amoro-theme/layouts/partials/about.html            |   52 -
 amoro-theme/layouts/partials/body.html             |   35 -
 amoro-theme/layouts/partials/contact.html          |   31 -
 amoro-theme/layouts/partials/css.html              |   38 -
 amoro-theme/layouts/partials/head.html             |   37 -
 amoro-theme/layouts/partials/header.html           |   57 -
 amoro-theme/layouts/partials/home-content.html     |    6 -
 amoro-theme/layouts/partials/home-feature.html     |   16 -
 amoro-theme/layouts/partials/home-footer.html      |   20 -
 amoro-theme/layouts/partials/home-intro.html       |   10 -
 amoro-theme/layouts/partials/js.html               |   34 -
 amoro-theme/layouts/partials/pricing.html          |   52 -
 amoro-theme/layouts/partials/search-results.html   |   19 -
 amoro-theme/layouts/partials/search.html           |   19 -
 amoro-theme/layouts/partials/services.html         |  112 --
 amoro-theme/layouts/partials/sidebar.html          |   57 -
 amoro-theme/layouts/partials/social.html           |   22 -
 amoro-theme/layouts/partials/toc.html              |   21 -
 amoro-theme/layouts/partials/version-dropdown.html |   26 -
 amoro-theme/layouts/shortcodes/addtab.html         |    2 -
 amoro-theme/layouts/shortcodes/codetabs.html       |    1 -
 amoro-theme/layouts/shortcodes/hint.html           |    3 -
 amoro-theme/layouts/shortcodes/icebergVersion.html |    1 -
 amoro-theme/layouts/shortcodes/nessieVersion.html  |    1 -
 amoro-theme/layouts/shortcodes/quickstarts.html    |   31 -
 amoro-theme/layouts/shortcodes/tabcontent.html     |    3 -
 amoro-theme/theme.toml                             |   32 -
 benchmark-guide/index.html                         |  448 ++++++
 benchmark-report/index.html                        |  612 ++++++++
 benchmark/index.xml                                |   25 +
 categories/index.xml                               |   11 +
 community/index.xml                                |   25 +
 {amoro-theme/static/css => css}/amoro-theme.css    | 1620 ++++++++++----------
 {amoro-theme/static/css => css}/bootstrap.css      |    0
 {amoro-theme/static/css => css}/home-page.css      |    0
 {amoro-theme/static/css => css}/katex.min.css      |    0
 {amoro-theme/static/css => css}/markdown.css       |    0
 {amoro-theme/static/css => css}/termynal.css       |    0
 docs/latest/404.html                               |   13 +
 .../deployment-on-kubernetes/index.html            |   10 +
 docs/latest/admin-guides/deployment/index.html     |   10 +
 docs/latest/admin-guides/index.xml                 |   46 +
 .../admin-guides/managing-catalogs/index.html      |   10 +
 .../admin-guides/managing-optimizers/index.html    |   10 +
 docs/latest/admin-guides/using-kyuubi/index.html   |   10 +
 docs/latest/catalogs/index.html                    |  656 ++++++++
 docs/latest/categories/index.xml                   |   11 +
 docs/latest/cdc-ingestion/index.html               | 1102 +++++++++++++
 docs/latest/concept/catalogs/index.html            |   10 +
 docs/latest/concept/self-optimizing/index.html     |   10 +
 docs/latest/concept/table-watermark/index.html     |   10 +
 docs/latest/concepts/index.xml                     |   32 +
 docs/latest/configurations/index.html              |  979 ++++++++++++
 .../static => docs/latest}/css/amoro-theme.css     | 1620 ++++++++++----------
 .../static => docs/latest}/css/bootstrap.css       |    0
 .../static => docs/latest}/css/home-page.css       |    0
 .../static => docs/latest}/css/katex.min.css       |    0
 .../static => docs/latest}/css/markdown.css        |    0
 .../static => docs/latest}/css/termynal.css        |    0
 docs/latest/deployment-on-kubernetes/index.html    |  748 +++++++++
 docs/latest/deployment/index.html                  |  860 +++++++++++
 docs/latest/engines/index.xml                      |   88 ++
 .../static => docs/latest}/favicon-16x16.png       |  Bin
 .../static => docs/latest}/favicon-32x32.png       |  Bin
 .../static => docs/latest}/favicon-96x96.png       |  Bin
 {amoro-theme/static => docs/latest}/favicon.ico    |  Bin
 {amoro-theme/static => docs/latest}/favicon.png    |  Bin
 docs/latest/flink-datastream/index.html            |  844 ++++++++++
 docs/latest/flink-ddl/index.html                   | 1005 ++++++++++++
 docs/latest/flink-dml/index.html                   | 1011 ++++++++++++
 docs/latest/flink-getting-started/index.html       |  724 +++++++++
 docs/latest/flink-using-logstore/index.html        |  709 +++++++++
 docs/latest/flink/datastream/index.html            |   10 +
 docs/latest/flink/ddl/index.html                   |   10 +
 docs/latest/flink/dml/index.html                   |   10 +
 docs/latest/flink/getting-started/index.html       |   10 +
 docs/latest/flink/using-logstore/index.html        |   10 +
 .../latest}/font-awesome-4.7.0/HELP-US-OUT.txt     |    0
 .../font-awesome-4.7.0/css/font-awesome.min.css    |    0
 .../font-awesome-4.7.0/fonts/FontAwesome.otf       |  Bin
 .../fonts/fontawesome-webfont.eot                  |  Bin
 .../fonts/fontawesome-webfont.svg                  |    0
 .../fonts/fontawesome-webfont.ttf                  |  Bin
 .../fonts/fontawesome-webfont.woff                 |  Bin
 .../fonts/fontawesome-webfont.woff2                |  Bin
 .../latest}/font-awesome-4.7.0/less/animated.less  |    0
 .../font-awesome-4.7.0/less/bordered-pulled.less   |    0
 .../latest}/font-awesome-4.7.0/less/core.less      |    0
 .../font-awesome-4.7.0/less/fixed-width.less       |    0
 .../font-awesome-4.7.0/less/font-awesome.less      |    0
 .../latest}/font-awesome-4.7.0/less/icons.less     |    0
 .../latest}/font-awesome-4.7.0/less/larger.less    |    0
 .../latest}/font-awesome-4.7.0/less/list.less      |    0
 .../latest}/font-awesome-4.7.0/less/mixins.less    |    0
 .../latest}/font-awesome-4.7.0/less/path.less      |    0
 .../font-awesome-4.7.0/less/rotated-flipped.less   |    0
 .../font-awesome-4.7.0/less/screen-reader.less     |    0
 .../latest}/font-awesome-4.7.0/less/stacked.less   |    0
 .../latest}/font-awesome-4.7.0/less/variables.less |    0
 .../latest}/font-awesome-4.7.0/scss/_animated.scss |    0
 .../font-awesome-4.7.0/scss/_bordered-pulled.scss  |    0
 .../latest}/font-awesome-4.7.0/scss/_core.scss     |    0
 .../font-awesome-4.7.0/scss/_fixed-width.scss      |    0
 .../latest}/font-awesome-4.7.0/scss/_icons.scss    |    0
 .../latest}/font-awesome-4.7.0/scss/_larger.scss   |    0
 .../latest}/font-awesome-4.7.0/scss/_list.scss     |    0
 .../latest}/font-awesome-4.7.0/scss/_mixins.scss   |    0
 .../latest}/font-awesome-4.7.0/scss/_path.scss     |    0
 .../font-awesome-4.7.0/scss/_rotated-flipped.scss  |    0
 .../font-awesome-4.7.0/scss/_screen-reader.scss    |    0
 .../latest}/font-awesome-4.7.0/scss/_stacked.scss  |    0
 .../font-awesome-4.7.0/scss/_variables.scss        |    0
 .../font-awesome-4.7.0/scss/font-awesome.scss      |    0
 .../latest}/fonts/glyphicons-halflings-regular.eot |  Bin
 .../latest}/fonts/glyphicons-halflings-regular.svg |    0
 .../latest}/fonts/glyphicons-halflings-regular.ttf |  Bin
 .../fonts/glyphicons-halflings-regular.woff        |  Bin
 docs/latest/formats-overview/index.html            |  627 ++++++++
 docs/latest/formats/iceberg/index.html             |   10 +
 docs/latest/formats/index.xml                      |   46 +
 docs/latest/formats/mixed-hive/index.html          |   10 +
 docs/latest/formats/mixed-iceberg/index.html       |   10 +
 docs/latest/formats/overview/index.html            |   10 +
 docs/latest/formats/paimon/index.html              |   10 +
 docs/latest/iceberg-format/index.html              |  619 ++++++++
 .../latest}/images/admin/add-optimizer-group.png   |  Bin
 .../images/admin/config-optimizer-group.png        |  Bin
 .../latest}/images/admin/create-catalog.png        |  Bin
 .../latest}/images/admin/delete_catalog.png        |  Bin
 .../latest}/images/admin/hive-table-detail.png     |  Bin
 .../latest}/images/admin/hive-table-upgrade.png    |  Bin
 .../latest}/images/admin/optimizer_metrics.png     |  Bin
 .../latest}/images/admin/optimizer_release.png     |  Bin
 .../latest}/images/admin/optimizer_scale.png       |  Bin
 .../latest}/images/admin/table_metrics.png         |  Bin
 .../images/admin/table_optimizer_history.png       |  Bin
 .../latest}/images/admin/terminal_introduce.png    |  Bin
 .../images/admin/watermark_table_detail.png        |  Bin
 .../images/concepts/freshness_cost_performance.png |  Bin
 .../latest}/images/concepts/iceberg_format.png     |  Bin
 .../latest}/images/concepts/major_optimizing.png   |  Bin
 .../latest}/images/concepts/minor_optimizing.png   |  Bin
 .../latest}/images/concepts/mixed_format.png       |  Bin
 .../latest}/images/concepts/mixed_hive_format.png  |  Bin
 .../latest}/images/concepts/quota-occupation.png   |  Bin
 .../images/concepts/self-optimizing_arch.png       |  Bin
 .../content => docs/latest}/images/favicon.ico     |  Bin
 .../latest}/images/formats/iceberg_format.png      |  Bin
 .../latest}/images/formats/mixed_format.png        |  Bin
 .../latest}/images/formats/mixed_hive_format.png   |  Bin
 .../latest}/images/introduce_amoro.png             |  Bin
 .../static => docs/latest}/img/Catalog-Service.png |  Bin
 .../static => docs/latest}/img/GitHub-Mark.png     |  Bin
 .../latest}/img/Infrastructure-Idependent.png      |  Bin
 .../latest}/img/Management-tools.png               |  Bin
 .../latest}/img/Multiple-Formats.png               |  Bin
 .../static => docs/latest}/img/Rich-Plugins.png    |  Bin
 .../static => docs/latest}/img/Self-managed.png    |  Bin
 .../static => docs/latest}/img/amoro-icon.svg      |    0
 .../static => docs/latest}/img/amoro-logo-icon.png |  Bin
 .../static => docs/latest}/img/amoro-logo.svg      |    0
 .../static => docs/latest}/img/amoro_arch.svg      |    0
 .../static => docs/latest}/img/amoro_logo_dark.svg |    0
 {amoro-theme/static => docs/latest}/img/banner.svg |    0
 {amoro-theme/static => docs/latest}/img/footer.svg |    0
 .../static => docs/latest}/img/github-fill.png     |  Bin
 .../static => docs/latest}/img/home-content.png    |  Bin
 .../static => docs/latest}/img/item-icon.png       |  Bin
 .../latest}/img/slack-square-fill.png              |  Bin
 .../static => docs/latest}/img/wechat-fill.png     |  Bin
 .../static => docs/latest}/img/wechat-group.png    |  Bin
 docs/latest/index.html                             |  739 +++++++++
 docs/latest/index.xml                              |  214 +++
 .../static => docs/latest}/js/bootstrap.js         |    0
 .../static => docs/latest}/js/bootstrap.min.js     |    0
 .../static => docs/latest}/js/iceberg-theme.js     |    0
 .../static => docs/latest}/js/jquery-1.11.0.js     |    6 +-
 .../static => docs/latest}/js/jquery.easing.min.js |    0
 {amoro-theme/static => docs/latest}/js/search.js   |    0
 {amoro-theme/static => docs/latest}/js/termynal.js |    0
 .../latest}/lottie/data-compaction-animation.json  |    0
 .../lottie/hidden-partitioning-animation.json      |    0
 .../lottie/row-level-deletes-animation.json        |    0
 docs/latest/managing-catalogs/index.html           |  678 ++++++++
 docs/latest/managing-optimizers/index.html         |  908 +++++++++++
 docs/latest/metrics/index.html                     |  656 ++++++++
 docs/latest/mixed-hive-format/index.html           |  626 ++++++++
 docs/latest/mixed-iceberg-format/index.html        |  662 ++++++++
 docs/latest/paimon-format/index.html               |  620 ++++++++
 docs/latest/readme/index.html                      |  626 ++++++++
 docs/latest/search.json                            |    1 +
 docs/latest/self-optimizing/index.html             |  761 +++++++++
 docs/latest/sitemap.xml                            |   79 +
 docs/latest/spark-configuration/index.html         |  674 ++++++++
 docs/latest/spark-ddl/index.html                   |  816 ++++++++++
 docs/latest/spark-getting-started/index.html       |  697 +++++++++
 docs/latest/spark-queries/index.html               |  648 ++++++++
 docs/latest/spark-writes/index.html                |  741 +++++++++
 docs/latest/spark/configuration/index.html         |   10 +
 docs/latest/spark/ddl/index.html                   |   10 +
 docs/latest/spark/getting-started/index.html       |   10 +
 docs/latest/spark/queries/index.html               |   10 +
 docs/latest/spark/writes/index.html                |   10 +
 docs/latest/table-watermark/index.html             |  644 ++++++++
 docs/latest/tags/index.xml                         |   11 +
 docs/latest/trino/index.html                       |  744 +++++++++
 docs/latest/user-guides/cdc-ingestion/index.html   |   10 +
 docs/latest/user-guides/configurations/index.html  |   10 +
 docs/latest/user-guides/index.xml                  |   39 +
 docs/latest/user-guides/metrics/index.html         |   10 +
 docs/latest/user-guides/using-tables/index.html    |   10 +
 docs/latest/using-kyuubi/index.html                |  627 ++++++++
 docs/latest/using-tables/index.html                |  752 +++++++++
 download/index.html                                |  409 +++++
 .../static/favicon-16x16.png => favicon-16x16.png  |  Bin
 .../static/favicon-32x32.png => favicon-32x32.png  |  Bin
 .../static/favicon-96x96.png => favicon-96x96.png  |  Bin
 amoro-theme/static/favicon.ico => favicon.ico      |  Bin
 amoro-theme/static/favicon.png => favicon.png      |  Bin
 .../HELP-US-OUT.txt                                |    0
 .../css/font-awesome.min.css                       |    0
 .../fonts/FontAwesome.otf                          |  Bin
 .../fonts/fontawesome-webfont.eot                  |  Bin
 .../fonts/fontawesome-webfont.svg                  |    0
 .../fonts/fontawesome-webfont.ttf                  |  Bin
 .../fonts/fontawesome-webfont.woff                 |  Bin
 .../fonts/fontawesome-webfont.woff2                |  Bin
 .../less/animated.less                             |    0
 .../less/bordered-pulled.less                      |    0
 .../less/core.less                                 |    0
 .../less/fixed-width.less                          |    0
 .../less/font-awesome.less                         |    0
 .../less/icons.less                                |    0
 .../less/larger.less                               |    0
 .../less/list.less                                 |    0
 .../less/mixins.less                               |    0
 .../less/path.less                                 |    0
 .../less/rotated-flipped.less                      |    0
 .../less/screen-reader.less                        |    0
 .../less/stacked.less                              |    0
 .../less/variables.less                            |    0
 .../scss/_animated.scss                            |    0
 .../scss/_bordered-pulled.scss                     |    0
 .../scss/_core.scss                                |    0
 .../scss/_fixed-width.scss                         |    0
 .../scss/_icons.scss                               |    0
 .../scss/_larger.scss                              |    0
 .../scss/_list.scss                                |    0
 .../scss/_mixins.scss                              |    0
 .../scss/_path.scss                                |    0
 .../scss/_rotated-flipped.scss                     |    0
 .../scss/_screen-reader.scss                       |    0
 .../scss/_stacked.scss                             |    0
 .../scss/_variables.scss                           |    0
 .../scss/font-awesome.scss                         |    0
 .../glyphicons-halflings-regular.eot               |  Bin
 .../glyphicons-halflings-regular.svg               |    0
 .../glyphicons-halflings-regular.ttf               |  Bin
 .../glyphicons-halflings-regular.woff              |  Bin
 how-to-contribute/index.html                       |  335 ++++
 ..._warehouse_performence_on_TPCC_0-30_minutes.png |  Bin
 ...warehouse_performence_on_TPCC_30-60_minutes.png |  Bin
 ...warehouse_performence_on_TPCC_60-90_minutes.png |  Bin
 ...arehouse_performence_on_TPCC_90-120_minutes.png |  Bin
 ...di_100_warehouse_performence_with_TPCC_time.png |  Bin
 .../images => images}/chbenchmark/OLTP-OLAP.png    |  Bin
 .../images => images}/chbenchmark/TPCC-TPCH.png    |  Bin
 ...ic-iceberg-100-warehouse-static-performence.png |  Bin
 .../chbenchmark/benchmark-over-design-cn.png       |  Bin
 .../images => images}/chbenchmark/chbenchmark.png  |  Bin
 .../images => images}/quickstart/create-group.png  |  Bin
 .../quickstart/create-iceberg-catalog.png          |  Bin
 .../quickstart/create-mixed-catalog.png            |  Bin
 .../images => images}/quickstart/optimizers.png    |  Bin
 .../quickstart/scale-out-optimizer.png             |  Bin
 .../quickstart/table-optimizing-history.png        |  Bin
 .../quickstart/table-optimizing-status.png         |  Bin
 .../images => images}/quickstart/upsert-result.png |  Bin
 .../quickstart/upsert-result2.png                  |  Bin
 .../static/img => img}/Catalog-Service.png         |  Bin
 {amoro-theme/static/img => img}/GitHub-Mark.png    |  Bin
 .../img => img}/Infrastructure-Idependent.png      |  Bin
 .../static/img => img}/Management-tools.png        |  Bin
 .../static/img => img}/Multiple-Formats.png        |  Bin
 {amoro-theme/static/img => img}/Rich-Plugins.png   |  Bin
 {amoro-theme/static/img => img}/Self-managed.png   |  Bin
 {amoro-theme/static/img => img}/amoro-icon.svg     |    0
 .../static/img => img}/amoro-logo-icon.png         |  Bin
 {amoro-theme/static/img => img}/amoro-logo.svg     |    0
 {amoro-theme/static/img => img}/amoro_arch.svg     |    0
 .../static/img => img}/amoro_logo_dark.svg         |    0
 {amoro-theme/static/img => img}/banner.svg         |    0
 {amoro-theme/static/img => img}/footer.svg         |    0
 {amoro-theme/static/img => img}/github-fill.png    |  Bin
 {amoro-theme/static/img => img}/home-content.png   |  Bin
 {amoro-theme/static/img => img}/item-icon.png      |  Bin
 .../static/img => img}/slack-square-fill.png       |  Bin
 {amoro-theme/static/img => img}/wechat-fill.png    |  Bin
 {amoro-theme/static/img => img}/wechat-group.png   |  Bin
 index.html                                         |  380 +++++
 index.xml                                          |   67 +
 join-community/index.html                          |  425 +++++
 {amoro-theme/static/js => js}/bootstrap.js         |    0
 {amoro-theme/static/js => js}/bootstrap.min.js     |    0
 {amoro-theme/static/js => js}/iceberg-theme.js     |    0
 {amoro-theme/static/js => js}/jquery-1.11.0.js     |    6 +-
 {amoro-theme/static/js => js}/jquery.easing.min.js |    0
 {amoro-theme/static/js => js}/search.js            |    0
 {amoro-theme/static/js => js}/termynal.js          |    0
 landingpagesearch.json                             |    1 +
 .../data-compaction-animation.json                 |    0
 .../hidden-partitioning-animation.json             |    0
 .../row-level-deletes-animation.json               |    0
 quick-demo/index.html                              |  556 +++++++
 quickstart-setup/index.html                        |  420 +++++
 quickstart/index.xml                               |   25 +
 roadmap/index.html                                 |  335 ++++
 sitemap.xml                                        |   33 +
 tags/index.xml                                     |   11 +
 378 files changed, 29110 insertions(+), 7786 deletions(-)

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 897f6b7..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Hugo generated directories
-public
-resources
-!javadoc/resources
-
-# IntelliJ
-.idea
-*.iml
-
-# Other
-__pycache__
-.DS_Store
-.vscode
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..384ee9a
--- /dev/null
+++ b/404.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/README.md b/README.md
deleted file mode 100644
index 7f6ba45..0000000
--- a/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-<!--
-  - Licensed to the Apache Software Foundation (ASF) under one
-  - or more contributor license agreements.  See the NOTICE file
-  - distributed with this work for additional information
-  - regarding copyright ownership.  The ASF licenses this file
-  - to you under the Apache License, Version 2.0 (the
-  - "License"); you may not use this file except in compliance
-  - with the License.  You may obtain a copy of the License at
-  -
-  -   http://www.apache.org/licenses/LICENSE-2.0
-  -
-  - Unless required by applicable law or agreed to in writing,
-  - software distributed under the License is distributed on an
-  - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  - KIND, either express or implied.  See the License for the
-  - specific language governing permissions and limitations
-  - under the License.
-  -->
-
-# Amoro Documentation Site
-
-This repository contains the documentation for [Amoro](https://github.com/NetEase/amoro).
-It's built with [Hugo](https://gohugo.io/) and hosted at https://amoro.netease.com.
-
-# Structure
-
-The Amoro documentation site is actually constructed from two hugo sites. The first, is the site page. The second site, 
-is the documentation site which contains the full Amoro documentation. The site page and
-documentation sites are completely self-contained in the `./amoro-site` and `./amoro-docs` directories, respectively.
-
-## Relationship to the Arctic Repository
-
-All markdown pages that are specific to an Arctic version are maintained in the Arctic repository. All pages common across all version
-releases are kept here in the Arctic-docs repo.
-
-`NetEase/amoro`
-- The `docs` folder in the [Amoro repository](https://github.com/NetEase/amoro) contains all the markdown docs used by the **versioned** docs site.
-
-`NetEase/amoro-docs`
-- The `amoro-docs/content/docs` folder is the target folder when copying the docs over during a version release
-- The `amoro-site/content/common` folder is where you can find the common markdown files shared across all versions
-
-During each new release, the release manager will:
-1. Create a branch in this repo from main named for the release version
-2. Copy the contents under `docs` in the iceberg repo to `./amoro-docs/content/docs` in the **release** branch
-3. Update the latest branch HEAD to point to the release branch HEAD
-
-# How to Contribute
-
-## Submitting Pull Requests
-
-Changes to the markdown contents for **version** specific pages should be submitted directly in the Iceberg repository.
-
-Changes to the markdown contents for common pages should be submitted to this repository against the `main` branch.
-
-Changes to the website appearance (e.g. HTML, CSS changes) should be submitted to this repository against the `main` branch.
-
-Changes to the documentation of old Iceberg versions should be submitted to this repository against the specific version branch.
-
-In summary, you can open a PR against where you find the related markdown file. With the exception of `spec.md`, there are no duplicate
-markdown files between the `master` branch in the iceberg repo and the `main` branch in the iceberg-docs repo. For changes to `spec.md`,
-PRs should be opened against the iceberg repo, not the iceberg-docs repo.
-
-## Reporting Issues
-
-All issues related to the doc website should still be submitted to the [Amoro repository](https://github.com/NetEase/amoro).
-The GitHub Issues feature of this repository is disabled.
-
-## Running Locally
-
-Clone this repository to run the website locally:
-```shell
-git clone git@github.com:NetEase/amoro-docs.git
-cd amoro-docs
-```
-
-To start the site page site locally, run:
-```shell
-(cd amoro-site && hugo serve)
-```
-
-To start the documentation site locally, run:
-```shell
-(cd amoro-docs && hugo serve)
-```
-
-If you would like to see how the latest website looks based on the documentation in the Iceberg repository, you can copy docs to this repository by:
-```shell
-rm -rf amoro-docs/content/docs
-cp -r <path to amoro repo>/docs docs/content/docs
-```
-
-## Scanning For Broken Links
-
-If you'd like to scan for broken links, one available tool is linkcheck that can be found [here](https://github.com/filiph/linkcheck).
-
-# How the Website is Deployed
-
-## Testing Both Sites Locally
-
-In some cases, it's useful to test both the landing-page site and the docs site locally. Especially in situations
-where you need to test relative links between the two sites. This can be achieved by building both sites with custom
-`baseURL` and `publishDir` values passed to the CLI. You can then run the site with any local live server, such as the
-[Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) extension for VSCode.
-
-First, change into the `amoro-site` directory and build the site. Use `-b` and `-d` to set `baseURL` and `publishDir`, respectively.
-```
-cd arctic-site
-hugo -b http://localhost:5500/ -d ../public
-```
-
-Next, change into the `amoro-docs` directory and do the same thing. Remember that the docs-site is deployed to a `docs/<VERSION>` url, relative to the landing-page site. Since the landing-page was deployed to `../publish` in the example
-above, the example below usees `../public/docs/latest` to deploy a `latest` version docs-site.
-```
-cd ../amoro-docs
-hugo -b http://localhost:5500/docs/latest/ -d ../public/docs/latest
-```
-
-You should then have both sites deployed to the `public` directory which you can launch using your live server.
-
-**Note:** The examples above use port `5500`. Be sure to change the port number if your local live server uses a different port.
\ No newline at end of file
diff --git a/amoro-docs/.hugo_build.lock b/amoro-docs/.hugo_build.lock
deleted file mode 100644
index e69de29..0000000
diff --git a/amoro-docs/archetypes/default.md b/amoro-docs/archetypes/default.md
deleted file mode 100644
index 00e77bd..0000000
--- a/amoro-docs/archetypes/default.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: "{{ replace .Name "-" " " | title }}"
-date: {{ .Date }}
-draft: true
----
-
diff --git a/amoro-docs/content/README.md b/amoro-docs/content/README.md
deleted file mode 100644
index 7c40992..0000000
--- a/amoro-docs/content/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Amoro Docs
-
-This directory contains the documentation content of Amoro.
-
-* The documentation is written in Markdown format.
-* The images referenced in the documentation are saved in the `images` folder.
-
-### Style
-* Proper nouns should start with a capital letter, like Hadoop、Hive、Iceberg、Amoro
\ No newline at end of file
diff --git a/amoro-docs/content/_index.md b/amoro-docs/content/_index.md
deleted file mode 100644
index d9e49bb..0000000
--- a/amoro-docs/content/_index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: "Introduction"
-menu: main
-weight: 0
----
-# Introduction
-
-Amoro is a Lakehouse management system built on open data lake formats. Working with compute engines including Flink, Spark, and Trino, Amoro brings pluggable and self-managed features for Lakehouse to provide out-of-the-box data warehouse experience, and helps data platforms or products easily build infra-decoupled, stream-and-batch-fused and lake-native architecture.
-
-## Architecture
-
-The architecture of Amoro is as follows:
-<p align="center">
-<img src="images/introduce_amoro.png" alt="Architecture" width="90%" height="90%">
-</p>
-
-The core components of Amoro include:
-
-* AMS: Amoro Management Service provides Lakehouse management features, like self-optimizing, data expiration, etc.
-  It also provides a unified catalog service for all compute engines, which can also be combined with existing metadata services.
-* Plugins: Amoro provides a wide selection of external plugins to meet different scenarios.
-    * Optimizers: The self-optimizing execution engine plugin asynchronously performs merging, sorting, deduplication,
-      layout optimization, and other operations on all type table format tables.
-    * Terminal: SQL command-line tools, provide various implementations like local Spark and Kyuubi.
-    * LogStore: Provide millisecond to second level SLAs for real-time data processing based on message queues like Kafka and Pulsar.
-
-## Supported table formats 
-
-Amoro can manage tables of different table formats, similar to how MySQL/ClickHouse can choose different storage engines.
-Amoro meets diverse user needs by using different table formats. Currently, Amoro supports three table formats:
-
-* Iceberg format: means using the native table format of the Apache Iceberg, which has all the features and characteristics of Iceberg.
-* Mixed-Iceberg format: built on top of Iceberg format, which can accelerate data processing using LogStore 
-  and provides more efficient query performance and streaming read capability in CDC scenarios.
-* Mixed-Hive format: has the same features as the Mixed-Iceberg tables but is compatible with a Hive table.
-  Support upgrading Hive tables to Mixed-Hive tables, and allow Hive's native read and write methods after upgrading.
-
-## Supported engines
-
-### Iceberg format
-
-Iceberg format tables use the engine integration method provided by the Iceberg community.
-For details, please refer to: [Iceberg Docs](https://iceberg.apache.org/docs/latest/).
-
-### Paimon format
-
-Paimon format tables use the engine integration method provided by the Paimon community.
-For details, please refer to: [Paimon Docs](https://paimon.apache.org/docs/master/).
-
-### Mixed format
-
-Amoro support multiple processing engines for Mixed format as below:
-
-| Processing Engine | Version                   | Batch Read  | Batch Write | Batch Overwrite | Streaming Read | Streaming Write | Create Table | Alter Table |
-|-------------------|---------------------------|-------------|-------------|-----------------|----------------|-----------------|--------------|-------------|
-| Flink             | 1.15.x, 1.16.x and 1.17.x |  &#x2714;   |   &#x2714;   |       &#x2716;   |      &#x2714;   |       &#x2714;   |    &#x2714;   |   &#x2716;   |
-| Spark             | 3.1, 3.2, 3.3             |  &#x2714;   |   &#x2714;   |       &#x2714;   |      &#x2716;   |       &#x2716;   |    &#x2714;   |   &#x2714;   |
-| Hive              | 2.x, 3.x                  |  &#x2714;  |   &#x2716;  |       &#x2714;  |      &#x2716;  |       &#x2716;  |    &#x2716;  |   &#x2714;  |
-| Trino             | 406                       |  &#x2714;  |   &#x2716;  |       &#x2714;  |      &#x2716;  |       &#x2716;  |    &#x2716;  |   &#x2714;  |
-
-
-## User cases
-
-### Self-managed streaming Lakehouse
-
-Amoro makes it easier for users to handle the challenges of writing to a real-time data lake, such as ingesting append-only event logs or CDC data from databases.
-In these scenarios, the rapid increase of fragment and redundant files cannot be ignored.
-To address this issue, Amoro provides a pluggable streaming data self-optimizing mechanism that automatically compacts fragment files and removes expired data, ensuring high-quality table queries while reducing system costs.
-
-### Stream-and-batch-fused data pipeline
-
-Whether in the AI or BI business field , the requirement for real-time analysis is becoming increasingly high. The traditional approach of using one streaming job to complete all data processing from the source to the end is no longer applicable. There is an increasing demand for layered construction of streaming data pipeline, and the traditional layered construction approach based on message queues can cause a inconsistency problem between the streaming and batch data processing. Build [...]
-
-### Cloud-native Lakehouse
-
-Currently, most data platforms and products are tightly coupled with their underlying infrastructure(such as the storage layer). The migration of infrastructure, such as switching to cloud-native OSS, may require extensive adaptation efforts or even be impossible. However, Amoro provides an infra-decoupled, lake-native architecture built on top of the infrastructure. This allows products based on Amoro to interact with the underlying infrastructure through a unified interface (Amoro Cata [...]
\ No newline at end of file
diff --git a/amoro-docs/content/admin-guides/deployment-on-kubernetes.md b/amoro-docs/content/admin-guides/deployment-on-kubernetes.md
deleted file mode 100644
index d92f5a2..0000000
--- a/amoro-docs/content/admin-guides/deployment-on-kubernetes.md
+++ /dev/null
@@ -1,217 +0,0 @@
----
-title: "Deployment On Kubernetes"
-url: deployment-on-kubernetes
-aliases:
-    - "admin-guides/deployment-on-kubernetes"
-menu:
-    main:
-        parent: Admin Guides
-        weight: 150
----
-# Deploy AMS On Kubernetes
-
-## Requirements
-
-If you want to deploy AMS on Kubernetes, you’d better get a sense of the following things.
-
-- Use AMS official docker image or build AMS docker image
-- [An active Kubernetes cluster](https://kubernetes.io/docs/setup/) 
-- [Kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) 
-- [Helm3+](https://helm.sh/docs/intro/quickstart/)
-
-## Amoro Official Docker Image
-
-You can find the official docker image at [Amoro Docker Hub](https://hub.docker.com/u/arctic163).
-
-The following are images that can be used in a production environment.
-
-**arctic163/amoro**
-
-This is an image built based on the Amoro binary distribution package for deploying AMS.
-
-**arctic163/optimizer-flink**
-
-This is an image built based on the official version of Flink for deploying the Flink optimizer.
-
-## Build AMS Docker Image
-
-If you want to build images locally, you can find the `build.sh` script in the docker folder of the project and pass the following command:
-
-```shell
-./docker/build.sh amoro
-```
-
-or build the `optimizer-flink` image by:
-
-```shell
-./docker/build.sh optimizer-flink --flink-version <flink-version>
-```
-
-
-## Get Helm Charts
-
-You can obtain the latest official release chart by adding the official Helm repository.
-
-```shell
-$ helm repo add amoro https://netease.github.io/amoro/charts
-$ helm search repo amoro 
-NAME           CHART VERSION    APP VERSION        DESCRIPTION           
-amoro/amoro    0.1.0            0.6.0              A Helm chart for Amoro 
-
-$ helm pull amoro/amoro 
-$ tar zxvf amoro-*.tgz
-```
-
-Alternatively, you can find the latest charts directly from the Github source code.
-
-```shell
-$ git clone https://github.com/NetEase/amoro.git
-$ cd amoro/charts
-$ helm dependency build ./amoro
-```
-
-## Install
-
-When you are ready, you can use the following helm command to start
-
-```shell
-$ helm install <deployment-name> ./amoro 
-```
-
-After successful installation, you can access WebUI through the following command.
-
-```shell
-$ kubectl port-forward services/<deployment-name>-amoro-rest 1630:1630
-```
-
-Open browser to go web: http://loclhost:1630
-
-## Access logs
-
-Then, use pod name to get logs:
-
-```shell
-$ kubectl get pod
-$ kubectl logs {amoro-pod-name}
-```
-
-## Uninstall
-
-```shell
-$ helm uninstall <deployment-name>
-```
-
-
-## Configuring Helm application.
-
-Helm uses `<chart>/values.yaml` files as configuration files, and you can also copy this file for separate maintenance.
-
-```shell
-$ cp amoro/values.yaml my-values.yaml
-$ vim my-values.yaml
-```
-
-And deploy Helm applications using independent configuration files.
-
-```shell
-$ helm install <deployment-name> ./amoro -f my-values.yaml
-```
-
-
-### Enable Ingress
-
-Ingress is not enabled by default. In production environments, it is recommended to enable Ingress to access the AMS Dashboard from outside the cluster.
-
-```yaml
-ingress:
-  enabled: true
-  ingressClassName: "nginx"
-  hostname: minikube.amoro.com
-```
-
-### Configure the database.
-
-AMS default is to use Derby database for storage. When the pod is destroyed, the data will also disappear.
-In production environments, we recommend using MySQL as the storage for system data.
-
-```yaml
-amoroConf: 
-  database:
-    type: mysql
-    driver: com.mysql.cj.jdbc.Driver
-    url: <jdbc-uri>
-    username: <mysql-user>
-    password: <mysql-password>
-```
-
-
-### Configure the Images
-
-Helm charts deploy images by default using the latest tag. 
-If you need to modify the image address, such as using a private repository or building your own image
-
-
-```yaml
-image:
-  repository: <your repository>
-  pullPolicy: IfNotPresent
-  tag: <your tag>
-```
-
-### Configure the Flink Optimizer Container
-
-By default, the Flink Optimizer Container is enabled. 
-You can modify the container configuration by changing the `optimizer.flink` section.
-
-```yaml
-optimizer: 
-  flink: 
-    enabled: true
-    ## container name, default is flink
-    name: ~ 
-    image:
-      ## the image repository
-      repository: arctic163/optimizer-flink
-      ## the image tag, if not set, the default value is the same with amoro image tag.
-      tag: ~
-      ## the location of flink optimizer jar in image.
-      jobUri: "local:///opt/flink/usrlib/optimizer-job.jar"
-    properties: {
-      "flink-conf.taskmanager.memory.managed.size": "32mb",
-      "flink-conf.taskmanager.memory.netwrok.max": "32mb",
-      "flink-conf.taskmanager.memory.netwrok.nin": "32mb"
-    }
-```
-
-
-### Configure the RBAC
-
-By default, Helm Chart creates a service account, role, and role bind for Amaro deploy. 
-You can also modify this configuration to use an existing account.
-
-```yaml
-# ServiceAccount of Amoro to schedule optimizer.
-serviceAccount:
-  # Specifies whether a service account should be created or using an existed account
-  create: true
-  # Annotations to add to the service account
-  annotations: { }
-  # Specifies ServiceAccount name to be used if `create: false`
-  name: ~
-  # if `serviceAccount.create` == true. role and role-bind will be created
-  rbac:
-    # create a role/role-bind if automatically create service account
-    create: true
-    # create a cluster-role and cluster-role-bind if cluster := true
-    cluster: false
-```
-
-Notes:
-
-- If `serviceAccount.create` is false, you must provide a `serviceAccount.name` and create the `serviceAccount` beforehand.
-- If `serviceAccount.rbac.create` is false, the role and role-bind will not be created automatically.
-- You can set `serviceAccount.rbac.cluster` to true, which will create a `cluster-role` and `cluster-role-bind` instead of a `role` and `role-bind`.
-
-By default, the `serviceAccount` will be used to create the flink-optimizer. 
-Therefore, if you need to schedule the flink-optimizer across namespaces, 
-please create a `cluster-role` or use your own created `serviceAccount`.
\ No newline at end of file
diff --git a/amoro-docs/content/admin-guides/deployment.md b/amoro-docs/content/admin-guides/deployment.md
deleted file mode 100644
index 7f55d7d..0000000
--- a/amoro-docs/content/admin-guides/deployment.md
+++ /dev/null
@@ -1,268 +0,0 @@
----
-title: "Deployment"
-url: deployment
-aliases:
-    - "admin-guides/deployment"
-menu:
-    main:
-        parent: Admin Guides
-        weight: 100
----
-# Deployment
-
-You can choose to download the stable release package from [download page](../../../download/), or the source code form [Github](https://github.com/NetEase/amoro) and compile it according to the README.
-
-## System requirements
-
-- Java 8 is required. Java 17 is required for Trino.
-- Optional: MySQL 5.5 or higher
-- Optional: PostgreSQL 14.x or higher
-- Optional: ZooKeeper 3.4.x or higher
-- Optional: Hive (2.x or 3.x)
-- Optional: Hadoop (2.9.x or 3.x)
-
-## Download the distribution
-
-All released package can be downloaded from [download page](../../../download/).
-You can download amoro-x.y.z-bin.zip (x.y.z is the release number), and you can also download the runtime packages for each engine version according to the engine you are using.
-Unzip it to create the amoro-x.y.z directory in the same directory, and then go to the amoro-x.y.z directory.
-
-## Source code compilation
-
-You can build based on the master branch without compiling Trino. The compilation method and the directory of results are described below:
-
-```shell
-git clone https://github.com/NetEase/amoro.git
-cd amoro
-base_dir=$(pwd) 
-mvn clean package -DskipTests -pl '!Trino'
-cd dist/target/
-ls
-amoro-x.y.z-bin.zip # AMS release package
-dist-x.y.z-tests.jar
-dist-x.y.z.jar
-archive-tmp/
-maven-archiver/
-
-cd ${base_dir}/flink/v1.15/flink-runtime/target
-ls 
-amoro-flink-runtime-1.15-x.y.z-tests.jar
-amoro-flink-runtime-1.15-x.y.z.jar # Flink 1.15 runtime package
-original-amoro-flink-runtime-1.15-x.y.z.jar
-maven-archiver/
-
-cd ${base_dir}/spark/v3.1/spark-runtime/target
-ls
-amoro-spark-3.1-runtime-x.y.z.jar # Spark v3.1 runtime package)
-amoro-spark-3.1-runtime-x.y.z-tests.jar
-amoro-spark-3.1-runtime-x.y.z-sources.jar
-original-amoro-spark-3.1-runtime-x.y.z.jar
-```
-
-If you need to compile the Trino module at the same time, you need to install jdk17 locally and configure `toolchains.xml` in the user's `${user.home}/.m2/` directory,
-then run `mvn package -P toolchain` to compile the entire project.
-
-```xml
-<?xml version="1.0" encoding="UTF-8"?>
-<toolchains>
-    <toolchain>
-        <type>jdk</type>
-        <provides>
-            <version>17</version>
-            <vendor>sun</vendor>
-        </provides>
-        <configuration>
-            <jdkHome>${YourJDK17Home}</jdkHome>
-        </configuration>
-    </toolchain>
-</toolchains>
-```
-
-## Configuration
-
-If you want to use AMS in a production environment, it is recommended to modify `{AMORO_HOME}/conf/config.yaml` by referring to the following configuration steps.
-
-### Configure the service address
-
-- The `ams.server-bind-host` configuration specifies the host to which AMS is bound. The default value, `0.0.0.0,` indicates binding to all network interfaces.
-- The `ams.server-expose-host` configuration specifies the host exposed by AMS that the compute engines and optimizers used to connect to AMS. You can configure a specific IP address on the machine, or an IP prefix. When AMS starts up, it will find the first host that matches this prefix.
-- The `ams.thrift-server.table-service.bind-port` configuration specifies the binding port of the Thrift Server that provides the table service. The compute engines access AMS through this port, and the default value is 1260.
-- The `ams.thrift-server.optimizing-service.bind-port` configuration specifies the binding port of the Thrift Server that provides the optimizing service. The optimizers access AMS through this port, and the default value is 1261.
-- The `ams.http-server.bind-port` configuration specifies the port to which the HTTP service is bound. The Dashboard and Open API are bound to this port, and the default value is 1630.
-
-```yaml
-ams:
-  server-bind-host: "0.0.0.0" #The IP address for service listening, default is 0.0.0.0.
-  server-expose-host: "127.0.0.1" #The IP address for service external exposure, default is 127.0.0.1.
-  
-  thrift-server:
-    table-service:
-      bind-port: 1260 #The port for accessing AMS table service.
-    optimizing-service:
-      bind-port: 1261 #The port for accessing AMS optimizing service.
-
-  http-server:
-    bind-port: 1630 #The port for accessing AMS Dashboard.
-```
-
-{{< hint info >}}
-Make sure the port is not used before configuring it.
-{{< /hint >}}
-
-### Configure system database
-
-You can use MySQL/PostgreSQL as the system database instead of the default Derby.
-
-If you would like to use MySQL as the system database, you need to manually download the [MySQL JDBC Connector](https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.1.0/mysql-connector-j-8.1.0.jar) 
-and move it into the `{AMORO_HOME}/lib/` directory. You can use the following command to complete these operations:
-```shell
-cd ${AMORO_HOME}
-MYSQL_JDBC_DRIVER_VERSION=8.0.30
-wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/${MYSQL_JDBC_DRIVER_VERSION}/mysql-connector-java-${MYSQL_JDBC_DRIVER_VERSION}.jar
-mv mysql-connector-java-${MYSQL_JDBC_DRIVER_VERSION}.jar lib
-```
-
-Create an empty database in MySQL/PostgreSQL, then AMS will automatically create table structures in this MySQL/PostgreSQL database when it first started.
-
-One thing you need to do is Adding MySQL/PostgreSQL configuration under `config.yaml` of Ams:
-
-```yaml
-# MySQL
-ams:
-  database:
-    type: mysql
-    jdbc-driver-class: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://127.0.0.1:3306/amoro?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&useAffectedRows=true&useSSL=false
-    username: root
-    password: root
-# PostgreSQL
-#ams:
-#  database:
-#    type: postgres
-#    jdbc-driver-class: org.postgresql.Driver
-#    url: jdbc:postgresql://127.0.0.1:5432/amoro
-#    username: user
-#    password: passwd
-```
-
-### Configure high availability
-
-To improve stability, AMS supports a one-master-multi-backup HA mode. Zookeeper is used to implement leader election,
-and the AMS cluster name and Zookeeper address are specified. The AMS cluster name is used to bind different AMS clusters
-on the same Zookeeper cluster to avoid mutual interference.
-
-```yaml
-ams:
-  ha:
-    enabled: true  #Enable HA
-    cluster-name: default # Differentiating binding multiple sets of AMS on the same ZooKeeper.
-    zookeeper-address: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 # ZooKeeper server address.
-```
-
-### Configure optimizer containers
-
-To scale out the optimizer through AMS, container configuration is required. 
-If you choose to manually start an external optimizer, no additional container configuration is required. AMS will initialize a container named `external` by default to store all externally started optimizers.
-AMS provides implementations of `LocalContainer` and `FlinkContainer` by default. Configuration for both container types can be found below:
-
-```yaml
-containers:
-  - name: localContainer
-    container-impl: com.netease.amoro.optimizer.LocalOptimizerContainer
-    properties:
-      export.JAVA_HOME: "/opt/java"   # JDK environment
-  
-  - name: flinkContainer
-    container-impl: com.netease.amoro.optimizer.FlinkOptimizerContainer
-    properties:
-      flink-home: "/opt/flink/"                                     # The installation directory of Flink
-      export.JVM_ARGS: "-Djava.security.krb5.conf=/opt/krb5.conf"   # Submitting Flink jobs with Java parameters, such as Kerberos parameters.
-      export.HADOOP_CONF_DIR: "/etc/hadoop/conf/"                   # Hadoop configuration file directory
-      export.HADOOP_USER_NAME: "hadoop"                             # Hadoop user
-      export.FLINK_CONF_DIR: "/etc/hadoop/conf/"                    # Flink configuration file directory
-```
-
-### Configure terminal
-
-The Terminal module in the AMS Dashboard allows users to execute SQL directly on the platform. Currently, the Terminal backend supports two implementations: `local` and `kyuubi`.
-In local mode, an embedded Spark environment will be started in AMS. In kyuubi mode, an additional kyuubi service needs to be deployed.
-The configuration for kyuubi mode can refer to: [Using Kyuubi with Terminal](../using-kyuubi/). Below is the configuration for the local mode:
-
-```yaml
-ams:
-  terminal:
-    backend: local
-    local.spark.sql.iceberg.handle-timestamp-without-timezone: false
-    # When the catalog type is Hive, it automatically uses the Spark session catalog to access Hive tables.
-    local.using-session-catalog-for-hive: true
-```
-
-### Environments variables
-
-The following environment variables take effect during the startup process of AMS, 
-you can set up those environments to overwrite the default value.
-
-| Environments variable name | Default value      | Description                                | 
-|----------------------------|--------------------|--------------------------------------------|
-| AMORO_CONF_DIR             | ${AMORO_HOME}/conf | location where Amoro loading config files. |
-| AMORO_LOG_DIR              | ${AMORO_HOME}/logs | location where the logs files output       | 
-
-Note: `$AMORO_HOME` can't be overwritten from environment variable. It always points to the parent dir of `./bin`.
-
-### Configure AMS JVM
-
-The following JVM options could be set in `${AMORO_CONF_DIR}/jvm.properties`.
-
-| Property Name   | Related Jvm option                             | Description              |
-|-----------------|------------------------------------------------|--------------------------|
-| xms             | "-Xms${value}m                                 | Xms config for jvm       |
-| xmx             | "-Xmx${value}m                                 | Xmx config for jvm       |
-| jmx.remote.port | "-Dcom.sun.management.jmxremote.port=${value}  | Enable remote debug      |
-| extra.options   | "JAVA_OPTS="${JAVA_OPTS} ${JVM_EXTRA_CONFIG}"  | The addition jvm options |
- 
-
-## Start AMS
-
-Enter the directory amoro-x.y.z and execute bin/ams.sh start to start AMS.
-
-```shell
-cd amoro-x.y.z
-bin/ams.sh start
-```
-
-Then, access http://localhost:1630 through a browser to see the login page. If it appears, it means that the startup is 
-successful. The default username and password for login are both "admin".
-
-You can also restart/stop AMS with the following command:
-
-```shell
-bin/ams.sh restart/stop
-```
-
-## Upgrade AMS
-
-### Upgrade system databases
-
-You can find all the upgrade SQL scripts under `{AMORO_HOME}/conf/mysql/` with name pattern `upgrade-a.b.c-to-x.y.z.sql`.
-Execute the upgrade SQL scripts one by one to your system database based on your starting and target versions.
-
-### Replace all libs and plugins
-
-Replace all contents in the original `{AMORO_HOME}/lib` directory with the contents in the lib directory of the new installation package.
-Replace all contents in the original `{AMORO_HOME}/plugin` directory with the contents in the plugin directory of the new installation package.
-
-{{< hint info >}}
-Backup the old content before replacing it, so that you can roll back the upgrade operation if necessary.
-{{< /hint >}}
-
-### Configure new parameters
-
-The old configuration file `{AMORO_HOME}/conf/config.yaml` is usually compatible with the new version, but the new version may introduce new parameters. Try to compare the configuration files of the old and new versions, and reconfigure the parameters if necessary.
-
-### Restart AMS
-
-Restart AMS with the following commands:
-```shell
-bin/ams.sh restart
-```
-
diff --git a/amoro-docs/content/admin-guides/managing-catalogs.md b/amoro-docs/content/admin-guides/managing-catalogs.md
deleted file mode 100644
index c90b0b6..0000000
--- a/amoro-docs/content/admin-guides/managing-catalogs.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: "Managing Catalogs"
-url: managing-catalogs
-aliases:
-    - "admin-guides/managing-catalogs"
-menu:
-    main:
-        parent: Admin Guides
-        weight: 200
----
-# Managing Catalogs
-
-Users can import your test or online clusters through the catalog management function provided by the AMS Dashboard. Before adding a new Catalog,
-please read the following guidelines and select the appropriate creation according to your actual needs.
-
-## Create catalog
-In Amoro, the catalog is a namespace for a group of libraries and tables. Under the catalog, it is further divided into different databases, and under each database, there are different tables. The name of a table in Amoro is uniquely identified by the format `catalog.database.table`. In practical applications, a catalog generally corresponds to a metadata service, such as the commonly used Hive Metastore in big data.
-
-AMS can also serve as a metadata service. In order to differentiate the storage method of metadata, Amoro classifies the catalog type into `Internal Catalog` and `External Catalog`. Catalogs that use AMS as the metadata service are internal catalogs, while others are external catalogs. When creating an external catalog, you need to select the storage backend for its metadata, such as Hive, Hadoop, or Custom.
-
-In addition, when defining a catalog, you also need to select the table format used under it. Currently, Amoro supports the following table formats:
-[Iceberg](../iceberg-format/) 、[Mixed-Hive](../mixed-hive-format/)、[Mixed-Iceberg](../mixed-iceberg-format/).
-
-You can create a catalog in the AMS frontend:
-![create_catalog](../images/admin/create-catalog.png)
-
-### Configure basic information
-
-- name: catalog name, only numbers, letters, _, - , starting with letters are supported (lower case letters are recommended)
-- type: Internal Catalog or External Catalog
-- metastore: storage type for table metadata. Hive Metastore (for using HMS to store metadata), Hadoop (corresponding to iceberg's Hadoop catalog), Glue (for using AWS Glue to store metadata), Custom (other iceberg catalog implementations).
-- table format: Iceberg 、Mixed-Hive、Mixed  Iceberg. Currently, only Hive Metastore supports both Mixed-Hive and Iceberg format table, only internal catalog support both Mixed-Iceberg and Iceberg format table. All other metastore types only support Iceberg, currently a Metastore only supports one kind of TableFormat, in the future will support multiple
-- optimizer group: tables under the catalog will automatically perform self-optimizing within this group.
-
-### Configure storage
-- Type: Hadoop or S3
-- core-site: the core-site.xml of the hadoop cluster
-- hdfs-site: the hdfs-site.xml of the hadoop cluster
-- hive-site: the hive-site.xml for Hive
-- Region: region of the S3 bucket
-- Endpoint: endpoint of the S3 bucket
-
-### Configure authentication
-- Type: SIMPLE, KERBEROS, AK/SK or CUSTOM
-- hadoop username: username of the hadoop cluster
-- keytab: keytab file
-- principal: principal of keytab
-- krb5: Kerberos krb5.conf configuration file
-- Access Key: Access Key for S3
-- Secret Key: Secret Access Key for S3
-
-### Configure properties
-Common properties include:
-- warehouse: Warehouse **must be configured** for ams/hadoop/glue catalog, as it determines where our database and table files should be placed
-- catalog-impl: when the metastore is **Custom**, an additional catalog-impl must be defined, and the user must put the jar package for the custom catalog implementation into the **{AMORO_HOME}/lib** directory, **and the service must be restarted to take effect**
-- table-filter: Configure a regular expression to filter tables in the catalog. The matching will be done in the format of `database.table`. For example, if it is set to `(A\.a)|(B\.b)`, it will ignore all tables except for table `a` in database `A` and table `b` in database `B`
-
-### Configure table properties
-If you want to add the same table properties to all tables under a catalog, you can add these table properties here on the catalog level. If you also configure this property on the table level, the property on the table will take effect.
-
-We recommend users to create a Catalog following the guidelines below:
-
-- If you want to use it in conjunction with HMS, choose `External Catalog` for the `Type` and `Hive Metastore` for the `Metastore`, and choose the table format based on your needs, Mixed-Hive or Iceberg.
-- If you want to use Mixed-Iceberg provided by Amoro, choose `Internal Catalog` for the `Type` and `Mixed-Iceberg` for the table format.
-
-## Delete catalog
-When a user needs to delete a Catalog, they can go to the details page of the Catalog and click the Remove button at the bottom of the page to perform the deletion.
-
-{{< hint info >}}
-Before deleting a Catalog, AMS will verify whether there is metadata for tables under that Catalog.
-If there are still tables under that Catalog, AMS will prompt that the deletion failed.
-{{< /hint >}}
diff --git a/amoro-docs/content/admin-guides/managing-optimizers.md b/amoro-docs/content/admin-guides/managing-optimizers.md
deleted file mode 100644
index 4ad5c7d..0000000
--- a/amoro-docs/content/admin-guides/managing-optimizers.md
+++ /dev/null
@@ -1,192 +0,0 @@
----
-title: "Managing Optimizers"
-url: managing-optimizers
-aliases:
-    - "admin-guides/managing-optimizers"
-menu:
-    main:
-        parent: Admin Guides
-        weight: 300
----
-# Managing Optimizers
-
-The optimizer is the execution unit for performing self-optimizing tasks on a table. To isolate optimizing tasks on different tables and support the deployment of optimizers in different environments, Amoro has proposed the concepts of optimizer containers and optimizer groups:
-
-* Optimizer container: Encapsulate the deployment method of optimizers, there are three implementations for now: `flink container` based on Flink streaming job, `local container` based on Java Application, and `external container` based on manually started by users.
-* Optimizer group: A collection of optimizers, where each table must select an optimizer group to perform optimizing tasks on it. Tables under the same optimizer group contribute resources to each other, and tables under different optimizer groups can be isolated in terms of optimizer resources.
-* Optimizer: The specific unit that performs optimizing tasks, usually with multiple concurrent units.
-
-## Optimizer container
-Before using self-optimizing, you need to configure the container information in the configuration file. Optimizer container represents a specific set of runtime environment configuration, and the scheduling scheme of optimizer in that runtime environment. The container includes three types: flink, local, and external.
-
-### Local container
-Local container is a way to start Optimizer by local process and supports multi-threaded execution of Optimizer tasks. It is recommended to be used only in demo or local deployment scenarios. If the environment variable for jdk is not configured, the user can configure java_home to point to the jdk root directory. If already configured, this configuration item can be ignored.
-
-```yaml
-containers:
-  - name: localContainer
-    container-impl: com.netease.arctic.server.manager.LocalOptimizerContainer
-    properties:
-      export.JAVA_HOME: "/opt/java"   # JDK environment
-```
-
-### Flink container
-Flink container is a way to start Optimizer through Flink jobs. With Flink, you can easily deploy Optimizer
-on yarn clusters or kubernetes clusters to support large-scale data scenarios. To use flink container, 
-you need to add a new container configuration. with container-impl as `com.netease.arctic.server.manager.FlinkOptimizerContainer`
-
-FlinkOptimizerContainer support the following properties:
-
-| Property Name             | Required | Default Value | Description                                                                                                                                                                                                                                                                          |
-|---------------------------|----------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| flink-home                | true     | N/A           | Flink installation location                                                                                                                                                                                                                                                          |
-| target                    | true     | yarn-per-job  | flink job deployed target, available values `yarn-per-job`, `yarn-application`, `kubernetes-application`                                                                                                                                                                             |
-| job-uri                   | false    | N/A           | The jar uri of flink optimizer job. This is required if target is application mode.                                                                                                                                                                                                  |
-| ams-optimizing-uri        | false | N/A           | uri of AMS thrift self-optimizing endpoint. This could be used if the ams.server-expose-host is not available                                                                                                                                                                        |
-| export.\<key\>            | false | N/A           | environment variables will be exported during job submit                                                                                                                                                                                                                             |
-| export.JAVA_HOME          | false | N/A           | Java runtime location                                                                                                                                                                                                                                                                |
-| export.HADOOP_CONF_DIR    | false | N/A           | Direction which holds the configuration files for the hadoop cluster (including hdfs-site.xml, core-site.xml, yarn-site.xml ). If the hadoop cluster has kerberos authentication enabled, you need to prepare an additional krb5.conf and a keytab file for the user to submit tasks |
-| export.JVM_ARGS           | false | N/A           | you can configure flink to run additional configuration parameters, here is an example of configuring krb5.conf, specify the address of krb5.conf to be used by Flink when committing via `-Djava.security.krb5.conf=/opt/krb5.conf`                                                 |
-| export.HADOOP_USER_NAME   | false | N/A           | the username used to submit tasks to yarn, used for simple authentication                                                                                                                                                                                                            |
-| export.FLINK_CONF_DIR     | false | N/A           | the directory where flink_conf.yaml is located                                                                                                                                                                                         |
-| flink-conf.\<key\>        | false | N/A           | [Flink Configuration Options](https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/config/) will be passed to cli by `-Dkey=value`,                                                                                                                                  |
-
-{{< hint info >}}
-To better utilize the resources of Flink Optimizer, it is recommended to add the following configuration to the Flink Optimizer Group:
-* Set `flink-conf.taskmanager.memory.managed.size` to `32mb` as Flink optimizer does not have any computation logic, it does not need to occupy managed memory.
-* Set `flink-conf.taskmanager.memory.netwrok.max` to `32mb` as there is no need for communication between operators in Flink Optimizer.
-* Set `flink-conf.taskmanager.memory.netwrok.nin` to `32mb` as there is no need for communication between operators in Flink Optimizer.
-{{< /hint >}}
-
-
-An example for yarn-per-job mode:
-
-```yaml
-containers:
-  - name: flinkContainer
-    container-impl: com.netease.arctic.server.manager.FlinkOptimizerContainer
-    properties:
-      flink-home: /opt/flink/                              #flink install home
-      export.HADOOP_CONF_DIR: /etc/hadoop/conf/            #hadoop config dir
-      export.HADOOP_USER_NAME: hadoop                      #hadoop user submit on yarn
-      export.JVM_ARGS: -Djava.security.krb5.conf=/opt/krb5.conf       #flink launch jvm args, like kerberos config when ues kerberos
-      export.FLINK_CONF_DIR: /etc/hadoop/conf/              #flink config dir
-```
-
-An example for kubernetes-application mode:
-
-```yaml
-containers:
-  - name: flinkContainer
-    container-impl: com.netease.arctic.server.manager.FlinkOptimizerContainer
-    properties:
-      flink-home: /opt/flink/                                                        # Flink install home
-      target: kubernetes-application                                                 # Flink run as native kubernetes
-      job-uri: "local:///opt/flink/usrlib/optimizer-job.jar"                         # Optimizer job main jar for kubernetes application
-      ams-optimizing-uri: thrift://ams.amoro.service.local:1261                      # AMS optimizing uri 
-      export.FLINK_CONF_DIR: /opt/flink/conf/                                        # Flink config dir
-      flink-conf.kubernetes.container.image: "arctic163/optimizer-flink:{version}"   # Optimizer image ref
-      flink-conf.kubernetes.service-account: flink                                   # Service account that is used within kubernetes cluster.
-```
-
-
-### External container
-
-External container refers to the way in which the user manually starts the optimizer. The system has a built-in external container called `external`, so you don't need to configure it manually.
-
-## Optimizer group
-Optimizer group (optimizer resource group) is a concept introduced to divide Optimizer resources. An Optimizer Group can
-contain several optimizers with the same container implementation to facilitate the expansion and contraction of the resource group.
-
-### Add optimizer group
-
-You can add an optimizer group on the Amoro dashboard by following these steps:
-
-1.Click the "Add Group" button in the top left corner of the `Optimizer Groups` page.
-![add-optimizer-group](../images/admin/add-optimizer-group.png)
-
-2.Configure the newly added Optimizer group.
-![config-optimizer-group](../images/admin/config-optimizer-group.png)
-
-The following configuration needs to be filled in:
-
-- name: the name of the optimizer group, which can be seen in the list of optimizer groups on the front-end page.
-- container: the name of a container configured in containers.
-- properties: the default configuration under this group, is used as a configuration parameter for tasks when the optimize page is scaled out.Supports native parameters for `flink on yarn`, and users can set parameters using the `flink-conf.<property>=<value>` or use `flink-conf.yaml` to configure parameters.
-
-The optimizer group supports the following properties:
-
-| Property           | Container type | Required | Default                                                                               | Description                                                                                                                                                                                                                                                                                                                                                       [...]
-|--------------------|----------------|----------|---------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
-| scheduling-policy  | All            | No       | quota                                                                                 | The scheduler group scheduling policy, the default value is `quota`, it will be scheduled according to the quota resources configured for each table, the larger the table quota is, the more optimizer resources it can take. There is also a configuration `balanced` that will balance the scheduling of each table, the longer the table has not been optimiz [...]
-| memory             | Local          | Yes      | N/A                                                                                   | The memory size of the local optimizer Java process.                                                                                                                                                                                                                                                                                                              [...]
-| ams-optimizing-uri | All            | No       | thrift://{ams.server-expose-host}:{ams.thrift-server.optimizing-service.binding-port} | Table optimizing service endpoint. This is used when the default service endpoint is not visitable.                                                                                                                                                                                                                                                               [...]
-| flink-conf.\<key\> | Flink          | No       | N/A                                                                                   | Any flink config options could be overwritten, priority is optimizing-group > optimizing-container > flink-conf.yaml.                                                                                                                                                                                                                                             [...]
-
-
-{{< hint info >}}
-To better utilize the resources of Flink Optimizer, it is recommended to add the following configuration to the Flink Optimizer Group:
-* Set `flink-conf.taskmanager.memory.managed.size` to `32mb` as Flink optimizer does not have any computation logic, it does not need to occupy managed memory.
-* Set `flink-conf.taskmanager.memory.netwrok.max` to `32mb` as there is no need for communication between operators in Flink Optimizer.
-* Set `flink-conf.taskmanager.memory.netwrok.nin` to `32mb` as there is no need for communication between operators in Flink Optimizer.
-{{< /hint >}}
-
-### Edit optimizer group
-
-You can click the `edit` button on the `Optimizer Groups` page to modify the configuration of the Optimizer group.
-
-### Remove optimizer group
-
-You can click the `remove` button on the `Optimizer Groups` page to delete the optimizer group, but only if the group is
-not referenced by any catalog or table and no optimizer belonging to this group is running.
-
-## Optimizer Scale-out and Release
-
-### Scale out optimizer
-You can click the `Scale-Out` button on the `Optimizer Groups` page to scale out the optimizer for the corresponding optimizer
-group, and then click `OK` to start the optimizer for this optimizer group according to the parallelism configuration.
-If the optimizer runs normally, you will see an optimizer with the status `RUNNING` on the `Optimizers` page.
-
-![optimize-scale-out](../images/admin/optimizer_scale.png)
-
-### Release optimizer
-
-You can click the `Release` button on the `Optimizer` page to release the optimizer.
-
-![release optimizer](../images/admin/optimizer_release.png)
-
-{{< hint info >}}
-Currently, only optimizer scaled through the dashboard can be released on dashboard.
-{{< /hint >}}
-
-### Deploy external optimizer
-
-You can submit optimizer in your own Flink task development platform or local Flink environment with the following configuration. The main parameters include:
-
-```shell
-./bin/flink run-application -t yarn-application \
- -Djobmanager.memory.process.size=1024mb \
- -Dtaskmanager.memory.process.size=2048mb \
- -Dtaskmanager.memory.managed.size=32mb \
- -Dtaskmanager.memory.network.max=32mb \
- -Dtaskmanager.memory.network.min=32mb \
- -c com.netease.arctic.optimizer.flink.FlinkOptimizer \
- ${AMORO_HOME}/plugin/optimizer/flink/optimizer-job.jar \
- -a 127.0.0.1:1261 \
- -g flinkGroup \
- -p 1 \
- -eds \
- -dsp /tmp \
- -msz 512
-```
-The description of the relevant parameters is shown in the following table:
-
-| Property | Required | Description                                                                                                                                                                                                                               |
-|----------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| -a       | Yes      | The address of the AMS thrift service, for example: thrift://127.0.0.1:1261, can be obtained from the config.yaml configuration.                                                                                                          |
-| -g       | Yes      | Group name created in advance under external container.                                                                                                                                                                                   |
-| -p       | Yes      | Optimizer parallelism usage.                                                                                                                                                                                                              |
-| -hb      | No       | Heart beat interval with ams, should be smaller than configuration ams.optimizer.heart-beat-timeout in AMS configuration conf/config.yaml which is 60000 milliseconds by default, default 10000(ms).                                      |
-| -eds     | No       | Whether extend storage to disk, default false.                                                                                                                                                                                            |
-| -dsp     | No       | Defines the directory where the storage files are saved, the default temporary-file directory is specified by the system property `java.io.tmpdir`. On UNIX systems the default value of this property is typically "/tmp" or "/var/tmp". |
-| -msz     | No       | Memory storage size limit when extending disk storage(MB), default 512(MB).                                                                                                                                                               |
diff --git a/amoro-docs/content/admin-guides/using-kyuubi.md b/amoro-docs/content/admin-guides/using-kyuubi.md
deleted file mode 100644
index cb2babb..0000000
--- a/amoro-docs/content/admin-guides/using-kyuubi.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: "Using Kyuubi By Terminal"
-url: using-kyuubi
-aliases:
-    - "admin-guides/using-kyuubi"
-menu:
-    main:
-        parent: Admin Guides
-        weight: 400
----
-# Using Kyuubi By Terminal
-**Prerequisites**:
-- There must be a running Kyuubi. To deploy and run Kyuubi, please refer to [Kyuubi doc](https://kyuubi.readthedocs.io/en/master/)
-
-
-Terminal supports interfacing with Kyuubi to submit SQL to Kyuubi for execution. All you need to do is add the Kyuubi configuration as instructed below:
-```shell
-ams:
-    terminal:
-      backend: kyuubi
-      kyuubi.jdbc.url: jdbc:hive2://127.0.0.1:10009/ # kyuubi Connection Address
-```
-
-
-Without configuring Kyuubi, Terminal executes in memory in AMS.
-
-To execute SQL in Terminal, you can refer to the following steps::
-
-- Please switch Catalog first
-- Before writing SQL, you can use the provided SQL Shortcuts function to help you build SQL quickly.
-- Writing SQL
-- Click the Execute button to run the SQL;
-
-![terminal](../images/admin/terminal_introduce.png)
diff --git a/amoro-docs/content/concepts/catalogs.md b/amoro-docs/content/concepts/catalogs.md
deleted file mode 100644
index ba6d4a5..0000000
--- a/amoro-docs/content/concepts/catalogs.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: "Catalogs"
-url: catalogs
-aliases:
-    - "concept/catalogs"
-menu:
-    main:
-        parent: Concepts
-        weight: 100
----
-# Catalogs
-
-## Introduce multi-catalog
-
-A catalog is a metadata namespace that stores information about databases, tables, views, indexes, users, and UDFs. It provides a higher-level
-namespace for `table` and `database`. Typically, a catalog is associated with a specific type of data source or cluster. In Flink, Spark and Trino,
-the multi-catalog feature can be used to support SQL across data sources, such as:
-
-```SQL
-SELECT c.ID, c.NAME, c.AGE, o.AMOUNT
-FROM MYSQL.ONLINE.CUSTOMERS c JOIN HIVE.OFFLINE.ORDERS o
-ON (c.ID = o.CUSTOMER_ID)
-```
-
-In the past, data lakes were managed using the Hive Metastore (HMS) to handle metadata. Unfortunately, HMS does not support multi-catalog, which
-limits the capabilities of engines on the data lake. For example, some users may want to use Spark to perform federated computation across different
-Hive clusters by specifying the catalog name, requiring them to develop a Hive catalog plugin in the upper layer. Additionally, data lake formats are
-moving from a single Hive-centric approach to a landscape of competing formats such as Iceberg, Delta, and Hudi. These new data lake formats are more
-cloud-friendly and will facilitate the migration of data lakes to the cloud. In this context, a management system that supports multi-catalog is
-needed to help users govern data lakes with different environments and formats.
-
-Users can create catalogs in Amoro for different environments, clusters, and table formats, and leverage the multi-catalog feature in Flink, Spark
-and Trino to enable federated computation across multiple clusters and formats. Additionally, properties configured in catalogs can be shared by all
-tables and users, avoiding duplication. By leveraging the multi-catalog design, Amoro provides support for a metadata center in data platforms.
-
-When AMS and HMS are used together, HMS serves as the storage foundation for AMS. With the [Iceberg Format](../iceberg-format/), users can leverage the
-multi-catalog management functionality of AMS without introducing any Amoro dependencies.
-
-## How to use
-
-Amoro v0.4 introduced the catalog management feature, where table creation is performed under a catalog. Users can create, edit, and delete catalogs
-in the catalogs module, which requires configuration of metastore, table format, and environment information upon creation. For more information,
-please refer to the documentation: [Managing catalogs](../managing-catalogs/)
-
-In practice, it is recommended to create a catalog as follows:
-
-- If you want to collaborate with HMS, it is recommended to choose Hive as the `Metastore`, and choose Mixed-Hive or Iceberg as the `Format`
-according to your needs.
-- If you want to use the Mixed-Iceberg Format provided by Amoro, it is recommended to choose Amoro as the `Metastore`.
-
-Currently, only one table format can be selected when creating an Amoro catalog. This is mainly because the engine will parse the catalog into a
-specific data source when using it, and a one-to-one format is intuitive. On the other hand, this limitation can be bypassed when using HMS directly,
-such as the SessionCatalog implementation provided by the Iceberg community. In the future, Amoro will consider providing users with more flexible
-management methods.
-
-## Future work
-
-AMS will focus on two goals to enhance the value of the metadata center in the future:
-
-- Expand data sources: In addition to data lakes, message queues, databases, and data warehouses can all be managed as objects in the catalog.
-Through metadata center and SQL-based federated computing of the computing engine, AMS will provide infrastructure solutions for data platforms
-such as DataOps and DataFabric
-- Automatic catalog detection: In compute engines like Spark and Flink, it is possible to automatically detect the creation and changes of a
-catalog, enabling a one-time configuration for permanent scalability.
-  
\ No newline at end of file
diff --git a/amoro-docs/content/concepts/self-optimizing.md b/amoro-docs/content/concepts/self-optimizing.md
deleted file mode 100644
index 7730635..0000000
--- a/amoro-docs/content/concepts/self-optimizing.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-title: "Self-Optimizing"
-url: self-optimizing
-aliases:
-    - "concept/self-optimizing"
-menu:
-    main:
-        parent: Concepts
-        weight: 200
----
-# Self-optimizing
-
-## Introduction
-
-Lakehouse is characterized by its openness and loose coupling, with data and files maintained by users through various engines. While this
-architecture appears to be well-suited for T+1 scenarios, as more attention is paid to applying Lakehouse to streaming data warehouses and real-time
-analysis scenarios, challenges arise. For example:
-
-- Streaming writes bring a massive amount of fragment files
-- CDC ingestion and streaming updates generate excessive redundant data
-- Using the new data lake format leads to orphan files and expired snapshots.
-
-These issues can significantly affect the performance and cost of data analysis. Therefore, Amoro has introduced a Self-optimizing mechanism to
-create an out-of-the-box Streaming Lakehouse management service that is as user-friendly as a traditional database or data warehouse. The new table
-format is used for this purpose. Self-optimizing involves various procedures such as file compaction, deduplication, and sorting.
-
-The architecture and working mechanism of Self-optimizing are shown in the figure below:
-
-![Self-optimizing architecture](../images/concepts/self-optimizing_arch.png)
-
-The Optimizer is a component responsible for executing Self-optimizing tasks. It is a resident process managed by AMS. AMS is responsible for
-detecting and planning Self-optimizing tasks for tables, and then scheduling them to Optimizers for distributed execution in real-time. Finally, AMS
-is responsible for submitting the optimizing results. Amoro achieves physical isolation of Optimizers through the Optimizer Group.
-
-The core features of Amoro's Self-optimizing are:
-
-- Automated, Asynchronous and Transparent — Continuous background detecting of file changes, asynchronous distributed execution of optimizing tasks,
-transparent and imperceptible to users
-- Resource Isolation and Sharing — Allow resources to be isolated and shared at the table level, as well as setting resource quotas
-- Flexible and Scalable Deployment — Optimizers support various deployment methods and convenient scaling
-
-## Self-optimizing mechanism
-
-During the process of writing data, there may be two types of amplification: read amplification and write amplification:
-
-- Read amplification — If an excessive amount of fragment files are generated during the writing process, or if there is an excessive mapping of
-delete and insert files (which may be a familiar issue for users of the Iceberg v2 format), and the optimizing cannot keep up with the rate of
-fragment file generation, it can significantly degrade reading performance.
-- Write amplification — Frequently scheduling optimizing can lead to frequent compaction and rewriting of existing files, which causes resource
-competition and waste of CPU/IO/Memory, slows down the optimization speed, and further intensify read amplification.
-
-Frequent execution of optimizing is necessary to alleviate read amplification, but it can lead to write amplification. The design of self-optimizing
-needs trade off between read and write amplification. Amoro's Self-optimizing takes inspiration from the Generational Garbage Collection algorithm
-in the JVM. Files are divided into Fragments and Segments based on their sizes, and different Self-optimizing processes executed on Fragments and
-Segments are classified into two types: minor and major. Therefore, Amoro v0.4 introduces two parameters to define Fragments and Segments:
-
-```SQL
--- Target file Size for Self-optimizing 
-self-optimizing.target-size = 134217728(128MB)
--- The fragment file size threshold for Self-optimizing
-self-optimizing.fragment-ratio = 8
-```
-
-`self-optimizing.target-size` defines the target output size for major optimizing, which is set to 128 MB by default. `self-optimizing.fragment-ratio`
-defines the ratio of the fragment file threshold to the target-size, with a value of 8 indicating that the default fragment threshold is 1/8 of the
-target-size, or 16 MB for a default target-size of 128 MB. Files smaller than 16 MB are considered fragments, while files larger than 16 MB are
-considered segments, as shown in the diagram below:
-
-![Minor optimizing](../images/concepts/minor_optimizing.png)
-
-The goal of Minor optimizing is to alleviate read amplification issues, which entails two tasks:
-
-* Compact fragment files into segment files as quickly as possible. Minor optimizing will be executed more frequently when fragment files are rapidly
-generated.
-* Converting from a write-friendly file format to a read-friendly file format, which involves transitioning ChangeStore to BaseStore for the
-Mixed Format, and eq-delete files to pos-delete files for the Iceberg Format.
-
-After executing Minor optimizing multiple times, there will be many Segment files in the tablespace. Although in most cases, the read efficiency
-of Segment files can meet performance requirements, however:
-
-* There may be a significant amount of accumulated delete data on each Segment file
-* There may be a lot of duplicate data on primary keys between different Segment files
-
-At this stage, the reading performance problem is no longer caused by the read amplification issue resulting from small file size and file format.
-Instead, it is due to the presence of excessive redundant data that needs to be merged and cleaned up during merge-on-read. To address this problem,
-Amoro introduces major optimizing which merges Segment files to clean up redundant data and control its amount to a level that is favorable to
-reading. Minor optimizing has already performed multiple rounds of deduplication, and major optimizing is not scheduled frequently to avoid write
-amplification issues. Additionally, Full optimizing merges all files in the target space into a single file, which is a special case of
-major optimizing.
-
-![Major optimizing](../images/concepts/major_optimizing.png)
-
-The design of Major optimizing and Minor optimizing takes inspiration from the Generational Garbage Collection algorithm of JVM. The execution
-logic of both optimizing is consistent, as they both involve file compaction, data deduplication, and conversion from write-friendly format to
-read-friendly format. The input-output relationships of Minor, Major, and Full optimizing are shown in the following table:
-
-| Self-optimizing type  | Input space  | Output space  | Input file types  | Output file types  |
-|:----------|:----------|:----------|:----------|:----------|
-| minor    | fragment    | fragment/segment    | insert, eq-delete, pos-delete   | insert, pos-delete    |
-| major    | fragment, segment    | segment    | insert, eq-delete, pos-delete    | insert, pos-delete    |
-| full    | fragment, segment    | segment    | insert, eq-delete, pos-delete   | insert    |
-
-
-## Self-optimizing scheduling policy
-
-AMS determines the Scheduling Policy to sequence the self-optimization process for different tables. The actual resources allocated for
-Self-optimizing for each table are determined based on the chosen Scheduling Policy. Quota is used by Amoro to define the expected resource usage for
-each table, while Quota occupation represents the percentage of actual resource usage compared to the expected usage. The AMS page allows viewing of
-the Quota and Quota occupation for each table's Self-optimizing:
-
-![quota_and_occupation](../images/concepts/quota-occupation.png)
-
-Different optimizer groups can be configured with different scheduling policies to meet various optimization requirements.
-See: [Optimizer Group Configuration](../managing-optimizers#optimizer-group)。
-
-Users can also disable the Self-optimizing for a table by configuring the following settings on the table, which will prevent it from being scheduled
-for optimizing.
-
-```SQL
-self-optimizing.enabled = false;
-```
-
-If you are working with non-updatable tables like logs or sensor data and are used to utilizing the Spark Rewrite Action offered by Iceberg, you can
-turn off the Self-optimizing.
-
-However, if the table is configured with a primary key and supports CDC ingestion and streaming updates (e.g., database synchronization tables or
-dimensionally aggregated tables), it is advisable to enable the Self-optimizing.
-
-Currently, there are two main scheduling policies available: `Quota` and `Balanced`.
-
-### Quota
-
-The `Quota` strategy is a scheduling policy that schedules based on resource usage. The Self-optimizing resource usage of a single table is managed
-by configuring the quota configuration on the table:
-
-```SQL
--- Quota for Self-optimizing, indicating the CPU resource the table can take up
-self-optimizing.quota = 0.1;
-```
-Quota defines the maximum CPU usage that a single table can use, but Self-optimizing is actually executed in a distributed manner, and actual resource
-usage is dynamically managed based on actual execution time.In the optimizing management Web UI, the dynamic quota usage of a single table can be
-viewed through the "Quota Occupy" metric. From a design perspective, the quota occupy metric should dynamically approach 100%.
-
-In a platform, two situations may occur: overselling and overbuying.
-
-- Overselling — If all optimizer configurations exceed the total quota of all table configurations, the quota occupy metric may dynamically approach
-above 100%
-- Overbuying — If all optimizer configurations are lower than the total quota of all table configurations, the quota occupy metric should dynamically
-approach below 100%
-
-### Balanced
-
-The `Balanced` strategy is a scheduling strategy based on time progression, where tables that have not been Self-optimized for a longer time have a
-higher scheduling priority. This strategy aims to keep the self-optimizing progress of each table at a similar level, which can avoid the situation
-where tables with high resource consumption do not perform Self-optimizing for a long time, thus affecting the overall query efficiency in the quota
-scheduling strategy.
-
-If there is no special requirement for resource usage among the tables in an optimizer group, and all tables are expected to have decent query
-efficiency, then the `Balanced` strategy is a good choice.
\ No newline at end of file
diff --git a/amoro-docs/content/concepts/table-watermark.md b/amoro-docs/content/concepts/table-watermark.md
deleted file mode 100644
index 220493d..0000000
--- a/amoro-docs/content/concepts/table-watermark.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: "Table Watermark"
-url: table-watermark
-aliases:
-    - "concept/table-watermark"
-menu:
-    main:
-        parent: Concepts
-        weight: 400
----
-# Table Watermark
-
-## Table freshness
-
-Data freshness represents timeliness, and in many discussions, freshness is considered one of the important indicators of data quality. In traditional
-offline data warehouses, higher cost typically means better performance, creating a typical binary paradox in terms of cost-performance trade-off. 
-However, in high-freshness streaming data warehouses, massive small files and frequent updates can lead to performance degradation. The higher the
-freshness, the greater the impact on performance. To achieve the required performance, users must incur higher costs. Thus, for streaming data
-warehouses, data freshness, query performance, and cost form a tripartite paradox.
-
-<img src="../images/concepts/freshness_cost_performance.png" alt="Freshness, cost and performance" width="60%" height="60%">
-
-Amoro offers a resolution to the tripartite paradox for users by utilizing AMS management functionality and a self-optimizing mechanism. Unlike
-traditional data warehouses, Lakehouse tables are utilized in a multitude of data pipelines, AI, and BI scenarios. Measuring data freshness is
-crucially important for data developers, analysts, and administrators, and Amoro addresses this challenge by adopting the watermark concept in stream
-computing to gauge table freshness.
-
-## Table watermark
-
-In the Mixed Format, data freshness is measured through table watermark.
-
-Strictly speaking, table watermark is used to describe the writing progress of a table. Specifically, it is a timestamp attribute on the table that
-indicates that data with timestamps earlier than this watermark have been written to the table. It is typically used to monitor the progress of table
-writes and can also serve as a trigger indicator for downstream batch computing tasks.
-
-Mixed Format uses the following configurations to configure watermark:
-
-```sql
-  'table.event-time-field' = 'op_time',
-  'table.watermark-allowed-lateness-second' = '60'
-```
-
-In the example above, `op_time` is set as the event time field for the table, and the watermark for the table is calculated using the `op_time` of the
-data being written. To handle out-of-order writes, a maximum delay of 60 seconds is allowed for calculating the watermark. Unlike in stream
-processing, data with event_time values smaller than the watermark will not be rejected, but they will not affect the advancement of the watermark
-either.
-
-You can view the current watermark of a table in the AMS Dashboard's table details, or you can use the following SQL query in the terminal to query
-the watermark of a table:
-
-```SQL
-SHOW TBLPROPERTIES test_db.test_log_store ('watermark.table');
-```
-You can also query the table watermark of the BaseStore using the following command, which can be combined with native reads from Hive or Iceberg for
-greater flexibility:
-
-```SQL
-SHOW TBLPROPERTIES test_db.test_log_store ('watermark.base');
-```
-
-You can learn about how to use Watermark in detail by referring to [Using tables](../using-tables/).
\ No newline at end of file
diff --git a/amoro-docs/content/engines/flink/flink-ddl.md b/amoro-docs/content/engines/flink/flink-ddl.md
deleted file mode 100644
index 4d0a474..0000000
--- a/amoro-docs/content/engines/flink/flink-ddl.md
+++ /dev/null
@@ -1,224 +0,0 @@
----
-title: "Flink DDL"
-url: flink-ddl
-aliases:
-    - "flink/ddl"
-menu:
-    main:
-        parent: Flink
-        weight: 200
----
-# Flink DDL
-
-## Create catalogs
-
-### Flink SQL
-The following statement can be executed to create a Flink catalog:
-
-```sql
-CREATE CATALOG <catalog_name> WITH (
-  'type'='arctic',
-  `<config_key>`=`<config_value>`
-); 
-```
-
-Where `<catalog_name>` is the user-defined name of the Flink catalog, and `<config_key>`=`<config_value>` has the following configurations:
-
-| Key                                    | Default Value | Type    | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                  [...]
-|----------------------------------------|---------------|---------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
-| metastore.url                          | (none)        | String  | Yes      | The URL for Amoro Metastore is thrift://`<ip>`:`<port>`/`<catalog_name_in_metastore>`.<br>If high availability is enabled for AMS, it can also be specified in the form of zookeeper://{zookeeper-server}/{cluster-name}/{catalog-name}.                                                                                                                                                                                     [...]
-| default-database<img width=100/>       | default       | String  | No       | The default database to use                                                                                                                                                                                                                                                                                                                                                                                                  [...]
-| property-version                       | 1             | Integer | No       | Catalog properties version, this option is for future backward compatibility                                                                                                                                                                                                                                                                                                                                                 [...]
-
-The authentication information of AMS catalog can upload configuration files on AMS website,
-or specify the authentication information and configuration file paths when creating catalogs with Flink DDL
-
-| Key                                    | Default Value | Type    | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                  [...]
-|----------------------------------------|---------------|---------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
-| properties.auth.load-from-ams          | True          | BOOLEAN | No       | Whether to load security verification configuration from AMS. <br>True: load from AMS; <br>false: do not use AMS configuration. <br>Note: regardless of whether this parameter is configured, as long as the user has configured the auth.*** related parameters below, this configuration will be used for access.                                                                                                          [...]
-| properties.auth.type                   | (none)        | String  | No       | Table security verification type, valid values: simple, kerberos, or not configured. Default not configured, no permission check is required. simple: use the hadoop username, used in conjunction with the parameter 'properties.auth.simple.hadoop_username'; kerberos: configure kerberos permission verification, used in conjunction with the parameters 'properties.auth.kerberos.principal', 'properties.auth.kerbero [...]
-| properties.auth.simple.hadoop_username | (none)        | String  | No       | Access using this hadoop username, required when 'properties.auth.type'='simple'.                                                                                                                                                                                                                                                                                                                                            [...]
-| properties.auth.kerberos.principal     | (none)        | String  | No       | Configuration of kerberos principal, required when 'properties.auth.type'='kerberos'.                                                                                                                                                                                                                                                                                                                                        [...]
-| properties.auth.kerberos.krb.path      | (none)        | String  | No       | The absolute path to the krb5.conf configuration file for kerberos (the local file path of the Flink SQL submission machine, if the SQL task is submitted with the Flink SQL Client, the path is the local path of the same node, e.g. /XXX/XXX/krb5.conf).' required if 'properties.auth.type' = 'kerberos'.                                                                                                                [...]
-| properties.auth.kerberos.keytab.path   | (none)        | String  | No       | The absolute path to the XXX.keytab configuration file for kerberos (the local file path of the Flink SQL submission machine, if the SQL task is submitted with the Flink SQL Client, the path is the local path of the same node, e.g. /XXX/XXX/XXX.keytab).' required if 'properties.auth.type' = 'kerberos'.                                                                                                              [...]
-
-
-### YAML configuration
-Refer to the Flink SQL Client [official configuration](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/sqlClient.html#environment-files).
-Modify the `conf/sql-client-defaults.yaml` file in the Flink directory.
-```yaml
-catalogs:
-- name: <catalog_name>
-  type: arctic
-  metastore.url: ...
-  ...
-```
-
-## CREATE statement
-
-### CREATE DATABASE
-By default, the default-database configuration (default value: default) when creating catalog is used. You can create a database using the following example:
-
-```sql
-CREATE DATABASE [catalog_name.]arctic_db;
-
-USE arctic_db;
-```
-
-### CREATE TABLE
-
-```sql
-CREATE TABLE `arctic_catalog`.`arctic_db`.`test_table` (
-    id BIGINT,
-    name STRING,
-    op_time TIMESTAMP,
-    PRIMARY KEY (id) NOT ENFORCED
-) WITH (
-    'key' = 'value'
-);
-```
-
-Currently, most of the syntax supported by [Flink SQL create table](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/sql/create.html#create-table) is supported, including:
-
-- PARTITION BY (column1, column2, …): configure Flink partition fields, but Flink does not yet support hidden partitions.
-- PRIMARY KEY (column1, column2, …): configure primary keys.
-- WITH ('key'='value', …): configure Amoro Table properties.
-
-Currently, configuration of computed columns and watermark fields is not supported.
-
-#### PARTITIONED BY
-Create a partitioned table using PARTITIONED BY.
-```sql
-CREATE TABLE `arctic_catalog`.`arctic_db`.`test_table` (
-    id BIGINT,
-    name STRING,
-    op_time TIMESTAMP
-) PARTITIONED BY(op_time) WITH (
-    'key' = 'value'
-);
-```
-Amoro tables support hidden partitions, but Flink does not support function-based partitions. Therefore, currently only partitions with the same value can be created through Flink SQL.
-
-Alternatively, tables can be created without creating a Flink catalog:
-```sql
-CREATE TABLE `test_table` (
-    id BIGINT,
-    name STRING,
-    op_time TIMESTAMP,
-    PRIMARY KEY (id) NOT ENFORCED
-) WITH (
-    'connector' = 'arctic',
-    'metastore.url' = '',
-    'arctic.catalog' = '',
-    'arctic.database' = '',
-    'arctic.table' = ''
-);
-```
-where `<metastore.url>` is the URL of the Amoro Metastore, and `arctic.catalog`, `arctic.database` and `arctic.table` are the catalog name, database name and table name of this table under the AMS, respectively.
-
-### CREATE TABLE LIKE
-Create a table with the same table structure, partitions, and table properties as an existing table. This can be achieved using CREATE TABLE LIKE.
-
-```sql
-CREATE TABLE `arctic_catalog`.`arctic_db`.`test_table` (
-    id BIGINT,
-    name STRING,
-    op_time TIMESTAMP
-);
-
-CREATE TABLE  `arctic_catalog`.`arctic_db`.`test_table_like` 
-    LIKE `arctic_catalog`.`arctic_db`.`test_table`;
-```
-Further details can be found in [Flink create table like](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/sql/create.html#like)
-
-## DROP statement
-
-### DROP DATABASE
-
-```sql
-DROP DATABASE catalog_name.arctic_db
-```
-
-### DROP TABLE
-```sql
-DROP TABLE `arctic_catalog`.`arctic_db`.`test_table`;
-```
-
-## SHOW statement
-
-### SHOW DATABASES
-View all database names under the current catalog:
-```sql
-SHOW DATABASES;
-```
-
-### SHOW TABLES
-View all table names in the current database:
-```sql
-SHOW TABLES;
-```
-
-### SHOW CREATE TABLE
-View table details:
-```sql
-SHOW CREATE TABLE;
-```
-
-## DESC statement
-View table description:
-```sql
-DESC TABLE;
-```
-
-## ALTER statement
-Not supported at the moment
-
-## Supported types
-
-### Mixed-Hive data types
-
-| Flink Data Type | Hive Data Type |
-|-----------------|----------------|
-| STRING          | CHAR(p)        |
-| STRING          | VARCHAR(p)     |
-| STRING          | STRING         |
-| BOOLEAN         | BOOLEAN        |
-| INT             | TINYINT        |
-| INT             | SMALLINT       |
-| INT             | INT            |
-| BIGINT          | BIGINT         |
-| FLOAT           | FLOAT          |
-| DOUBLE          | DOUBLE         |
-| DECIMAL(p, s)   | DECIMAL(p, s)  |
-| DATE            | DATE           |
-| TIMESTAMP(6)    | TIMESTAMP      |
-| VARBINARY       | BINARY         |
-| ARRAY<T>        | ARRAY<T>       |
-| MAP<K, V>       | MAP<K, V>      |
-| ROW             | STRUCT         |
-
-
-### Mixed-Iceberg data types
-| Flink Data Type                   | Mixed-Iceberg Data Type |
-|-----------------------------------|-------------------------|
-| CHAR(p)                           | STRING                  |
-| VARCHAR(p)                        | STRING                  |
-| STRING                            | STRING                  |
-| BOOLEAN                           | BOOLEAN                 |
-| TINYINT                           | INT                     |
-| SMALLINT                          | INT                     |
-| INT                               | INT                     |
-| BIGINT                            | LONG                    |
-| FLOAT                             | FLOAT                   |
-| DOUBLE                            | DOUBLE                  |
-| DECIMAL(p, s)                     | DECIMAL(p, s)           |
-| DATE                              | DATE                    |
-| TIMESTAMP(6)                      | TIMESTAMP               |
-| TIMESTAMP(6) WITH LOCAL TIME ZONE | TIMESTAMPTZ             |
-| BINARY(p)                         | FIXED(p)                |
-| BINARY(16)                        | UUID                    |
-| VARBINARY                         | BINARY                  |
-| ARRAY<T>                          | ARRAY<T>                |
-| MAP<K, V>                         | MAP<K, V>               |
-| ROW                               | STRUCT                  |
-| MULTISET<T>                       | MAP<T, INT>             |
\ No newline at end of file
diff --git a/amoro-docs/content/engines/flink/flink-dml.md b/amoro-docs/content/engines/flink/flink-dml.md
deleted file mode 100644
index 94f00e3..0000000
--- a/amoro-docs/content/engines/flink/flink-dml.md
+++ /dev/null
@@ -1,186 +0,0 @@
----
-title: "Flink DML"
-url: flink-dml
-aliases:
-    - "flink/dml"
-menu:
-    main:
-        parent: Flink
-        weight: 300
----
-# Flink DML
-
-## Querying with SQL
-Amoro tables support reading data in stream or batch mode through Flink SQL. You can switch modes using the following methods:
-```sql
--- Run Flink tasks in streaming mode in the current session
-SET execution.runtime-mode = streaming;
-
--- Run Flink tasks in batch mode in the current session
-SET execution.runtime-mode = batch;
-```
-### Batch mode
-Use batch mode to read full and incremental data from FileStore.
-
-> **TIPS**
->
-> LogStore does not support bounded reading.
-
-```sql
--- Run Flink tasks in batch mode in the current session
-SET execution.runtime-mode = batch;
-
--- Enable dynamic table parameter configuration to make hint options configured in Flink SQL effective
-SET table.dynamic-table-options.enabled=true;
-```
-
-### Batch mode (non-primary key table)
-
-Non-primary key tables support reading full data in batch mode, specifying snapshot data with snapshot-id or timestamp, and specifying the incremental data of the snapshot interval.
-
-```sql
--- Read full data
-SELECT * FROM unkeyed /*+ OPTIONS('streaming'='false')*/;
-
--- Read specified snapshot data
-SELECT * FROM unkeyed /*+ OPTIONS('snapshot-id'='4411985347497777546')*/;
-```
-The supported parameters for bounded reads of non-primary-key tables in BaseStore include:
-
-| Key                         | Default Value | Type   | Required | Description                                                                                                                                                                                                                                                                                                                                                                                        |
-|-----------------------------|---------------|--------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| snapshot-id<img width=100/> | (none)        | Long   | No       | Reading the full data of a specific snapshot only works when streaming is set to false.                                                                                                                                                                                                                                                                                                            |
-| as-of-timestamp             | (none)        | Long   | No       | Reading the full data of the latest snapshot taken before the specified timestamp only works when streaming is set to false.                                                                                                                                                                                                                                                                       |
-| start-snapshot-id           | (none)        | Long   | No       | When streaming is set to false, you need to specify the end-snapshot-id to read the incremental data within two intervals (snapshot1, snapshot2]. When streaming is set to true, you can read the incremental data after the specified snapshot. If not specified, it will read the incremental data after the current snapshot (excluding the current one).                                       |
-| end-snapshot-id             | (none)        | Long   | No       | When streaming is set to false, you need to specify the start-snapshot-id to read the incremental data within two intervals (snapshot1, snapshot2].                                                                                                                                                                                                                                                |
-| other table parameters      | (none)        | String | No       | All parameters of an Amoro table can be dynamically modified through SQL Hint, but only for the current task. For a list of specific parameters, please refer to [Table Configurations](../configurations/). For permissions-related configurations on the catalog, they can also be configured in Hint using parameters such as [properties.auth.XXX in catalog DDL](../flink-ddl/#flink-sql) |
-
-### Batch mode (primary key table)
-```sql
--- Merge on Read the current mixed-format table and return append-only data.
-SELECT * FROM keyed /*+ OPTIONS('streaming'='false', 'scan.startup.mode'='earliest')*/;
-```
-
-### Streaming mode
-Amoro supports reading incremental data from FileStore or LogStore in streaming mode.
-
-### Streaming mode (LogStore)
-
-```sql
--- Run Flink tasks in streaming mode in the current session
-SET execution.runtime-mode = streaming;
-
--- Enable dynamic table parameter configuration to make hint options configured in Flink SQL effective
-SET table.dynamic-table-options.enabled=true;
-
-SELECT * FROM test_table /*+ OPTIONS('arctic.read.mode'='log') */;
-```
-The following Hint Options are supported:
-
-| Key                                | Default Value | Type    | Required                                                                                                                                       | Description                                                                                                                                                                                                                                                                                [...]
-|------------------------------------|---------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
-| arctic.read.mode                   | file          | String  | No                                                                                                                                             | To specify the type of data to read from an Amoro table, either File or Log, use the arctic.read.mode parameter. If the value is set to log, the Log configuration must be enabled.                                                                                                        [...]
-| scan.startup.mode<img width=90/>   | latest        | String  | No                                                                                                                                             | The valid values are 'earliest', 'latest', 'timestamp', 'group-offsets' and 'specific-offsets'. <br> 'earliest' reads the data from the earliest offset possible.<br> 'latest' reads the data from the latest offset. <br>'timestamp' reads from a specified time position, which requires [...]
-| scan.startup.timestamp-millis      | (none)        | Long    | No                                                                                                                                             | Valid when 'scan.startup.mode' = 'timestamp', reads data from the specified Kafka time with a millisecond timestamp starting at 00:00:00.000 GMT on 1 Jan 1970                                                                                                                             [...]
-| scan.startup.specific-offsets      | (none)        | String  | No                                                                                                                                             | specify offsets for each partition in case of 'specific-offsets' startup mode, e.g. 'partition:0,offset:42;partition:1,offset:300'.                                                                                                                                                        [...]
-| properties.group.id                | (none)        | String  | If the LogStore for an Amoro table is Kafka, it is mandatory to provide its details while querying the table. Otherwise, it can be left empty. | The group id used to read the Kafka Topic                                                                                                                                                                                                                                                  [...]
-| properties.pulsar.admin.adminUrl   | (none)        | String  | Required if LogStore is pulsar, otherwise not required                                                                                         | Pulsar admin 的 HTTP URL,如:http://my-broker.example.com:8080                                                                                                                                                                                                                                [...]
-| properties.*                       | (none)        | String  | No                                                                                                                                             | Parameters for Logstore: <br>For Logstore with Kafka ('log-store.type'='kafka' default value), all other parameters supported by the Kafka Consumer can be set by prefixing properties. to the parameter name, for example, 'properties.batch.size'='16384'. The complete parameter inform [...]
-| log.consumer.changelog.modes       | all-kinds     | String  | No                                                                                                                                             | The type of RowKind that will be generated when reading log data, supports: all-kinds, append-only.<br>all-kinds: will read cdc data, including +I/-D/-U/+U;<br>append-only: will only generate Insert data, recommended to use this configuration when reading without primary key.       [...]
-| log-store.kafka.compatible.enabled | false         | Boolean | No                                                                                                                                             | Compatible with LogStore Kafka's deprecated Source API; this parameter must be set to true when Flink tasks reading Logstore kafka need to be upgraded to Amoro version 0.4.1 and above with state, otherwise a state incompatibility exception will be encountered.                       [...]
-
-> **Notes**
->
-> - When log-store.type = pulsar, the parallelism of the Flink task cannot be less than the number of partitions in the Pulsar topic, otherwise some partition data cannot be read.
-> - When the number of topic partitions in log-store is less than the parallelism of the Flink task, some Flink subtasks will be idle. At this time, if the task has a watermark, the parameter table.exec.source.idle-timeout must be configured, otherwise the watermark will not advance. See [official documentation](https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/dev/table/config/#table-exec-source-idle-timeout) for details.
-
-
-### Streaming mode (FileStore non-primary key table)
-
-```sql
--- Run Flink tasks in streaming mode in the current session
-SET execution.runtime-mode = streaming;
-
--- Enable dynamic table parameter configuration to make hint options configured in Flink SQL effective
-SET table.dynamic-table-options.enabled = true;
-
--- Read incremental data after the current snapshot.
-SELECT * FROM unkeyed /*+ OPTIONS('monitor-interval'='1s')*/ ;
-```
-Hint Options
-
-| Key                              | Default Value | Type     | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                             |
-|----------------------------------|---------------|----------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| streaming                        | true          | Boolean  | No       | Reads bounded data or unbounded data in a streaming mode, false: reads bounded data, true: reads unbounded data                                                                                                                                                                                                                                                                                                         |
-| arctic.read.mode                 | file          | String   | No       | To specify the type of data to read from an Amoro table, either File or Log, use the arctic.read.mode parameter. If the value is set to log, the Log configuration must be enabled.                                                                                                                                                                                                                                    |
-| monitor-interval<img width=120/> | 10s           | Duration | No       | The arctic.read.mode = file parameter needs to be set for this to take effect. The time interval for monitoring newly added data files                                                                                                                                                                                                                                                                                  |
-| start-snapshot-id                | (none)        | Long     | No       | To read incremental data starting from a specified snapshot (excluding the data in the start-snapshot-id snapshot), specify the snapshot ID using the start-snapshot-id parameter. If not specified, the reader will start reading from the snapshot after the current one (excluding the data in the current snapshot).                                                                                                |
-| other table parameters           | (none)        | String   | No       | All parameters of an Amoro table can be dynamically modified through SQL Hints, but they only take effect for this specific task. For the specific parameter list, please refer to the [Table Configuration](../configurations/). For permissions-related configurations on the catalog, they can also be configured in Hint using parameters such as [properties.auth.XXX in catalog DDL](./flink-ddl.md#Flink SQL) |
-
-### Streaming Mode (FileStore primary key table)
-
-
-After using CDC (Change Data Capture) to ingest data into the lake, you can use the Flink engine to read both stock data and incremental data in the same task without restarting the task, and ensure consistent data reading. Amoro Source will save the file offset information in the Flink state.
-
-In this way, the task can continue to read data from the last read offset position, ensuring data consistency and being able to process newly arrived incremental data.
-```sql
--- Run Flink tasks in streaming mode in the current session
-SET execution.runtime-mode = streaming;
-
--- Enable dynamic table parameter configuration to make hint options configured in Flink SQL effective
-SET table.dynamic-table-options.enabled = true;
-
--- Incremental unified reading of BaseStore and ChangeStore
-SELECT * FROM keyed /*+ OPTIONS('streaming'='true', 'scan.startup.mode'='earliest')*/;
-```
-
-Hint Options
-
-| Key                    | Default Value | Type   | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                         |
-|------------------------|---------------|--------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| streaming              | true          | String | No       | Reads bounded data or unbounded data in a streaming mode, false: reads bounded data, true: reads unbounded data                                                                                                                                                                                                                                                                                                     |
-| arctic.read.mode       | file          | String | No       | Specifies the data to read from an Amoro table, either file or log. If the value is "log", Log configuration must be enabled                                                                                                                                                                                                                                                                                        |
-| monitor-interval       | 10s           | String | No       | This parameter only takes effect when arctic.read.mode = file. It sets the time interval for monitoring newly added data files                                                                                                                                                                                                                                                                                      |
-| scan.startup.mode      | latest        | String | No       | The valid values are 'earliest', 'latest'. 'earliest' reads the full table data and will continue to read incremental data when streaming=true. 'latest' reads only the data after the current snapshot, not including the data in the current snapshot.                                                                                                                                                            |
-| other table parameters | (none)        | String | No       | All parameters of an Amoro table can be dynamically modified through SQL Hints, but they only take effect for this specific task. For the specific parameter list, please refer to the [Table Configuration](../configurations/). For permissions-related configurations on the catalog, they can also be configured in Hint using parameters such as [properties.auth.XXX in catalog DDL](../flink-ddl/#flink-sql) |
-
-## Writing With SQL
-Amoro tables support writing data to LogStore or FileStore using Flink SQL.
-### INSERT OVERWRITE
-Currently, INSERT OVERWRITE is only supported for non-primary key tables. It replaces the data in the table, and the overwrite operation is atomic. Partitions are dynamically generated from the query statement, and the data in these partitions will be fully replaced.
-
-INSERT OVERWRITE only allows running in Flink Batch mode.
-
-```sql
-INSERT OVERWRITE unkeyed VALUES (1, 'a', '2022-07-01');
-```
-
-```sql
--- It is also possible to overwrite data for a specific partition:
-
-INSERT OVERWRITE `arctic_catalog`.`arctic_db`.`unkeyed` PARTITION(data='2022-07-01') SELECT 5, 'b';
-```
-For non-partitioned tables, INSERT OVERWRITE will overwrite the entire data in the table.
-### INSERT INTO
-For Amoro tables, it is possible to specify whether to write data to FileStore or LogStore.
-
-For Amoro primary key tables, writing to FileStore will also write CDC data to the ChangeStore.
-```sql
-INSERT INTO `arctic_catalog`.`arctic_db`.`test_table` 
-    /*+ OPTIONS('arctic.emit.mode'='log,file') */
-SELECT id, name from `source`;
-```
-
-Hint Options
-
-| Key                                              | Default Value | Type     | Required                                                                                                                         | Description                                                                                                                                                                                                                                                                               [...]
-|--------------------------------------------------|---------------|----------|----------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
-| arctic.emit.mode                                 | auto          | String   | No                                                                                                                               | Data writing modes currently supported are: file, log, and auto. For example: 'file' means data is only written to the Filestore. 'log' means data is only written to the Logstore. 'file,log' means data is written to both the Filestore and the Logstore. 'auto' means data is written [...]
-| arctic.emit.auto-write-to-logstore.watermark-gap | (none)        | Duration | No                                                                                                                               | This feature is only enabled when 'arctic.emit.mode'='auto'. If the watermark of the Amoro writers is greater than the current system timestamp minus a specific value, the writers will also write data to the Logstore. The default setting is to enable the Logstore writer immediatel [...]
-| log.version                                      | v1            | String   | No                                                                                                                               | The log data format currently has only one version, so it can be left empty                                                                                                                                                                                                               [...]
-| sink.parallelism                                 | (none)        | String   | No                                                                                                                               | The parallelism for writing to the Filestore and Logstore is determined separately. The parallelism for submitting the file operator is always 1.                                                                                                                                         [...]
-| write.distribution-mode                          | hash          | String   | No                                                                                                                               | The distribution modes for writing to the Amoro table include: none and hash.                                                                                                                                                                                                             [...]
-| write.distribution.hash-mode                     | auto          | String   | No                                                                                                                               | The hash strategy for writing to an Amoro table only takes effect when write.distribution-mode=hash. The available options are: primary-key, partition-key, primary-partition-key, and auto. primary-key: Shuffle by primary key partition-key: Shuffle by partition key primary-partitio [...]
-| properties.pulsar.admin.adminUrl                 | (none)        | String   | If the LogStore is Pulsar and it is required for querying, it must be filled in, otherwise it can be left empty.<img width=100/> | The HTTP URL for Pulsar Admin is in the format: http://my-broker.example.com:8080.                                                                                                                                                                                                        [...]
-| properties.*                                     | (none)        | String   | No                                                                                                                               | Parameters for Logstore: For Logstore with Kafka ('log-store.type'='kafka' default value), all other parameters supported by the Kafka Consumer can be set by prefixing properties. to the parameter name, for example, 'properties.batch.size'='16384'. The complete parameter informati [...]
-| other table parameters                           | (none)        | String   | No                                                                                                                               | All parameters of an Amoro table can be dynamically modified through SQL Hints, but they only take effect for this specific task. For the specific parameter list, please refer to the [Table Configuration](../configurations/). For permissions-related configurations on the catalog,  [...]
\ No newline at end of file
diff --git a/amoro-docs/content/engines/flink/flink-ds.md b/amoro-docs/content/engines/flink/flink-ds.md
deleted file mode 100644
index c4983a5..0000000
--- a/amoro-docs/content/engines/flink/flink-ds.md
+++ /dev/null
@@ -1,211 +0,0 @@
----
-title: "Flink DataStream"
-url: flink-datastream
-aliases:
-    - "flink/datastream"
-menu:
-    main:
-        parent: Flink
-        weight: 400
----
-# Flink DataStream
-
-## Reading with DataStream
-Amoro supports reading data in Batch or Streaming mode through Java API.
-
-### Batch mode
-Using Batch mode to read the full and incremental data in the FileStore.
-
-- Non-primary key tables support reading full data in batch mode, snapshot data with a specified snapshot-id or timestamp, and incremental data with a specified snapshot interval.
-- The primary key table temporarily only supports reading the current full amount and later CDC data.
-
-```java
-StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
-InternalCatalogBuilder catalogBuilder =
-    InternalCatalogBuilder
-        .builder()
-        .metastoreUrl("thrift://<url>:<port>/<catalog_name>");
-
-TableIdentifier tableId = TableIdentifier.of("catalog_name", "database_name", "test_table");
-AmoroTableLoader tableLoader = AmoroTableLoader.of(tableId, catalogBuilder);
-
-Map<String, String> properties = new HashMap<>();
-//  Default is true.
-properties.put("streaming", "false");
-
-DataStream<RowData> batch = 
-    FlinkSource.forRowData()
-        .env(env)
-        .tableLoader(tableLoader)
-        // The primary key table only supports reading the current full amount and later CDC data temporarily, without the properties parameter .
-        .properties(properties)
-        .build();
-
-// print All data read
-batch.print();
-
-// Submit and execute the task
-env.execute("Test Amoro Batch Read");
-``` 
-
-The map properties contain below keys, **currently only valid for non-primary key tables**:
-
-| Key|Default|Type|Required|Description| 
-|--- |--- |--- |--- |--- |
-|case-sensitive|false|Boolean|No|Case-sensitive| 
-|snapshot-id |(none)|Long|No|Read the full amount of data of the specified snapshot, only effective when streaming is false or not configured| 
-|as-of-timestamp|(none)|String|No|Read the last time less than the timestamp The full amount of snapshot data is valid only when streaming is false or not configured | 
-|start-snapshot-id|(none)|String|No| When streaming is false, end-snapshot-id needs to be used to read the two intervals Incremental data (snapshot1, snapshot2]. When streaming is true, read the incremental data after the snapshot, if not specified, read the incremental data after the current snapshot (not including the current one) | 
-|end-snapshot-id|(none )|String|No|Need to cooperate with start-snapshot-id to read incremental data in two intervals (snapshot1, snapshot2]| 
-
-### Streaming mode
-Amoro supports reading incremental data in FileStore or LogStore through Java API in Streaming mode
-
-### Streaming mode (LogStore)
-```java 
-StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
-InternalCatalogBuilder catalogBuilder = 
-    InternalCatalogBuilder
-        .builder()
-        .metastoreUrl("thrift://<url>:<port>/<catalog_name>");
-
-TableIdentifier tableId = TableIdentifier.of("catalog_name", "database_name", "test_table");
-AmoroTableLoader tableLoader = AmoroTableLoader.of(tableId, catalogBuilder);
-
-AmoroTable table = AmoroUtils.load(tableLoader);
-// Read table All fields. If you only read some fields, you can construct the schema yourself, for example: 
-// Schema userSchema = new Schema(new ArrayList<Types.NestedField>() {{
-//   add(Types.NestedField.optional(0, "f_boolean", Types.BooleanType.get()));
-//   add(Types.NestedField.optional(1, "f_int", Types.IntegerType.get()));
-// }});
-Schema schema = table.schema();
-
-// -----------Hidden Kafka--------------
-LogKafkaSource source = LogKafkaSource.builder(schema, table.properties()).build();
-
-or
-
-// -----------Hidden Pulsar--------------
-LogPulsarSource source = LogPulsarSource.builder(schema, table.properties()).build();
-
-DataStream<RowData> stream = env.fromSource(source, WatermarkStrategy.noWatermarks(), "Log Source");
-
-// Print all the read data
-stream.print();
-
-// Submit and execute the task
-env.execute("Test Amoro Stream Read");
-```
-
-### Streaming mode (FileStore)
-```java 
-StreamExecutionEnvironment env = ...;
-InternalCatalogBuilder catalogBuilder = ...;
-TableIdentifier tableId = ...;
-AmoroTableLoader tableLoader = ...;
-
-Map<String, String> properties = new HashMap<>();
-// default is true 
-properties.put("streaming", "true");
-
-DataStream<RowData> stream = 
-    FlinkSource.forRowData()
-        .env(env)
-        .tableLoader(tableLoader)
-        // The primary key table only supports reading the current full amount and later CDC data for the time being, without the properties parameter
-        .properties(properties)
-        .build();
-
-// Print All read data 
-stream.print();
-
-// Submit and execute the task
-env.execute("Test Amoro Stream Read");
-
-StreamExecutionEnvironment env = ...; 
-InternalCatalogBuilder catalogBuilder = ...; 
-TableIdentifier tableId = ...; 
-AmoroTableLoader tableLoader = ...; 
-Map properties = new HashMap<>(); 
-// default is true properties.put("streaming", "true"); 
-DataStream stream = 
-    FlinkSource.forRowData() 
-        .env(env) 
-        .tableLoader(tableLoader) 
-        // The primary key table only supports reading the current full amount and later CDC data for the time being, without the properties parameter
-        .properties(properties) 
-        .build(); 
-
-// print All read data 
-stream.print(); 
-
-// Submit and execute the task 
-env.execute("Test Amoro Stream Read"); 
-``` 
-DataStream API supports reading primary key tables and non-primary key tables. The configuration items supported by properties can refer to Querying With SQL [chapter Hint Option](../flink-dml/)
-
-## Writing with DataStream
-Amoro table supports writing data to LogStore or FileStore through Java API
-
-### Overwrite data
-Amoro table currently Only supports the existing data in the dynamic Overwrite table of the non-primary key table
-
-```java
-DataStream<RowData> input = ...;
-InternalCatalogBuilder catalogBuilder = ...;
-TableIdentifier tableId = ...;
-AmoroTableLoader tableLoader = ...;
-
-TableSchema FLINK_SCHEMA = TableSchema.builder()
-    .field("id", DataTypes.INT())
-    .field("name", DataTypes.STRING())
-    .field("op_time", DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE())
-    .build();
-
-FlinkSink
-    .forRowData(input)
-    .tableLoader(tableLoader)
-    .overwrite(true)
-    .flinkSchema(FLINK_SCHEMA)
-    .build();
-
-// Submit and execute the task
-env.execute("Test Amoro Overwrite");
-DataStream input = ...; InternalCatalogBuilder catalogBuilder = ...; TableIdentifier tableId = ...; AmoroTableLoader tableLoader = ...; TableSchema FLINK_SCHEMA = TableSchema.builder() .field("id", DataTypes.INT()) .field ("name", DataTypes.STRING()) .field("op_time", DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE()) .build(); FlinkSink .forRowData(input) .tableLoader(tableLoader) .overwrite(true) .flinkSchema(FLINK_SCHEMA) .build(); // Submit and execute the task env.execute(“Test Amoro Overw [...]
-```
-
-### Appending data
-For the Amoro table, it supports specifying to write data to FileStore or LogStore through Java API.
-
-```java
-DataStream<RowData> input = ...;
-InternalCatalogBuilder catalogBuilder = ...;
-TableIdentifier tableId = ...;
-AmoroTableLoader tableLoader = ...;
-
-TableSchema FLINK_SCHEMA = TableSchema.builder()
-    .field("id", DataTypes.INT())
-    .field("name", DataTypes.STRING())
-    .field("op_time", DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE())
-    .build();
-
-AmoroTable table = AmoroUtils.loadAmoroTable(tableLoader);
-
-table.properties().put("arctic.emit.mode", "log,file");
-
-FlinkSink
-    .forRowData(input)
-    .table(table)
-    .tableLoader(tableLoader)
-    .flinkSchema(FLINK_SCHEMA)
-    .build();
-
-env.execute("Test Amoro Append");
-```
-The DataStream API supports writing to primary key tables and non-primary key tables. The configuration items supported by properties can refer to Writing With SQL [chapter Hint Options](../flink-dml/)
-
-> **TIPS**
->
-> arctic.emit.mode contains log, you need to configure log-store.enabled = true [Enable Log Configuration](../flink-dml/)
->
-> arctic.emit.mode When file is included, the primary key table will only be written to ChangeStore, and the non-primary key table will be directly written to BaseStore.
\ No newline at end of file
diff --git a/amoro-docs/content/engines/flink/flink-get-started.md b/amoro-docs/content/engines/flink/flink-get-started.md
deleted file mode 100644
index 7a6e0ec..0000000
--- a/amoro-docs/content/engines/flink/flink-get-started.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-title: "Flink Getting Started"
-url: flink-getting-started
-aliases:
-    - "flink/getting-started"
-menu:
-    main:
-        parent: Flink
-        weight: 100
----
-# Flink Getting Started
-
-## Iceberg format
-
-The Iceberg Format can be accessed using the Connector provided by Iceberg.
-Refer to the documentation at [Iceberg Flink user manual](https://iceberg.apache.org/docs/latest/flink-connector/)
-for more information.
-
-## Paimon format
-
-The Paimon Format can be accessed using the Connector provided by Paimon.
-Refer to the documentation at [Paimon Flink user manual](https://paimon.apache.org/docs/master/engines/flink/)
-for more information.
-
-## Mixed format
-The Apache Flink engine can process Amoro table data in batch and streaming mode. The Flink on Amoro connector provides the ability to read and write to the Amoro data lake while ensuring data consistency. To meet the high real-time data requirements of businesses, the Amoro data lake's underlying storage structure is designed with LogStore, which stores the latest changelog or append-only real-time data.
-
-Amoro integrates the DataStream API and Table API of [Apache Flink](https://flink.apache.org/) to facilitate the use of Flink to read data from Amoro tables or write data to Amoro tables.
-
-Flink Connector includes:
-
-- `Flink SQL Select` reads Amoro table data through Apache Flink SQL.
-- `Flink SQL Insert` writes data to Amoro tables through Apache Flink SQL.
-- `Flink SQL DDL` creates/modifies/deletes libraries and tables through Apache Flink DDL statements.
-- `FlinkSource` reads Amoro table data through Apache Flink DS API.
-- `FlinkSink` writes data to Amoro tables through Apache Flink DS API.
-- `Flink Lookup Join` performs real-time read of Amoro table data for association calculation through Apache Flink Temporal Join grammar.
-
-Version Description:
-
-| Connector Version | Flink Version | Dependent Iceberg Version                                                                                                                |
-| ----------------- |---------------|  ----------------- |
-| 0.6.0             | 1.15.x        | 1.3.0            |
-| 0.6.0             | 1.16.x        | 1.3.0            |
-| 0.6.0             | 1.17.x        | 1.3.0            |
-
-The Amoro project can be self-compiled to obtain the runtime jar.
-
-`mvn clean package -pl ':amoro-flink-runtime-1.15' -am -DskipTests`
-
-The Flink Runtime Jar is located in the `flink/v1.15/flink-runtime/target` directory.
-
-## Environment preparation
-Download Flink and related dependencies, and download Flink 1.15/1.16/1.17 as needed. Taking Flink 1.15 as an example:
-```shell
-# Replace version value with the latest Amoro version if needed
-AMORO_VERSION=0.6.0
-FLINK_VERSION=1.15.3
-FLINK_MAJOR_VERSION=1.15
-FLINK_HADOOP_SHADE_VERSION=2.7.5
-APACHE_FLINK_URL=archive.apache.org/dist/flink
-MAVEN_URL=https://repo1.maven.org/maven2
-FLINK_CONNECTOR_URL=${MAVEN_URL}/org/apache/flink
-AMORO_CONNECTOR_URL=${MAVEN_URL}/com/netease/amoro
-
-# Download FLink binary package
-wget ${APACHE_FLINK_URL}/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-scala_2.12.tgz
-# Unzip Flink binary package
-tar -zxvf flink-${FLINK_VERSION}-bin-scala_2.12.tgz
-
-cd flink-${FLINK_VERSION}
-# Download Flink Hadoop dependency
-wget ${FLINK_CONNECTOR_URL}/flink-shaded-hadoop-2-uber/${FLINK_HADOOP_SHADE_VERSION}-10.0/flink-shaded-hadoop-2-uber-${FLINK_HADOOP_SHADE_VERSION}-10.0.jar
-# Download Flink Amoro Connector
-wget ${AMORO_CONNECTOR_URL}/amoro-flink-runtime-${FLINK_MAJOR_VERSION}/${AMORO_VERSION}/amoro-flink-runtime-${FLINK_MAJOR_VERSION}-${AMORO_VERSION}.jar
-
-# Copy the necessary JAR files to the lib directory
-mv flink-shaded-hadoop-2-uber-${FLINK_HADOOP_SHADE_VERSION}-10.0.jar lib
-mv amoro-flink-runtime-${FLINK_MAJOR_VERSION}-${AMORO_VERSION}.jar lib
-```
-
-Modify Flink related configuration files:
-
-```shell
-cd flink-1.15.3
-vim conf/flink-conf.yaml
-```
-Modify the following settings:
-
-```yaml
-# Increase the number of slots to run two streaming tasks simultaneously
-taskmanager.numberOfTaskSlots: 4
-# Enable Checkpoint. Only when Checkpoint is enabled, the data written to the file is visible
-execution.checkpointing.interval: 10s
-```
-
-Move the dependencies to the lib directory of Flink:
-
-```shell
-# Used to create a socket connector for inputting CDC data via sockets. Not necessary for non-quickstart examples.
-cp examples/table/ChangelogSocketExample.jar lib
-
-cp ../amoro-flink-runtime-${FLINK_MAJOR_VERSION}-${AMORO_VERSION}.jar lib
-cp ../flink-shaded-hadoop-2-uber-${FLINK_HADOOP_SHADE_VERSION}-10.0.jar lib
-```
-
-### Mixed-Hive format
-Starting from Amoro version 0.3.1, Mixed-Hive format is supported, and data in Amoro  Mixed-Hive format tables can be read/written through Flink. When operating on Mixed-Hive format tables through Flink, the following points should be noted:
-
-1. Flink Runtime Jar does not include the content of the Jar packages that Hive depends on. You need to manually put the [Hive-dependent Jar package](https://repo1.maven.org/maven2/org/apache/hive/hive-exec/2.1.1/hive-exec-2.1.1.jar) in the flink/lib directory;
-2. When creating partitioned tables, the partition field needs to be placed in the last column; when there are multiple partition fields, they need to be placed at the end;
-
-## Frequently Asked Questions
-
-**1. Data written to Amoro table is not visible**
-
-You need to enable Flink checkpoint and modify the [Flink checkpoint configuration](https://nightlies.apache.org/flink/flink-docs-release-1.12/deployment/config.html#execution-checkpointing-interval) in Flink conf. The data will only be committed during checkpoint.
-
-**2. When using Flink SQL-Client to read Amoro tables with write.upsert feature enabled, there are still duplicate primary key data**
-
-The query results obtained through Flink SQL-Client cannot provide MOR semantics based on primary keys. If you need to obtain merged results through Flink engine queries, you can write the content of Amoro tables to a MySQL table through JDBC connector for viewing.
-
-**3. When writing to Amoro tables with write.upsert feature enabled through SQL-Client under Flink 1.15, there are still duplicate primary key data**
-
-You need to execute the command `set table.exec.sink.upsert-materialize = none` in SQL-Client to turn off the upsert materialize operator generated upsert view. This operator will affect the AmoroWriter's generation of delete data when the write.upsert feature is enabled, causing duplicate primary key data to not be merged.
\ No newline at end of file
diff --git a/amoro-docs/content/engines/flink/using-logstore.md b/amoro-docs/content/engines/flink/using-logstore.md
deleted file mode 100644
index 6051fcd..0000000
--- a/amoro-docs/content/engines/flink/using-logstore.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: "Using Logstore"
-url: flink-using-logstore
-aliases:
-    - "flink/using-logstore"
-menu:
-    main:
-        parent: Flink
-        weight: 500
----
-# Using Logstore
-Due to the limitations of traditional offline data warehouse architectures in supporting real-time business needs, real-time data warehousing has experienced rapid evolution in recent years. In the architecture of real-time data warehousing, Apache Kafka is often used as the storage system for real-time data. However, this also brings about the issue of data disconnection between offline data warehouses.
-
-Developers often need to pay attention to data stored in HDFS as well as data in Kafka, which increases the complexity of business development. Therefore, Amoro proposes the addition of an optional parameter, "LogStore enabled" (`log-store.enabled`), to the table configuration. This allows for retrieving data with sub-second and minute-level latency by operating on a single table while ensuring the eventual consistency of data from both sources.
-
-## Real-Time data in LogStore
-Amoro tables provide two types of storage: FileStore and LogStore. FileStore stores massive full data, while LogStore stores real-time incremental data.
-
-Real-time data can provide second-level data visibility and ensure data consistency without enabling LogStore transactions.
-
-Its underlying storage system can be connected to external message queuing middleware, currently supporting only Kafka and Pulsar.
-
-Users can enable LogStore by configuring the following parameters when creating an Amoro table. For specific configurations, please refer to [LogStore related configurations](../configurations/#logstore-configurations).
-
-## Overview
-
-| Flink      | Kafka    |
-|------------|----------|
-| Flink 1.15 | &#x2714; |
-| Flink 1.16 | &#x2714; |
-| Flink 1.17 | &#x2714; |
-
-Kafka as LogStore Version Description:
-
-| Flink Version | Kafka Versions |
-|---------------|  ----------------- |
-| 1.15.x        | 0.10.2.\*<br> 0.11.\*<br> 1.\*<br> 2.\*<br> 3.\*            | 
-| 1.16.x        | 0.10.2.\*<br> 0.11.\*<br> 1.\*<br> 2.\*<br> 3.\*            | 
-| 1.17.x        | 0.10.2.\*<br> 0.11.\*<br> 1.\*<br> 2.\*<br> 3.\*            | 
-
-
-
-### Prerequisites for using LogStore
-
-When creating an Amoro table, LogStore needs to be enabled.
-
-- You can create a table after selecting a specific Catalog on the Amoro [Dashboard](http://localhost:1630) - Terminal page
-
-```sql
-CREATE TABLE db.log_table (
-    id int,
-    name string,
-    ts timestamp,
-    primary key (id)
-) using arctic
-tblproperties (
-"log-store.enabled" = "true",
-"log-store.topic"="topic_log_test",
-"log-store.address"="localhost:9092"
-);
-```
-
-- You can also use Flink SQL to create tables in Flink-SQL-Client
-
-```sql
--- First use the use catalog command to switch to the arctic catalog.
-CREATE TABLE db.log_table (
-    id int,
-    name string,
-    ts timestamp,
-    primary key (id) not enforced
-) WITH (
-    'log-store.enabled' = 'true',
-    'log-store.topic'='topic_log_test',
-    'log-store.address'='localhost:9092');
-```
-
-### Double write LogStore and FileStore
-
-![Introduce](../images/flink/auto-writer.png)
-
-Amoro Connector writes data to LogStore and ChangeStore at the same time through double-write operations, without opening Kafka transactions to ensure data consistency between the two, because opening transactions will bring a few minutes of delay to downstream tasks (the specific delay time depends on upstream tasks checkpoint interval).
-
-```sql
-INSERT INTO db.log_table /*+ OPTIONS('arctic.emit.mode'='log') */
-SELECT id, name, ts from sourceTable;
-```
-
-> Currently, only the Apache Flink engine implements the dual-write LogStore and FileStore.
diff --git a/amoro-docs/content/engines/spark/spark-conf.md b/amoro-docs/content/engines/spark/spark-conf.md
deleted file mode 100644
index 18f165e..0000000
--- a/amoro-docs/content/engines/spark/spark-conf.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: "Spark Configuration"
-url: spark-configuration
-aliases:
-    - "spark/configuration"
-menu:
-    main:
-        parent: Spark
-        weight: 200
----
-# Spark Configuration
-
-## Catalogs configuration
-
-### Using Mixed-Format in a standalone catalog
-
-Starting from version 3.x, Spark supports configuring an independent Catalog.
-If you want to use a Mixed-Format table in a standalone Catalog, you can configure it as follows:
-
-```properties
-spark.sql.catalog.arctic_catalog=com.netease.arctic.spark.ArcticSparkCatalog
-spark.sql.catalog.arctic_catalog.url=thrift://${AMS_HOST}:${AMS_PORT}/${AMS_CATALOG_NAME_HIVE}
-```
-
-Then, execute the following SQL in the Spark SQL Client to switch to the corresponding catalog.
-
-```sql
-use arctic_catalog;
-```
-
-Of course, you can also access Mixed-Format tables by directly using the triplet
-`arctic_catalog.{db_name}.{table_name}`.
-
-You can also set Spark's default Catalog to your configured Catalog using the following properties.
-In this way, you don't need to use the `use {catalog}` command to switch the default catalog.
-
-```properties
-spark.sql.defaultCatalog=arctic_catalog
-spark.sql.catalog.arctic_catalog=com.netease.arctic.spark.ArcticSparkCatalog
-spark.sql.catalog.arctic_catalog.url=thrift://${AMS_HOST}:${AMS_PORT}/${AMS_CATALOG_NAME_HIVE}
-```
-
-In a standalone AmoroSparkCatalog scenario, only Mixed-Format tables can be created and accessed in the corresponding
-catalog
-
-### Using Mixed-Format in session catalog
-
-If you want to access both existing Hive tables or Spark datasource tables and Mixed-Format tables in Spark,
-you can use the AmoroSparkSessionCatalog as the implementation of the Spark default session catalog.
-The configuration method is as follows.
-
-```properties
-spark.sql.catalog.spark_catalog=com.netease.arctic.spark.ArcticSparkSessionCatalog
-spark.sql.catalog.spark_catalog.url=thrift://${AMS_HOST}:${AMS_PORT}/${AMS_CATALOG_NAME_HIVE}
-```
-
-When using the `ArcticSparkSessionCatalog` as the implementation of the `spark_catalog`, it behaves as follows
-
-- Load Table: When resolving a `db_name.table_name` identifier, it will load the table metadata by Spark's built-in
-  session catalog implementation, and then checking the MixedFormat flag defined in table properties. If the table has
-  the MixedFormat flag, it will be loaded by `ArcticSparkCatalog` again.
-
-- Create Table: The behavior of `CREATE TABLE` is determined by the `using {provider}` clause in the DDL statement. If
-  the clause contains `using arctic`, a Mixed-Format table will be created. Otherwise, the default Spark implementation
-  will be used to create the table.
-
-When using the `ArcticSparkSessionCatalog`, there are several points to keep in mind:
-
-- `ArcticSparkSessionCatalog` can only be configured under the `spark_catalog`
-- The `spark.sql.catalogImplementation` must be configured as `HIVE`
-- Catalogs registered on AMS must use a Metastore of the `Hive` type.
-
-## The high availability configuration
-
-If AMS is configured with high availability, you can configure the `spark.sql.catalog.{catalog_name}.url` property in
-the following way to achieve higher availability.
-
-```properties
-spark.sql.catalog.arctic_catalog=com.netease.arctic.spark.ArcticSparkCatalog
-spark.sql.catalog.arctic_catalog.url=zookeeper://{zookeeper-endpoint-list}/{cluster-name}/{catalog-name}
-```
-
-Among above:
-
-- zookeeper-endpoint-list:  a list of host:port pairs separated by commas. A valid value could
-  be `192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181`
-- cluster-name:  is the value of `ams.cluster.name` configured in the configuration file `config.yml` of AMS, which is
-  used to identify the user space on ZooKeeper.
-- catalog-name: the name of the Catalog on AMS.
diff --git a/amoro-docs/content/engines/spark/spark-ddl.md b/amoro-docs/content/engines/spark/spark-ddl.md
deleted file mode 100644
index 3b9acbe..0000000
--- a/amoro-docs/content/engines/spark/spark-ddl.md
+++ /dev/null
@@ -1,287 +0,0 @@
----
-title: "Spark DDL"
-url: spark-ddl
-aliases:
-    - "spark/ddl"
-menu:
-    main:
-        parent: Spark
-        weight: 300
----
-# Spark DDL
-
-## CREATE TABLE
-
-To create an MixedFormat table under an Amoro Catalog, you can use `USING ARCTIC` to specify the provider in the
-`CREATE TABLE` statement. If the Catalog type is Hive, the created table will be a Hive-compatible table.
-
-```sql
-CREATE TABLE arctic_catalog.db.sample (
-    id bigint  COMMENT "unique id",
-    data string
-) USING arctic 
-```
-
-### PRIMARY KEY
-
-You can use `PRIMARY KEY` in the `CREATE TABLE` statement to specify the primary key column.
-MixedFormat ensures the uniqueness of the primary key column through MOR (Merge on Read) and Self-Optimizing.
-
-```sql
-CREATE TABLE arctic_catalog.db.sample (
-    id bigint  COMMENT "unique id",
-    data string ,
-    PRIMARY KEY (id)
-) USING arctic 
-```
-
-### PARTITIONED BY
-
-Using `PARTITIONED BY` in the `CREATE TABLE` statement to create a table with partition spec.
-
-```sql
-CREATE TABLE arctic_catalog.db.sample (
-    id bigint,
-    data string,
-    category string)
-USING arctic
-PARTITIONED BY (category)
-```
-
-In the `PARTITIONED BY` clause, you can define partition expressions, and Mixed-Iceberg format supports all partition
-expressions in Iceberg.
-
-```sql
-CREATE TABLE arctic_catalog.db.sample (
-    id bigint,
-    data string,
-    category string,
-    ts timestamp, 
-    PRIMARY KEY (id) )
-USING arctic
-PARTITIONED BY (bucket(16, id), days(ts), category)
-```
-
-Supported transformations are:
-
-* years(ts): partition by year
-* months(ts): partition by month
-* days(ts) or date(ts): equivalent to dating partitioning
-* hours(ts) or date_hour(ts): equivalent to dating and hour partitioning
-* bucket(N, col): partition by hashed value mod N buckets
-* truncate(L, col): partition by value truncated to L
-
-      Strings are truncated to the given length
-
-      Integers and longs truncate to bins: truncate(10, i) produces partitions 0, 10, 20, 30, …
-
-> Mixed-Hive format doesn't support transform.
-
-## CREATE TABLE ... AS SELECT
-
-``` 
-CREATE TABLE arctic_catalog.db.sample
-USING arctic
-AS SELECT ...
-```
-
-> The `CREATE TABLE ... AS SELECT` syntax is used to create a table and write the query results to the table. Primary
-> keys, partitions, and properties are not inherited from the source table and need to be configured separately.
-
-> You can enable uniqueness check for the primary key in the source table by setting set
-> `spark.sql.arctic.check-source-data-uniqueness.enabled = true` in Spark SQL. If there are duplicate primary keys, an
-> error will be raised during the write operation.
-
-
-You can use the following syntax to create a table with primary keys, partitions, and properties:
-
-```
-CREATE TABLE arctic_catalog.db.sample
-PRIMARY KEY(id) USING arctic 
-PARTITIONED BY (pt)  
-TBLPROPERTIES (''prop1''=''val1'', ''prop2''=''val2'')
-AS SELECT ...
-```
-
-{{< hint info >}}
-In the current version, `CREATE TABLE ... AS SELECT` does not provide atomicity guarantees.
-{{< /hint >}}
-
-## CREATE TABLE ... LIKE
-
-The `CREATE TABLE ... LIKE` syntax copies the structure of a table, including primary keys and partitions, to a new
-table, but it does not copy the data.
-
-``` 
-USE arctic_catalog;
-CREATE TABLE db.sample
-LIKE db.sample2
-USING arctic
-TBLPROPERTIES ('owner'='xxxx');
-```
-
-> Since `PRIMARY KEY` is not a standard Spark syntax, if the source table is a MixedFormat table with primary keys, the
-> new table can copy the schema information with the primary keys. Otherwise, only schema could be copied.
-
-{{< hint info >}}
-`Create Table Like` only supports the binary form of `db.table` and in the same catalog
-{{< /hint >}}
-
-## REPLACE TABLE ... AS SELECT
-
-> The `REPLACE TABLE ... AS SELECT` syntax only supports tables without primary keys in the current version.
-
-``` 
-REPLACE TABLE arctic_catalog.db.sample
-USING arctic
-AS SELECT ...
-```
-
-> In the current version, `REPLACE TABLE ... AS SELECT` does not provide atomicity guarantees.
-
-## DROP TABLE
-
-```sql
-DROP TABLE arctic_catalog.db.sample;
-```
-
-## TRUNCATE TABLE
-
-The `TRUNCATE TABLE` statement could delete all data in the table.
-
-```sql
-TRUNCATE TABLE arctic_catalog.db.sample;
-```
-
-## ALTER TABLE
-
-The ALTER TABLE syntax supported by Mixed-Format includes:
-
-* ALTER TABLE ... SET TBLPROPERTIES
-* ALTER TABLE ... ADD COLUMN
-* ALTER TABLE ... RENAME COLUMN
-* ALTER TABLE ... ALTER COLUMN
-* ALTER TABLE ... DROP COLUMN
-* ALTER TABLE ... DROP PARTITION
-
-### ALTER TABLE ... SET TBLPROPERTIES
-
-```sql
-ALTER TABLE arctic_catalog.db.sample SET TBLPROPERTIES (
-    'read.split.target-size'='268435456'
-);
-```
-
-Using `UNSET` to remove properties:
-
-```sql
-ALTER TABLE arctic_catalog.db.sample UNSET TBLPROPERTIES ('read.split.target-size');
-```
-
-### ALTER TABLE ... ADD COLUMN
-
-```sql
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMNS (
-    new_column string comment 'new_column docs'
-  );
-```
-
-You can add multiple columns at once, separated by commas.
-
-```sql
--- create a struct column
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMN point struct<x: double, y: double>;
-
--- add a field to the struct
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMN point.z double;
-```
-
-```sql
--- create a nested array column of struct
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMN points array<struct<x: double, y: double>>;
-
--- add a field to the struct within an array. Using keyword 'element' to access the array's element column.
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMN points.element.z double;
-```
-
-```sql
--- create a map column of struct key and struct value
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMN points map<struct<x: int>, struct<a: int>>;
-
--- add a field to the value struct in a map. Using keyword 'value' to access the map's value column.
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMN points.value.b int;
-```
-
-You can add columns at any position by using the `FIRST` or `AFTER` clause.
-
-```sql
-ALTER TABLE arctic_catalog.db.sample
-ADD COLUMN new_column bigint AFTER other_column;
-```
-
-```sql
-ALTER TABLEarctic_catalog.db.sample
-ADD COLUMN nested.new_column bigint FIRST;
-```
-
-### ALTER TABLE ... RENAME COLUMN
-
-```sql
-ALTER TABLE arctic_catalog.db.sample RENAME COLUMN data TO payload;
-```
-
-### ALTER TABLE ... ALTER COLUMN
-
-`"`ALTER COLUMN` can be used to widen types, make fields nullable, set comments, and reorder fields.
-
-```sql
-ALTER TABLE arctic_catalog.db.sample ALTER COLUMN measurement TYPE double;
-```
-
-To add or remove columns from a structure, use `ADD COLUMN` or `DROP COLUMN` with nested column names.
-
-Column comments can also be updated using `ALTER COLUMN`.
-
-```sql
-ALTER TABLE arctic_catalog.db.sample ALTER COLUMN measurement TYPE double COMMENT 'unit is bytes per second';
-ALTER TABLE arctic_catalog.db.sample ALTER COLUMN measurement COMMENT 'unit is kilobytes per second';
-```
-
-You can use the `FIRST` and `AFTER` clauses to reorder top-level or nested columns within a structure.
-
-```sql
-ALTER TABLE arctic_catalog.db.sample ALTER COLUMN col FIRST;
-```
-
-```sql
-ALTER TABLE arctic_catalog.db.sample ALTER COLUMN nested.col AFTER other_col;
-```
-
-### ALTER TABLE ... DROP COLUMN
-
-```sql
-ALTER TABLE arctic_catalog.db.sample DROP COLUMN id;
-ALTER TABLE arctic_catalog.db.sample DROP COLUMN point.z;
-```
-
-### ALTER TABLE ... DROP PARTITION
-
-```sql
-ALTER TABLE arctic_catalog.db.sample DROP IF EXISTS PARTITION (dt=2022);
-```
-
-## DESC TABLE
-
-`DESCRIBE TABLE` returns basic metadata information about a table, including the primary key information for tables that
-have a primary key
-
-```sql
- { DESC | DESCRIBE }  TABLE  arctic_catalog.db.sample;
-```
diff --git a/amoro-docs/content/engines/spark/spark-get-started.md b/amoro-docs/content/engines/spark/spark-get-started.md
deleted file mode 100644
index 2174542..0000000
--- a/amoro-docs/content/engines/spark/spark-get-started.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-title: "Spark Getting Started"
-url: spark-getting-started
-aliases:
-    - "spark/getting-started"
-menu:
-    main:
-        parent: Spark
-        weight: 100
----
-# Spark Getting Started
-# Iceberg Format
-
-The Iceberg Format can be accessed using the Connector provided by Iceberg.
-Refer to the documentation at [Iceberg Spark Connector](https://iceberg.apache.org/docs/latest/getting-started/) 
-for more information.
-
-# Paimon Format
-
-The Paimon Format can be accessed using the Connector provided by Paimon.
-Refer to the documentation at [Paimon Spark Connector](https://paimon.apache.org/docs/master/engines/spark3/)
-for more information.
-
-# Mixed Format
-
-
-To use Amoro in a Spark shell, use the --packages option:
-
-```bash
-spark-shell --packages com.netease.amoro:amoro-spark-3.3-runtime:0.5.0
-```
-
-> If you want to include the connector in your Spark installation, add the `amoro-spark-3.3-runtime` Jar to
-> Spark's `jars` folder.
-
-## Adding catalogs
-
-```
-${SPARK_HOME}/bin/spark-sql \
-    --conf spark.sql.extensions=com.netease.arctic.spark.ArcticSparkExtensions \
-    --conf spark.sql.catalog.local_catalog=com.netease.arctic.spark.ArcticSparkCatalog \
-    --conf spark.sql.catalog.local_catalog.url=thrift://${AMS_HOST}:${AMS_PORT}/${AMS_CATALOG_NAME}
-```
-
-> Amoro manages the Catalog through AMS, and Spark catalog needs to be mapped to Amoro Catalog via URL, 
-> in the following format:
-> `thrift://${AMS_HOST}:${AMS_PORT}/${AMS_CATALOG_NAME}`, 
-> The arctic-spark-connector will automatically download the Hadoop site configuration file through 
-> the thrift protocol for accessing the HDFS cluster
-
->
-> The AMS_PORT is the port number of the AMS service's thrift API interface, with a default value of 1260
-> The AMS_CATALOG_NAME is the name of the Catalog you want to access on AMS.
-
-Regarding detailed configurations for Spark, please refer to [Spark Configurations](../spark-configuration/)
-
-
-## Creating a table
-
-In Spark SQL command line, you can execute a create table command using the `CREATE TABLE` statement.
-
-Before executing a create table operation, please make sure to create the `database` first.
-
-```
--- switch to arctic catalog defined in spark conf
-use local_catalog;
-
--- create databsae first 
-create database if not exists test_db;
-```
-
-Then switch to the newly created database and perform the create table operation.
-
-```
-use test_db;
-
--- create a table with 3 columns
-create table test1 (id int, data string, ts timestamp) using arctic;
-
--- create a table with hidden partition
-create table test2 (id int, data string, ts timestamp) using arctic partitioned by (days(ts));
-
--- create a table with hidden partition and primary key
-create table test3 (id int, data string, ts timestamp, primary key(id)) using arctic partitioned by (days(ts));
-```
-
-For more information on Spark DDL related to tables, please refer to [Spark DDL](../spark-ddl/)
-
-## Writing to the table
-
-If you are using Spark SQL, you can use the `INSERT OVERWRITE` or `INSERT` SQL statement to write data to an Amoro table.
-
-```
--- insert values into unkeyed table
-insert into test2 values 
-( 1, "aaa", timestamp('2022-1-1 00:00:00')),
-( 2, "bbb", timestamp('2022-1-2 00:00:00')),
-( 3, "bbb", timestamp('2022-1-3 00:00:00'));
-
--- dynamic overwrite table 
-insert overwrite test3 values 
-( 1, "aaa", timestamp('2022-1-1 00:00:00')),
-( 2, "bbb", timestamp('2022-1-2 00:00:00')),
-( 3, "bbb", timestamp('2022-1-3 00:00:00'));
-```
-
-
-> If you are using Static Overwrite, you cannot define transforms on partition fields.
-
-Alternatively, you can use the DataFrame API to write data to an Amoro table within a JAR job.
-
-``` 
-val df = spark.read().load("/path-to-table")
-df.writeTo('test_db.table1').overwritePartitions()
-```
-
-For more information on writing to tables, please refer to [Spark Writes](../spark-writes/)
-
-## Reading from the table
-
-To query the table using `SELECT` SQL statements
-
-``` 
-select count(1) as count, data 
-from test2 
-group by data;
-```
-
-For table with primary keys defined, you can query on `ChangeStore` by `.change` 
-
-``` 
-select count(1) as count, data
-from test_db.test3.change group by data;
-```
-
-
-For more information on reading from tables, please refer to [Spark Queries](../spark-queries/)
diff --git a/amoro-docs/content/engines/spark/spark-queries.md b/amoro-docs/content/engines/spark/spark-queries.md
deleted file mode 100644
index d0e9c98..0000000
--- a/amoro-docs/content/engines/spark/spark-queries.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: "Spark Queries"
-url: spark-queries
-aliases:
-    - "spark/queries"
-menu:
-    main:
-        parent: Spark
-        weight: 400
----
-# Spark Queries
-## Querying with SQL
-
-### Querying Mixed-Format table by merge on read
-
-Using `Select` statement to query on Mixed-Format tables.
-
-```sql 
-SELECT * FROM arctic_catalog.db.sample
-```
-
-The Mixed-Format connector will merge the data from `BaseStore` and `ChangeStore`.
-
-### Query on change store
-
-For a Mixed-Format table with primary keys. you can query on `ChangeStore` by `.change`.
-
-```sql
-SELECT * FROM arctic_catalog.db.sample.change
-
-+---+----+----+---------------+------------+--------------+
-| id|name|data|_transaction_id|_file_offset|_change_action|
-+---+----+----+---------------+------------+--------------+
-|  1|dddd|abcd|              3|           1|        INSERT|
-|  1|dddd|abcd|              3|           2|        DELETE|
-+---+----+----+---------------+------------+--------------+
-```
-
-The addition columns are:
-
-- _transaction_id: The transaction ID allocated by AMS during data write is assigned per SQL execution in batch mode and
-  per checkpoint in streaming mode.
-- _file_offset:The order of data written with the same `_transaction_id`.
-- _change_action:The type of change record, `INSERT` or `DELETE`.
-
-## Querying with DataFrames
-
-You can read the Mixed-Format table by Spark DataFrames:
-
-```scala
-val df = spark.read.table("arctic_catalog.db.sample")
-df.count
-```
-
-And visit the `ChangeStore` by `.change`.
-
-```scala
-val df = spark.read.table("arctic_catalog.db.sample.change")
-df.count
-```
diff --git a/amoro-docs/content/engines/spark/spark-writes.md b/amoro-docs/content/engines/spark/spark-writes.md
deleted file mode 100644
index 7fd620b..0000000
--- a/amoro-docs/content/engines/spark/spark-writes.md
+++ /dev/null
@@ -1,193 +0,0 @@
----
-title: "Spark Writes"
-url: spark-writes
-aliases:
-    - "spark/writes"
-menu:
-    main:
-        parent: Spark
-        weight: 500
----
-# Spark Writes
-## Writing with SQL
-
-### INSERT OVERWRITE
-
-`INSERT OVERWRITE` can replace the partition in a table with the results of a query.
-
-The default overwrite mode of Spark is `Static`, you can change the overwrite mode by
-
-```
-SET spark.sql.sources.partitionOverwriteMode=dynamic
-```
-
-To demonstrate the behavior of dynamic and static overwrites, a test table is defined using the following DDL:
-
-```sql
-CREATE TABLE arctic_catalog.db.sample (
-    id int,
-    data string,
-    ts timestamp,
-    primary key (id))
-USING arctic
-PARTITIONED BY (days(ts))
-```
-
-When Spark's overwrite mode is dynamic, the partitions of the rows generated by the SELECT query will be replaced.
-
-```sql
-INSERT OVERWRITE arctic_catalog.db.sample values 
-(1, 'aaa',  timestamp(' 2022-1-1 09:00:00 ')), 
-(2, 'bbb',  timestamp(' 2022-1-2 09:00:00 ')), 
-(3, 'ccc',  timestamp(' 2022-1-3 09:00:00 '))
-```
-
-When Spark's overwrite mode is static, the PARTITION clause will be translated into the result set of the SELECT from
-the table. If the PARTITION clause is omitted, all partitions will be replaced.
-
-```sql
-INSERT OVERWRITE arctic_catalog.db.sample 
-partition( dt = '2021-1-1')  values 
-(1, 'aaa'), (2, 'bbb'), (3, 'ccc') 
-```
-
-> In Static mode, it is not supported to define transforms on partitioning columns.
-
-> You can enable uniqueness check of the primary key on the source table by setting
-> `spark.sql.arctic.check-source-data-uniqueness.enabled = true` in SPARK SQL. If there are duplicate primary keys,
-> an error will be thrown during the write operation.
-
-### INSERT INTO
-
-To append new data to a table, use `INSERT INTO`.
-
-```sql
-INSERT INTO arctic_catalog.db.sample VALUES (1, 'a'), (2, 'b')
-
-INSERT INTO prod.db.table SELECT ...
-```
-
-#### Upsert to table with primary keys.
-
-To add new data to a table with a primary key, you can control whether to enable the `UPSERT` function by setting
-the `write.upsert.enabled parameter`.
-
-When `UPSERT` is enabled, if a row with the same primary key already exists, an `UPDATE` operation will be performed, 
-and if it does not exist, an INSERT operation will be performed.
-
-When `UPSERT` is disabled, only `INSERT` operation will be performed, 
-even if there are rows with the same primary key in the table.
-
-```sql
-CREATE TABLE arctic_catalog.db.keyedTable (
-    id int,
-    data string,
-    primary key (id))
-USING arctic
-TBLPROPERTIES ('write.upsert.enabled' = 'true')
-```
-
-```sql
-INSERT INTO arctic_catalog.db.keyedTable VALUES (1, 'a'), (2, 'b')
-
-INSERT INTO prod.db.keyedTable SELECT ...
-```
-
-> You can enable uniqueness check of the primary key on the source table by setting
-> `spark.sql.arctic.check-source-data-uniqueness.enabled = true` in SPARK SQL. If there are duplicate primary keys,
-> an error will be thrown during the write operation.
-> 
-### DELETE FROM
-
-The `DELETE FROM` statements delete rows from table.
-
-```sql
-DELETE FROM arctic_catalog.db.sample
-WHERE ts >= '2020-05-01 00:00:00' and ts < '2020-06-01 00:00:00'
-
-DELETE FROM arctic_catalog.db.sample
-WHERE session_time < (SELECT min(session_time) FROM prod.db.good_events)
-
-DELETE FROM arctic_catalog.db.sample AS t1
-WHERE EXISTS (SELECT oid FROM prod.db.returned_orders WHERE t1.oid = oid)
-```
-
-### UPDATE
-
-The `UPDATE` statement modifies rows in the table.
-
-```sql
-UPDATE arctic_catalog.db.sample
-SET c1 = 'update_c1', c2 = 'update_c2'
-WHERE ts >= '2020-05-01 00:00:00' and ts < '2020-06-01 00:00:00'
-
-UPDATE arctic_catalog.db.sample
-SET session_time = 0, ignored = true
-WHERE session_time < (SELECT min(session_time) FROM prod.db.good_events)
-
-UPDATE arctic_catalog.db.sample AS t1
-SET order_status = 'returned'
-WHERE EXISTS (SELECT oid FROM prod.db.returned_orders WHERE t1.oid = oid)
-```
-
-### MERGE INTO
-
-```sql 
-MERGE INTO prod.db.target t   -- a target table
-USING (SELECT ...) s          -- the source updates
-ON t.id = s.id                -- condition to find updates for target rows
-WHEN ...                      -- updates
-```
-
-The `MERGE INTO` statement supports multi action `WHEN MATCHED ... THEN ...` to execute `UPDATE`, `DELETE`, `INSERT`.
-
-```sql 
-
-MERGE INTO prod.db.target t   
-USING prod.db.source s       
-ON t.id = s.id             
-WHEN MATCHED AND s.op = 'delete' THEN DELETE
-WHEN MATCHED AND t.count IS NULL AND s.op = 'increment' THEN UPDATE SET t.count = 0
-WHEN MATCHED AND s.op = 'increment' THEN UPDATE SET t.count = t.count + 1          
-WHEN NOT MATCHED THEN INSERT *
-
-```
-
-## Writing with DataFrames
-
-### Appending data
-
-Using `append()` to add data to a MixedFormat table.
-
-```sql
-val data: DataFrame = ...
-data.writeTo("arctic_catalog.db.sample").append()
-```
- 
-### Overwriting data
-
-Using `overwritePartitions()` to overwriting data.
-
-```sql
-val data: DataFrame = ...
-data.writeTo("arctic_catalog.db.sample").overwritePartitions()
-```
-
-### Creating tables
-
-The `create()` will create a table and write data to the table, just like `CREATE TABLE AS SELECT`
-
-```sql
-val data: DataFrame = ...
-data.writeTo("arctic_catalog.db.sample").create()
-```
-
-The primary keys and partition keys could be specified by `partitionBy()` and `option("primary.keys", "'xxx'")`.
-
-```sql
-val data: DataFrame = ...
-data.write().format("arctic")
-    .partitionBy("data")
-    .option("primary.keys", "'xxx'")
-    .save("arctic_catalog.db.sample")
-```
diff --git a/amoro-docs/content/engines/trino.md b/amoro-docs/content/engines/trino.md
deleted file mode 100644
index d0144a4..0000000
--- a/amoro-docs/content/engines/trino.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-title: "Trino"
-url: trino
-aliases:
-    - "trino"
-menu:
-    main:
-        weight: 800
----
-
-# Trino
-
-## Iceberg format
-Iceberg format can be accessed using the Iceberg Connector provided by Trino.
-please refer to the documentation at [Iceberg Trino user manual](https://trino.io/docs/current/connector/iceberg.html#) for more information.
-
-## Paimon format
-Paimon format can be accessed using the Paimon Connector provided by Trino.
-please refer to the documentation at [Paimon Trino user manual](https://paimon.apache.org/docs/master/engines/trino/) for more information.
-
-## Mixed format
-### Install
-
-- Create the {trino_home}/plugin/amoro directory in the Trino installation package, 
-  and extract the contents of the amoro-trino package trino-amoro-xx-SNAPSHOT.tar.gz to the {trino_home}/plugin/amoro directory.
-- Configure the Catalog configuration file for Amoro in the {trino_home}/etc/catalog directory, for example:
-```tex
-connector.name=arctic
-arctic.url=thrift://{ip}:{port}/{catalogName}
-```
-- Configure the JVM configuration file for Trino in the {trino_home}/etc directory named `jvm.config` :
-```tex
---add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED
-```
-
-### Support SQL statement
-
-#### Query Table
-
-By adopting the Merge-On-Read approach to read Mixed Format, the latest data of the table can be read, for example:
-
-```sql
-SELECT * FROM "{TABLE_NAME}"
-```
-
-
-
-#### Query BaseStore of Table
-
-Directly querying the BaseStore in a table with a primary key is supported. The BaseStore stores the stock data of the table, which is usually generated by batch job or optimization. 
-The queried data is static, and the query efficiency is very high, but the timeliness is not good. The syntax is as follows:
-
-```sql
-SELECT * FROM "{TABLE_NAME}#BASE"
-```
-
-
-
-#### Query ChangeStore of Table
-
-Directly querying the ChangeStore in a table with a primary key is supported. The ChangeStore stores the stream and change data of the table, which is usually written in real time by stream job.
-The change records of the table can be queried through the ChangeStore, and the expiry time of the data in the ChangeStore determines how long ago the change records can be queried.
-
-```sql
-SELECT * FROM "{TABLE_NAME}#CHANGE"
-```
-
-Three additional columns will be included in the query result, which are:
-
-- _transaction_id: The transaction ID allocated by AMS when the data is written. In batch mode, it is allocated for each SQL execution, and in stream mode, it is allocated for each checkpoint.
-- _file_offset:Indicates the order in which the data was written in the same batch of _transaction_id.
-- _change_action:Indicates the type of data, which can be either INSERT or DELETE.
-
-#### Trino and Amoro Type Mapping:
-
-| Amoro type   | Trino type                    |
-| :------------- | :---------------------------- |
-| `BOOLEAN`      | `BOOLEAN`                     |
-| `INT`          | `INTEGER`                     |
-| `LONG`         | `BIGINT`                      |
-| `FLOAT`        | `REAL`                        |
-| `DOUBLE`       | `DOUBLE`                      |
-| `DECIMAL(p,s)` | `DECIMAL(p,s)`                |
-| `DATE`         | `DATE`                        |
-| `TIME`         | `TIME(6)`                     |
-| `TIMESTAMP`    | `TIMESTAMP(6)`                |
-| `TIMESTAMPTZ`  | `TIMESTAMP(6) WITH TIME ZONE` |
-| `STRING`       | `VARCHAR`                     |
-| `UUID`         | `UUID`                        |
-| `BINARY`       | `VARBINARY`                   |
-| `STRUCT(...)`  | `ROW(...)`                    |
-| `LIST(e)`      | `ARRAY(e)`                    |
-| `MAP(k,v)`     | `MAP(k,v)`                    |
-
-### Trino uses proxy user to access Hadoop cluster.
-By default, when Trino queries Amoro, it uses the Hadoop user configured in the [catalog creation](../managing-catalogs/#create-catalog) to access the Hadoop cluster.
-To use Trino's user to access the Hadoop cluster, you need enable Hadoop impersonation by adding the arctic.hdfs.impersonation.enabled=true parameter in the Amoro catalog configuration file located in the {trino_home}/etc/catalog directory, as follows.
-
-```tex
-connector.name=arctic
-arctic.url=thrift://{ip}:{port}/{catalogName}
-arctic.hdfs.impersonation.enabled=true
-```
-`arctic.hdfs.impersonation.enabled` default false
-
-{{< hint info >}}
-To use Hadoop impersonation, you need to enable the proxy feature for the Hadoop user configured in the [catalog creation](../managing-catalogs/#create-catalog) in the Hadoop cluster beforehand,
-and make sure that it can proxy the Trino querying user. Please refer to [Hadoop Proxy User](https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html#Configurations) for more information.
-{{</hint>}}
\ No newline at end of file
diff --git a/amoro-docs/content/formats/iceberg.md b/amoro-docs/content/formats/iceberg.md
deleted file mode 100644
index c303db5..0000000
--- a/amoro-docs/content/formats/iceberg.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: "Iceberg"
-url: iceberg-format
-aliases:
-    - "formats/iceberg"
-menu:
-    main:
-        parent: Formats
-        weight: 200
----
-# Iceberg Format
-
-Iceberg format refers to [Apache Iceberg](https://iceberg.apache.org) table, which is an open table format for large analytical datasets designed to provide scalable, efficient, and secure data storage and query solutions. 
-It supports data operations on multiple storage backends and provides features such as ACID transactions, multi-version control, and schema evolution, making data management and querying more flexible and convenient.
-
-With the release of [Iceberg v2](https://iceberg.apache.org/spec/),  Iceberg addresses the shortcomings of row-level updates through the MOR (Merge On Read) mechanism, which better supports streaming updates. 
-However, as data and delete files are written, the read performance and availability of the table will decrease, and if not maintained in time, the table will quickly become unusable.
-
-<img src="../images/formats/iceberg_format.png" alt="Iceberg Format" width="70%" height="70%">
-
-Starting from Amoro v0.4, Iceberg format including v1 and v2 is supported. Users only need to register Iceberg's catalog in Amoro to host the table for Amoro maintenance. For detailed operation steps, please refer to [Managing Catalogs](../managing-catalogs/).
-Amoro maintains the performance and economic availability of Iceberg tables with minimal read/write costs through means such as small file merging, eq-delete file conversion to pos-delete files, duplicate data elimination, and file cleaning, and Amoro has no intrusive impact on the functionality of Iceberg.
-
-Iceberg format has full upward and downward compatibility features, and in general, users do not have to worry about the compatibility of the Iceberg version used by the engine client with the Iceberg version on which Amoro depends.
-
-Amoro supports all catalog types supported by Iceberg, including but not limited to: Hadoop, Hive, Glue, JDBC, Nessie, Snowflake, and so on.
-
-Amoro supports all storage types supported by Iceberg, including but not limited to: Hadoop, S3, AliyunOSS, GCS, ECS, and so on.
diff --git a/amoro-docs/content/formats/mixed-hive.md b/amoro-docs/content/formats/mixed-hive.md
deleted file mode 100644
index 10a7104..0000000
--- a/amoro-docs/content/formats/mixed-hive.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Mixed-Hive"
-url: mixed-hive-format
-aliases:
-    - "formats/mixed-hive"
-menu:
-    main:
-        parent: Formats
-        weight: 400
----
-# Mixed-Hive Format
-
-Mixed-Hive format is a format that has better compatibility with Hive than Mixed-Iceberg format. 
-Mixed-Hive format uses a Hive table as the BaseStore and an Iceberg table as the ChangeStore. Mixed-Hive format supports:
-- schema, partition, and types consistent with Hive format
-- Using the Hive connector to read and write Mixed-Hive format tables as Hive tables
-- Upgrading a Hive table in-place to a Mixed-Hive format table without data rewriting or migration, with a response time in seconds
-- All the functional features of Mixed-Iceberg format
-
-The structure of Mixed-Hive format is shown below:
-
-![Mixed-Hive format](../images/formats/mixed_hive_format.png)
-
-In the BaseStore, files under the Hive location are also indexed by the Iceberg manifest, avoiding data redundancy between the two formats. 
-Mixed-Hive format combines the snapshot, ACID, and MVCC features of Iceberg, and provides a great degree of compatibility with Hive, offering flexible selection and extension options for data platforms, processes, and products built around Hive format in the past.
-
-{{< hint info >}}
-The freshness of data under the Hive location is guaranteed by Full optimizing. 
-Therefore, the timeliness of native Hive reads is significantly different from that of Mixed-Iceberg tables. 
-It is recommended to use Merge-on-read to read data with freshness in the order of minutes in Mixed-Hive format.
-{{< /hint >}}
-
-
diff --git a/amoro-docs/content/formats/mixed-iceberg.md b/amoro-docs/content/formats/mixed-iceberg.md
deleted file mode 100644
index af14076..0000000
--- a/amoro-docs/content/formats/mixed-iceberg.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: "Mixed-Iceberg"
-url: mixed-iceberg-format
-aliases:
-    - "formats/mixed-iceberg"
-menu:
-    main:
-        parent: Formats
-        weight: 300
----
-# Mixed-Iceberg Format
-
-Compared with Iceberg format, Mixed-Iceberg format provides more features:
-- Stronger primary key constraints that also apply to Spark
-- OLAP performance that is production-ready for real-time data warehouses through the auto-bucket mechanism
-- LogStore configuration that can reduce data pipeline latency from minutes to milliseconds/seconds
-- Transaction conflict resolution mechanism that enables concurrent writes with the same primary key
-
-The design intention of Mixed-Iceberg format is to provide a storage layer for stream-batch integration and offline-real-time unified data warehouses for big data platforms based on data lakes. 
-Under this goal-driven approach, Amoro designs Mixed-Iceberg format as a three-tier structure, with each level named after a different TableStore:
-
-![Mixed-Iceberg format](../images/formats/mixed_format.png)
-
-- BaseStore — stores the stock data of the table, usually generated by batch computing or optimizing processes, and is more friendly to ReadStore for reading.
-- ChangeStore —  stores the flow and change data of the table, usually written in real-time by streaming computing, and can also be used for downstream CDC consumption, and is more friendly to WriteStore for writing.
-- LogStore — serves as a cache layer for ChangeStore to accelerate stream processing. Amoro manages the consistency between LogStore and ChangeStore.
-
-The design philosophy of TableStore in Mixed-Iceberg format is similar to that of clustered indexes in databases. Each TableStore can use different table formats. Mixed-Iceberg format provides high freshness OLAP through merge-on-read between BaseStore and ChangeStore. 
-To provide high-performance merge-on-read, BaseStore and ChangeStore use completely consistent partition and layout, and both support auto-bucket.
-
-The Auto-bucket feature helps the self-optimizing process control the file size of BaseStore within the target-size, and dynamically scale the data volume through bucket splitting and merging while maintaining the base file size as much as possible. 
-Auto-bucket divides the data under a partition into sets of non-intersecting primary keys in a hash-based manner, greatly reducing the amount of data that needs to be scanned during optimizing and merge-on-read, and improving performance. For more details, please refer to [benchmark](../../../benchmark-report/)
-
-The auto-bucket feature of the Mixed-Iceberg format references the paper: [Scalable, Distributed Data Structures for Internet Service Construction](https://people.eecs.berkeley.edu/~culler/papers/dds.pdf)
-
-There are some limitations in using the Mixed-Iceberg format:
-
-- Compatibility limited — In scenarios where Hive and Iceberg are compatible, there may be a violation of primary key uniqueness or the failure of conflict resolution.
-- Primary key constraint — When the primary key does not include partition keys and there are no updates to the stream data, normalized operators or other methods need to be used to restore the previous data to ensure primary key uniqueness.
-- Engines integrated — Currently supports reading and writing with Flink and Spark, and querying data with Trino and Impala.
-
-The BaseStore and ChangeStore of the Mixed-Iceberg format both use the Iceberg format and are consistent with Iceberg in schema, types, and partition usage. 
-While possessing the features of the Mixed-Iceberg format, the BaseStore and ChangeStore can be read and written using the native Iceberg connector, thus having all the functional features of the Iceberg format. 
-Taking Spark as an example, this paper describes how to operate on the Mixed-Iceberg format table created by Quick demo using the Iceberg connector. We can use the following command to open a Spark SQL client:
-
-```shell
-spark-sql --packages org.apache.Iceberg:Iceberg-spark-runtime-3.2_2.12:0.14.0\
-    --conf spark.sql.extensions=org.apache.Iceberg.spark.extensions.IcebergSparkSessionExtensions \
-    --conf spark.sql.catalog.local=org.apache.Iceberg.spark.SparkCatalog \
-    --conf spark.sql.catalog.local.type=hadoop \
-    --conf spark.sql.catalog.local.warehouse=/tmp/Amoro/warehouse
-```
-
-After that, we can use the following command to read from or write to the Iceberg tables managed by Amoro:
-
-```shell
--- Switch to Iceberg catalog
-use local;
-
--- Show all Iceberg tables
-show tables;
-
--- Query BaseStore
-select * from local.test_db.test_table.base;
-
--- Query ChangeStore
-select * from local.test_db.test_table.change;
-
--- Insert BaseStore
-insert into local.test_db.test_table.base value(10, 'tony', timestamp('2022-07-03 12:10:30'));
-```
-
-More Iceberg-compatible usage can be found in the [Iceberg docs](https://Iceberg.apache.org/docs/latest/).
-
-{{< hint info >}}
-The Minor optimizing feature of Amoro generally ensures that the data freshness of the Iceberg BaseStore is maintained at the minute level.
-{{< /hint >}}
\ No newline at end of file
diff --git a/amoro-docs/content/formats/overview.md b/amoro-docs/content/formats/overview.md
deleted file mode 100644
index 40bf21e..0000000
--- a/amoro-docs/content/formats/overview.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: "Overview"
-url: formats-overview
-aliases:
-    - "formats/overview"
-menu:
-    main:
-        parent: Formats
-        weight: 100
----
-# Formats Overview
-
-Table format (aka. format) was first proposed by Iceberg, which can be described as follows:
-
-- It defines the relationship between tables and files, and any engine can query and retrieve data files according to the table format.
-- New formats such as Iceberg/Delta/Hudi further define the relationship between tables and snapshots, and the relationship between snapshots and files. 
-  All write operations on the table will generate new snapshots, and all read operations on the table are based on snapshots. 
-  Snapshots bring MVCC, ACID, and Transaction capabilities to data lakes.
-
-In addition, new table formats such as [Iceberg](https://Iceberg.apache.org/) also provide many advanced features such as schema evolve, hidden partition, and data skip.
-[Hudi](https://hudi.apache.org/) and [Delta](https://delta.io/) may have some differences in specific functions, but we see that the standard of table formats is gradually established with the functional convergence of these three open-source projects in the past two years.
-
-For users, the design goal of Amoro is to provide an out-of-the-box data lake system. Internally, Amoro's design philosophy is to use different table formats as storage engines for data lakes. 
-This design pattern is more common in open-source systems such as MySQL and ClickHouse.
-
-Currently, Amoro mainly provides the following four table formats:
-
-- **Iceberg format:** Users can directly entrust their Iceberg tables to Amoro for maintenance, so that users can not only use all the functions of Iceberg tables, but also enjoy the performance and stability improvements brought by Amoro.
-- **Mixed-Iceberg format:** Amoro provides a set of more optimized formats for streaming update scenarios on top of the Iceberg format. If users have high performance requirements for streaming updates or have demands for CDC incremental data reading functions, they can choose to use the Mixed-Iceberg format.
-- **Mixed-Hive format:** Many users do not want to affect the business originally built on Hive while using data lakes. Therefore, Amoro provides the Mixed-Hive format, which can upgrade Hive tables to Mixed-Hive format only through metadata migration, and the original Hive tables can still be used normally. This ensures business stability and benefits from the advantages of data lake computing.
-- **Paimon format:** Amoro supports displaying metadata information in the Paimon format, including Schema, Options, Files, Snapshots, DDLs, and Compaction information.
diff --git a/amoro-docs/content/formats/paimon.md b/amoro-docs/content/formats/paimon.md
deleted file mode 100644
index c7cad59..0000000
--- a/amoro-docs/content/formats/paimon.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: "Paimon"
-url: paimon-format
-aliases:
-- "formats/paimon"
-menu:
-main:
-parent: Formats
-weight: 200
----
-# Paimon Format
-
-Paimon format refers to [Apache Paimon](https://paimon.apache.org/) table.
-Paimon is a streaming data lake platform with high-speed data ingestion, changelog tracking and efficient real-time analytics.
-
-By registering Paimon's catalog with Amoro, users can view information such as Schema, Options, Files, Snapshots, DDLs, Compaction information, and more for Paimon tables.
-Furthermore, they can operate on Paimon tables using Spark SQL in the Terminal. The current supported catalog types and file system types for Paimon are all supported.
-
-For registering catalog operation steps, please refer to [Managing Catalogs](../managing-catalogs/).
-
-{{< hint info >}}
-If you want to use S3 or OSS, please download the 
-[S3](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-s3/0.5.0-incubating/paimon-s3-0.5.0-incubating.jar), 
-[OSS](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-oss/0.5.0-incubating/paimon-oss-0.5.0-incubating.jar) 
-package and put it in the 'lib' directory of the Amoro installation package.
-{{< /hint >}}
diff --git a/amoro-docs/content/user-guides/cdc-ingestion.md b/amoro-docs/content/user-guides/cdc-ingestion.md
deleted file mode 100644
index 2ef2ef6..0000000
--- a/amoro-docs/content/user-guides/cdc-ingestion.md
+++ /dev/null
@@ -1,513 +0,0 @@
----
-title: "CDC Ingestion"
-url: cdc-ingestion
-aliases:
-    - "user-guides/cdc-ingestion"
-menu:
-    main:
-        parent: User Guides
-        weight: 400
----
-# CDC Ingestion
-CDC stands for Change Data Capture, which is a broad concept, as long as it can capture the change data, it can be called CDC. [Flink CDC](https://github.com/ververica/flink-cdc-connectors) is a Log message-based data capture tool, all the inventory and incremental data can be captured. Taking MySQL as an example, it can easily capture Binlog data through Debezium and process the calculations in real time to send them to the data lake. The data lake can then be queried by other engines.
-
-This section will show how to ingest one table or multiple tables into the data lake for both [Iceberg](../iceberg-format/) format and [Mixed-Iceberg](../mixed-iceberg-format/) format.
-## Ingest into one table
-### Iceberg format
-The following example will show how MySQL CDC data is written to an Iceberg table.
-
-**Requirements**
-
-Please add [Flink SQL Connector MySQL CDC](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.0/flink-connector-mysql-cdc-2.3.0.jar) and [Iceberg](https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-flink-1.14/1.1.0/iceberg-flink-1.14-1.1.0.jar) Jars to the lib directory of the Flink engine package.
-
-```sql
-CREATE TABLE products (
-    id INT,
-    name STRING,
-    description STRING,
-    PRIMARY KEY (id) NOT ENFORCED
-) WITH (
-    'connector' = 'mysql-cdc',
-    'hostname' = 'localhost',
-    'port' = '3306',
-    'username' = 'root',
-    'password' = '123456',
-    'database-name' = 'mydb',
-    'table-name' = 'products'
-);
-  
-CREATE CATALOG iceberg_hadoop_catalog WITH (
-    'type'='iceberg',
-    'catalog-type'='hadoop',
-    'warehouse'='hdfs://nn:8020/warehouse/path',
-    'property-version'='1'
-);
-
-CREATE TABLE IF NOT EXISTS `iceberg_hadoop_catalog`.`default`.`sample` (
-    id INT,
-    name STRING,
-    description STRING,
-    PRIMARY KEY (id) NOT ENFORCED
-);
-
-INSERT INTO `iceberg_hadoop_catalog`.`default`.`sample` SELECT * FROM products;
-```
-
-### Mixed-Iceberg format
-The following example will show how MySQL CDC data is written to a Mixed-Iceberg table.
-
-**Requirements**
-
-Please add [Flink SQL Connector MySQL CDC](https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.0/flink-connector-mysql-cdc-2.3.0.jar) and [Amoro](../../../download/) Jars to the lib directory of the Flink engine package.
-
-```sql
-CREATE TABLE products (
-    id INT,
-    name STRING,
-    description STRING,
-    PRIMARY KEY (id) NOT ENFORCED
-) WITH (
-    'connector' = 'mysql-cdc',
-    'hostname' = 'localhost',
-    'port' = '3306',
-    'username' = 'root',
-    'password' = '123456',
-    'database-name' = 'mydb',
-    'table-name' = 'products'
-);
-
-CREATE CATALOG arctic_catalog WITH (
-    'type'='arctic',
-    'metastore.url'='thrift://<ip>:<port>/<catalog_name_in_metastore>'
-); 
-
-CREATE TABLE IF NOT EXISTS `arctic_catalog`.`db`.`test_tb`(
-    id INT,
-    name STRING,
-    description STRING,
-    PRIMARY KEY (id) NOT ENFORCED
-);
-
-INSERT INTO `arctic_catalog`.`db`.`test_tb` SELECT * FROM products;
-```
-
-## Ingest Into multiple tables
-### Iceberg format
-The following example will show how to write CDC data from multiple MySQL tables into the corresponding Iceberg table.
-
-**Requirements**
-
-Please add [Flink Connector MySQL CDC](https://mvnrepository.com/artifact/com.ververica/flink-connector-mysql-cdc/2.3.0) and [Iceberg](https://mvnrepository.com/artifact/org.apache.iceberg/iceberg-flink-1.14/1.1.0) dependencies to your Maven project's pom.xml file.
-
-```java
-import com.ververica.cdc.connectors.mysql.source.MySqlSource;
-import com.ververica.cdc.connectors.mysql.table.MySqlDeserializationConverterFactory;
-import com.ververica.cdc.debezium.DebeziumDeserializationSchema;
-import com.ververica.cdc.debezium.table.MetadataConverter;
-import com.ververica.cdc.debezium.table.RowDataDebeziumDeserializeSchema;
-import org.apache.flink.api.common.eventtime.WatermarkStrategy;
-import org.apache.flink.api.common.typeinfo.TypeInformation;
-import org.apache.flink.api.java.tuple.Tuple2;
-import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
-import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
-import org.apache.flink.streaming.api.functions.ProcessFunction;
-import org.apache.flink.table.api.*;
-import org.apache.flink.table.catalog.*;
-import org.apache.flink.table.data.RowData;
-import org.apache.flink.table.data.conversion.RowRowConverter;
-import org.apache.flink.table.data.utils.JoinedRowData;
-import org.apache.flink.table.types.logical.RowType;
-import org.apache.flink.util.Collector;
-import org.apache.flink.util.OutputTag;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.iceberg.CatalogProperties;
-import org.apache.iceberg.Table;
-import org.apache.iceberg.catalog.Catalog;
-import org.apache.iceberg.catalog.Namespace;
-import org.apache.iceberg.catalog.TableIdentifier;
-import org.apache.iceberg.flink.CatalogLoader;
-import org.apache.iceberg.flink.TableLoader;
-import org.apache.iceberg.flink.sink.FlinkSink;
-import org.apache.iceberg.relocated.com.google.common.collect.Maps;
-import org.apache.kafka.connect.data.Struct;
-import org.apache.kafka.connect.source.SourceRecord;
-import java.util.*;
-
-import static com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.DATABASE_NAME;
-import static com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.TABLE_NAME;
-import static java.util.stream.Collectors.toMap;
-
-public class MySqlCDC2IcebergExample {
-  public static void main(String[] args) throws Exception {
-    List<Tuple2<ObjectPath, ResolvedCatalogTable>> pathAndTable = initSourceTables();
-    Map<String, RowDataDebeziumDeserializeSchema> debeziumDeserializeSchemas = getDebeziumDeserializeSchemas(pathAndTable);
-    MySqlSource<RowData> mySqlSource = MySqlSource.<RowData>builder()
-      .hostname("yourHostname")
-      .port(yourPort)
-      .databaseList("test_db")
-      // setting up tables to be captured
-      .tableList("test_db.user", "test_db.product")
-      .username("yourUsername")
-      .password("yourPassword")
-      .deserializer(new CompositeDebeziumDeserializationSchema(debeziumDeserializeSchemas))
-      .build();
-
-    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
-
-    // enable checkpoint
-    env.enableCheckpointing(60000);
-    
-    // Split CDC streams by table name
-    SingleOutputStreamOperator<Void> process = env
-      .fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source")
-      .setParallelism(4)
-      .process(new SplitCdcStreamFunction(pathAndTable.stream()
-          .collect(toMap(e -> e.f0.toString(),
-              e -> RowRowConverter.create(e.f1.getResolvedSchema().toPhysicalRowDataType())))))
-      .name("split stream");
-
-    // create Iceberg sink and insert into CDC data
-    Map<String, String> properties = Maps.newHashMap();
-    properties.put(CatalogProperties.WAREHOUSE_LOCATION, "yourWarehouseLocation");
-    properties.put(CatalogProperties.URI, "yourThriftUri");
-    CatalogLoader catalogLoader = CatalogLoader.hadoop("hadoop_catalog", new Configuration(), properties);
-    Catalog icebergHadoopCatalog = catalogLoader.loadCatalog();
-    Map<String, TableSchema> sinkTableSchemas = new HashMap<>();
-    sinkTableSchemas.put("user", TableSchema.builder().field("id", DataTypes.INT())
-      .field("name", DataTypes.STRING()).field("op_time", DataTypes.TIMESTAMP()).build());
-    sinkTableSchemas.put("product", TableSchema.builder().field("productId", DataTypes.INT())
-      .field("price", DataTypes.DECIMAL(12, 6)).field("saleCount", DataTypes.INT()).build());
-
-    for (Map.Entry<String, TableSchema> entry : sinkTableSchemas.entrySet()) {
-      TableIdentifier identifier = TableIdentifier.of(Namespace.of("test_db"), entry.getKey());
-      Table table = icebergHadoopCatalog.loadTable(identifier);
-      TableLoader tableLoader = TableLoader.fromCatalog(catalogLoader, identifier);
-
-      FlinkSink.forRowData(process.getSideOutput(new OutputTag<RowData>(entry.getKey()){}))
-        .tableLoader(tableLoader)
-        .table(table)
-        .append();
-    }
-
-    env.execute("Sync MySQL to the Iceberg table");
-  }
-
-  static class CompositeDebeziumDeserializationSchema
-    implements DebeziumDeserializationSchema<RowData> {
-
-    private final Map<String, RowDataDebeziumDeserializeSchema> deserializationSchemaMap;
-
-    public CompositeDebeziumDeserializationSchema(
-      final Map<String, RowDataDebeziumDeserializeSchema> deserializationSchemaMap) {
-      this.deserializationSchemaMap = deserializationSchemaMap;
-    }
-
-    @Override
-    public void deserialize(final SourceRecord record, final Collector<RowData> out)
-      throws Exception {
-      final Struct value = (Struct) record.value();
-      final Struct source = value.getStruct("source");
-      final String db = source.getString("db");
-      final String table = source.getString("table");
-      if (deserializationSchemaMap == null) {
-        throw new IllegalStateException("deserializationSchemaMap can not be null!");
-      }
-      deserializationSchemaMap.get(db + "." + table).deserialize(record, out);
-    }
-
-    @Override
-    public TypeInformation<RowData> getProducedType() {
-      return TypeInformation.of(RowData.class);
-    }
-  }
-
-  static class SplitCdcStreamFunction extends ProcessFunction<RowData, Void> {
-    private final Map<String, RowRowConverter> converters;
-
-    public SplitCdcStreamFunction(final Map<String, RowRowConverter> converterMap) {
-      this.converters = converterMap;
-    }
-
-    @Override
-    public void processElement(final RowData rowData,
-                               final ProcessFunction<RowData, Void>.Context ctx, final Collector<Void> out)
-      throws Exception {
-      // JoinedRowData like +I{row1=+I(1,2.340000,3), row2=+I(product,test_db)}
-      // so rowData.getArity() - 2 is the tableName field index
-      final String tableName = rowData.getString(rowData.getArity() - 2).toString();
-      ctx.output(new OutputTag<RowData>(tableName) {},
-        getField(JoinedRowData.class, (JoinedRowData) rowData, "row1"));
-    }
-
-    private static <O, V> V getField(Class<O> clazz, O obj, String fieldName) {
-      try {
-        java.lang.reflect.Field field = clazz.getDeclaredField(fieldName);
-        field.setAccessible(true);
-        Object v = field.get(obj);
-        return v == null ? null : (V) v;
-      } catch (NoSuchFieldException | IllegalAccessException e) {
-        throw new RuntimeException(e);
-      }
-    }
-  }
-
-  private static List<Tuple2<ObjectPath, ResolvedCatalogTable>> initSourceTables() {
-    List<Tuple2<ObjectPath, ResolvedCatalogTable>> pathAndTable = new ArrayList<>();
-    // build table "user"
-    Schema userSchema = Schema.newBuilder()
-      .column("id", DataTypes.INT().notNull())
-      .column("name", DataTypes.STRING())
-      .column("op_time", DataTypes.TIMESTAMP())
-      .primaryKey("id")
-      .build();
-    List<Column> userTableCols = Stream.of(
-      Column.physical("id", DataTypes.INT().notNull()),
-      Column.physical("name", DataTypes.STRING()),
-      Column.physical("op_time", DataTypes.TIMESTAMP())).collect(Collectors.toList());
-    Schema.UnresolvedPrimaryKey userPrimaryKey = userSchema.getPrimaryKey().orElseThrow(() -> new RuntimeException("table user required pk "));
-    ResolvedSchema userResolvedSchema = new ResolvedSchema(userTableCols, Collections.emptyList(), UniqueConstraint.primaryKey(
-      userPrimaryKey.getConstraintName(), userPrimaryKey.getColumnNames()));
-    ResolvedCatalogTable userTable = new ResolvedCatalogTable(
-      CatalogTable.of(userSchema, "", Collections.emptyList(), new HashMap<>()), userResolvedSchema);
-    pathAndTable.add(Tuple2.of(new ObjectPath("test_db", "user"), userTable));
-
-    // build table "product"
-    Schema productSchema = Schema.newBuilder()
-      .column("productId", DataTypes.INT().notNull())
-      .column("price", DataTypes.DECIMAL(12, 6))
-      .column("saleCount", DataTypes.INT())
-      .primaryKey("productId")
-      .build();
-    List<Column> productTableCols = Stream.of(
-      Column.physical("productId", DataTypes.INT().notNull()),
-      Column.physical("price", DataTypes.DECIMAL(12, 6)),
-      Column.physical("saleCount", DataTypes.INT())).collect(Collectors.toList());
-    Schema.UnresolvedPrimaryKey productPrimaryKey = productSchema.getPrimaryKey().orElseThrow(() -> new RuntimeException("table product required pk "));
-    ResolvedSchema productResolvedSchema = new ResolvedSchema(productTableCols, Collections.emptyList(), UniqueConstraint.primaryKey(
-      productPrimaryKey.getConstraintName(), productPrimaryKey.getColumnNames()));
-    ResolvedCatalogTable productTable = new ResolvedCatalogTable(
-      CatalogTable.of(productSchema, "", Collections.emptyList(), new HashMap<>()), productResolvedSchema);
-    pathAndTable.add(Tuple2.of(new ObjectPath("test_db", "product"), productTable));
-    return pathAndTable;
-  }
-
-  private static Map<String, RowDataDebeziumDeserializeSchema> getDebeziumDeserializeSchemas(
-    final List<Tuple2<ObjectPath, ResolvedCatalogTable>> pathAndTable) {
-    return pathAndTable.stream()
-      .collect(toMap(e -> e.f0.toString(), e -> RowDataDebeziumDeserializeSchema.newBuilder()
-        .setPhysicalRowType(
-          (RowType) e.f1.getResolvedSchema().toPhysicalRowDataType().getLogicalType())
-        .setUserDefinedConverterFactory(MySqlDeserializationConverterFactory.instance())
-        .setMetadataConverters(
-          new MetadataConverter[] {TABLE_NAME.getConverter(), DATABASE_NAME.getConverter()})
-        .setResultTypeInfo(TypeInformation.of(RowData.class)).build()));
-  }
-}
-```
-
-### Mixed-Iceberg format
-The following example will show how to write CDC data from multiple MySQL tables into the corresponding Mixed-Iceberg table.
-
-**Requirements**
-
-Please add [Flink Connector MySQL CDC](https://mvnrepository.com/artifact/com.ververica/flink-connector-mysql-cdc/2.3.0) and [Amoro](https://mvnrepository.com/artifact/com.netease.arctic/arctic-flink-runtime-1.14/0.4.1) dependencies to your Maven project's pom.xml file.
-
-```java
-import com.netease.arctic.flink.InternalCatalogBuilder;
-import com.netease.arctic.flink.table.AmoroTableLoader;
-import com.netease.arctic.flink.util.AmoroUtils;
-import com.netease.arctic.flink.write.FlinkSink;
-import com.netease.arctic.table.TableIdentifier;
-import com.ververica.cdc.connectors.mysql.source.MySqlSource;
-import com.ververica.cdc.connectors.mysql.table.MySqlDeserializationConverterFactory;
-import com.ververica.cdc.debezium.DebeziumDeserializationSchema;
-import com.ververica.cdc.debezium.table.MetadataConverter;
-import com.ververica.cdc.debezium.table.RowDataDebeziumDeserializeSchema;
-import org.apache.flink.api.common.eventtime.WatermarkStrategy;
-import org.apache.flink.api.common.typeinfo.TypeInformation;
-import org.apache.flink.api.java.tuple.Tuple2;
-import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
-import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
-import org.apache.flink.streaming.api.functions.ProcessFunction;
-import org.apache.flink.table.api.*;
-import org.apache.flink.table.catalog.*;
-import org.apache.flink.table.data.RowData;
-import org.apache.flink.table.data.conversion.RowRowConverter;
-import org.apache.flink.table.data.utils.JoinedRowData;
-import org.apache.flink.table.types.logical.RowType;
-import org.apache.flink.util.Collector;
-import org.apache.flink.util.OutputTag;
-import org.apache.kafka.connect.data.Struct;
-import org.apache.kafka.connect.source.SourceRecord;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.DATABASE_NAME;
-import static com.ververica.cdc.connectors.mysql.table.MySqlReadableMetadata.TABLE_NAME;
-import static java.util.stream.Collectors.toMap;
-
-public class MySqlCDC2AmoroExample {
-  public static void main(String[] args) throws Exception {
-    List<Tuple2<ObjectPath, ResolvedCatalogTable>> pathAndTable = initSourceTables();
-    Map<String, RowDataDebeziumDeserializeSchema> debeziumDeserializeSchemas = getDebeziumDeserializeSchemas(
-      pathAndTable);
-    MySqlSource<RowData> mySqlSource = MySqlSource.<RowData>builder()
-      .hostname("yourHostname")
-      .port(yourPort)
-      .databaseList("test_db")
-      // setting up tables to be captured
-      .tableList("test_db.user", "test_db.product")
-      .username("yourUsername")
-      .password("yourPassword")
-      .deserializer(new CompositeDebeziumDeserializationSchema(debeziumDeserializeSchemas))
-      .build();
-
-    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
-
-    // enable checkpoint
-    env.enableCheckpointing(60000);
-
-    // Split CDC streams by table name
-    SingleOutputStreamOperator<Void> process = env
-      .fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source").setParallelism(4)
-      .process(new SplitCdcStreamFunction(pathAndTable.stream()
-        .collect(toMap(e -> e.f0.toString(),
-          e -> RowRowConverter.create(e.f1.getResolvedSchema().toPhysicalRowDataType())))))
-      .name("split stream");
-
-    // create Amoro sink and insert into cdc data
-    InternalCatalogBuilder catalogBuilder = InternalCatalogBuilder.builder().metastoreUrl(
-      "thrift://<ip>:<port>/<catalog_name_in_metastore>");
-    Map<String, TableSchema> sinkTableSchemas = new HashMap<>();
-    sinkTableSchemas.put("user", TableSchema.builder().field("id", DataTypes.INT())
-      .field("name", DataTypes.STRING()).field("op_time", DataTypes.TIMESTAMP()).build());
-    sinkTableSchemas.put("product", TableSchema.builder().field("productId", DataTypes.INT())
-      .field("price", DataTypes.DECIMAL(12, 6)).field("saleCount", DataTypes.INT()).build());
-
-    for (Map.Entry<String, TableSchema> entry : sinkTableSchemas.entrySet()) {
-      TableIdentifier tableId =
-        TableIdentifier.of("yourCatalogName", "yourDatabaseName", entry.getKey());
-      AmoroTableLoader tableLoader = AmoroTableLoader.of(tableId, catalogBuilder);
-
-      FlinkSink.forRowData(process.getSideOutput(new OutputTag<RowData>(entry.getKey()){}))
-        .flinkSchema(entry.getValue())
-        .table(AmoroUtils.loadAmoroTable(tableLoader))
-        .tableLoader(tableLoader).build();
-    }
-
-    env.execute("Sync MySQL to Mixed-Iceberg table");
-  }
-
-  static class CompositeDebeziumDeserializationSchema
-    implements DebeziumDeserializationSchema<RowData> {
-
-    private final Map<String, RowDataDebeziumDeserializeSchema> deserializationSchemaMap;
-
-    public CompositeDebeziumDeserializationSchema(
-      final Map<String, RowDataDebeziumDeserializeSchema> deserializationSchemaMap) {
-      this.deserializationSchemaMap = deserializationSchemaMap;
-    }
-
-    @Override
-    public void deserialize(final SourceRecord record, final Collector<RowData> out)
-      throws Exception {
-      final Struct value = (Struct) record.value();
-      final Struct source = value.getStruct("source");
-      final String db = source.getString("db");
-      final String table = source.getString("table");
-      if (deserializationSchemaMap == null) {
-        throw new IllegalStateException("deserializationSchemaMap can not be null!");
-      }
-      deserializationSchemaMap.get(db + "." + table).deserialize(record, out);
-    }
-
-    @Override
-    public TypeInformation<RowData> getProducedType() {
-      return TypeInformation.of(RowData.class);
-    }
-  }
-
-  static class SplitCdcStreamFunction extends ProcessFunction<RowData, Void> {
-    private final Map<String, RowRowConverter> converters;
-
-    public SplitCdcStreamFunction(final Map<String, RowRowConverter> converterMap) {
-      this.converters = converterMap;
-    }
-
-    @Override
-    public void processElement(final RowData rowData,
-                               final ProcessFunction<RowData, Void>.Context ctx, final Collector<Void> out)
-      throws Exception {
-      // JoinedRowData like +I{row1=+I(1,2.340000,3), row2=+I(product,test_db)}
-      // so rowData.getArity() - 2 is the tableName field index
-      final String tableName = rowData.getString(rowData.getArity() - 2).toString();
-      ctx.output(new OutputTag<RowData>(tableName) {},
-        getField(JoinedRowData.class, (JoinedRowData) rowData, "row1"));
-    }
-
-    private static <O, V> V getField(Class<O> clazz, O obj, String fieldName) {
-      try {
-        java.lang.reflect.Field field = clazz.getDeclaredField(fieldName);
-        field.setAccessible(true);
-        Object v = field.get(obj);
-        return v == null ? null : (V) v;
-      } catch (NoSuchFieldException | IllegalAccessException e) {
-        throw new RuntimeException(e);
-      }
-    }
-  }
-
-  private static List<Tuple2<ObjectPath, ResolvedCatalogTable>> initSourceTables() {
-    List<Tuple2<ObjectPath, ResolvedCatalogTable>> pathAndTable = new ArrayList<>();
-    // build table "user"
-    Schema userSchema = Schema.newBuilder()
-      .column("id", DataTypes.INT().notNull())
-      .column("name", DataTypes.STRING())
-      .column("op_time", DataTypes.TIMESTAMP())
-      .primaryKey("id")
-      .build();
-    List<Column> userTableCols = Stream.of(
-      Column.physical("id", DataTypes.INT().notNull()),
-      Column.physical("name", DataTypes.STRING()),
-      Column.physical("op_time", DataTypes.TIMESTAMP())).collect(Collectors.toList());
-    Schema.UnresolvedPrimaryKey userPrimaryKey = userSchema.getPrimaryKey().orElseThrow(() -> new RuntimeException("table user required pk "));
-    ResolvedSchema userResolvedSchema = new ResolvedSchema(userTableCols, Collections.emptyList(), UniqueConstraint.primaryKey(
-      userPrimaryKey.getConstraintName(), userPrimaryKey.getColumnNames()));
-    ResolvedCatalogTable userTable = new ResolvedCatalogTable(
-      CatalogTable.of(userSchema, "", Collections.emptyList(), new HashMap<>()), userResolvedSchema);
-    pathAndTable.add(Tuple2.of(new ObjectPath("test_db", "user"), userTable));
-    
-    // build table "product"
-    Schema productSchema = Schema.newBuilder()
-      .column("productId", DataTypes.INT().notNull())
-      .column("price", DataTypes.DECIMAL(12, 6))
-      .column("saleCount", DataTypes.INT())
-      .primaryKey("productId")
-      .build();
-    List<Column> productTableCols = Stream.of(
-      Column.physical("productId", DataTypes.INT().notNull()),
-      Column.physical("price", DataTypes.DECIMAL(12, 6)),
-      Column.physical("saleCount", DataTypes.INT())).collect(Collectors.toList());
-    Schema.UnresolvedPrimaryKey productPrimaryKey = productSchema.getPrimaryKey().orElseThrow(() -> new RuntimeException("table product required pk "));
-    ResolvedSchema productResolvedSchema = new ResolvedSchema(productTableCols, Collections.emptyList(), UniqueConstraint.primaryKey(
-      productPrimaryKey.getConstraintName(), productPrimaryKey.getColumnNames()));
-    ResolvedCatalogTable productTable = new ResolvedCatalogTable(
-      CatalogTable.of(productSchema, "", Collections.emptyList(), new HashMap<>()), productResolvedSchema);
-    pathAndTable.add(Tuple2.of(new ObjectPath("test_db", "product"), productTable));
-    return pathAndTable;
-  }
-
-  private static Map<String, RowDataDebeziumDeserializeSchema> getDebeziumDeserializeSchemas(
-    final List<Tuple2<ObjectPath, ResolvedCatalogTable>> pathAndTable) {
-    return pathAndTable.stream()
-      .collect(toMap(e -> e.f0.toString(), e -> RowDataDebeziumDeserializeSchema.newBuilder()
-        .setPhysicalRowType(
-          (RowType) e.f1.getResolvedSchema().toPhysicalRowDataType().getLogicalType())
-        .setUserDefinedConverterFactory(MySqlDeserializationConverterFactory.instance())
-        .setMetadataConverters(
-          new MetadataConverter[] {TABLE_NAME.getConverter(), DATABASE_NAME.getConverter()})
-        .setResultTypeInfo(TypeInformation.of(RowData.class)).build()));
-  }
-}
-```
\ No newline at end of file
diff --git a/amoro-docs/content/user-guides/configurations.md b/amoro-docs/content/user-guides/configurations.md
deleted file mode 100644
index 41afd44..0000000
--- a/amoro-docs/content/user-guides/configurations.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-title: "Configurations"
-url: configurations
-aliases:
-    - "user-guides/configurations"
-menu:
-    main:
-        parent: User Guides
-        weight: 300
----
-# Table Configurations
-
-## Multi-level configuration management
-
-Amoro provides configurations that can be configured at the `Catalog`, `Table`, and `Engine` levels. The configuration 
-priority is given first to the `Engine`, followed by the `Table`, and finally by the `Catalog`. 
-
-- Catalog: Generally, we recommend 
-users to set default values for tables through the [Catalog properties configuration](../managing-catalogs/#configure-properties), such as Self-optimizing related configurations.
-- Table: We also recommend users to 
-specify customized configurations when [Create Table](../using-tables/#create-table), which can also be 
-modified through [Alter Table](../using-tables/#modify-table) operations. 
-- Engine: If tuning is required in the engines, then consider configuring it at the engine level, refer to 
-[Spark](../spark-configuration/) and [Flink](../flink-dml/).
-
-## Self-optimizing configurations
-
-Self-optimizing configurations are applicable to both Iceberg Format and Mixed streaming Format.
-
-| Key                                                 | Default          | Description                                              |
-|-----------------------------------------------------|------------------|---------------------------------------------------|
-| self-optimizing.enabled                             | true             | Enables Self-optimizing                                |
-| self-optimizing.group                               | default          | Optimizer group for Self-optimizing                                   |
-| self-optimizing.quota                               | 0.1              | Quota for Self-optimizing, indicating the CPU resource the table can take up                       |
-| self-optimizing.execute.num-retries                 | 5                | Number of retries after failure of Self-optimizing                       |
-| self-optimizing.target-size                         | 134217728(128MB) | Target size for Self-optimizing                           |
-| self-optimizing.max-file-count                      | 10000            | Maximum number of files processed by a Self-optimizing process              |               |
-| self-optimizing.max-task-size-bytes                 | 134217728(128MB) | Maximum file size bytes in a single task for splitting tasks                |               |
-| self-optimizing.fragment-ratio                      | 8                | The fragment file size threshold. We could divide self-optimizing.target-size by this ratio to get the actual fragment file size           |
-| self-optimizing.minor.trigger.file-count            | 12               | The minimum numbers of fragment files to trigger minor optimizing   |
-| self-optimizing.minor.trigger.interval              | 3600000(1 hour)  | The time interval in milliseconds to trigger minor optimizing                         |
-| self-optimizing.major.trigger.duplicate-ratio       | 0.1              | The ratio of duplicate data of segment files to trigger major optimizing  |
-| self-optimizing.full.trigger.interval               | -1(closed)       | The time interval in milliseconds to trigger full optimizing
-| self-optimizing.full.rewrite-all-files              | true             | Whether full optimizing rewrites all files or skips files that do not need to be optimized |
-
-## Data-cleaning configurations
-
-Data-cleaning configurations are applicable to both Iceberg Format and Mixed streaming Format.
-
-| Key                                         | Default       | Description                                                                                                 |
-|---------------------------------------------|---------------|-------------------------------------------------------------------------------------------------------------|
-| table-expire.enabled                        | true          | Enables periodically expire table                                                                           |
-| change.data.ttl.minutes                     | 10080(7 days) | Time to live in minutes for data of ChangeStore                                                             |
-| snapshot.base.keep.minutes                  | 720(12 hours) | Table-Expiration keeps the latest snapshots of BaseStore within a specified time in minutes                 |
-| clean-orphan-file.enabled                   | false         | Enables periodically clean orphan files                                                                     |
-| clean-orphan-file.min-existing-time-minutes | 2880(2 days)  | Cleaning orphan files keeps the files modified within a specified time in minutes                           |
-| clean-dangling-delete-files.enabled         | true          | Whether to enable cleaning of dangling delete files                                                         |
-| data-expire.enabled                         | false         | Whether to enable data expiration                                                                           |
-| data-expire.level                           | partition     | Level of data expiration. Including partition and file                                                      |
-| data-expire.field                           | NULL          | Field used to determine data expiration, supporting timestamp/timestampz/long type and string type field in date format |
-| data-expire.datetime-string-pattern         | yyyy-MM-dd    | Pattern used for matching string datetime |
-| data-expire.datetime-number-format          | TIMESTAMP_MS  | Timestamp unit for long field. Including TIMESTAMP_MS and TIMESTAMP_S |
-| data-expire.retention-time                  | NULL          | Retention period for data expiration. For example, 1d means retaining data for 1 day. Other supported units include h (hour), min (minute), s (second), ms (millisecond), etc. |
-
-## Mixed Format configurations
-
-If using Iceberg Format,please refer to [Iceberg configurations](https://iceberg.apache.org/docs/latest/configuration/),the following configurations are only applicable to Mixed Format.
-
-### Reading configurations
-
-| Key                                                 | Default          | Description                                              |
-| ---------------------------------- | ---------------- | ----------------------------------       |
-| read.split.open-file-cost          | 4194304(4MB)    | The estimated cost to open a file                        |
-| read.split.planning-lookback       | 10               | Number of bins to consider when combining input splits               |
-| read.split.target-size              | 134217728(128MB)| Target size when combining data input splits                     |
-| read.split.delete-ratio            | 0.05             | When the ratio of delete files is below this threshold, the read task will be split into more tasks to improve query speed |
-
-### Writing configurations
-
-| Key                            | Default         | Description                                                                                                     |
-|--------------------------------|-----------------|-----------------------------------------------------------------------------------------------------------------|
-| base.write.format              | parquet         | File format for the table for BaseStore, applicable to KeyedTable                                               |
-| change.write.format            | parquet         | File format for the table for ChangeStore, applicable to KeyedTable                                             |
-| write.format.default           | parquet         | Default file format for the table, applicable to UnkeyedTable                                                   |
-| base.file-index.hash-bucket    | 4               | Initial number of buckets for BaseStore auto-bucket                                                             |
-| change.file-index.hash-bucket  | 4               | Initial number of buckets for ChangeStore auto-bucket                                                           |
-| write.target-file-size-bytes   | 134217728(128MB) | Target size when writing                                                                                        |
-| write.upsert.enabled           | false           | Enable upsert mode, multiple insert data with the same primary key will be merged if enabled                    |
-| write.distribution-mode        | hash            | Shuffle rules for writing. UnkeyedTable can choose between none and hash, while KeyedTable can only choose hash |
-| write.distribution.hash-mode   | auto            | Auto-bucket mode, which supports primary-key, partition-key, primary-partition-key, and auto                    |
-
-
-### LogStore configurations
-
-| Key                                     | Default | Description                                                                                                                                                                                                                                                                                                                                                                                                                                            [...]
-|-----------------------------------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
-| log-store.enabled                       | false   | Enables LogStore                                                                                                                                                                                                                                                                                                                                                                                                                                       [...]
-| log-store.type                          | kafka   | Type of LogStore, which supports 'kafka' and 'pulsar'                                                                                                                                                                                                                                                                                                                                                                                                  [...]
-| log-store.address                       | NULL    | Address of LogStore, required when LogStore enabled. For Kafka, this is the Kafka bootstrap servers. For Pulsar, this is the Pulsar Service URL, such as 'pulsar://localhost:6650'                                                                                                                                                                                                                                                                     [...]
-| log-store.topic                         | NULL    | Topic of LogStore, required when LogStore enabled                                                                                                                                                                                                                                                                                                                                                                                                      [...]
-| properties.pulsar.admin.adminUrl        | NULL    | HTTP URL of Pulsar admin, such as 'http://my-broker.example.com:8080'. Only required when log-store.type=pulsar                                                                                                                                                                                                                                                                                                                                        [...]
-| properties.XXX                          | NULL    | Other configurations of LogStore. <br><br>For Kafka, all the configurations supported by Kafka Consumer/Producer can be set by prefixing them with `properties.`,<br>such as `'properties.batch.size'='16384'`,<br>refer to [Kafka Consumer Configurations](https://kafka.apache.org/documentation/#consumerconfigs), [Kafka Producer Configurations](https://kafka.apache.org/documentation/#producerconfigs) for more details.<br><br> For Pulsar,al [...]
-
-### Watermark configurations
-
-| Key                                           | Default          | Description                                              |
-| ----------------------------------------------| ------------------- | ----------------------------------       |
-| table.event-time-field                        | _ingest_time        | The event time field for calculating the watermark. The default `_ingest_time` indicates calculating with the time when the data was written |
-| table.watermark-allowed-lateness-second       | 0                   | The allowed lateness time in seconds when calculating watermark          |
-| table.event-time-field.datetime-string-format | `yyyy-MM-dd HH:mm:ss` | The format of event time when it is in string format           |
-| table.event-time-field.datetime-number-format | TIMESTAMP_MS | The format of event time when it is in numeric format, which supports TIMESTAMP_MS (timestamp in milliseconds) and TIMESTAMP_S (timestamp in seconds)|
-
-### Mixed-Hive format configurations
-
-| Key                               | Default          | Description                                                                                            |
-|-----------------------------------|------------------|--------------------------------------------------------------------------------------------------------|
-| base.hive.auto-sync-schema-change | true             | Whether synchronize schema changes of Hive Table from HMS                                              |
-| base.hive.auto-sync-data-write    | false            | Whether synchronize data changes of Hive Table from HMS, this should be true when writing to Hive      |
-| base.hive.consistent-write.enabled | true            | To avoid writing dirty data, the files written to the Hive directory will be hidden files and renamed to visible files upon commit. |
\ No newline at end of file
diff --git a/amoro-docs/content/user-guides/metrics.md b/amoro-docs/content/user-guides/metrics.md
deleted file mode 100644
index 0dab5e2..0000000
--- a/amoro-docs/content/user-guides/metrics.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: "Metrics"
-url: metrics
-aliases:
-    - "user-guides/metrics"
-menu:
-    main:
-        parent: User Guides
-        weight: 500
----
-# Metrics
-Amoro provides both table-level and platform-level metrics to help users understand the runtime status of the current table.
-## Table metrics
-The Amoro Tables details page provides multiple tabs to display the status of the table from various dimensions, mainly including:
-
-| **Tab Name**   | **Description**                                               |
-| ------------ | ------------------------------------------------------------ |
-| Details      | Display the table's schema, primary key configuration, partition configuration, properties; as well as the metric information of the files stored in ChangeStore and BaseStore, including the number of files and average file size, as well as the latest submission time of the files. |
-| Transactions | The displayed transaction list does not include snapshots generated by Self-optimizing.  |
-| Optimized    | Display all the historical Optimize records of the table, each record shows the number and average size of files before and after Optimize, as well as the execution time of each Optimize. |
-| Operations   | Display the current table's DDL historical change records. |
-
-![table-details](../images/admin/table_metrics.png)
-
-![table-optimize-history](../images/admin/table_optimizer_history.png)
-
-## Self-optimizing metrics
-The Optimizers page displays platform-level Self-optimizing information, including the total amount and usage of resources under different groups, as well as the status and resource usage of all tables that have executed Self-optimizing under the group.
-![optimizing-metrics](../images/admin/optimizer_metrics.png)
-
-
-- **Optimizing Status**: The current optimizing status of the table, including minor, major, full, idle, and pending. 
-- **Duration**: The duration of the current status. 
-- **File Count**: The total number of files involved in the current Self-optimizing, including base, insert, eq-delete, and pos-delete file types. 
-- **File Size**: The total size of files involved in the current Self-optimizing. 
-- **Quota**: The proportion of self-optimizing execution time executed per unit time. 
-- **Quota Occupation**: The actual Quota used for self-optimizing during execution of the table in the last hour. When optimizer resources are sufficient and the table requires more resources for self-optimizing, this value will be greater than 100%. When resources are scarce or the table requires fewer resources for self-optimizing, this value will be less than 100%.
\ No newline at end of file
diff --git a/amoro-docs/content/user-guides/using-tables.md b/amoro-docs/content/user-guides/using-tables.md
deleted file mode 100644
index 9bb21a0..0000000
--- a/amoro-docs/content/user-guides/using-tables.md
+++ /dev/null
@@ -1,209 +0,0 @@
----
-title: "Using Tables"
-url: using-tables
-aliases:
-    - "user-guides/using-tables"
-menu:
-    main:
-        parent: User Guides
-        weight: 100
----
-# Using Tables
-
-The SQL execution tool `Terminal` is provided in AMS dashboard to help users quickly create, modify and delete tables.
-It is also available in [Spark](../spark-ddl/) and [Flink](../flink-ddl/) and other engines to manage tables using SQL.
-
-## Create table
-After logging into AMS dashboard, go to `Terminal`, enter the table creation statement and execute it to complete the table creation.
-The following is an example of table creation:
-
-```sql
-create table test_db.test_log_store(
-  id int,
-  name string,
-  op_time timestamp,
-  primary key(id)
-) using arctic
-partitioned by(days(op_time))
-tblproperties(
-  'log-store.enable' = 'true',
-  'log-store.type' = 'kafka',
-  'log-store.address' = '127.0.0.1:9092',
-  'log-store.topic' = 'local_catalog.test_db.test_log_store.log_store',
-  'table.event-time-field' = 'op_time',
-  'table.watermark-allowed-lateness-second' = '60');
-```
-
-Currently, terminal uses Spark Engine for SQL execution. For more information on the syntax of creating tables, refer to [Spark DDL](../spark-ddl/#create-table). Different Catalogs create different table formats, refer to [Create Catalog](../managing-catalogs/#create-catalog)
-
-### Configure LogStore
-As described in [Mixed-Iceberg format](../mixed-iceberg-format/), Mixed-Iceberg format may consist of several components, and BaseStore and ChangeStore will be automatically created upon table creation.
-LogStore, as an optional component, requires separate configuration to specify, The complete configuration for LogStore can be found in [LogStore Configuration](../configurations/#logstore-configurations).
-
-In the example above, the Kafka cluster 127.0.0.1:9092 and the topic local_catalog.test_db.test_log_store.log_store are used as the LogStore for the new table. 
-Before executing the above statement, you need to manually create the corresponding topic in the Kafka cluster or enable the automatic creation of topics feature for the cluster.
-
-### Configure watermark
-Watermark is used to describe the write progress of a table. Specifically, it is a timestamp attribute on the table, indicating that all data with a timestamp smaller than the watermark has been written to the table. 
-It is generally used to observe the write progress of a table and can also serve as a trigger metric for downstream batch computing tasks.
-
-
-In the example above, op_time is set as the event time field of the table, and the op_time of the written data is used to calculate the watermark of the table. 
-To handle out-of-order writes, the permitted lateness of data when calculating the watermark is set to one minute.
-You can view the current watermark of the table in the table details on the AMS Dashboard at AMS dashboard.
-
-![arctic-table-watermark](../images/admin/watermark_table_detail.png)
-
-You can also use the following SQL statement in the `Terminal` to query the watermark of a table:
-
-```sql
-SHOW TBLPROPERTIES test_db.test_log_store ('watermark.table');
-```
-
-You can expect to get the following results:
-
-```text
-+-----------------+---------------+
-| key             | value         |
-+-----------------+---------------+
-| watermark.table | 1668579055000 |
-+-----------------+---------------+
-```
-
-{{< hint info >}}
-Watermark configuration is only supported in Mixed-Hive format and Mixed-Iceberg format, and is not supported in Iceberg format for now.
-{{< /hint >}}
-    
-## Modify table
-
-After logging into the AMS dashboard, go to the `Terminal` and enter the 
-modification statement to complete the table modification. The current `Terminal` uses Spark Engine to execute SQL. For 
-more information on modifying tables, please refer to the syntax guide [Spark DDL](../spark-ddl#alter-statement).
-
-## Upgrade a Hive table
-Amoro supports [Mixed-Hive format](../mixed-hive-format/) table, which combines the capabilities of Hive formats to directly implement new table formats on top of Hive.
-
-After logging into the AMS dashboard, select a table under a certain Hive Catalog from the `Tables` menu to perform the upgrade operation.
-
-![Hive Table Detail](../images/admin/hive-table-detail.png)
-
-Click the `Upgrade` button in the upper right corner of the table details (this button is not displayed for Hive tables that have already been upgraded).
-
-![Hive Table Upgrade](../images/admin/hive-table-upgrade.png)
-
-On the upgrade page, select the primary key for the table and add additional parameters, then click `OK` to complete the upgrade of the Hive table.
-
-## Configure self-optimizing
-
-Amoro provides a self-optimizing feature, which requires an active optimizer in the Optimizer Group configured for the table.
-
-### Modify optimizer group
-To use an optimizer launched under a specific optimizer group to perform self-optimizing, you need to modify the `self-optimizing.group` parameter of the table to specify a specific resource pool for the table. 
-The setting method is as follows:
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'self-optimizing.group' = 'group_name');
-```
-
-In default,`'self-optimizing.group' = 'default'`。
-
-### Adjust optimizing resources 
-
-If there are multiple tables to be optimized under the same Optimizer Group, you can manually adjust the resource proportion of each table by adjusting the `quota`.
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'self-optimizing.quota' = '0.1');
-```
-
-For more information, please refer to [Self-optimizing quota](../self-optimizing/#quota)。
-
-### Adjust optimizing parameters
-
-You can manually set parameters such as execution interval, task size, and execution timeout for different types of Optimize. 
-For example, to set the execution interval for minor optimizing, you can do the following:
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'self-optimizing.minor.trigger.interval' = '3600000');
-```
-
-More optimization parameter adjustment refer to [Self-optimizing configuration](../configurations/#self-optimizing-configurations)。
-
-### Enable or disable self-optimizing
-
-The Optimize of the table is enabled by default. If you want to disable the Optimize feature, execute the following command. 
-Conversely, you can re-enable it:
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'self-optimizing.enabled' = 'false');
-```
-
-## Configure data expiration
-
-Amoro can periodically clean data based on the table's expiration policy, which includes properties such as whether to enable expiration, retention duration, expiration level, and the selection of the field for expiration. 
-it's also necessary for AMS to have the data expiration thread enabled. You can enable the 'data-expiration' property in the configuration file
-
-### Enable or disable data expiration
-
-By default, Amoro has data expiration disabled. If you want to enable data expiration, please execute the following command.
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'data-expire.enabled' = 'true');
-```
-
-### Set the data retention period
-
-The configuration for data retention duration consists of a number and a unit. For example, '90d' represents retaining data for 90 days, and '12h' indicates 12 hours.
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'data-expire.retention-time' = '90d');
-```
-
-### Select the event-time field
-
-Data expiration requires users to specify a field for determining expiration. 
-In addition to supporting timestampz/timestamp field types for this purpose, it also supports string and long field type. 
-String field require a date pattern for proper parsing, with the default format being 'yyyy-MM-dd'. Additionally, long fields can be chosen as the expiration event time, but you need to specify the timestamp's unit, which can be in `TIMESTAMP_MS` or `TIMESTAMP_S`.
-Note that timestamp, timestampz, and long field types use UTC, while others use the local time zone.
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'data-expire.field' = 'op_time');
-
--- select string field
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'data-expire.field' = 'op_time',
-    'data-expire.datetime-string-pattern' = 'yyyy-MM-dd');
-
--- select long field
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'data-expire.field' = 'op_time',
-    'data-expire.datetime-number-format' = 'TIMESTAMP_MS');
-```
-
-### Adjust the data expiration level
-
-Data expiration supports two levels, including `PARTITION` and `FILE`. The default level is `PARTITION`, which means that AMS deletes files only when all the files within a partition have expired.
-
-```sql
-ALTER TABLE test_db.test_log_store set tblproperties (
-    'data-expire.level' = 'partition');
-```
-
-## Delete table
-
-After logging into the AMS Dashboard. To modify a table, enter the modification statement in the `terminal` and execute it.
-
-
-Here is an example of how to delete a table:
-
-```sql
-DROP TABLE test_db.test_log_store;
-```
-
-The current terminal is using the Spark engine to execute SQL. For more information about deleting tables, you can refer to  [Spark DDL](../spark-ddl/#drop-table).
diff --git a/amoro-docs/hugo.toml b/amoro-docs/hugo.toml
deleted file mode 100644
index 6d12c2f..0000000
--- a/amoro-docs/hugo.toml
+++ /dev/null
@@ -1,56 +0,0 @@
-baseURL = ""
-canonifyURLs = "true"
-relativeURLs = "true"
-languageCode = "en-us"
-title = "Amoro"
-theme= "amoro-theme"
-
-[params]
-  siteType = "docs"
-  search = true
-  versions.iceberg = "" # This is populated by the github deploy workflow and is equal to the branch name
-  versions.nessie = "0.59.0"
-  latestVersions.iceberg = "0.5.0"  # This is used for the version badge on the "latest" site version
-  BookSection='docs' # This determines which directory will inform the left navigation menu
-  disableHome=true
-
-[outputFormats.SearchIndex]
-baseName = "search"
-mediaType = "application/json"
-
-[outputs]
-home = [ "HTML", "RSS", "SearchIndex" ]
-
-[menu]
-
-  topnav = [
-    { name = "Quickstart", weight = 100 },
-    { name = "Setup", parent = "Quickstart", pre = "relative", url = "../../quickstart-setup/", weight = 101 },
-    { name = "Quick Demo", parent = "Quickstart", pre = "relative", url = "../../quick-demo/", weight = 102 },
-    { name = "Docs", weight = 200 },
-    { name = "latest", parent = "Docs", pre = "relative", url = "../../docs/latest/", weight = 201 },
-    { name = "0.6.0", parent = "Docs", pre = "relative", url = "../../docs/latest/", weight = 202 },
-    { name = "0.5.1", parent = "Docs", pre = "relative", url = "../../docs/0.5.1/", weight = 203 },
-    { name = "0.5.0", parent = "Docs", pre = "relative", url = "../../docs/0.5.0/", weight = 204 },
-    { name = "Benchmark", weight = 300 },
-    { name = "Benchmark Report", parent = "Benchmark", pre = "relative", url = "../../benchmark-report/", weight = 301 },
-    { name = "Benchmark Guide", parent = "Benchmark", pre = "relative", url = "../../benchmark-guide/", weight = 302 },
-    { name = "Download", pre = "relative", url = "../../download/", weight = 400 },
-    { name = "Roadmap", pre = "relative", url = "../../roadmap/", weight = 500 },
-    { name = "Community", weight = 600 },
-    { name = "Join Community", parent = "Community", pre = "relative", url = "../../join-community/", weight = 601 },
-    { name = "How to contribute", parent = "Community", pre = "relative", url = "../../how-to-contribute/", weight = 602 },
-  ]
-
-  main = [ # Main menu, docs site left nav
-    { name = "Introduction", url = "/", weight = 1},
-    { name = "Concepts", weight = 100 },
-    { name = "Admin Guides", weight = 200},
-    { name = "User Guides", weight = 300},
-    { name = "Formats", weight = 400 },
-    { name = "Flink", weight = 500},
-    { name = "Spark", weight = 600},
-  ]
-
-[markup.goldmark.renderer]
-unsafe= true
\ No newline at end of file
diff --git a/amoro-docs/themes/amoro-theme b/amoro-docs/themes/amoro-theme
deleted file mode 120000
index 3954ea6..0000000
--- a/amoro-docs/themes/amoro-theme
+++ /dev/null
@@ -1 +0,0 @@
-../../amoro-theme
\ No newline at end of file
diff --git a/amoro-site/.hugo_build.lock b/amoro-site/.hugo_build.lock
deleted file mode 100644
index e69de29..0000000
diff --git a/amoro-site/archetypes/default.md b/amoro-site/archetypes/default.md
deleted file mode 100644
index 00e77bd..0000000
--- a/amoro-site/archetypes/default.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: "{{ replace .Name "-" " " | title }}"
-date: {{ .Date }}
-draft: true
----
-
diff --git a/amoro-site/content/benchmark/benchmark-guide.md b/amoro-site/content/benchmark/benchmark-guide.md
deleted file mode 100644
index b97c143..0000000
--- a/amoro-site/content/benchmark/benchmark-guide.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: "How To Benchmark"
-url: benchmark-guide
-disableSidebar: true
----
-# Benchmark Guild
-
-This guilde introduces detailed steps for executing the benchmark to validate performance of various data lake formats. 
-
-By following the steps in the guild, you can learn about the analytical performance of different data lake table format. At the same time, you can flexibly adjust the test scenarios to obtain test results that better suit your actual scenario.
-
-## Deploy testing environment
-
-### Deploy by Docker
-
-With [Docker-Compose](https://docs.docker.com/compose/), you can quickly set up an environment for performing the benchmark.
-The detailed steps reference: [Lakehouse-benchmark](https://github.com/NetEase/lakehouse-benchmark/tree/master/docker/benchmark).
-
-### Deploy manually
-
-Alternatively, you can manually deploy the following components to set up the test environment:
-
-| Component  | Version  | Description |  Installation Guide|
-|:----------|:----------|:--------|:--------|
-| MySQL    | 5.7+    | MySQL is used to generate TPC-C data for synchronization to data lakes. | [MySQL Installation Guide](https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/) |
-| Hadoop   | 2.3.7+  | Hadoop is used to provide the storage for data lakes. | [Ambari](https://ambari.apache.org/)    |
-| Trino    | 380     | Trino is used to execute TPC-H queries for Iceberg and Mixed-Iceberg format tables. | [Trino Installation Guide](https://trino.io/docs/current/installation/deployment.html) |
-| Amoro Trino Connector | 0.4.0 | To query Mixed-Iceberg Format tables in Trino, you need to install and configure the Amoro connector in Trino. | [Amoro Trino Connector](https://amoro.netease.com/docs/latest/trino/)    |
-| Iceberg Trino Connector | 0.13.0 | To query Iceberg Format tables in Trino, you need to install and configure the Iceberg connector in Trino. | [Iceberg Trino Connector](https://trino.io/docs/current/connector/iceberg.html)    |
-| Presto    | 274 | Presto is used to execute TPC-H queries for Hudi format tables. | [Presto Installation Guide](https://prestodb.io/docs/current/installation/deployment.html) |
-| Hudi Presto Connector | 0.11.1  | To query Iceberg Format tables in Trino, you need to install and configure the Iceberg connector in Presto. | [Hudi Presto Connector](https://prestodb.io/docs/current/connector/hudi.html)    |
-| AMS    | 0.4.0 | Amoro Management Service, support self-optimizing on tables during the test. | [AMS Installation Guide](https://amoro.netease.com/docs/latest/deployment/) |
-| data-lake-benchmark | 21  | The core program of Benchmark which is responsible for generating test data, executing the testing process, and generating test results. | [Data Lake Benchmark](https://github.com/NetEase/data-lake-benchmark#readme)    |
-| lakehouse-benchmark-ingestion | 1.0  | Data synchronization tool based on Flink-CDC which can synchronize data from  database to data lake in real-time. | [Lakehouse Benchmark Ingestion](https://github.com/NetEase/lakehouse-benchmark-ingestion)    |
-
-
-## Benchmark steps
-1. Configure the configuration file `config/mysql/sample_chbenchmark_config.xml` file of program `data-lake-benchmark`. Fill in the information of MySQL and parameter `scalefactor`.  `scalefactor` represents the number of warehouses, which controls the overall data volume. Generally, choose 10 or 100.
-
-2. Generate static data into MySQL with command:
-  ```shell
-  java -jar lakehouse-benchmark.jar -b tpcc,chbenchmark -c config/mysql/sample_chbenchmark_config.xml --create=true --load=true
-  ```
-
-3. Configure the configuration file `config/ingestion-conf.yaml` file of program `lakehouse-benchmark-ingestion`. Fill in the information of MySQL.
-
-4. Start the ingestion job to synchronize data form MySQL to data lake tables witch command:
-  ```shell
-  java -cp lakehouse-benchmark-ingestion-1.0-SNAPSHOT.jar com.netease.arctic.benchmark.ingestion.MainRunner -confDir [confDir] -sinkType [arctic/iceberg/hudi] -sinkDatabase [dbName]
-  ```
-
-5. Execute TPC-H benchmark on static data with command:
-  ```shell
-  java -jar lakehouse-benchmark.jar -b chbenchmarkForTrino -c config/trino/trino_chbenchmark_config.xml --create=false --load=false --execute=true
-  ```
-
-6. Execute TPC-C program to continuously write data into MYSQL witch command:
-  ```shell
-  java -jar lakehouse-benchmark.jar -b tpcc,chbenchmark -c config/mysql/sample_chbenchmark_config.xml --execute=true -s 5
-  ```
-
-7. Execute TPC-H benchmark on dynamic data with command:
-  ```shell
-  java -jar lakehouse-benchmark.jar -b chbenchmarkForTrino -c config/trino/trino_chbenchmark_config.xml --create=false --load=false --execute=true
-  ```
-
-8. Obtain the benchmark results in the `result` directory of the `data-lake-benchmark` project.
-   
-9. Repeat step 7 to obtain benchmark results for different points in time.
\ No newline at end of file
diff --git a/amoro-site/content/benchmark/benchmark.md b/amoro-site/content/benchmark/benchmark.md
deleted file mode 100644
index a0950ff..0000000
--- a/amoro-site/content/benchmark/benchmark.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-title: "Benchmark Report"
-url: benchmark-report
-disableSidebar: true
----
-# Benchmark Report 
-
-## Test purpose
-
-This test aims at comparing the OLAP benchmark performance of various data lake formats in the scenario of continuous streaming ingestion in the CDC database.
-
-Meanwhile, particular attention was paid during the testing process to the impact of enabling self-optimizing on the analytical performance of the table.
-
-## Test envrionment
-
-### Hardware configuration
-
-| Number | OS | Cpu core | Memory | Disk type   | Deployed components  |
-| ---- | -------- | --------- | ---- | -------- | ---- |
-| 1    | CentOS 7 | 40        | 256  | SAS      | HDFS、Hive、Yarn |
-| 2    | CentOS 7 | 40        | 256  | SAS      | HDFS、Hive、Yarn |
-| 3    | CentOS 7 | 40        | 256  | SAS      | HDFS、Hive、Yarn |
-| 4    | CentOS 7 | 40        | 256  | SAS      | Trino、Presto |
-| 5    | CentOS 7 | 40        | 256  | SAS      | Trino、Presto |
-| 6    | CentOS 7 | 40        | 256  | SAS      | Trino、Presto |
-
-### Software version
-
-| Software | Version |
-| ---- | -------- | 
-| Trino    | 380 | 
-| Presto    | 274 | 
-| Iceberg    | 0.13 | 
-| Amoro    | 0.4 | 
-| Hudi    | 0.11.1 | 
-
-## Test plan
-
-### Overview
-
-This test is based on CHbenchmark, which is a hybrid testing standard that integrates TPCC and TPCH. The overall testing workload can be divided into two categories:
-
-- 5 OLTP workloads based on TPC-C: NewOrder, Payment, OrderStatus, Delivery, and StockLevel.
-
-- 22 OLAP workloads based on TCP-H, where Q15 was abandoned in this test due to its association with views and the lack of view rewriting.
-
-<img src="../images/chbenchmark/OLTP-OLAP.png" alt="OLTP AND OLAP" width="60%" height="60%">
-
-### Prepare test data
-
-Based on the TPC-C, the raw data was constructed in MySQL for this test. The dataset includes a total of 12 tables, with the relationship between TPC-C and TPC-H tables shown in the following diagram:
-
-<img src="../images/chbenchmark/TPCC-TPCH.png" alt="TPCC AND TPCH" width="60%" height="60%">
-
-In addition, the relationship between the data sizes of each table is shown in the following table, where `w` represents the number of warehouses. It can be observed that the data sizes of intermediate tables such as `new_order` and `stock` are affected by the number of warehouses. Therefore, the data set size can be adjusted by controlling the number of warehouses during testing.
-
-<img src="../images/chbenchmark/chbenchmark.png" alt="chbenchmark" width="60%" height="60%">
-
-In this test, the number of warehouses was set to 100, and the initial data set size in the MySQL database was approximately 10GB. The following table shows the number of data records for each table in the initial data set and the changes in the number of data records for each table after running the one-hour TPC-C test.
-
-| Table name | The number of records (rows) in beginning | The number of records (rows) after running a one-hour TPC-C test |
-| ---------- | ---------------------------- | ------------------------------------ |
-| warehouse  | 100                          | 100                                  |
-| item       | 100000                       | 100000                               |
-| stock      | 10000000                     | 10000000                             |
-| district   | 1000                         | 1000                                 |
-| customer   | 3000000                      | 3000000                              |
-| history    | 3000000                      | 3119285(+119285)                   |
-| oorder     | 3000000                      | 3124142(+124142)                   |
-| new_order  | 893709                       | 907373(+13664)                     |
-| order_line | 29996774                     | 31252799(+1256025)                 |
-| region     | 5                            | 5                                    |
-| nation     | 62                           | 62                                   |
-| supplier   | 1000                         | 1000                                 |
-
-### Perform the test
-
-Before starting TPC-H testing, start a Flink job to synchronize both the history data and real-time data from MySQL into the data lake.
-Afterwards, execute TPC-H testing through query engines such as Trino or Presto.
-
-TPC-H contains 22 query statements, only three of which are listed here due to space limitation:
-
-```sql
--- query1 
-SELECT ol_number,
-    sum(ol_quantity) AS sum_qty,
-    sum(ol_amount) AS sum_amount,
-    avg(ol_quantity) AS avg_qty,
-    avg(ol_amount) AS avg_amount,
-    count(*) AS count_order
-FROM order_line
-WHERE ol_delivery_d > '2007-01-02 00:00:00.000000'
-GROUP BY ol_number
-ORDER BY ol_number;
-        
- -- query2 
-SELECT su_suppkey,
-    su_name,
-    n_name,
-    i_id,
-    i_name,
-    su_address,
-    su_phone,
-    su_comment
-FROM item, supplier, stock, nation, region, 
-    (SELECT s_i_id AS m_i_id,
-        MIN(s_quantity) AS m_s_quantity
-    FROM stock, supplier, nation, region
-    WHERE MOD((s_w_id*s_i_id), 10000) = su_suppkey
-        AND su_nationkey = n_nationkey
-        AND n_regionkey = r_regionkey
-        AND r_name LIKE 'Europ%'
-    GROUP BY s_i_id) m
-WHERE i_id = s_i_id
-    AND MOD((s_w_id * s_i_id), 10000) = su_suppkey
-    AND su_nationkey = n_nationkey
-    AND n_regionkey = r_regionkey
-    AND i_data LIKE '%b'
-    AND r_name LIKE 'Europ%'
-    AND i_id=m_i_id
-    AND s_quantity = m_s_quantity
-ORDER BY n_name, su_name, i_id;
-        
- -- query3 
-SELECT ol_o_id,
-    ol_w_id,
-    ol_d_id,
-    sum(ol_amount) AS revenue,
-    o_entry_d
-FROM customer, new_order, oorder, order_line
-WHERE c_state LIKE 'A%'
-    AND c_id = o_c_id
-    AND c_w_id = o_w_id
-    AND c_d_id = o_d_id
-    AND no_w_id = o_w_id
-    AND no_d_id = o_d_id
-    AND no_o_id = o_id
-    AND ol_w_id = o_w_id
-    AND ol_d_id = o_d_id
-    AND ol_o_id = o_id
-    AND o_entry_d > '2007-01-02 00:00:00.000000'
-GROUP BY ol_o_id, ol_w_id, ol_d_id, o_entry_d
-ORDER BY revenue DESC, o_entry_d;
-```
-
-## Test results
-
-### Static result
-![arctic iceberg static performence](../images/chbenchmark/arctic-iceberg-100-warehouse-static-performence.png)
-
-The figure above shows a performance comparison of Iceberg and Mixed-Iceberg table formats for querying static data. It can be seen from the figure that the query performance of the two table formats is similar.
-
-### Dynamic result
-
-![Amoro Iceberg Hudi 100 warehouse performence with TPCC time](../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_with_TPCC_time.png)
-
-The figure above shows a performance comparison of Iceberg 、Mixed-Iceberg and Hudi table formats for querying dynamic data. The test recorded the results of running TPC-C for different time periods.
-
-The following are the specific results of each test group:
-
-![Amoro Iceberg Hudi 100 warehouse performence on TPCC 0-30 minutes](../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_0-30_minutes.png)
-
-![Amoro Iceberg Hudi 100 warehouse performence on TPCC 30-60 minutes](../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_30-60_minutes.png)
-
-![Amoro Iceberg Hudi 100 warehouse performence on TPCC 60-90 minutes](../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_60-90_minutes.png)
-
-![Amoro Iceberg Hudi 100 warehouse performence on TPCC 90-120 minutes](../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_90-120_minutes.png)
-
-## Conclusion
-
-- In the case of static data, the query performance of Iceberg and Mixed-Iceberg tables is similar.
-- Without enabling self-optimizing, the query performance of all table formats will continue to decline as dynamic data is continuously written.
-- After enabling self-optimizing, the query performance of all table formats remains stable as dynamic data is continuously written. 
-   
\ No newline at end of file
diff --git a/amoro-site/content/community/how-to-contribute.md b/amoro-site/content/community/how-to-contribute.md
deleted file mode 100644
index a842beb..0000000
--- a/amoro-site/content/community/how-to-contribute.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: "How To Contribute"
-url: how-to-contribute
-disableSidebar: true
----
-# Contributing to Amoro
-
-Thanks for your interest in the Amoro project. Contributions are welcome and are greatly appreciated! Every little effort helps, and a credit will always be given.
-
-This page provides some orientation and resources we have for you to get involved. It also offers recommendations on getting the best results when engaging with the community. We hope that this will be a pleasant first experience for you to return to continue contributing.
-
-## Get Involved
-
-In the process of using Amoro, if you have any questions, suggestions, or improvement ideas, you can participate in the Amoro community building through the following suggested channels.
-
-* [Issue Tracker](https://github.com/NetEase/amoro/issues) - tracking bugs, ideas, plans, etc.
-* [GitHub Discussions](https://github.com/NetEase/amoro/discussions) - second to mailing list for anything else you want to share or ask
-* Wechat Group - add `kllnn999` as a friend on WeChat and specify `Amoro lover`, you will be invited to join the Amoro WeChat group.
-
-## Contributing Guide
-
-See [Contributing](https://github.com/NetEase/amoro/blob/master/CONTRIBUTING.md) for more details on how to contribute to Amoro.
\ No newline at end of file
diff --git a/amoro-site/content/community/join-community.md b/amoro-site/content/community/join-community.md
deleted file mode 100644
index a17d717..0000000
--- a/amoro-site/content/community/join-community.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: "Join Community"
-url: join-community
-disableSidebar: true
----
-
-# Welcome to Amoro
-Amoro community is a free, open-source community project. 
-Anyone interested in the Amoro project can join the community and contribute to its development by becoming a part of it.
-
-This document describes the various roles within the community, including the responsibilities of the roles and the criteria for contribution
-
-## Roles and Responsibilities
-Amoro community is composed of and operated by the following roles:
-- User
-- Contributor
-- Active Contributor
-- Committer
-- PMC
-
-## User 
-
-Community users, as defined by Amoro, are those members of the community who have a need for the Amoro project. Either individuals, or businesses.
-
-## Contributor 
-Everyone who contributes can become an Amoro contributor. The members will provide mentorship and guidance when new contributors need assistance.
-### How to become a Contributor?
-- 1 merged PR in the this project
-### Responsibilities and privileges
-- Actively participate in Amoro's  project development
-- Participate in community events (meetups, hackathons, etc.)
-- Learn and help others learn Amoro-related technologies
-- Be listed as an Amoro contributor
-- Be awarded an Amoro Contributor e-certificate
-
-## Active Contributor
-Active contributors are contributors who have made outstanding contributions and sustained commitment to Amoro. They actively participate in the community by contributing code, improving docs and helping others.
-### How to become an Active Contributor?
-- Have 2 merged PRs or fixed major bugs
-- Consistently active in the community, Actively participate in community events such as online/offline meetups and community discussions
-### Responsibilities and privileges
-- Join the community meeting and discussion
-- Mentor and guide new contributors
-- Be listed as an Amoro Active Contributor and featured on the Amoro official website
-- Be awarded an Amoro Active Contributor e-certificate
-
-## Committer
-Committers are promoted from Active Contributors.They have the authority to merge master branches and are responsible for the planning and maintenance of Amoro. They also are active members in sharing their knowledge with the community.
-### How to become a Committer?
-- Have a deep understanding of Amoro' principles and future plans
-- Have the ability to deal with various issues that arise in the project promptly
-- Lead a major development, write and revise related documents
-- Receive at least two PMC nominations and pass voting
-### Responsibilities and privileges
-- Mentor and guide other memberships in the community
-- Ensure continued health of subproject
-- Be granted write access to Amoro repos (to be specified)
-- Be listed as an Amoro Committer and featured on the Amoro official website
-- Be awarded an Amoro Committer e-certificate
-
-## PMC
-PMCs are promoted from Committers. They have the authority to merge master branches and are responsible for the planning and maintenance of Amoro. They also are active members in sharing their knowledge with the community.
-
-### How to become PMC?
-- Have the ability to deal with project issues promptly
-- Lead project development and iterations, and steer the overall direction of the project
-- Receive at least two PMC nominations and pass voting
-### Responsibilities and privileges
-- Mentor and guide other memberships in the community
-- Ensure continued health of the project, such as code quality and test coverage
-- Make and approve technical design decisions
-- Define milestones and releases
-- Vote and promote new committers and PMCs
-- Be listed as an Amoro PMC and featured on the Amoro official website
-- Be awarded an Amoro PMC e-certificate
\ No newline at end of file
diff --git a/amoro-site/content/download.md b/amoro-site/content/download.md
deleted file mode 100644
index 453c979..0000000
--- a/amoro-site/content/download.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: "Download"
-url: download
-disableSidebar: true
----
-
-# Download
-
-Please choose an Amoro version to download from the blowing tables, the latest release is recommended.
-
-
-## The latest release
-
-| Version | Date | Source | AMS | Flink Runtime Jars | Spark Runtime Jars | Trino Connector | Release Notes |
-| --- | --- | --- | --- | --- | --- | --- | --- |
-| 0.6.0 | 2023 Nov 3 | [source](https://github.com/NetEase/amoro/archive/refs/tags/v0.6.0.zip) | - [AMS(hadoop3)](https://github.com/NetEase/amoro/releases/download/v0.6.0/amoro-0.6.0-bin.zip) <br> - [AMS(hadoop2)](https://github.com/NetEase/amoro/releases/download/v0.6.0/amoro-0.6.0-bin.hadoop2.zip) | - [Flink 1.15 Runtime Jar](https://github.com/NetEase/amoro/releases/download/v0.6.0/amoro-flink-runtime-1.15-0.6.0.jar) <br> - [Flink 1.16 Runtime Jar](https://github.com/NetEase/amoro/re [...]
-
-## All archived releases
-
-| Version | Date | Source | AMS | Flink Runtime Jars | Spark Runtime Jars | Trino Connector | Release Notes |
-| --- | --- | --- | --- | --- | --- | --- | --- |
-| 0.5.1 | 2023 Aug 3 | [source](https://github.com/NetEase/amoro/archive/refs/tags/v0.5.1.zip) | - [AMS(hadoop3)](https://github.com/NetEase/amoro/releases/download/v0.5.1/amoro-0.5.1-bin.zip) <br> - [AMS(hadoop2)](https://github.com/NetEase/amoro/releases/download/v0.5.1/amoro-0.5.1-bin.hadoop2.zip) | - [Flink 1.12 Runtime Jar](https://github.com/NetEase/amoro/releases/download/v0.5.1/amoro-flink-runtime-1.12-0.5.1.jar) <br> - [Flink 1.14 Runtime Jar](https://github.com/NetEase/amoro/re [...]
-| 0.5.0 | 2023 Aug 3 | [source](https://github.com/NetEase/amoro/archive/refs/tags/v0.5.0.zip) | - [AMS(hadoop3)](https://github.com/NetEase/amoro/releases/download/v0.5.0/amoro-0.5.0-bin.zip) <br> - [AMS(hadoop2)](https://github.com/NetEase/amoro/releases/download/v0.5.0/amoro-0.5.0-bin.hadoop2.zip) | - [Flink 1.12 Runtime Jar](https://github.com/NetEase/amoro/releases/download/v0.5.0/amoro-flink-runtime-1.12-0.5.0.jar) <br> - [Flink 1.14 Runtime Jar](https://github.com/NetEase/amoro/re [...]
-| 0.4.1 | 2023 Apr 3 | [source](https://github.com/NetEase/amoro/archive/refs/tags/v0.4.1.zip) | [AMS](https://github.com/NetEase/amoro/releases/download/v0.4.1/arctic-0.4.1-bin.zip) | - [Flink 1.12 Runtime Jar](https://github.com/NetEase/amoro/releases/download/v0.4.1/arctic-flink-runtime-1.12-0.4.1.jar) <br> - [Flink 1.14 Runtime Jar](https://github.com/NetEase/amoro/releases/download/v0.4.1/arctic-flink-runtime-1.14-0.4.1.jar) <br> - [Flink 1.15 Runtime Jar](https://github.com/NetEase [...]
-| 0.4.0 | 2022 Dec 6 | [source](https://github.com/NetEase/amoro/archive/refs/tags/v0.4.0.zip) | [AMS](https://github.com/NetEase/amoro/releases/download/v0.4.0/arctic-0.4.0-bin.zip) | - [Flink 1.12 Runtime Jar](https://github.com/NetEase/amoro/releases/download/v0.4.0/arctic-flink-runtime-1.12-0.4.0.jar)<br> - [Flink 1.14 Runtime Jar](https://github.com/NetEase/amoro/releases/download/v0.4.0/arctic-flink-runtime-1.14-0.4.0.jar)<br> - [Flink 1.15 Runtime Jar](https://github.com/NetEase/a [...]
\ No newline at end of file
diff --git a/amoro-site/content/quickstart/quick-demo.md b/amoro-site/content/quickstart/quick-demo.md
deleted file mode 100644
index 9474de5..0000000
--- a/amoro-site/content/quickstart/quick-demo.md
+++ /dev/null
@@ -1,297 +0,0 @@
----
-title: "Quick Demo"
-url: quick-demo
-disableSidebar: true
----
-# Quick Demo
-
-This guide outlines the basic process of using Amoro, allowing you to quickly experience its core features. You can choose to use either the `Iceberg Format` or the `Mixed-Iceberg Format` to complete the entire process. 
-
-If you are more interested in the `Mixed-Hive Format` or the `Paimon Format`, you can refer to: [Mixed-Hive Format](/docs/latest/mixed-hive-format/) and [Paimon Format](/docs/latest/paimon-format/). For specific information on the different formats supported by Amoro, please refer to: [Table Format](/docs/latest/formats-overview/).
-
-Before starting the quick demo, some steps are required to prepare the environment. Here are two ways to complete the necessary preparation:
-
-- [Setup from Docker-Compose](/quickstart-setup/#setup-from-docker-composee)
-- [Setup from binary release](/quickstart-setup/#setup-from-binary-release)
-
-## Prepare steps
-
-### Create optimizer group
-
-Open [http://localhost:1630](http://localhost:1630) in a browser, enter `admin/admin` to log in to the dashboard.
-
-Click on `Optimizing` in the sidebar, choose `Optimizer Groups` and click `Add Group` button to create a new group befre creating catalog:
-
-![Create group](../images/quickstart/create-group.png)
-
-### Create catalog
-
-Click on `Catalogs` in the sidebar, click on the `+` button under Catalog List to create a test catalog, and name it to `demo_catalog`:
-{{% codetabs "CreateCatalog" %}}
-{{% addtab "Iceberg Format" "spark-queries" "spark-sql" %}}
-{{% addtab "Mixed-Iceberg Format" "spark-queries" "spark-shell" %}}
-{{% tabcontent "spark-sql"  %}}
-
-To use the Iceberg Format, select `Type` as `Internal Catalog`, and choose `Iceberg` as `Table Format`.
-![Create iceberg catalog](../images/quickstart/create-iceberg-catalog.png)
-
-{{% /tabcontent %}}
-{{% tabcontent "spark-shell" %}}
-
-To use the Mixed-Iceberg Format, select `Type` as `Internal Catalog`, and choose `Mixed-Iceberg` as `Table Format`.
-![Create mixed catalog](../images/quickstart/create-mixed-catalog.png)
-
-{{% /tabcontent %}}
-{{% /codetabs %}}
-
-
-{{< hint info >}}
-If you deployed the demo environment using Docker-Compose:
-  - Hadoop configuration files are stored in `<ARCIT-WORKSPACE>/hadoop-config`.
-  - Warehouse path should be set to `hdfs://namenode:8020/user/arctic/demo_warehouse`.
-
-If you deployed the demo environment through binary release:
-  - Don't need to upload the Hadoop configuration files.
-  - Warehouse path should be set a directory which the hadoop user have the read and write privileges.
-{{< /hint >}}
-
-### Start optimizers
-
-Click on `Optimizing` in the sidebar, select the `Optimizer Group` tab, and click the `scale-out` operation for group `local`.
-
-![Scale out optimizer](../images/quickstart/scale-out-optimizer.png)
-
-Set the concurrency of the optimizer to 1 and click `OK`.
-
-Then you can switch the tab to `Optimizers`, you can find the newly launched optimizer here.
-
-![Optimizers](../images/quickstart/optimizers.png)
-
-{{< hint info >}}
-You may need to wait for up to 30 seconds for the optimizer to register with AMS.
-{{< /hint >}}
-
-## Demo setps
-
-### Initialize tables
-
-Click on `Terminal` in the sidebar, you can create the test tables here using SQL. Terminal supports executing Spark SQL statements for now.
-
-{{% codetabs "CreateATable" %}}
-{{% addtab "Iceberg Format" "spark-queries" "spark-sql" %}}
-{{% addtab "Mixed-Iceberg Format" "spark-queries" "spark-shell" %}}
-{{% tabcontent "spark-sql"  %}}
-```sql
-CREATE DATABASE IF NOT EXISTS db;
-USE db;
-CREATE TABLE IF NOT EXISTS user (
-    id INT,
-    name string,
-    ts TIMESTAMP
-) USING iceberg 
-PARTITIONED BY (days(ts));
-
-INSERT OVERWRITE user VALUES 
-(1, "eric", timestamp("2022-07-01 12:32:00")),
-(2, "frank", timestamp("2022-07-02 09:11:00")),
-(3, "lee", timestamp("2022-07-02 10:11:00"));
-
-SELECT * FROM user;
-```
-{{% /tabcontent %}}
-{{% tabcontent "spark-shell" %}}
-```sql
-CREATE DATABASE IF NOT EXISTS db;
-USE db;
-CREATE TABLE IF NOT EXISTS user (
-    id INT,
-    name string,
-    ts TIMESTAMP,
-    PRIMARY KEY(id)
-) USING arctic 
-PARTITIONED BY (days(ts));
-
-INSERT OVERWRITE user VALUES 
-(1, "eric", timestamp("2022-07-01 12:32:00")),
-(2, "frank", timestamp("2022-07-02 09:11:00")),
-(3, "lee", timestamp("2022-07-02 10:11:00"));
-
-SELECT * FROM user;
-```
-{{% /tabcontent %}}
-{{% /codetabs %}}
-
-Click on the `RUN` button uppon the SQL editor, and wait for the SQL query to finish executing. You can then see the query results under the SQL editor.
-
-### Start Flink ingestion job
-
-If you have prepared the environment using Docker-Compose, you can open a terminal in docker using the following command:
-
-```shell
-docker exec -it quickdemo bash
-```
-
-Then you can start the standalone Flink cluster using the following command:
-
-```shell
-cd <FLINK_DIR>
-
-./bin/start-cluster.sh
-```
-
-After you start the Flink cluster, you can open the Flink dashboard by visiting [http://localhost:8081](http://localhost:8081).
-
-Then execute the following command to start the Flink SQL Client:
-
-```shell
-./bin/sql-client.sh embedded
-```
-
-Enter the following SQL statements one by one to start the Flink ingestion job since the Flink SQL Client does not support batch SQL input:
-
-{{% codetabs "StartFlinkJob" %}}
-{{% addtab "Iceberg Format" "spark-queries" "spark-sql" %}}
-{{% addtab "Mixed-Iceberg Format" "spark-queries" "spark-shell" %}}
-{{% tabcontent "spark-sql"  %}}
-```sql
-CREATE CATALOG iceberg_catalog WITH (
-  'type' = 'iceberg',
-  'catalog-impl' = 'org.apache.iceberg.rest.RESTCatalog',
-  'uri'='http://127.0.0.1:1630/api/iceberg/rest',
-  'warehouse'='demo_catalog'
-);
-
--- Recreate table with Flink as Only Flink support primary key for iceberg format table
-DROP TABLE `iceberg_catalog`.`db`.`user`;
-
-CREATE TABLE IF NOT EXISTS `iceberg_catalog`.`db`.`user` (
-    id INT,
-    name string,
-    ts TIMESTAMP_LTZ,
-    PRIMARY KEY(id) NOT ENFORCED
-) with ('format-version'='2', 'write.upsert.enabled'='true');
-
-INSERT INTO iceberg_catalog.`db`.`user` (id, name, ts) VALUES 
-(1, 'eric', CAST('2022-07-01 12:32:00' AS TIMESTAMP)),
-(2, 'frank', CAST('2022-07-02 09:11:00' AS TIMESTAMP)),
-(3, 'lee', CAST('2022-07-02 10:11:00' AS TIMESTAMP));
-
--- Create CDC socket source table
-CREATE TABLE cdc_source(
-  id      INT,
-  name    STRING,
-  op_time STRING
-) WITH (
-    'connector' = 'socket',
-    'hostname' = 'localhost',
-    'port' = '9999',
-    'format' = 'changelog-csv',
-    'changelog-csv.column-delimiter' = '|'
-);
-
--- Disable Flink engine form filtering on Delete data
-set table.exec.sink.upsert-materialize=none;
-
--- Start the Flink ingestion job
-INSERT INTO `iceberg_catalog`.`db`.`user`
-SELECT id,
-       name,
-       CAST(TO_TIMESTAMP(op_time) AS TIMESTAMP(6) WITH LOCAL TIME ZONE) ts
-FROM cdc_source;
-```
-{{% /tabcontent %}}
-{{% tabcontent "spark-shell" %}}
-```sql
-CREATE CATALOG arctic_catalog WITH (
-  'type' = 'arctic',
-  'metastore.url'='thrift://127.0.0.1:1260/demo_catalog'
-);
-
--- Create CDC socket source table
-CREATE TABLE cdc_source(
-  id      INT,
-  name    STRING,
-  op_time STRING
-) WITH (
-    'connector' = 'socket',
-    'hostname' = 'localhost',
-    'port' = '9999',
-    'format' = 'changelog-csv',
-    'changelog-csv.column-delimiter' = '|'
-);
-
--- Disable Flink engine form filtering on Delete data
-set table.exec.sink.upsert-materialize=none;
-
--- Start the Flink ingestion job
-INSERT INTO `arctic_catalog`.`db`.`user`
-SELECT id,
-       name,
-       CAST(TO_TIMESTAMP(op_time) AS TIMESTAMP(6) WITH LOCAL TIME ZONE) ts
-FROM cdc_source;
-```
-{{% /tabcontent %}}
-{{% /codetabs %}}
-
-Open a new terminal. If you deployed the demo environment using Docker-Compose, you can use the following command to reopen a terminal of the container. The required commands are already installed inside the container.
-
-```shell
-docker exec -it quickdemo bash
-```
-
-Execute the following command in the newly opened terminal. It will open a socket channel to the `cdc_source` table, allowing us to insert some test data into the table.
-
-```shell
-nc -l -p 9999 -k
-```
-
-{{< hint info >}}
-if you are in MacOS and run quick demo in local. run `nc -lk 9999` instead.
-{{< /hint >}}
-
-Send the following content into the socket channel, and make sure to add a break line after the last line of data to ensure that the last line of data is correctly sent.
-
-```shell
-INSERT|4|rock|2022-07-02 09:01:00
-INSERT|5|jack|2022-07-02 12:11:40
-INSERT|6|mars|2022-07-02 11:19:10
-
-```
-
-Wait for at least 10 seconds (depending on the checkpoint interval configured in flink-conf.yaml), open the `Dashboard` and go to the `Terminal` page, then execute:
-
-```sql
-SELECT * FROM db.user ORDER BY id;
-```
-
-You will get the following execution result:
-
-![Upsert result](../images/quickstart/upsert-result.png)
-
-Continue to send the following data into the socket channel:
-
-```shell
-DELETE|1|eric|2022-07-01 12:32:00
-INSERT|7|randy|2022-07-03 19:11:00
-DELETE|4|rock|2022-07-02 09:01:00
-DELETE|3|lee|2022-07-02 10:11:00
-
-```
-
-Query the content of the test table by `Terminal` again, you will get the following result this time:
-
-![Upsert result2](../images/quickstart/upsert-result2.png)
-
-### Check self-optimizing
-
-As new data is written to the table, Amoro will automatically trigger self-optimizing on the table.
-
-Click on `Tables` in the sidebar, select the test table to enter the table details page, switch to the `Optimizing` tab, where you can see all the self-optimizing tasks on the table.
-
-![Table optimizing history](../images/quickstart/table-optimizing-history.png)
-
-You can also enter the `Optimizing` page through the the sidebar to view the current optimizing status of all tables.
-
-![Table optimizing status](../images/quickstart/table-optimizing-status.png)
-
-For more information on Self-Optimizing, please refer to: [Self-optimizing](/docs/latest/self-optimizing/)
\ No newline at end of file
diff --git a/amoro-site/content/quickstart/setup.md b/amoro-site/content/quickstart/setup.md
deleted file mode 100644
index 495f9a8..0000000
--- a/amoro-site/content/quickstart/setup.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-title: "Quickstart Setup"
-url: quickstart-setup
-disableSidebar: true
----
-# Setup
-
-This guide describes two ways to deploy the Amoro demo environment: using docke-compose or release packages. If you want to deploy by compiling the source code, please refer to [Deployment](/docs/latest/deployment/).
-
-## Setup from Docker-Compose
-
-The fastest way to deploy a [Quick Demo](/quick-demo/) environment is to use docker-compose.
-
-### Requirements
-
-Before starting to deploy Amoro based on Docker, please make sure that you have installed the docker-compose environment on your host. For information on how to install Docker, please refer to: [Install Docker](https://docs.docker.com/get-docker/).
-
-{{< hint info >}}
-It is recommended to perform the operation on Linux or MacOS. If you are using a Windows system, you can consider using WSL2. For information on how to enable WSL2 and install Docker, please refer to [Windows Installation](https://docs.docker.com/desktop/install/windows-install/).
-{{< /hint >}}
-
-After completing the Docker installation, please make sure that the docker-compose tool is installed: [Docker-Compose Installation](https://github.com/docker/compose-cli/blob/main/INSTALL.md).
-
-### Bring up demo cluster
-
-Before starting, please prepare a clean directory as the workspace for Amoro Demo deployment, and obtain the Amoro demo deployment script:
-
-```shell
-cd <AMORO-WORKSPACE>
-wget https://raw.githubusercontent.com/NetEase/amoro/master/docker/demo-cluster.sh
-```
-
-Execute the following shell command to launch a demo cluster using docker-compose:
-
-```shell
-bash demo-cluster.sh start
-```
-
-After executing the above command, there will be a `data` directory in the workspace directory for sharing files between different docker containers. You can use the following command to view all the running Docker containers:
-
-```shell
-$ docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
-
-CONTAINER ID   NAMES       STATUS
-2a0d326c668f   datanode    Up 1 minutes
-8e6b1c36e6ba   namenode    Up 1 minutes
-1e11fb8187b3   quickdemo   Up 1 minutes
-```
-
-
-## Setup from binary release
-
-If it is not convenient to install Docker and related tools, you can also deploy the Amoro demo cluster directly through the Amoro release package.
-
-### Requirements
-
-Before starting, please make sure that Java 8 is installed and the JAVA_HOME environment variable is set.
-Please make sure that there is no `HADOOP_HOME` or `HADOOP_CONF_DIR` in the environment variables. If there are, please unset these environment variables first.
-
-### Setup AMS
-
-Prepare a clean directory as the workspace for the Amoro demo cluster, and execute the following command to download Amoro and start AMS:
-
-```shell
-cd <AMORO-WORKSPACE>
-
-# Rplace version value with the latest Amoro version if needed
-export AMORO_VERSION=0.6.0
-
-# Download the binary package of AMS
-wget https://github.com/NetEase/amoro/releases/download/v${AMORO_VERSION}/amoro-${AMORO_VERSION}-bin.zip
-
-# Unzip the pakage
-unzip amoro-${AMORO-VERSION}-bin.zip
-
-# Start AMS by script
-cd amoro-${AMORO-VERSION} && ./bin/ams.sh start
-```
-
-Access [http://127.0.0.1:1630/](http://127.0.0.1:1630/) with a browser and log in to the system with `admin/admin`. If you can log in successfully, it means that the deployment of AMS is successful.
-
-### Setup Flink environment
-
-Before starting the Quick Demo, you also need to deploy the Flink execution environment. Execute the following command to download the Flink binary distribution package:
-
-```shell
-cd <AMORO-WORKSPACE>
-
-# Rplace version value with the latest Amoro version if needed
-AMORO_VERSION=0.6.0
-ICEBERG_VERSION=1.3.0
-FLINK_VERSION=1.15.3
-FLINK_MAJOR_VERSION=1.15
-FLINK_HADOOP_SHADE_VERSION=2.7.5
-APACHE_FLINK_URL=archive.apache.org/dist/flink
-MAVEN_URL=https://repo1.maven.org/maven2
-FLINK_CONNECTOR_URL=${MAVEN_URL}/org/apache/flink
-AMORO_CONNECTOR_URL=${MAVEN_URL}/com/netease/amoro
-ICEBERG_CONNECTOR_URL=${MAVEN_URL}/org/apache/iceberg
-
-# Download FLink binary package
-wget ${APACHE_FLINK_URL}/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-scala_2.12.tgz
-# Unzip Flink binary package
-tar -zxvf flink-${FLINK_VERSION}-bin-scala_2.12.tgz
-
-cd flink-${FLINK_VERSION}
-# Download Flink Hadoop dependency
-wget ${FLINK_CONNECTOR_URL}/flink-shaded-hadoop-2-uber/${FLINK_HADOOP_SHADE_VERSION}-10.0/flink-shaded-hadoop-2-uber-${FLINK_HADOOP_SHADE_VERSION}-10.0.jar
-# Download Flink Aoro Connector
-wget ${AMORO_CONNECTOR_URL}/amoro-flink-runtime-${FLINK_MAJOR_VERSION}/${AMORO_VERSION}/amoro-flink-runtime-${FLINK_MAJOR_VERSION}-${AMORO_VERSION}.jar
-# Download Flink Iceberg Connector
-wget ${ICEBERG_CONNECTOR_URL}/iceberg-flink-runtime-${FLINK_MAJOR_VERSION}/${ICEBERG_VERSION}/iceberg-flink-runtime-${FLINK_MAJOR_VERSION}-${ICEBERG_VERSION}.jar
-
-# Copy the necessary JAR files to the lib directory
-mv flink-shaded-hadoop-2-uber-${FLINK_HADOOP_SHADE_VERSION}-10.0.jar lib
-mv amoro-flink-runtime-${FLINK_MAJOR_VERSION}-${AMORO_VERSION}.jar lib
-mv iceberg-flink-runtime-${FLINK_MAJOR_VERSION}-${ICEBERG_VERSION}.jar lib
-cp examples/table/ChangelogSocketExample.jar lib
-```
-
-Finally, we need to make some modifications to the `flink-conf.yaml` configuration file.
-
-```shell
-vim conf/flink-conf.yaml
-
-# Increase the number of slots to run more streaming tasks
-taskmanager.numberOfTaskSlots: 4
-
-# Enable checkpointing and to see data changes more quickly, set the checkpoint interval to 5 seconds.
-execution.checkpointing.interval: 5s
-```
\ No newline at end of file
diff --git a/amoro-site/content/roadmap.md b/amoro-site/content/roadmap.md
deleted file mode 100644
index 3d569ad..0000000
--- a/amoro-site/content/roadmap.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: "Roadmap"
-url: roadmap
-disableSidebar: true
----
-# Roadmap
-
-This roadmap displays the workings that the Amoro community plans to complete in 2023 and their priorities. Each item is associated with a Github issue, where you can learn about its specific design and latest developments.
-
-# Priority 1
-
-* [Support managing tables with multiple formats under one Catalog](https://github.com/NetEase/amoro/issues/1061)
-* [Support automatically generating and managing Tags and Branchs for Table](https://github.com/NetEase/amoro/issues/1354)
-* [Provide standard SQL management instructions and command-line tools](https://github.com/NetEase/amoro/issues/1357)
-* [Support integration with Apache Paimon](https://github.com/NetEase/amoro/issues/1269)
-* [Integration with Kubernetes](https://github.com/NetEase/amoro/issues/1917)
-
-# Priority 2
-
-* [Support insert part of columns of arctic table with flink in streaming mode](https://github.com/NetEase/amoro/issues/256)
-* [Support sorting table data during the self-optimizing process](https://github.com/NetEase/amoro/issues/1360)
-* [Support integration with Apache Hudi](https://github.com/NetEase/amoro/issues/220)
-* [Support aggregation keys for mixed-format tables](https://github.com/NetEase/amoro/issues/1359)
\ No newline at end of file
diff --git a/amoro-site/hugo.toml b/amoro-site/hugo.toml
deleted file mode 100644
index bd7aedd..0000000
--- a/amoro-site/hugo.toml
+++ /dev/null
@@ -1,82 +0,0 @@
-baseURL = ""
-languageCode = "en-us"
-title = "Amoro"
-theme = "amoro-theme"
-sectionPagesMenu = "main"
-
-[params]
-  siteType = "landing-page"
-  search = true
-  description = "Management system for Lakehouse"
-  docsBaseURL = ""
-  githuburl = "https://github.com/Netease/amoro"
-
-[[params.social]]
-  title = "Github"
-  icon = "github-fill"
-  url = "https://github.com/NetEase/amoro"
-[[params.social]]
-  title = "Issue Tracking"
-  icon = "slack-square-fill"
-  url = "https://github.com/NetEase/amoro/issues"
-[[params.social]]
-  title = "Wechat"
-  icon = "wechat-fill"
-  url = "javascript:void();"
-
-[[params.features]]
-  title = "Self-optimizing"
-  desc = "Continuously optimizing tables, including compacting small files, change files, regularly delete expired files to keep high query performance and reducing storage costs."
-  icon = "Self-managed"
-[[params.features]]
-  title = "Multiple Formats"
-  desc = "Support different table formats such as Iceberg, Paimon, Mixed-Iceberg and Mixed-Hive to meet different scenario requirements and provide them with unified management capabilities."
-  icon = "Multiple-Formats"
-[[params.features]]
-  title = "Catalog Service"
-  desc = "Provide an unified catalog service for all computing engines, which can also used with existing metadata store service such as Hive Metastore and AWS Glue."
-  icon = "Catalog-Service"
-[[params.features]]
-  title = "Rich Plugins"
-  desc = "Provide various plugins to integrate with other systems, like continuously optimizing with Flink and data analysis with Spark and Kyuubi."
-  icon = "Rich-Plugins"
-[[params.features]]
-  title = "Management Tools"
-  desc = "Provide a variety of management tools, including WEB UI and standard SQL command line, to help you get started faster and integrate with other systems more easily."
-  icon = "Management-tools"
-[[params.features]]
-  title = "Infrastructure Independent"
-  desc = "Can be easily deployed and used in private environments, cloud environments, hybrid cloud environments, and multi-cloud environments."
-  icon = "Infrastructure-Idependent"
-
-[outputFormats.SearchIndex]
-baseName = "landingpagesearch"
-mediaType = "application/json"
-
-[outputs]
-home = [ "HTML", "RSS", "SearchIndex" ]
-
-[menu]
-
-  topnav = [
-    { name = "Quickstart", weight = 100 },
-    { name = "Setup", parent = "Quickstart", url = "/quickstart-setup/", weight = 101 },
-    { name = "Quick Demo", parent = "Quickstart", url = "/quick-demo/", weight = 102 },
-    { name = "Docs", weight = 200 },
-    { name = "latest", parent = "Docs", url = "/docs/latest/", weight = 201 },
-    { name = "0.6.1", parent = "Docs", url = "/docs/latest/", weight = 202 },
-    { name = "0.6.0", parent = "Docs", url = "/docs/0.6.0/", weight = 203 },
-    { name = "0.5.1", parent = "Docs", url = "/docs/0.5.1/", weight = 204 },
-    { name = "0.5.0", parent = "Docs", url = "/docs/0.5.0/", weight = 205 },
-    { name = "Benchmark", weight = 300 },
-    { name = "Benchmark Report", parent = "Benchmark", url = "/benchmark-report/", weight = 301 },
-    { name = "Benchmark Guide", parent = "Benchmark", url = "/benchmark-guide/", weight = 302 },
-    { name = "Download", url = "/download/", weight = 400 },
-    { name = "Roadmap", url = "/roadmap/", weight = 500 },
-    { name = "Community", weight = 600 },
-    { name = "Join Community", parent = "Community", url = "/join-community/", weight = 601 },
-    { name = "How to contribute", parent = "Community", url = "/how-to-contribute/", weight = 602 },
-  ]
-
-[markup.goldmark.renderer]
-unsafe= true
diff --git a/amoro-site/themes/amoro-theme b/amoro-site/themes/amoro-theme
deleted file mode 120000
index 3954ea6..0000000
--- a/amoro-site/themes/amoro-theme
+++ /dev/null
@@ -1 +0,0 @@
-../../amoro-theme
\ No newline at end of file
diff --git a/amoro-theme/LICENSE b/amoro-theme/LICENSE
deleted file mode 100644
index 9667fff..0000000
--- a/amoro-theme/LICENSE
+++ /dev/null
@@ -1,14 +0,0 @@
- - Licensed to the Apache Software Foundation (ASF) under one or more
- - contributor license agreements.  See the NOTICE file distributed with
- - this work for additional information regarding copyright ownership.
- - The ASF licenses this file to You under the Apache License, Version 2.0
- - (the "License"); you may not use this file except in compliance with
- - the License.  You may obtain a copy of the License at
- - 
- -   http://www.apache.org/licenses/LICENSE-2.0
- - 
- - Unless required by applicable law or agreed to in writing, software
- - distributed under the License is distributed on an "AS IS" BASIS,
- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- - See the License for the specific language governing permissions and
- - limitations under the License.
\ No newline at end of file
diff --git a/amoro-theme/README.md b/amoro-theme/README.md
deleted file mode 100644
index 98ec75f..0000000
--- a/amoro-theme/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Iceberg Theme
-
-The Iceberg theme is a theme for use with [Hugo](https://gohugo.io/).
-
-## Hint Boxes
-
-To add a hint box, use the `hint` shortcode and pass in a hint box variation type. Available
-types are `info`, `success`, `warning`,  or `error`.
-
-```
-{{< hint info >}}
-Here is a message for the hint box!
-{{< /hint >}}
-```
-
-## Codetabs
-
-To add a tabbed view of different code examples, use the `codetabs`, `addtab`, and `tabcontent` shortcodes directly
-within a markdown page.
-
-1. Define a named set of tabs, making sure that the name is unique across the current page.
-```
-{{% codetabs "LaunchSparkClient" %}}
-{{% /codetabs %}}
-```
-
-2. Add one or more tabs using the `addtab` shortcode. The arguments to the `addtab` shortcode are tab name, tab group,
-and tab type. (see the logic in `iceberg-theme.js` to see how these are used)
-```css
-{{% codetabs "LaunchSparkClient" %}}
-{{% addtab "SparkSQL" "spark-queries" "spark-sql" %}}
-{{% addtab "Spark-Shell" "spark-queries" "spark-shell" %}}
-{{% addtab "PySpark" "spark-queries" "pyspark" %}}
-{{% codetabs "LaunchSparkClient" %}}
-{{% /codetabs %}}
-```
-
-3. Add content for each tab using the `tabcontent` shortcode.
-```
-{{% codetabs "LaunchSparkClient" %}}
-{{% addtab "SparkSQL" "spark-queries" "spark-sql" %}}
-{{% addtab "Spark-Shell" "spark-queries" "spark-shell" %}}
-{{% addtab "PySpark" "spark-queries" "pyspark" %}}
-{{% tabcontent "spark-sql"  %}}
-\```sh
-docker exec -it spark-iceberg spark-sql
-\```
-{{% /tabcontent %}}
-{{% tabcontent "spark-shell" %}}
-\```sh
-docker exec -it spark-iceberg spark-shell
-\```
-{{% /tabcontent %}}
-{{% tabcontent "pyspark" %}}
-\```sh
-docker exec -it spark-iceberg pyspark
-\```
-{{% /tabcontent %}}
-{{% /codetabs %}}
-```
-
-Codetab "groups" are used to coordinate switching the tab view throughout an entire page.
-To add a new group, update the code in `iceberg-theme.js`.
\ No newline at end of file
diff --git a/amoro-theme/amoro-theme b/amoro-theme/amoro-theme
deleted file mode 120000
index e329597..0000000
--- a/amoro-theme/amoro-theme
+++ /dev/null
@@ -1 +0,0 @@
-amoro-theme
\ No newline at end of file
diff --git a/amoro-theme/archetypes/default.md b/amoro-theme/archetypes/default.md
deleted file mode 100644
index 00e77bd..0000000
--- a/amoro-theme/archetypes/default.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: "{{ replace .Name "-" " " | title }}"
-date: {{ .Date }}
-draft: true
----
-
diff --git a/amoro-theme/layouts/404.html b/amoro-theme/layouts/404.html
deleted file mode 100644
index cdfc53c..0000000
--- a/amoro-theme/layouts/404.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
\ No newline at end of file
diff --git a/amoro-theme/layouts/_default/baseof.html b/amoro-theme/layouts/_default/baseof.html
deleted file mode 100644
index 13641a2..0000000
--- a/amoro-theme/layouts/_default/baseof.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<!DOCTYPE html>
-<html>
-    {{- partial "head.html" . -}}
-    <body>
-        {{- partial "header.html" . -}}
-        <div id="content">
-        {{- block "main" . }}{{- end }}
-        </div>
-    </body>
-</html>
diff --git a/amoro-theme/layouts/_default/single.html b/amoro-theme/layouts/_default/single.html
deleted file mode 100644
index 04e49f6..0000000
--- a/amoro-theme/layouts/_default/single.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-{{ .Scratch.Set "includeTermynal" false }}
-{{ partial "body.html" . }}
\ No newline at end of file
diff --git a/amoro-theme/layouts/index.html b/amoro-theme/layouts/index.html
deleted file mode 100644
index d388749..0000000
--- a/amoro-theme/layouts/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-{{ if eq $.Site.Params.siteType "docs" }}
-    <!-- Don't include termynal.js for docs homepage -->
-    {{ .Scratch.Set "includeTermynal" false }}
-    {{ partial "body.html" . }}
-{{ else }}
-    {{ partial "head.html" . }}
-    {{ partial "header.html" . }}
-    <div id="content">
-    {{ partial "home-intro.html" . }}
-    {{ partial "home-content.html" . }}
-    {{ partial "home-feature.html" . }}
-    {{ partial "home-footer.html" . }}
-    <!-- Include termynal.js for landing-page homepage -->
-    {{ .Scratch.Set "includeTermynal" true }}
-    {{ partial "js.html" . }}
-    </div>
-{{ end }}
\ No newline at end of file
diff --git a/amoro-theme/layouts/index.searchindex.json b/amoro-theme/layouts/index.searchindex.json
deleted file mode 100644
index bb8f252..0000000
--- a/amoro-theme/layouts/index.searchindex.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
-  {{- $pages := where .Site.RegularPages "Params.excludeFromSearch" "!=" true -}}
-  {{- range $index, $page := $pages -}}
-      {{- if eq $page.Params.excludeFromSearch true -}}
-      {{ else }}
-        {{- if gt $index 0 -}} , {{- end -}}
-        {{- $entry := dict "uri" $page.Permalink "title" $page.Title -}}
-        {{- $entry = merge $entry (dict "content" ($page.Plain | htmlUnescape)) -}}
-        {{- $entry = merge $entry (dict "description" $page.Description) -}}
-        {{- $entry = merge $entry (dict "categories" $page.Params.categories) -}}
-        {{- $entry | jsonify -}}
-      {{- end -}}
-  {{- end -}}
-]
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/about.html b/amoro-theme/layouts/partials/about.html
deleted file mode 100644
index 14414b8..0000000
--- a/amoro-theme/layouts/partials/about.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-
-{{ if and .IsHome (not .Site.Params.disableHome) }}
-    <!-- Show the Iceberg marketing splash content only when on the homepage-->
-    <section id="intro">
-        <div class="intro-header">
-            <div class="container">
-            <div class="row">
-                <div class="col-lg-12">
-                <div class="intro-message">
-                    <h1>{{ .Site.Title }}</h1>
-                    <h3>{{ .Site.Params.description }}</h3>
-                    <hr class="intro-divider">
-                    {{ if isset .Site.Params "social" }}
-                    <ul class="list-inline intro-social-buttons">
-                            {{ partial "social.html" . }}
-                    </ul>
-                    {{ end }}
-                </div>
-                </div>
-            </div>
-            </div>
-        </div>
-    </section>
-{{ end }}
-<section id="about" class="container content-section text-center">
-{{ range where .Site.RegularPages "Section" "about" | first 1 }}
-	<div class="row">
-		<div class="col-lg-8 col-lg-offset-2">
-			<br/>
-			<br/>
-			<h2>{{ .Title }}</h2>
-			<br/>
-			{{ .Content }}
-			<br/>
-		</div>
-	</div>
-{{ end }}
-</section>
diff --git a/amoro-theme/layouts/partials/body.html b/amoro-theme/layouts/partials/body.html
deleted file mode 100644
index fe4cc01..0000000
--- a/amoro-theme/layouts/partials/body.html
+++ /dev/null
@@ -1,35 +0,0 @@
-{{ partial "head.html" . }}
-<head>
-    <script>
-        // This automatically adds an anchor tag for every h1, h2, h3, and h4 element on the page
-        function addAnchor(element) {
-            element.insertAdjacentHTML('beforeend', `<a href="#${element.id}" class="anchortag" ariaLabel="Anchor"> 🔗 </a>` )
-        }
-        document.addEventListener('DOMContentLoaded', function () {
-            var headers = document.querySelectorAll('h1[id], h2[id], h3[id], h4[id]')
-            if (headers) {
-                headers.forEach(addAnchor)
-            }
-        });
-    </script>
-</head>
-{{ partial "header.html" . }}
-<body dir="{{ .Site.Language.LanguageDirection | default " ltr" }}">
-    <section>
-        <div class="grid-container {{ if and (not .Params.disableSidebar) (not .Params.disableToc) }}leftnav-and-toc{{ else if not .Params.disableSidebar }}left-nav-only{{ else if not .Params.disableToc }}toc-only{{ else }}content-only{{ end }}">
-            {{ if not .Params.disableSidebar }}
-                {{ partial "sidebar.html" . }}
-            {{ end }}
-            <div id="content" class="markdown-body">
-                <div class="{{ if not .Params.disableToc }}margin-for-toc{{ else }}margin-without-toc{{ end }}">
-                    {{- .Content -}}
-                </div>
-                {{ if not .Params.disableToc }}
-                    {{ partial "toc.html" . }}
-                {{ end }}
-            </div>
-        </div>
-    </section>
-</body>
-{{ partial "js.html" . }}
-</html>
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/contact.html b/amoro-theme/layouts/partials/contact.html
deleted file mode 100644
index e4a23af..0000000
--- a/amoro-theme/layouts/partials/contact.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-
-{{ if isset .Site.Params "social" }}
-<section id="contact">
-<div class="contact">
-	<div class="container">
-		<div class="row">
-			<div class="col-lg-8">
-				<ul class="list-inline contact-social-buttons">
-					{{ partial "social.html" . }}
-				</ul>
-			</div>
-
-		</div>
-	</div>
-</div>
-</section>
-{{ end }}
diff --git a/amoro-theme/layouts/partials/css.html b/amoro-theme/layouts/partials/css.html
deleted file mode 100644
index 52ec5e9..0000000
--- a/amoro-theme/layouts/partials/css.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-
-<!-- Bootstrap Core CSS -->
-<link href="{{ .Site.BaseURL }}/css/bootstrap.css" rel="stylesheet">
-
-<!-- Markdown CSS -->
-<link href="{{ .Site.BaseURL }}/css/markdown.css" rel="stylesheet">
-<link href="{{ .Site.BaseURL }}/css/katex.min.css" rel="stylesheet">
-
-<!-- Local CSS -->
-{{ range .Site.Params.custom_css }}
-    <link rel="stylesheet" href="{{ $.Site.BaseURL }}{{ . }}">
-{{ end }}
-
-<!-- Custom CSS  -->
-<link href="{{ .Site.BaseURL }}/css/amoro-theme.css" rel="stylesheet">
-
-<!-- Custom Fonts -->
-<link href="{{ .Site.BaseURL }}/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
-<link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
-
-<!-- Needed to render termynal animations -->
-<link href="{{ .Site.BaseURL }}/css/termynal.css" rel="stylesheet">
-
-<link href="{{ .Site.BaseURL }}/css/home-page.css" rel="stylesheet">
diff --git a/amoro-theme/layouts/partials/head.html b/amoro-theme/layouts/partials/head.html
deleted file mode 100644
index b52e39c..0000000
--- a/amoro-theme/layouts/partials/head.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<!DOCTYPE html>
-<html>
-<head>
-
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta name="description" content="">
-    <meta name="author" content="">
-    <title>{{ .Title }}</title>
-
-    <!--    Load all CSS -->
-    {{ partial "css.html" }}
-
-    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
-    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
-    <!--[if lt IE 9]>
-        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
-        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-
-</head>
-<body>
diff --git a/amoro-theme/layouts/partials/header.html b/amoro-theme/layouts/partials/header.html
deleted file mode 100644
index ff47dec..0000000
--- a/amoro-theme/layouts/partials/header.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<!-- Top Navigation Bar -->
-    <nav class="navbar navbar-default" role="navigation">
-        <topsection>
-            <div class="navbar-fixed-top">
-                <div>
-                <a class="page-scroll navbar-brand" href="https://amoro.netease.com/"><img class="top-navbar-logo" src="{{ .Site.BaseURL }}/img/amoro-logo-icon.png"/></a>
-                </div>
-            </div>
-            <div class="navbar-menu-fixed-top navbar-pages-group">
-                {{ $currentPage := . }}
-                <!-- Loop through the topnav menu defined in config.toml -->
-                {{ range .Site.Menus.topnav }}
-                {{ $menuContainsCurrentPage := eq .Name $currentPage.Page.Title}}
-                {{ if .HasChildren }}
-                    <!-- Top nav element that has a dropdown -->
-                    <div class="versions-dropdown">
-                    <div class="topnav-page-selection">
-                        <a {{ if $menuContainsCurrentPage }}id="active"{{ end }} {{ if hasPrefix .Identifier "_" }}target="_blank"{{ end }} href="{{ if eq .Pre "relative" }}{{ $.Site.BaseURL }}{{ .URL }}{{ else }}{{ .URL }}{{ end }}">{{ .Name }}{{ .Post }}</a> <i class="fa fa-caret-down"></i>
-                    </div class="topnav-page-selection">
-                        <div class="versions-dropdown-content">
-                        <ul>
-                        {{ range .Children }}
-                            <li class="topnav-page-selection">
-                            <a {{ if eq .Name $currentPage.Page.Title }}id="active"{{ end }} {{ if hasPrefix .Identifier "_" }}target="_blank"{{ end }} href="{{ if eq .Pre "relative" }}{{ $.Site.BaseURL }}{{ .URL }}{{ else }}{{ .URL }}{{ end }}">{{ .Name }}{{ .Post }}</a>
-                            </li class="topnav-page-selection">
-                        {{ end }}
-                        </ul>
-                        </div>
-                    </div>
-                {{ else }}
-                    <div class="topnav-page-selection">
-                        <a {{ if $menuContainsCurrentPage }}id="active"{{ end }} {{ if hasPrefix .Identifier "_" }}target="_blank"{{ end }} href="{{ if eq .Pre "relative" }}{{ $.Site.BaseURL }}{{ .URL }}{{ else }}{{ .URL }}{{ end }}">{{ .Name }}{{ .Post }}</a>
-                    </div class="topnav-page-selection">
-                {{ end }}
-                {{ end }}
-                <div class="topnav-page-selection">
-                    <a href="https://github.com/NetEase/amoro" target="_blank">
-                        <img src="{{ $.Site.BaseURL }}/img/GitHub-Mark.png" target="_blank" class="top-navbar-logo"/>
-                    </a>
-                </div>
-            </div>
-            </topsection>
-    </nav>
diff --git a/amoro-theme/layouts/partials/home-content.html b/amoro-theme/layouts/partials/home-content.html
deleted file mode 100644
index 1bccded..0000000
--- a/amoro-theme/layouts/partials/home-content.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<section id="home-section">
-  <div class="content">
-    <div class="title">Amoro builds lake-native data warehouse and architecture for users, platforms and products</div>
-    <img class="img" src="{{ .Site.BaseURL }}/img/home-content.png"/>
-  </div>
-</section>
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/home-feature.html b/amoro-theme/layouts/partials/home-feature.html
deleted file mode 100644
index c41bda1..0000000
--- a/amoro-theme/layouts/partials/home-feature.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<div id="home-feature">
-  <div class="content">
-    <div class="title">Key Features</div>
-    <div class="features">
-      {{range .Site.Params.features}}
-      <div class="feature-item">
-        <div class="item-title">
-          <img src="{{ .Site.BaseURL }}/img/{{ .icon }}.png" />
-          {{.title}}
-        </div>
-        <div class="item-desc">{{.desc}}</div>
-      </div>
-      {{end}}
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/home-footer.html b/amoro-theme/layouts/partials/home-footer.html
deleted file mode 100644
index e8557b3..0000000
--- a/amoro-theme/layouts/partials/home-footer.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div id="home-footer">
-  <div class="content">
-    <div class="title">Join Community</div>
-    <div class="btns">
-      {{range .Site.Params.social}}
-      {{if eq .title "Wechat"}}
-      <span class="btn btn-primary wechat-btn">
-        <span class="img-title"><img class="" src="{{ .Site.BaseURL }}/img/{{ .icon }}.png"></img>{{.title}}</span>
-        <span class="wechat-img"><img src="{{ .Site.BaseURL }}/img/wechat-group.png"/></span>
-      </span>
-      {{else}}
-      <a target="_blank" href="{{ .url }}" class="btn btn-primary">
-        <span class="img-title"><img class="" src="{{ .Site.BaseURL }}/img/{{ .icon }}.png"></img>{{.title}}</span>
-      </a>
-      {{end}}
-
-      {{end}}
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/home-intro.html b/amoro-theme/layouts/partials/home-intro.html
deleted file mode 100644
index 0864e37..0000000
--- a/amoro-theme/layouts/partials/home-intro.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<section id="intro-new">
-  <div class="intro-content">
-    <h1 class="title">Amoro</h1>
-    <div class="desc">{{ .Site.Params.description}}</div>
-    <div class="btns">
-      <a href="{{ .Site.BaseURL }}/download/" class="btn btn-primary">Latest releases</a>
-      <a href="{{ .Site.Params.Githuburl }}" class="btn btn-primary">Source code</a>
-    </div>
-  </div>
-</section>
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/js.html b/amoro-theme/layouts/partials/js.html
deleted file mode 100644
index 9f9a640..0000000
--- a/amoro-theme/layouts/partials/js.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<!-- jQuery Version 1.11.0 -->
-<script src="{{ .Site.BaseURL }}/js/jquery-1.11.0.js"></script>
-
-<!-- Plugin JavaScript -->
-<script src="{{ .Site.BaseURL }}/js/jquery.easing.min.js"></script>
-
-<!-- Search Script -->
-<script type="text/javascript" src="{{ .Site.BaseURL }}/js/search.js"></script>
-
-<!-- Bootstrap Core JavaScript -->
-<script src="{{ .Site.BaseURL }}/js/bootstrap.min.js"></script>
-
-<!-- Custom Theme JavaScript -->
-<script src="{{ .Site.BaseURL }}/js/iceberg-theme.js"></script>
-
-{{ $includeTermynal := .Scratch.Get "includeTermynal" }}
-{{ if $includeTermynal }}
-    <!-- Termynal animation renderer (only loaded on home page) -->
-    <script src="{{ .Site.BaseURL }}/js/termynal.js" data-termynal-container="#termynal|#termynal-data-compaction|#termynal-expressive-sql|#termynal-time-travel"></script>
-{{ end }}
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/pricing.html b/amoro-theme/layouts/partials/pricing.html
deleted file mode 100644
index 196923f..0000000
--- a/amoro-theme/layouts/partials/pricing.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<!-- Pricing Section -->
-<section id="pricing" class="container content-section text-center">
-    {{ range where .Site.RegularPages "Section" "pricing" | first 1 }}
-        <div class="row">
-            <div class="col-lg-8 col-lg-offset-2">
-                <br/>
-                <br/>
-                <h2>{{ .Title }}</h2>
-                <br/>
-                {{ .Content }}
-                <br/>
-
-                {{ $length := len $.Site.Data.pricing }}
-                <div class="Rtable Rtable--{{ $length }}cols Rtable--collapse">
-
-                    {{ range $index, $content := $.Site.Data.pricing }}
-                        <div style="order:0;" class="Rtable-cell Rtable-cell--head"><h3>{{ $content.name }}</h3></div>
-                        {{ range $i, $feature := $content.features}}
-                            {{ $c :=add $i 1 }}
-                            <div style="order:{{ $c }};" class="Rtable-cell">{{ $feature.name }}</div>
-                        {{ end }}
-                        {{ $d := len $content.features }}
-                        <div style="order:{{ add $d 1 }};" class="Rtable-cell Rtable-cell--foot">
-                            <div class="pricing">
-                                <a href="{{ $content.link }}">
-                                    {{ $content.linkText }}
-                                </a>
-                            </div>
-                        </div>
-
-                    {{ end }}
-                </div>
-
-            </div>
-        </div>
-    {{ end }}
-    </section>
-    
diff --git a/amoro-theme/layouts/partials/search-results.html b/amoro-theme/layouts/partials/search-results.html
deleted file mode 100644
index a288ef6..0000000
--- a/amoro-theme/layouts/partials/search-results.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<section>
-    <div id="search-results-container">
-        <ul id="search-results"></ul>
-    </div>
-</section>
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/search.html b/amoro-theme/layouts/partials/search.html
deleted file mode 100644
index c8f0d7d..0000000
--- a/amoro-theme/layouts/partials/search.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-{{ if default true .Site.Params.search }}
-  <div>
-        <input type="search" class="form-control" id="search-input" placeholder="Search docs..." maxlength="64" data-hotkeys="s/">
-  </div>
-{{ end }}
diff --git a/amoro-theme/layouts/partials/services.html b/amoro-theme/layouts/partials/services.html
deleted file mode 100644
index 0ecc882..0000000
--- a/amoro-theme/layouts/partials/services.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<section id="services">
-
-<!-- Page Content -->
- {{ range $index, $element :=  .Site.RegularPages }}{{ if or (eq .Section "services") (eq .Section "post") }}
-    {{ if modBool $index 2 }}
-    <div class="content-section-a">
-
-        <div class="container">
-
-            <div class="row">
-                <div class="col-lg-5 col-sm-6">
-                    <hr class="section-heading-spacer">
-                    <div class="clearfix"></div>
-                    <h2 class="section-heading">{{ .Title }}</h2>
-                    {{ .Description }}
-                    {{ if .Params.LearnMore }}
-                    <ul class="list-inline intro-social-buttons">
-                        <li>
-                            <a href="{{ .Params.LearnMore }}" class="btn btn-default btn-lg">
-                                <span class="network-name">Learn More</span>
-                            </a>
-                        </li>
-                    </ul>
-                    {{ end }}
-                </div>
-                {{ if .Content }}
-                <div class="col-lg-5 col-lg col-sm-6">
-                    {{ .Content }}
-                </div>
-                {{ end }}
-                {{ if .Params.Img }}
-                <div class="col-lg-5 col-lg-offset-2 col-sm-6">
-                    <img src="{{ $.Site.BaseURL }}img/{{ .Params.Img }}" height="400px" width="400px">
-                </div>
-                {{ end }}
-                {{ if .Params.LottieFile }}
-                <div class="col-lg-5 col-lg-offset-2 col-sm-6">
-                    <script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>
-                    <lottie-player src="{{ $.Site.BaseURL }}lottie/{{ .Params.LottieFile }}" background="transparent"  speed="0.5"  style="width: 600px; height: 400px;"  loop autoplay></lottie-player>
-                </div>
-                {{ end }}
-            </div>
-
-        </div>
-        <!-- /.container -->
-
-    </div>
-    <!-- /.content-section-a -->
-    {{ else }}
-
-    <div class="content-section-b">
-
-        <div class="container">
-
-            <div class="row">
-                <div class="col-lg-5 col-lg-offset-1 col-sm-push-6  col-sm-6">
-                    <hr class="section-heading-spacer">
-                    <div class="clearfix"></div>
-                    <h2 class="section-heading">{{ .Title }}</h2>
-                    {{ .Description }}
-                    {{ if .Params.LearnMore }}
-                    <ul class="list-inline intro-social-buttons">
-                        <li>
-                            <a href="{{ .Params.LearnMore }}" class="btn btn-default btn-lg">
-                                <span class="network-name">Learn More</span>
-                            </a>
-                        </li>
-                    </ul>
-                    {{ end }}
-                </div>
-                {{ if .Content }}
-                <div class="col-lg-5 col-sm-pull-6  col-sm-6">
-                  {{ .Content }}
-                </div>
-                {{ end }}
-                {{ if .Params.Img }}
-                <div class="col-lg-5 col-sm-pull-6  col-sm-6">
-                    <img src="{{ $.Site.BaseURL }}img/{{ .Params.Img }}" height="600px" width="600px">
-                </div>
-                {{ end }}
-                {{ if .Params.LottieFile }}
-                <div class="col-lg-5 col-sm-pull-6  col-sm-6">
-                    <script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>
-                    <lottie-player src="{{ $.Site.BaseURL }}lottie/{{ .Params.LottieFile }}"  {{ if .Params.LottieOptions }}{{ .Params.LottieOptions }}{{ else }}background="transparent"  speed="0.5"  style="width: 600px; height: 400px;"  loop autoplay{{ end }}></lottie-player>
-                </div>
-                {{ end }}
-            </div>
-
-        </div>
-        <!-- /.container -->
-
-    </div>
-    {{ end }}
-    <!-- /.content-section-b -->
-    {{ end }}
-{{ end }}
-
-</section>
diff --git a/amoro-theme/layouts/partials/sidebar.html b/amoro-theme/layouts/partials/sidebar.html
deleted file mode 100644
index fdd9378..0000000
--- a/amoro-theme/layouts/partials/sidebar.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-{{ if not .Params.disableSidebar }}
-<div class="sidebar markdown-body">
-    <div id="sidebar-full">
-        {{ partial "search.html" . }}
-        {{ partial "search-results.html" . }}
-    <div class="sidebar-menu">
-    <ul>
-        {{ $currentPage := . }}
-<!--        `main` Menu -->
-        {{ range .Site.Menus.main }}
-        {{ $menuContainsCurrentPage := eq (lower .Name) $currentPage.Section}}
-        {{ $validateName := replace .Name " " "_" }}
-            {{ if .HasChildren }}
-                <li>
-<!--                    Use this line below if you want the active section in the sidebar to be highlighted-->
-<!--                    <a id="{{ if $currentPage.HasMenuCurrent "main" . }}active{{ end }}" href="#">-->
-                    <a class="top-menu chevron-toggle {{if not (or ($currentPage.IsMenuCurrent "main" .) ($currentPage.HasMenuCurrent "main" .)) }} collapsed{{end}}" data-toggle="collapse" href="#{{ $validateName }}">
-                        <span>{{ .Name }}{{ .Post }}</span>
-                    </a>
-                </li>
-        <div id="{{ $validateName }}" class="{{if or ($currentPage.IsMenuCurrent "main" .) ($currentPage.HasMenuCurrent "main" .) }}collapse in{{ else }}collapse in{{end}}">
-                <ul class="sub-menu">
-                    {{ range .Children }}
-                        <li>
-                            <a href="{{ .URL }}">{{ .Name }}</a>
-                        </li>
-                    {{ end }}
-                </ul>
-        </div>
-            {{ else }}
-                <li>
-                    <a class="top-menu" id="{{ if eq $currentPage.Title .Name }}active{{ end }}" {{ if hasPrefix .Identifier "_" }}target="_blank"{{ end }} href="{{ if eq .Pre "relative" }}{{ $.Site.BaseURL }}{{ .URL }}{{ else }}{{ .URL }}{{ end }}">
-                        <span>{{ .Name }}{{ .Post }}</span>
-                    </a>
-                </li>
-            {{ end }}
-        {{ end }}
-        </ul>
-        </div>
-    </div>
-    
-</div>
-{{ end }}
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/social.html b/amoro-theme/layouts/partials/social.html
deleted file mode 100644
index b2d1dd2..0000000
--- a/amoro-theme/layouts/partials/social.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-{{ range .Site.Params.social }}
-	<li>
-		<a href="{{ if .url }}{{ .url }}{{ else if .rel_url }}{{ $.Site.BaseURL }}/{{ .rel_url }}{{ else }}/{{ end }}" class="btn btn-default btn-lg">
-			<i class="fa fa-{{ .icon }} fa-fw"></i>
-			<span class="network-name">{{ .title }}</span>
-		</a>
-	</li>
-{{ end }}
diff --git a/amoro-theme/layouts/partials/toc.html b/amoro-theme/layouts/partials/toc.html
deleted file mode 100644
index 668c5f5..0000000
--- a/amoro-theme/layouts/partials/toc.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-{{ if not .Params.disbaleToc }}
-<div id="toc" class="markdown-body">
-    <div id="full">
-        {{.TableOfContents}}
-    </div>
-</div>
-{{ end }}
\ No newline at end of file
diff --git a/amoro-theme/layouts/partials/version-dropdown.html b/amoro-theme/layouts/partials/version-dropdown.html
deleted file mode 100644
index f05dd3f..0000000
--- a/amoro-theme/layouts/partials/version-dropdown.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<div class="versions-dropdown">
-  <span>{{ $.Site.Params.latestVersions.iceberg }}</span> <i class="fa fa-chevron-down"></i>
-  <div class="versions-dropdown-content">
-    <ul>
-    {{ range $.Site.Menus.versions }}
-      <li class="versions-dropdown-selection">
-        <a href="{{ if eq .Pre "relative" }}{{ $.Site.BaseURL }}{{ .URL }}{{ else }}{{ .URL }}{{ end }}">{{ .Name }}</a>
-      </li>
-    {{ end }}
-    </ul>
-  </div>
-</div>
\ No newline at end of file
diff --git a/amoro-theme/layouts/shortcodes/addtab.html b/amoro-theme/layouts/shortcodes/addtab.html
deleted file mode 100644
index 533dd04..0000000
--- a/amoro-theme/layouts/shortcodes/addtab.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<input id="{{ .Get 2 }}" type="radio" name="{{ .Parent.Get 0 }}" onclick="selectExampleLanguage('{{ .Get 1 }}', '{{ .Get 2 }}')">
-<label for="{{ .Get 2 }}">{{ .Get 0 }}</label>
\ No newline at end of file
diff --git a/amoro-theme/layouts/shortcodes/codetabs.html b/amoro-theme/layouts/shortcodes/codetabs.html
deleted file mode 100644
index fee3a15..0000000
--- a/amoro-theme/layouts/shortcodes/codetabs.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="codetabs">{{ .Inner }}</div>
diff --git a/amoro-theme/layouts/shortcodes/hint.html b/amoro-theme/layouts/shortcodes/hint.html
deleted file mode 100644
index 496f677..0000000
--- a/amoro-theme/layouts/shortcodes/hint.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="{{ .Get 0 }}">
-    {{ .Inner | .Page.RenderString }}
-</div>
\ No newline at end of file
diff --git a/amoro-theme/layouts/shortcodes/icebergVersion.html b/amoro-theme/layouts/shortcodes/icebergVersion.html
deleted file mode 100644
index 8566d62..0000000
--- a/amoro-theme/layouts/shortcodes/icebergVersion.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ $.Site.Params.latestVersions.iceberg }}
\ No newline at end of file
diff --git a/amoro-theme/layouts/shortcodes/nessieVersion.html b/amoro-theme/layouts/shortcodes/nessieVersion.html
deleted file mode 100644
index 557b514..0000000
--- a/amoro-theme/layouts/shortcodes/nessieVersion.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ .Page.Site.Params.versions.nessie }}
\ No newline at end of file
diff --git a/amoro-theme/layouts/shortcodes/quickstarts.html b/amoro-theme/layouts/shortcodes/quickstarts.html
deleted file mode 100644
index 82cb0af..0000000
--- a/amoro-theme/layouts/shortcodes/quickstarts.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- - Licensed to the Apache Software Foundation (ASF) under one or more-->
-<!-- - contributor license agreements.  See the NOTICE file distributed with-->
-<!-- - this work for additional information regarding copyright ownership.-->
-<!-- - The ASF licenses this file to You under the Apache License, Version 2.0-->
-<!-- - (the "License"); you may not use this file except in compliance with-->
-<!-- - the License.  You may obtain a copy of the License at-->
-<!-- - -->
-<!-- -   http://www.apache.org/licenses/LICENSE-2.0-->
-<!-- - -->
-<!-- - Unless required by applicable law or agreed to in writing, software-->
-<!-- - distributed under the License is distributed on an "AS IS" BASIS,-->
-<!-- - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-->
-<!-- - See the License for the specific language governing permissions and-->
-<!-- - limitations under the License.-->
-<details>
-    <summary>More Quickstarts</summary>
-    <div class="quickstart-container">{{ $currentPageTitle := .Page.Title }}{{ range .Site.Menus.quickstarts }}{{ if ne .Name $currentPageTitle }}
-            <div class="quickstart-card quickstart-card-aqua">
-                <div class="quickstart-card-content">
-                    <span class="quickstart-card-title" title="{{ .Name }}">{{ .Name }}</span>
-                    <p class="quickstart-card-text">
-                        {{ substr .Post 0 130 }}
-                    </p>
-                </div>
-                <div class="quickstart-card-link">
-                    <a href="{{ $.Site.BaseURL }}{{ .URL }}"><span>Try it Out</span></a>
-                </div>
-            </div>
-            <br>{{ else }}{{ end }}{{ end }}
-    </div>
-    </details>
\ No newline at end of file
diff --git a/amoro-theme/layouts/shortcodes/tabcontent.html b/amoro-theme/layouts/shortcodes/tabcontent.html
deleted file mode 100644
index c099bb7..0000000
--- a/amoro-theme/layouts/shortcodes/tabcontent.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<codeblock class="{{ .Get 0 }}">
-      {{ .Inner }}
-</codeblock>
\ No newline at end of file
diff --git a/amoro-theme/theme.toml b/amoro-theme/theme.toml
deleted file mode 100644
index fb42504..0000000
--- a/amoro-theme/theme.toml
+++ /dev/null
@@ -1,32 +0,0 @@
-#  - Licensed to the Apache Software Foundation (ASF) under one or more
-#  - contributor license agreements.  See the NOTICE file distributed with
-#  - this work for additional information regarding copyright ownership.
-#  - The ASF licenses this file to You under the Apache License, Version 2.0
-#  - (the "License"); you may not use this file except in compliance with
-#  - the License.  You may obtain a copy of the License at
-#  -
-#  -   http://www.apache.org/licenses/LICENSE-2.0
-#  -
-#  - Unless required by applicable law or agreed to in writing, software
-#  - distributed under the License is distributed on an "AS IS" BASIS,
-#  - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  - See the License for the specific language governing permissions and
-#  - limitations under the License.
-name = "Amoro Theme"
-license = "MIT"
-licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
-description = ""
-homepage = "http://example.com/"
-tags = []
-features = []
-min_version = "0.41.0"
-
-[author]
-  name = ""
-  homepage = ""
-
-# If porting an existing theme
-[original]
-  name = ""
-  homepage = ""
-  repo = ""
diff --git a/benchmark-guide/index.html b/benchmark-guide/index.html
new file mode 100644
index 0000000..6e26d37
--- /dev/null
+++ b/benchmark-guide/index.html
@@ -0,0 +1,448 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!DOCTYPE html>
+<html>
+<head>
+
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <title>How To Benchmark</title>
+
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<link href="/css/bootstrap.css" rel="stylesheet">
+
+
+<link href="/css/markdown.css" rel="stylesheet">
+<link href="/css/katex.min.css" rel="stylesheet">
+
+
+
+
+
+<link href="/css/amoro-theme.css" rel="stylesheet">
+
+
+<link href="/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
+<link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
+
+
+<link href="/css/termynal.css" rel="stylesheet">
+
+<link href="/css/home-page.css" rel="stylesheet">
+
+
+    
+    
+    
+
+</head>
+<body>
+
+<head>
+    <script>
+        
+        function addAnchor(element) {
+            element.insertAdjacentHTML('beforeend', `<a href="#${element.id}" class="anchortag" ariaLabel="Anchor"> 🔗 </a>` )
+        }
+        document.addEventListener('DOMContentLoaded', function () {
+            var headers = document.querySelectorAll('h1[id], h2[id], h3[id], h4[id]')
+            if (headers) {
+                headers.forEach(addAnchor)
+            }
+        });
+    </script>
+</head>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <nav class="navbar navbar-default" role="navigation">
+        <topsection>
+            <div class="navbar-fixed-top">
+                <div>
+                <a class="page-scroll navbar-brand" href="https://amoro.netease.com/"><img class="top-navbar-logo" src="https://amoro.apache.org//img/amoro-logo-icon.png"/></a>
+                </div>
+            </div>
+            <div class="navbar-menu-fixed-top navbar-pages-group">
+                
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Quickstart</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/quickstart-setup/">Setup</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/quick-demo/">Quick Demo</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Docs</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/latest/">latest</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/latest/">0.6.1</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/0.6.0/">0.6.0</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/0.5.1/">0.5.1</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/0.5.0/">0.5.0</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Benchmark</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/benchmark-report/">Benchmark Report</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/benchmark-guide/">Benchmark Guide</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="/download/">Download</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="/roadmap/">Roadmap</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Community</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/join-community/">Join Community</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/how-to-contribute/">How to contribute</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                <div class="topnav-page-selection">
+                    <a href="https://github.com/NetEase/amoro" target="_blank">
+                        <img src="https://amoro.apache.org//img/GitHub-Mark.png" target="_blank" class="top-navbar-logo"/>
+                    </a>
+                </div>
+            </div>
+            </topsection>
+    </nav>
+
+<body dir=" ltr">
+    <section>
+        <div class="grid-container toc-only">
+            
+            <div id="content" class="markdown-body">
+                <div class="margin-for-toc"><h1 id="benchmark-guild">Benchmark Guild</h1>
+<p>This guilde introduces detailed steps for executing the benchmark to validate performance of various data lake formats.</p>
+<p>By following the steps in the guild, you can learn about the analytical performance of different data lake table format. At the same time, you can flexibly adjust the test scenarios to obtain test results that better suit your actual scenario.</p>
+<h2 id="deploy-testing-environment">Deploy testing environment</h2>
+<h3 id="deploy-by-docker">Deploy by Docker</h3>
+<p>With <a href="https://docs.docker.com/compose/">Docker-Compose</a>, you can quickly set up an environment for performing the benchmark.
+The detailed steps reference: <a href="https://github.com/NetEase/lakehouse-benchmark/tree/master/docker/benchmark">Lakehouse-benchmark</a>.</p>
+<h3 id="deploy-manually">Deploy manually</h3>
+<p>Alternatively, you can manually deploy the following components to set up the test environment:</p>
+<table>
+<thead>
+<tr>
+<th style="text-align:left">Component</th>
+<th style="text-align:left">Version</th>
+<th style="text-align:left">Description</th>
+<th style="text-align:left">Installation Guide</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td style="text-align:left">MySQL</td>
+<td style="text-align:left">5.7+</td>
+<td style="text-align:left">MySQL is used to generate TPC-C data for synchronization to data lakes.</td>
+<td style="text-align:left"><a href="https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/">MySQL Installation Guide</a></td>
+</tr>
+<tr>
+<td style="text-align:left">Hadoop</td>
+<td style="text-align:left">2.3.7+</td>
+<td style="text-align:left">Hadoop is used to provide the storage for data lakes.</td>
+<td style="text-align:left"><a href="https://ambari.apache.org/">Ambari</a></td>
+</tr>
+<tr>
+<td style="text-align:left">Trino</td>
+<td style="text-align:left">380</td>
+<td style="text-align:left">Trino is used to execute TPC-H queries for Iceberg and Mixed-Iceberg format tables.</td>
+<td style="text-align:left"><a href="https://trino.io/docs/current/installation/deployment.html">Trino Installation Guide</a></td>
+</tr>
+<tr>
+<td style="text-align:left">Amoro Trino Connector</td>
+<td style="text-align:left">0.4.0</td>
+<td style="text-align:left">To query Mixed-Iceberg Format tables in Trino, you need to install and configure the Amoro connector in Trino.</td>
+<td style="text-align:left"><a href="https://amoro.netease.com/docs/latest/trino/">Amoro Trino Connector</a></td>
+</tr>
+<tr>
+<td style="text-align:left">Iceberg Trino Connector</td>
+<td style="text-align:left">0.13.0</td>
+<td style="text-align:left">To query Iceberg Format tables in Trino, you need to install and configure the Iceberg connector in Trino.</td>
+<td style="text-align:left"><a href="https://trino.io/docs/current/connector/iceberg.html">Iceberg Trino Connector</a></td>
+</tr>
+<tr>
+<td style="text-align:left">Presto</td>
+<td style="text-align:left">274</td>
+<td style="text-align:left">Presto is used to execute TPC-H queries for Hudi format tables.</td>
+<td style="text-align:left"><a href="https://prestodb.io/docs/current/installation/deployment.html">Presto Installation Guide</a></td>
+</tr>
+<tr>
+<td style="text-align:left">Hudi Presto Connector</td>
+<td style="text-align:left">0.11.1</td>
+<td style="text-align:left">To query Iceberg Format tables in Trino, you need to install and configure the Iceberg connector in Presto.</td>
+<td style="text-align:left"><a href="https://prestodb.io/docs/current/connector/hudi.html">Hudi Presto Connector</a></td>
+</tr>
+<tr>
+<td style="text-align:left">AMS</td>
+<td style="text-align:left">0.4.0</td>
+<td style="text-align:left">Amoro Management Service, support self-optimizing on tables during the test.</td>
+<td style="text-align:left"><a href="https://amoro.netease.com/docs/latest/deployment/">AMS Installation Guide</a></td>
+</tr>
+<tr>
+<td style="text-align:left">data-lake-benchmark</td>
+<td style="text-align:left">21</td>
+<td style="text-align:left">The core program of Benchmark which is responsible for generating test data, executing the testing process, and generating test results.</td>
+<td style="text-align:left"><a href="https://github.com/NetEase/data-lake-benchmark#readme">Data Lake Benchmark</a></td>
+</tr>
+<tr>
+<td style="text-align:left">lakehouse-benchmark-ingestion</td>
+<td style="text-align:left">1.0</td>
+<td style="text-align:left">Data synchronization tool based on Flink-CDC which can synchronize data from  database to data lake in real-time.</td>
+<td style="text-align:left"><a href="https://github.com/NetEase/lakehouse-benchmark-ingestion">Lakehouse Benchmark Ingestion</a></td>
+</tr>
+</tbody>
+</table>
+<h2 id="benchmark-steps">Benchmark steps</h2>
+<ol>
+<li>
+<p>Configure the configuration file <code>config/mysql/sample_chbenchmark_config.xml</code> file of program <code>data-lake-benchmark</code>. Fill in the information of MySQL and parameter <code>scalefactor</code>.  <code>scalefactor</code> represents the number of warehouses, which controls the overall data volume. Generally, choose 10 or 100.</p>
+</li>
+<li>
+<p>Generate static data into MySQL with command:</p>
+</li>
+</ol>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>java -jar lakehouse-benchmark.jar -b tpcc,chbenchmark -c config/mysql/sample_chbenchmark_config.xml --create<span style="color:#f92672">=</span>true --load<span style="color:#f92672">=</span>true
+</span></span></code></pre></div><ol start="3">
+<li>
+<p>Configure the configuration file <code>config/ingestion-conf.yaml</code> file of program <code>lakehouse-benchmark-ingestion</code>. Fill in the information of MySQL.</p>
+</li>
+<li>
+<p>Start the ingestion job to synchronize data form MySQL to data lake tables witch command:</p>
+</li>
+</ol>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>java -cp lakehouse-benchmark-ingestion-1.0-SNAPSHOT.jar com.netease.arctic.benchmark.ingestion.MainRunner -confDir <span style="color:#f92672">[</span>confDir<span style="color:#f92672">]</span> -sinkType <span style="color:#f92672">[</span>arctic/iceberg/hudi<span style="color:#f [...]
+</span></span></code></pre></div><ol start="5">
+<li>Execute TPC-H benchmark on static data with command:</li>
+</ol>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>java -jar lakehouse-benchmark.jar -b chbenchmarkForTrino -c config/trino/trino_chbenchmark_config.xml --create<span style="color:#f92672">=</span>false --load<span style="color:#f92672">=</span>false --execute<span style="color:#f92672">=</span>true
+</span></span></code></pre></div><ol start="6">
+<li>Execute TPC-C program to continuously write data into MYSQL witch command:</li>
+</ol>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>java -jar lakehouse-benchmark.jar -b tpcc,chbenchmark -c config/mysql/sample_chbenchmark_config.xml --execute<span style="color:#f92672">=</span>true -s <span style="color:#ae81ff">5</span>
+</span></span></code></pre></div><ol start="7">
+<li>Execute TPC-H benchmark on dynamic data with command:</li>
+</ol>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>java -jar lakehouse-benchmark.jar -b chbenchmarkForTrino -c config/trino/trino_chbenchmark_config.xml --create<span style="color:#f92672">=</span>false --load<span style="color:#f92672">=</span>false --execute<span style="color:#f92672">=</span>true
+</span></span></code></pre></div><ol start="8">
+<li>
+<p>Obtain the benchmark results in the <code>result</code> directory of the <code>data-lake-benchmark</code> project.</p>
+</li>
+<li>
+<p>Repeat step 7 to obtain benchmark results for different points in time.</p>
+</li>
+</ol>
+</div>
+                
+                    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="toc" class="markdown-body">
+    <div id="full">
+        <nav id="TableOfContents">
+  <ul>
+    <li><a href="#deploy-testing-environment">Deploy testing environment</a>
+      <ul>
+        <li><a href="#deploy-by-docker">Deploy by Docker</a></li>
+        <li><a href="#deploy-manually">Deploy manually</a></li>
+      </ul>
+    </li>
+    <li><a href="#benchmark-steps">Benchmark steps</a></li>
+  </ul>
+</nav>
+    </div>
+</div>
+
+                
+            </div>
+        </div>
+    </section>
+</body>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script src="https://amoro.apache.org//js/jquery-1.11.0.js"></script>
+
+
+<script src="https://amoro.apache.org//js/jquery.easing.min.js"></script>
+
+
+<script type="text/javascript" src="https://amoro.apache.org//js/search.js"></script>
+
+
+<script src="https://amoro.apache.org//js/bootstrap.min.js"></script>
+
+
+<script src="https://amoro.apache.org//js/iceberg-theme.js"></script>
+
+
+
+</html>
\ No newline at end of file
diff --git a/benchmark-report/index.html b/benchmark-report/index.html
new file mode 100644
index 0000000..1433eaf
--- /dev/null
+++ b/benchmark-report/index.html
@@ -0,0 +1,612 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!DOCTYPE html>
+<html>
+<head>
+
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <title>Benchmark Report</title>
+
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<link href="/css/bootstrap.css" rel="stylesheet">
+
+
+<link href="/css/markdown.css" rel="stylesheet">
+<link href="/css/katex.min.css" rel="stylesheet">
+
+
+
+
+
+<link href="/css/amoro-theme.css" rel="stylesheet">
+
+
+<link href="/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
+<link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
+
+
+<link href="/css/termynal.css" rel="stylesheet">
+
+<link href="/css/home-page.css" rel="stylesheet">
+
+
+    
+    
+    
+
+</head>
+<body>
+
+<head>
+    <script>
+        
+        function addAnchor(element) {
+            element.insertAdjacentHTML('beforeend', `<a href="#${element.id}" class="anchortag" ariaLabel="Anchor"> 🔗 </a>` )
+        }
+        document.addEventListener('DOMContentLoaded', function () {
+            var headers = document.querySelectorAll('h1[id], h2[id], h3[id], h4[id]')
+            if (headers) {
+                headers.forEach(addAnchor)
+            }
+        });
+    </script>
+</head>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    <nav class="navbar navbar-default" role="navigation">
+        <topsection>
+            <div class="navbar-fixed-top">
+                <div>
+                <a class="page-scroll navbar-brand" href="https://amoro.netease.com/"><img class="top-navbar-logo" src="https://amoro.apache.org//img/amoro-logo-icon.png"/></a>
+                </div>
+            </div>
+            <div class="navbar-menu-fixed-top navbar-pages-group">
+                
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Quickstart</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/quickstart-setup/">Setup</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/quick-demo/">Quick Demo</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Docs</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/latest/">latest</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/latest/">0.6.1</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/0.6.0/">0.6.0</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/0.5.1/">0.5.1</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/docs/0.5.0/">0.5.0</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Benchmark</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a id="active"  href="/benchmark-report/">Benchmark Report</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/benchmark-guide/">Benchmark Guide</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="/download/">Download</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    <div class="topnav-page-selection">
+                        <a   href="/roadmap/">Roadmap</a>
+                    </div class="topnav-page-selection">
+                
+                
+                
+                
+                    
+                    <div class="versions-dropdown">
+                    <div class="topnav-page-selection">
+                        <a   href="">Community</a> <i class="fa fa-caret-down"></i>
+                    </div class="topnav-page-selection">
+                        <div class="versions-dropdown-content">
+                        <ul>
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/join-community/">Join Community</a>
+                            </li class="topnav-page-selection">
+                        
+                            <li class="topnav-page-selection">
+                            <a   href="/how-to-contribute/">How to contribute</a>
+                            </li class="topnav-page-selection">
+                        
+                        </ul>
+                        </div>
+                    </div>
+                
+                
+                <div class="topnav-page-selection">
+                    <a href="https://github.com/NetEase/amoro" target="_blank">
+                        <img src="https://amoro.apache.org//img/GitHub-Mark.png" target="_blank" class="top-navbar-logo"/>
+                    </a>
+                </div>
+            </div>
+            </topsection>
+    </nav>
+
+<body dir=" ltr">
+    <section>
+        <div class="grid-container toc-only">
+            
+            <div id="content" class="markdown-body">
+                <div class="margin-for-toc"><h1 id="benchmark-report">Benchmark Report</h1>
+<h2 id="test-purpose">Test purpose</h2>
+<p>This test aims at comparing the OLAP benchmark performance of various data lake formats in the scenario of continuous streaming ingestion in the CDC database.</p>
+<p>Meanwhile, particular attention was paid during the testing process to the impact of enabling self-optimizing on the analytical performance of the table.</p>
+<h2 id="test-envrionment">Test envrionment</h2>
+<h3 id="hardware-configuration">Hardware configuration</h3>
+<table>
+<thead>
+<tr>
+<th>Number</th>
+<th>OS</th>
+<th>Cpu core</th>
+<th>Memory</th>
+<th>Disk type</th>
+<th>Deployed components</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>1</td>
+<td>CentOS 7</td>
+<td>40</td>
+<td>256</td>
+<td>SAS</td>
+<td>HDFS、Hive、Yarn</td>
+</tr>
+<tr>
+<td>2</td>
+<td>CentOS 7</td>
+<td>40</td>
+<td>256</td>
+<td>SAS</td>
+<td>HDFS、Hive、Yarn</td>
+</tr>
+<tr>
+<td>3</td>
+<td>CentOS 7</td>
+<td>40</td>
+<td>256</td>
+<td>SAS</td>
+<td>HDFS、Hive、Yarn</td>
+</tr>
+<tr>
+<td>4</td>
+<td>CentOS 7</td>
+<td>40</td>
+<td>256</td>
+<td>SAS</td>
+<td>Trino、Presto</td>
+</tr>
+<tr>
+<td>5</td>
+<td>CentOS 7</td>
+<td>40</td>
+<td>256</td>
+<td>SAS</td>
+<td>Trino、Presto</td>
+</tr>
+<tr>
+<td>6</td>
+<td>CentOS 7</td>
+<td>40</td>
+<td>256</td>
+<td>SAS</td>
+<td>Trino、Presto</td>
+</tr>
+</tbody>
+</table>
+<h3 id="software-version">Software version</h3>
+<table>
+<thead>
+<tr>
+<th>Software</th>
+<th>Version</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Trino</td>
+<td>380</td>
+</tr>
+<tr>
+<td>Presto</td>
+<td>274</td>
+</tr>
+<tr>
+<td>Iceberg</td>
+<td>0.13</td>
+</tr>
+<tr>
+<td>Amoro</td>
+<td>0.4</td>
+</tr>
+<tr>
+<td>Hudi</td>
+<td>0.11.1</td>
+</tr>
+</tbody>
+</table>
+<h2 id="test-plan">Test plan</h2>
+<h3 id="overview">Overview</h3>
+<p>This test is based on CHbenchmark, which is a hybrid testing standard that integrates TPCC and TPCH. The overall testing workload can be divided into two categories:</p>
+<ul>
+<li>
+<p>5 OLTP workloads based on TPC-C: NewOrder, Payment, OrderStatus, Delivery, and StockLevel.</p>
+</li>
+<li>
+<p>22 OLAP workloads based on TCP-H, where Q15 was abandoned in this test due to its association with views and the lack of view rewriting.</p>
+</li>
+</ul>
+<img src="../images/chbenchmark/OLTP-OLAP.png" alt="OLTP AND OLAP" width="60%" height="60%">
+<h3 id="prepare-test-data">Prepare test data</h3>
+<p>Based on the TPC-C, the raw data was constructed in MySQL for this test. The dataset includes a total of 12 tables, with the relationship between TPC-C and TPC-H tables shown in the following diagram:</p>
+<img src="../images/chbenchmark/TPCC-TPCH.png" alt="TPCC AND TPCH" width="60%" height="60%">
+<p>In addition, the relationship between the data sizes of each table is shown in the following table, where <code>w</code> represents the number of warehouses. It can be observed that the data sizes of intermediate tables such as <code>new_order</code> and <code>stock</code> are affected by the number of warehouses. Therefore, the data set size can be adjusted by controlling the number of warehouses during testing.</p>
+<img src="../images/chbenchmark/chbenchmark.png" alt="chbenchmark" width="60%" height="60%">
+<p>In this test, the number of warehouses was set to 100, and the initial data set size in the MySQL database was approximately 10GB. The following table shows the number of data records for each table in the initial data set and the changes in the number of data records for each table after running the one-hour TPC-C test.</p>
+<table>
+<thead>
+<tr>
+<th>Table name</th>
+<th>The number of records (rows) in beginning</th>
+<th>The number of records (rows) after running a one-hour TPC-C test</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>warehouse</td>
+<td>100</td>
+<td>100</td>
+</tr>
+<tr>
+<td>item</td>
+<td>100000</td>
+<td>100000</td>
+</tr>
+<tr>
+<td>stock</td>
+<td>10000000</td>
+<td>10000000</td>
+</tr>
+<tr>
+<td>district</td>
+<td>1000</td>
+<td>1000</td>
+</tr>
+<tr>
+<td>customer</td>
+<td>3000000</td>
+<td>3000000</td>
+</tr>
+<tr>
+<td>history</td>
+<td>3000000</td>
+<td>3119285(+119285)</td>
+</tr>
+<tr>
+<td>oorder</td>
+<td>3000000</td>
+<td>3124142(+124142)</td>
+</tr>
+<tr>
+<td>new_order</td>
+<td>893709</td>
+<td>907373(+13664)</td>
+</tr>
+<tr>
+<td>order_line</td>
+<td>29996774</td>
+<td>31252799(+1256025)</td>
+</tr>
+<tr>
+<td>region</td>
+<td>5</td>
+<td>5</td>
+</tr>
+<tr>
+<td>nation</td>
+<td>62</td>
+<td>62</td>
+</tr>
+<tr>
+<td>supplier</td>
+<td>1000</td>
+<td>1000</td>
+</tr>
+</tbody>
+</table>
+<h3 id="perform-the-test">Perform the test</h3>
+<p>Before starting TPC-H testing, start a Flink job to synchronize both the history data and real-time data from MySQL into the data lake.
+Afterwards, execute TPC-H testing through query engines such as Trino or Presto.</p>
+<p>TPC-H contains 22 query statements, only three of which are listed here due to space limitation:</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#75715e">-- query1 
+</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">SELECT</span> ol_number,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">sum</span>(ol_quantity) <span style="color:#66d9ef">AS</span> sum_qty,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">sum</span>(ol_amount) <span style="color:#66d9ef">AS</span> sum_amount,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">avg</span>(ol_quantity) <span style="color:#66d9ef">AS</span> avg_qty,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">avg</span>(ol_amount) <span style="color:#66d9ef">AS</span> avg_amount,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">count</span>(<span style="color:#f92672">*</span>) <span style="color:#66d9ef">AS</span> count_order
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">FROM</span> order_line
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">WHERE</span> ol_delivery_d <span style="color:#f92672">&gt;</span> <span style="color:#e6db74">&#39;2007-01-02 00:00:00.000000&#39;</span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">GROUP</span> <span style="color:#66d9ef">BY</span> ol_number
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">ORDER</span> <span style="color:#66d9ef">BY</span> ol_number;
+</span></span><span style="display:flex;"><span>        
+</span></span><span style="display:flex;"><span> <span style="color:#75715e">-- query2 
+</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">SELECT</span> su_suppkey,
+</span></span><span style="display:flex;"><span>    su_name,
+</span></span><span style="display:flex;"><span>    n_name,
+</span></span><span style="display:flex;"><span>    i_id,
+</span></span><span style="display:flex;"><span>    i_name,
+</span></span><span style="display:flex;"><span>    su_address,
+</span></span><span style="display:flex;"><span>    su_phone,
+</span></span><span style="display:flex;"><span>    su_comment
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">FROM</span> item, supplier, stock, nation, region, 
+</span></span><span style="display:flex;"><span>    (<span style="color:#66d9ef">SELECT</span> s_i_id <span style="color:#66d9ef">AS</span> m_i_id,
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">MIN</span>(s_quantity) <span style="color:#66d9ef">AS</span> m_s_quantity
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">FROM</span> stock, supplier, nation, region
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">WHERE</span> <span style="color:#66d9ef">MOD</span>((s_w_id<span style="color:#f92672">*</span>s_i_id), <span style="color:#ae81ff">10000</span>) <span style="color:#f92672">=</span> su_suppkey
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">AND</span> su_nationkey <span style="color:#f92672">=</span> n_nationkey
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">AND</span> n_regionkey <span style="color:#f92672">=</span> r_regionkey
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">AND</span> r_name <span style="color:#66d9ef">LIKE</span> <span style="color:#e6db74">&#39;Europ%&#39;</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">GROUP</span> <span style="color:#66d9ef">BY</span> s_i_id) m
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">WHERE</span> i_id <span style="color:#f92672">=</span> s_i_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> <span style="color:#66d9ef">MOD</span>((s_w_id <span style="color:#f92672">*</span> s_i_id), <span style="color:#ae81ff">10000</span>) <span style="color:#f92672">=</span> su_suppkey
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> su_nationkey <span style="color:#f92672">=</span> n_nationkey
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> n_regionkey <span style="color:#f92672">=</span> r_regionkey
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> i_data <span style="color:#66d9ef">LIKE</span> <span style="color:#e6db74">&#39;%b&#39;</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> r_name <span style="color:#66d9ef">LIKE</span> <span style="color:#e6db74">&#39;Europ%&#39;</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> i_id<span style="color:#f92672">=</span>m_i_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> s_quantity <span style="color:#f92672">=</span> m_s_quantity
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">ORDER</span> <span style="color:#66d9ef">BY</span> n_name, su_name, i_id;
+</span></span><span style="display:flex;"><span>        
+</span></span><span style="display:flex;"><span> <span style="color:#75715e">-- query3 
+</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">SELECT</span> ol_o_id,
+</span></span><span style="display:flex;"><span>    ol_w_id,
+</span></span><span style="display:flex;"><span>    ol_d_id,
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">sum</span>(ol_amount) <span style="color:#66d9ef">AS</span> revenue,
+</span></span><span style="display:flex;"><span>    o_entry_d
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">FROM</span> customer, new_order, oorder, order_line
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">WHERE</span> c_state <span style="color:#66d9ef">LIKE</span> <span style="color:#e6db74">&#39;A%&#39;</span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> c_id <span style="color:#f92672">=</span> o_c_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> c_w_id <span style="color:#f92672">=</span> o_w_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> c_d_id <span style="color:#f92672">=</span> o_d_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> no_w_id <span style="color:#f92672">=</span> o_w_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> no_d_id <span style="color:#f92672">=</span> o_d_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> no_o_id <span style="color:#f92672">=</span> o_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> ol_w_id <span style="color:#f92672">=</span> o_w_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> ol_d_id <span style="color:#f92672">=</span> o_d_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> ol_o_id <span style="color:#f92672">=</span> o_id
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">AND</span> o_entry_d <span style="color:#f92672">&gt;</span> <span style="color:#e6db74">&#39;2007-01-02 00:00:00.000000&#39;</span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">GROUP</span> <span style="color:#66d9ef">BY</span> ol_o_id, ol_w_id, ol_d_id, o_entry_d
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">ORDER</span> <span style="color:#66d9ef">BY</span> revenue <span style="color:#66d9ef">DESC</span>, o_entry_d;
+</span></span></code></pre></div><h2 id="test-results">Test results</h2>
+<h3 id="static-result">Static result</h3>
+<p><img src="../images/chbenchmark/arctic-iceberg-100-warehouse-static-performence.png" alt="arctic iceberg static performence"></p>
+<p>The figure above shows a performance comparison of Iceberg and Mixed-Iceberg table formats for querying static data. It can be seen from the figure that the query performance of the two table formats is similar.</p>
+<h3 id="dynamic-result">Dynamic result</h3>
+<p><img src="../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_with_TPCC_time.png" alt="Amoro Iceberg Hudi 100 warehouse performence with TPCC time"></p>
+<p>The figure above shows a performance comparison of Iceberg 、Mixed-Iceberg and Hudi table formats for querying dynamic data. The test recorded the results of running TPC-C for different time periods.</p>
+<p>The following are the specific results of each test group:</p>
+<p><img src="../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_0-30_minutes.png" alt="Amoro Iceberg Hudi 100 warehouse performence on TPCC 0-30 minutes"></p>
+<p><img src="../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_30-60_minutes.png" alt="Amoro Iceberg Hudi 100 warehouse performence on TPCC 30-60 minutes"></p>
+<p><img src="../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_60-90_minutes.png" alt="Amoro Iceberg Hudi 100 warehouse performence on TPCC 60-90 minutes"></p>
+<p><img src="../images/chbenchmark/Arctic-Iceberg-Hudi_100_warehouse_performence_on_TPCC_90-120_minutes.png" alt="Amoro Iceberg Hudi 100 warehouse performence on TPCC 90-120 minutes"></p>
+<h2 id="conclusion">Conclusion</h2>
+<ul>
+<li>In the case of static data, the query performance of Iceberg and Mixed-Iceberg tables is similar.</li>
+<li>Without enabling self-optimizing, the query performance of all table formats will continue to decline as dynamic data is continuously written.</li>
+<li>After enabling self-optimizing, the query performance of all table formats remains stable as dynamic data is continuously written.</li>
+</ul>
+</div>
+                
+                    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="toc" class="markdown-body">
+    <div id="full">
+        <nav id="TableOfContents">
+  <ul>
+    <li><a href="#test-purpose">Test purpose</a></li>
+    <li><a href="#test-envrionment">Test envrionment</a>
+      <ul>
+        <li><a href="#hardware-configuration">Hardware configuration</a></li>
+        <li><a href="#software-version">Software version</a></li>
+      </ul>
+    </li>
+    <li><a href="#test-plan">Test plan</a>
+      <ul>
+        <li><a href="#overview">Overview</a></li>
+        <li><a href="#prepare-test-data">Prepare test data</a></li>
+        <li><a href="#perform-the-test">Perform the test</a></li>
+      </ul>
+    </li>
+    <li><a href="#test-results">Test results</a>
+      <ul>
+        <li><a href="#static-result">Static result</a></li>
+        <li><a href="#dynamic-result">Dynamic result</a></li>
+      </ul>
+    </li>
+    <li><a href="#conclusion">Conclusion</a></li>
+  </ul>
+</nav>
+    </div>
+</div>
+
+                
+            </div>
+        </div>
+    </section>
+</body>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script src="https://amoro.apache.org//js/jquery-1.11.0.js"></script>
+
+
+<script src="https://amoro.apache.org//js/jquery.easing.min.js"></script>
+
+
+<script type="text/javascript" src="https://amoro.apache.org//js/search.js"></script>
+
+
+<script src="https://amoro.apache.org//js/bootstrap.min.js"></script>
+
+
+<script src="https://amoro.apache.org//js/iceberg-theme.js"></script>
+
+
+
+</html>
\ No newline at end of file
diff --git a/benchmark/index.xml b/benchmark/index.xml
new file mode 100644
index 0000000..8ebc8f3
--- /dev/null
+++ b/benchmark/index.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Benchmarks on Amoro</title>
+    <link>https://amoro.apache.org/benchmark/</link>
+    <description>Recent content in Benchmarks on Amoro</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    <atom:link href="https://amoro.apache.org/benchmark/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Benchmark Report</title>
+      <link>https://amoro.apache.org/benchmark-report/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/benchmark-report/</guid>
+      <description>Benchmark Report Test purpose This test aims at comparing the OLAP benchmark performance of various data lake formats in the scenario of continuous streaming ingestion in the CDC database.&#xA;Meanwhile, particular attention was paid during the testing process to the impact of enabling self-optimizing on the analytical performance of the table.&#xA;Test envrionment Hardware configuration Number OS Cpu core Memory Disk type Deployed components 1 CentOS 7 40 256 SAS HDFS [...]
+    </item>
+    <item>
+      <title>How To Benchmark</title>
+      <link>https://amoro.apache.org/benchmark-guide/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/benchmark-guide/</guid>
+      <description>Benchmark Guild This guilde introduces detailed steps for executing the benchmark to validate performance of various data lake formats.&#xA;By following the steps in the guild, you can learn about the analytical performance of different data lake table format. At the same time, you can flexibly adjust the test scenarios to obtain test results that better suit your actual scenario.&#xA;Deploy testing environment Deploy by Docker With Docker-Compose, you can quickly set  [...]
+    </item>
+  </channel>
+</rss>
diff --git a/categories/index.xml b/categories/index.xml
new file mode 100644
index 0000000..cbec998
--- /dev/null
+++ b/categories/index.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Categories on Amoro</title>
+    <link>https://amoro.apache.org/categories/</link>
+    <description>Recent content in Categories on Amoro</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    <atom:link href="https://amoro.apache.org/categories/index.xml" rel="self" type="application/rss+xml" />
+  </channel>
+</rss>
diff --git a/community/index.xml b/community/index.xml
new file mode 100644
index 0000000..a7205a7
--- /dev/null
+++ b/community/index.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Communities on Amoro</title>
+    <link>https://amoro.apache.org/community/</link>
+    <description>Recent content in Communities on Amoro</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    <atom:link href="https://amoro.apache.org/community/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>How To Contribute</title>
+      <link>https://amoro.apache.org/how-to-contribute/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/how-to-contribute/</guid>
+      <description>Contributing to Amoro Thanks for your interest in the Amoro project. Contributions are welcome and are greatly appreciated! Every little effort helps, and a credit will always be given.&#xA;This page provides some orientation and resources we have for you to get involved. It also offers recommendations on getting the best results when engaging with the community. We hope that this will be a pleasant first experience for you to return to continue contributing.</description>
+    </item>
+    <item>
+      <title>Join Community</title>
+      <link>https://amoro.apache.org/join-community/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/join-community/</guid>
+      <description>Welcome to Amoro Amoro community is a free, open-source community project. Anyone interested in the Amoro project can join the community and contribute to its development by becoming a part of it.&#xA;This document describes the various roles within the community, including the responsibilities of the roles and the criteria for contribution&#xA;Roles and Responsibilities Amoro community is composed of and operated by the following roles:&#xA;User Contributor Active Con [...]
+    </item>
+  </channel>
+</rss>
diff --git a/amoro-theme/static/css/amoro-theme.css b/css/amoro-theme.css
similarity index 94%
copy from amoro-theme/static/css/amoro-theme.css
copy to css/amoro-theme.css
index c31c55f..1c7d7ac 100644
--- a/amoro-theme/static/css/amoro-theme.css
+++ b/css/amoro-theme.css
@@ -1,811 +1,811 @@
-/*!
- * Start Bootstrap - Landing Page Bootstrap Theme (http://startbootstrap.com)
- * Code licensed under the Apache License v2.0.
- * For details, see http://www.apache.org/licenses/LICENSE-2.0.
- */
-
-body,
-html {
-    width: 100%;
-    height: 100%;
-    font-size: 15px;
-    scroll-padding-top: 4rem;
-    scroll-behavior: smooth;
-}
-
-section {
-    display: flex;
-    margin-left: 150px;
-    margin-right: 0;
-}
-
-topsection {
-    display: flex;
-    margin-left: 10%;
-    margin-right: 10%;
-}
-
-body,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-    font-family: "Lato","Helvetica Neue",Helvetica,Arial,sans-serif;
-    font-weight: 400;
-}
-
-.lead {
-    font-size: 18px;
-    font-weight: 400;
-}
-
-section#intro {
-    display: block;
-    max-width: 100%;
-    margin: 0;
-    padding: 0;
-}
-
-section#contact {
-    display: block;
-    max-width: 100%;
-    margin: 0;
-    padding: 0;
-}
-
-section#services {
-    display: block;
-}
-
-.navbar-default {
-    background-color: #F5F6FA;
-    border-color: #F5F6FA;
-}
-
-.intro-message {
-    position: relative;
-    padding-top: 20%;
-    padding-bottom: 20%;
-}
-
-.intro-message > h1 {
-    margin: 0;
-    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
-    font-size: 5em;
-}
-
-.intro-divider {
-    width: 400px;
-    border-top: 1px solid #f8f8f8;
-    border-bottom: 1px solid rgba(0,0,0,0.2);
-}
-
-.intro-message > h3 {
-    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
-}
-
-.button-box {
-    padding-top: 1rem;
-}
-
-@media(max-width:767px) {
-    .intro-message {
-        padding-bottom: 15%;
-    }
-
-    .intro-message > h1 {
-        font-size: 3em;
-    }
-
-    ul.intro-social-buttons > li {
-        display: block;
-        margin-bottom: 20px;
-        padding: 0;
-    }
-
-    ul.intro-social-buttons > li:last-child {
-        margin-bottom: 0;
-    }
-
-    .intro-divider {
-        width: 100%;
-    }
-}
-
-.network-name {
-    text-transform: uppercase;
-    font-size: 14px;
-    font-weight: 400;
-    letter-spacing: 2px;
-}
-
-.content-section-a {
-    padding: 50px 0;
-}
-
-.content-section-b {
-    padding: 50px 0;
-}
-
-.section-heading {
-    margin-bottom: 30px;
-}
-
-.section-heading-spacer {
-    float: left;
-    width: 200px;
-}
-
-.contact {
-    padding: 100px 0;
-    color: #f8f8f8;
-    background: url(../img/contact-bg.jpg) no-repeat center center;
-    background-size: cover;
-}
-
-.contact h2 {
-    margin: 0;
-    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
-    font-size: 3em;
-}
-
-.contact ul {
-    margin-bottom: 0;
-}
-
-.contact-social-buttons {
-    float: right;
-    margin-top: 0;
-}
-
-@media(max-width:1199px) {
-    ul.contact-social-buttons {
-        float: left;
-        margin-top: 15px;
-    }
-}
-
-@media(max-width:767px) {
-    .contact h2 {
-        margin: 0;
-        text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
-        font-size: 3em;
-    }
-
-    ul.contact-social-buttons > li {
-        display: block;
-        margin-bottom: 20px;
-        padding: 0;
-    }
-
-    ul.contact-social-buttons > li:last-child {
-        margin-bottom: 0;
-    }
-}
-
-footer {
-    padding: 50px 0;
-}
-
-p.copyright {
-    margin: 15px 0 0;
-}
-
-.top-navbar-logo {
-    height: 25px;
-    vertical-align: top;
-}
-
-.footer-creds {
-    font-size: 0.8rem;
-}
-
-a.page-scroll {
-    font-size: 15px;
-    color: red;
-}
-
-.pad-for-navbar {
-    padding-top: 80px;
-}
-
-.center-content {
-    padding-top: 5px;
-    padding-bottom: 5px;
-}
-
-
-.termynal-container {
-    padding-top: 3rem;
-}
-
-/* Anchor tags for headers */
-.anchortag { font-size: 80%; visibility: hidden;}
-
-h1:hover a { visibility: visible}
-h2:hover a { visibility: visible}
-h3:hover a { visibility: visible}
-h4:hover a { visibility: visible}
-
-/* Fixed table of contents */
-.grid-container {
-    display: grid;
-    grid-template-columns: 5fr 1fr;
-    grid-gap: 1rem;
-    overflow-y: auto;
-    height: 90vh;
-    width: 100%;
-}
-
-/* Cards at the top of each quickstart page */
-.quickstart-container {
-    display: flex;
-    flex-wrap: wrap;
-    width: 80vw;
-    grid-template-columns: 1fr 1fr 1fr;
-    grid-gap: 1rem;
-}
-
-.content-only {
-    grid-template-columns: auto;
-}
-
-.left-nav-only {
-    grid-template-columns: 1fr 5fr
-}
-
-.toc-only {
-    grid-template-columns: 1fr;
-}
-
-.leftnav-and-toc {
-    grid-template-columns: 1fr 5fr;
-    grid-column-gap: 30px;
-}
-
-.margin-for-toc {
-    margin-right: 40%;
-}
-
-.margin-without-toc {
-    margin-right: 20%;
-}
-
-#toc {
-    position: fixed;
-    right: 0;
-    top: 0;
-    background-color:#FFF;
-    top: 70px;
-    font-size: 0.95rem;
-    width: 260px;
-    list-style-type: none;
-    margin: 0 100px;
-}
-
-div.sidebar {
-    text-decoration: none;
-    left: 0;
-    top: 0;
-    overflow-y: auto;
-    background-color: #fff;
-    display: block;
-    font-size: 16px;
-    min-width: 15rem;
-    list-style-type: none;
-    padding-right: 5px;
-}
-
-.sidebar hr {
-    height: 1px;
-    margin-top: 20px;
-    margin-bottom: 20px;
-}
-
-.sidebar-menu ul {
-    text-decoration: none;
-    list-style: none;
-}
-
-.sidebar-menu li a {
-    color: black;
-    display: flex;
-}
-
-.sidebar-menu li a:hover {
-    color: #2879BE;
-}
-
-#active {
-    color: #2879BE;
-}
-
-i {
-  justify-content: center;
-}
-
-.fa-caret {
-    display: flex;
-    align-items: center;
-    margin-right: 5px;
-}
-
-.topnav-page-selection i.fa.fa-caret-down {
- font-size: 8px;
-}
-
-.chevron-toggle .fa-caret-down,
-.chevron-toggle.collapsed .fa-caret-down {
-    display: inherit;
-}
-
-.chevron-toggle .fa-caret-right,
-.chevron-toggle.collapsed .fa-caret-right {
-    display: none;
-}
-
-#toc ul {
-    list-style: none;
-}
-
-#content {
-    overflow-y: auto;
-    max-height: 100%;
-}
-
-@media screen and (max-width: 1280px) {
-    #toc { display: none; }  /* Hide the TOC if the page is less than 1280px */
-    .grid-container {
-        grid-template-columns: auto;
-    }
-    .margin-for-toc {
-        margin-right: 0;
-    }
-    section {
-        margin-left: 20px;
-    }
-    topsection {
-        display: flex;
-        margin-left: 20px;
-        margin-right: 20px;
-    }
-  }
-
-@media screen and (max-width: 768px) {
-    div.sidebar { display: none; }  /* Hide the sidebar if the page is less than 768px. It will be available from a hamburger menu */
-}
-
-/* Style for the hint shortcode */
-.info, .success, .warning, .error {
-    margin: 10px 0px;
-    padding:12px;
- 
-}
-.info {
-    color: #00529B;
-    background-color: #BDE5F8;
-}
-.success {
-    color: #4F8A10;
-    background-color: #DFF2BF;
-}
-.warning {
-    color: #9F6000;
-    background-color: #FEEFB3;
-}
-.error {
-    color: #D8000C;
-    background-color: #FFD2D2;
-}
-
-.fa-table {
-  color: #000000;
-}
-
-.fa-handshake-o {
-  color: #000000;
-}
-
-.fa-object-ungroup {
-  color: #000000;
-}
-
-.fa-star-o {
-  color: #E25A1D;
-}
-
-.navbar {
-    margin-bottom: 0;
-    height: 50px;
-}
-
-.navbar-fixed-top {
-    position: sticky;
-    display: flex;
-    gap: 15px;
-    justify-content: start;
-    align-items: center;
-}
-
-.navbar-menu-fixed-top {
-    position: sticky;
-    display: flex;
-    flex: 1;
-    gap: 5px;
-    justify-content: start;
-    align-items: center;
-}
-
-.navbar-pages-group {
-    justify-content: end;
-    margin-left: auto;
-    max-width: 720px;
-    position: relative;
-}
-
-/*search*/
-.container {
-    padding-right: 2rem;
-    padding-left: 2rem;
-    position: relative;
-}
-
-.vertical-center {
-  margin: 0;
-  position: absolute;
-  top: 50%;
-  -ms-transform: translateY(-50%);
-  transform: translateY(-50%);
-}
-
-/* Add a black background color to the top navigation bar */
-.topnav {
-  overflow: hidden;
-  background-color: #e9e9e9;
-}
-
-/* Style the links inside the navigation bar */
-.topnav a {
-  float: left;
-  display: block;
-  color: black;
-  text-align: center;
-  padding: 14px 16px;
-  text-decoration: none;
-  font-size: 17px;
-}
-
-/* Change the color of links on hover */
-.topnav a:hover {
-  background-color: #ddd;
-  color: black;
-}
-
-/* Style the "active" element to highlight the current page */
-.topnav a.active {
-  background-color: #2196F3;
-  color: white;
-}
-
-#search-input {
-    margin-top: 20px;
-    min-width: 200px;
-    border-radius: 20px;
-}
-
-#searchclear {
-    position: absolute;
-    right: 5px;
-    top: 0;
-    bottom: 0;
-    height: 14px;
-    margin: auto;
-    font-size: 14px;
-    cursor: pointer;
-    color: #ccc;
-}
-
-/* Style the search results and search results container */
-#search-results {
-    margin-left: 5rem;
-    margin-right: 5rem;
-    max-width: 400px;  /* Add a media query here to change this to 100% below 640px */
-    max-height: 500px;
-    color: rgb(112, 128, 144);
-    background-color: #f9f9f9;
-    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
-}
-
-#search-results-container {
-    position: absolute;
-    margin-left: -150px;
-    z-index: 999;
-}
-
-ul#search-results {
-  padding: 0;
-  margin: 0;
-  list-style-type: none;
-  float: left;
-  width: 100%;
-  overflow-y: auto;
-  border-radius: 6px;
-}
-
-ul#search-results  a b mark {
-    background-color: #B8E1F3;
-}
-ul#search-results li {
-  color: rgb(112, 128, 144);
-  background-color: white;
-  padding-bottom: 15px;
-  padding-left: 10px;
-  margin: 0px;
-  display: grid;
-}
-
-ul#search-results li p {
-   font-weight: bold;
-    margin-bottom: 4px;
-}
-
-hr {
-	border: 0;
-	border-top: 1px solid #777777;
-}
-
-.topnav-page-selection {
-    margin-left: 10px;
-}
-
-.topnav-page-selection a {
-    color: #000000;
-    text-decoration: none;
-}
-
-.topnav-page-selection a:hover {
-    color: #2879BE;
-}
-
-/* When the screen is less than 600px wide, stack the links and the search field vertically instead of horizontally */
-@media screen and (max-width: 600px) {
-  .topnav a, .topnav input[type=text] {
-    float: none;
-    display: block;
-    text-align: left;
-    width: 100%;
-    margin: 0;
-    padding: 14px;
-  }
-  .topnav input[type=text] {
-    border: 1px solid #ccc;
-  }
-}
-
-@media screen and (max-width: 1040px) {
-  .topnav-page-selection {
-    display: none;
-  }
-}
-
-div#full ul {
-    padding-left: 2em;
-    padding-right: 0em;
-}
-
-#sidebar-full{
-	height: 100%;
-	overflow: hidden;
-}
-
-#sidebar-full .sidebar-menu{
-	overflow: auto;
-	height: calc(100% - 80px);
-    margin-top: 20px;
-}
-
-div#sidebar-full ul {
-    padding-left: 0em;
-    padding-right: 0em;
-}
-
-div#sidebar-full ul.sub-menu {
-    padding-left: 30px;
-}
-
-a.top-menu {
-    padding-left: 10px;
-    font-weight: bold;
-}
-
-.navbar-brand {
-    padding: 10px 0px;
-}
-
-@media screen and (max-width: 720px) {
-  .navbar-brand {
-    display: none;
-  }
-}
-
-.versions-dropdown {
-  position: relative;
-  display: inline-block;
-  z-index: 999;
-}
-
-.versions-dropdown-selection {
-    margin-left: auto;
-}
-
-.versions-dropdown-selection a {
-    color: #000000;
-    text-decoration: none;
-}
-
-.versions-dropdown-selection a:hover {
-    color: #2879BE;
-}
-
-.versions-dropdown-content {
-    display: none;
-    position: fixed;
-    background-color: #f9f9f9;
-    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
-}
-
-.versions-dropdown-content ul {
-    list-style-type: none;
-    align-items: left;
-    padding: 5px;
-    margin: 5px;
-}
-
-.versions-dropdown-content a {
-    color: black;
-    text-decoration: none;
-}
-
-.versions-dropdown:hover .versions-dropdown-content {
-    display: block;
-}
-
-.quickstart-card {
-    color: #fff;
-    width:300px;
-    position: relative;
-    -webkit-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
-    -moz-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
-    -o-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
-    box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
-    background-image: linear-gradient(to bottom right, #2879be, #57A7D8);
-}
-
-.quickstart-card .quickstart-card-content {
-    padding: 30px;
-    height: 250px;
-}
-
-.quickstart-card .quickstart-card-title {
-    font-size: 25px;
-    font-family: 'Open Sans', sans-serif;
-}
-
-.quickstart-card .quickstart-card-text {
-    line-height: 1.6;
-}
-
-.quickstart-card .quickstart-card-link {
-    padding: 25px;
-    width: -webkit-fill-available;
-    border-top:1px solid #82c1bb;
-}
-
-.quickstart-card-link a {
-    text-decoration: none;
-    position: relative;
-    padding: 10px 0px;
-    color: #fff;
-}
-
-.quickstart-card .quickstart-card-link a:after {
-    top: 30px;
-    content: "";
-    display: block;
-    height: 2px;
-    left: 50%;
-    position: absolute;
-    width: 0;
-    background:#fff;
-
-    -webkit-transition: width 0.3s ease 0s, left 0.3s ease 0s;
-    -moz-transition: width 0.3s ease 0s, left 0.3s ease 0s;
-    -o-transition: width 0.3s ease 0s, left 0.3s ease 0s;
-    transition: width 0.3s ease 0s, left 0.3s ease 0s;
-}
-
-.quickstart-card .quickstart-card-link a:hover:after {
-    width: 100%;
-    left: 0;
-}
-
-.quickstart-card .quickstart-card-link a:after {
-    background:#fff;
-}
-
-/*styling for codetabs*/
-.codetabs h1 {
-  padding: 50px 0;
-  font-weight: 400;
-  text-align: center;
-}
-
-.codetabs p {
-  margin: 0 0 20px;
-  line-height: 1.5;
-}
-
-.codetabs main {
-  min-width: 320px;
-  max-width: 800px;
-  padding: 50px;
-  margin: 0 auto;
-  background: #fff;
-}
-
-.codetabs codeblock {
-  display: none;
-  padding: 20px 0 0;
-  border-top: 1px solid #ddd;
-}
-
-.codetabs input {
-  display: none;
-  visibility:hidden;
-}
-
-.codetabs label {
-  display: inline-block;
-  margin: 0 0 -1px;
-  padding: 15px 25px;
-  font-weight: 600;
-  text-align: center;
-  color: #bbb;
-  border: 1px solid transparent;
-}
-
-.codetabs label:before {
-  font-family: fontawesome;
-  font-weight: normal;
-  margin-right: 10px;
-}
-
-.codetabs label:hover {
-  color: #888;
-  cursor: pointer;
-}
-
-.codetabs input:checked + label {
-  color: #555;
-  border: 1px solid #ddd;
-  border-top: 2px solid #277ABE;
-  border-bottom: 1px solid #fff;
-}
-
-@media screen and (max-width: 500px) {
-  .codetabs label {
-    font-size: 0;
-  }
-  #LaunchSparkClient label:before {
-    margin: 0;
-    font-size: 18px;
-  }
-}
-
-@media screen and (max-width: 400px) {
-  .codetabs label {
-    padding: 15px;
-  }
+/*!
+ * Start Bootstrap - Landing Page Bootstrap Theme (http://startbootstrap.com)
+ * Code licensed under the Apache License v2.0.
+ * For details, see http://www.apache.org/licenses/LICENSE-2.0.
+ */
+
+body,
+html {
+    width: 100%;
+    height: 100%;
+    font-size: 15px;
+    scroll-padding-top: 4rem;
+    scroll-behavior: smooth;
+}
+
+section {
+    display: flex;
+    margin-left: 150px;
+    margin-right: 0;
+}
+
+topsection {
+    display: flex;
+    margin-left: 10%;
+    margin-right: 10%;
+}
+
+body,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+    font-family: "Lato","Helvetica Neue",Helvetica,Arial,sans-serif;
+    font-weight: 400;
+}
+
+.lead {
+    font-size: 18px;
+    font-weight: 400;
+}
+
+section#intro {
+    display: block;
+    max-width: 100%;
+    margin: 0;
+    padding: 0;
+}
+
+section#contact {
+    display: block;
+    max-width: 100%;
+    margin: 0;
+    padding: 0;
+}
+
+section#services {
+    display: block;
+}
+
+.navbar-default {
+    background-color: #F5F6FA;
+    border-color: #F5F6FA;
+}
+
+.intro-message {
+    position: relative;
+    padding-top: 20%;
+    padding-bottom: 20%;
+}
+
+.intro-message > h1 {
+    margin: 0;
+    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+    font-size: 5em;
+}
+
+.intro-divider {
+    width: 400px;
+    border-top: 1px solid #f8f8f8;
+    border-bottom: 1px solid rgba(0,0,0,0.2);
+}
+
+.intro-message > h3 {
+    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+}
+
+.button-box {
+    padding-top: 1rem;
+}
+
+@media(max-width:767px) {
+    .intro-message {
+        padding-bottom: 15%;
+    }
+
+    .intro-message > h1 {
+        font-size: 3em;
+    }
+
+    ul.intro-social-buttons > li {
+        display: block;
+        margin-bottom: 20px;
+        padding: 0;
+    }
+
+    ul.intro-social-buttons > li:last-child {
+        margin-bottom: 0;
+    }
+
+    .intro-divider {
+        width: 100%;
+    }
+}
+
+.network-name {
+    text-transform: uppercase;
+    font-size: 14px;
+    font-weight: 400;
+    letter-spacing: 2px;
+}
+
+.content-section-a {
+    padding: 50px 0;
+}
+
+.content-section-b {
+    padding: 50px 0;
+}
+
+.section-heading {
+    margin-bottom: 30px;
+}
+
+.section-heading-spacer {
+    float: left;
+    width: 200px;
+}
+
+.contact {
+    padding: 100px 0;
+    color: #f8f8f8;
+    background: url(../img/contact-bg.jpg) no-repeat center center;
+    background-size: cover;
+}
+
+.contact h2 {
+    margin: 0;
+    text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+    font-size: 3em;
+}
+
+.contact ul {
+    margin-bottom: 0;
+}
+
+.contact-social-buttons {
+    float: right;
+    margin-top: 0;
+}
+
+@media(max-width:1199px) {
+    ul.contact-social-buttons {
+        float: left;
+        margin-top: 15px;
+    }
+}
+
+@media(max-width:767px) {
+    .contact h2 {
+        margin: 0;
+        text-shadow: 2px 2px 3px rgba(0,0,0,0.6);
+        font-size: 3em;
+    }
+
+    ul.contact-social-buttons > li {
+        display: block;
+        margin-bottom: 20px;
+        padding: 0;
+    }
+
+    ul.contact-social-buttons > li:last-child {
+        margin-bottom: 0;
+    }
+}
+
+footer {
+    padding: 50px 0;
+}
+
+p.copyright {
+    margin: 15px 0 0;
+}
+
+.top-navbar-logo {
+    height: 25px;
+    vertical-align: top;
+}
+
+.footer-creds {
+    font-size: 0.8rem;
+}
+
+a.page-scroll {
+    font-size: 15px;
+    color: red;
+}
+
+.pad-for-navbar {
+    padding-top: 80px;
+}
+
+.center-content {
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+
+.termynal-container {
+    padding-top: 3rem;
+}
+
+/* Anchor tags for headers */
+.anchortag { font-size: 80%; visibility: hidden;}
+
+h1:hover a { visibility: visible}
+h2:hover a { visibility: visible}
+h3:hover a { visibility: visible}
+h4:hover a { visibility: visible}
+
+/* Fixed table of contents */
+.grid-container {
+    display: grid;
+    grid-template-columns: 5fr 1fr;
+    grid-gap: 1rem;
+    overflow-y: auto;
+    height: 90vh;
+    width: 100%;
+}
+
+/* Cards at the top of each quickstart page */
+.quickstart-container {
+    display: flex;
+    flex-wrap: wrap;
+    width: 80vw;
+    grid-template-columns: 1fr 1fr 1fr;
+    grid-gap: 1rem;
+}
+
+.content-only {
+    grid-template-columns: auto;
+}
+
+.left-nav-only {
+    grid-template-columns: 1fr 5fr
+}
+
+.toc-only {
+    grid-template-columns: 1fr;
+}
+
+.leftnav-and-toc {
+    grid-template-columns: 1fr 5fr;
+    grid-column-gap: 30px;
+}
+
+.margin-for-toc {
+    margin-right: 40%;
+}
+
+.margin-without-toc {
+    margin-right: 20%;
+}
+
+#toc {
+    position: fixed;
+    right: 0;
+    top: 0;
+    background-color:#FFF;
+    top: 70px;
+    font-size: 0.95rem;
+    width: 260px;
+    list-style-type: none;
+    margin: 0 100px;
+}
+
+div.sidebar {
+    text-decoration: none;
+    left: 0;
+    top: 0;
+    overflow-y: auto;
+    background-color: #fff;
+    display: block;
+    font-size: 16px;
+    min-width: 15rem;
+    list-style-type: none;
+    padding-right: 5px;
+}
+
+.sidebar hr {
+    height: 1px;
+    margin-top: 20px;
+    margin-bottom: 20px;
+}
+
+.sidebar-menu ul {
+    text-decoration: none;
+    list-style: none;
+}
+
+.sidebar-menu li a {
+    color: black;
+    display: flex;
+}
+
+.sidebar-menu li a:hover {
+    color: #2879BE;
+}
+
+#active {
+    color: #2879BE;
+}
+
+i {
+  justify-content: center;
+}
+
+.fa-caret {
+    display: flex;
+    align-items: center;
+    margin-right: 5px;
+}
+
+.topnav-page-selection i.fa.fa-caret-down {
+ font-size: 8px;
+}
+
+.chevron-toggle .fa-caret-down,
+.chevron-toggle.collapsed .fa-caret-down {
+    display: inherit;
+}
+
+.chevron-toggle .fa-caret-right,
+.chevron-toggle.collapsed .fa-caret-right {
+    display: none;
+}
+
+#toc ul {
+    list-style: none;
+}
+
+#content {
+    overflow-y: auto;
+    max-height: 100%;
+}
+
+@media screen and (max-width: 1280px) {
+    #toc { display: none; }  /* Hide the TOC if the page is less than 1280px */
+    .grid-container {
+        grid-template-columns: auto;
+    }
+    .margin-for-toc {
+        margin-right: 0;
+    }
+    section {
+        margin-left: 20px;
+    }
+    topsection {
+        display: flex;
+        margin-left: 20px;
+        margin-right: 20px;
+    }
+  }
+
+@media screen and (max-width: 768px) {
+    div.sidebar { display: none; }  /* Hide the sidebar if the page is less than 768px. It will be available from a hamburger menu */
+}
+
+/* Style for the hint shortcode */
+.info, .success, .warning, .error {
+    margin: 10px 0px;
+    padding:12px;
+ 
+}
+.info {
+    color: #00529B;
+    background-color: #BDE5F8;
+}
+.success {
+    color: #4F8A10;
+    background-color: #DFF2BF;
+}
+.warning {
+    color: #9F6000;
+    background-color: #FEEFB3;
+}
+.error {
+    color: #D8000C;
+    background-color: #FFD2D2;
+}
+
+.fa-table {
+  color: #000000;
+}
+
+.fa-handshake-o {
+  color: #000000;
+}
+
+.fa-object-ungroup {
+  color: #000000;
+}
+
+.fa-star-o {
+  color: #E25A1D;
+}
+
+.navbar {
+    margin-bottom: 0;
+    height: 50px;
+}
+
+.navbar-fixed-top {
+    position: sticky;
+    display: flex;
+    gap: 15px;
+    justify-content: start;
+    align-items: center;
+}
+
+.navbar-menu-fixed-top {
+    position: sticky;
+    display: flex;
+    flex: 1;
+    gap: 5px;
+    justify-content: start;
+    align-items: center;
+}
+
+.navbar-pages-group {
+    justify-content: end;
+    margin-left: auto;
+    max-width: 720px;
+    position: relative;
+}
+
+/*search*/
+.container {
+    padding-right: 2rem;
+    padding-left: 2rem;
+    position: relative;
+}
+
+.vertical-center {
+  margin: 0;
+  position: absolute;
+  top: 50%;
+  -ms-transform: translateY(-50%);
+  transform: translateY(-50%);
+}
+
+/* Add a black background color to the top navigation bar */
+.topnav {
+  overflow: hidden;
+  background-color: #e9e9e9;
+}
+
+/* Style the links inside the navigation bar */
+.topnav a {
+  float: left;
+  display: block;
+  color: black;
+  text-align: center;
+  padding: 14px 16px;
+  text-decoration: none;
+  font-size: 17px;
+}
+
+/* Change the color of links on hover */
+.topnav a:hover {
+  background-color: #ddd;
+  color: black;
+}
+
+/* Style the "active" element to highlight the current page */
+.topnav a.active {
+  background-color: #2196F3;
+  color: white;
+}
+
+#search-input {
+    margin-top: 20px;
+    min-width: 200px;
+    border-radius: 20px;
+}
+
+#searchclear {
+    position: absolute;
+    right: 5px;
+    top: 0;
+    bottom: 0;
+    height: 14px;
+    margin: auto;
+    font-size: 14px;
+    cursor: pointer;
+    color: #ccc;
+}
+
+/* Style the search results and search results container */
+#search-results {
+    margin-left: 5rem;
+    margin-right: 5rem;
+    max-width: 400px;  /* Add a media query here to change this to 100% below 640px */
+    max-height: 500px;
+    color: rgb(112, 128, 144);
+    background-color: #f9f9f9;
+    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+}
+
+#search-results-container {
+    position: absolute;
+    margin-left: -150px;
+    z-index: 999;
+}
+
+ul#search-results {
+  padding: 0;
+  margin: 0;
+  list-style-type: none;
+  float: left;
+  width: 100%;
+  overflow-y: auto;
+  border-radius: 6px;
+}
+
+ul#search-results  a b mark {
+    background-color: #B8E1F3;
+}
+ul#search-results li {
+  color: rgb(112, 128, 144);
+  background-color: white;
+  padding-bottom: 15px;
+  padding-left: 10px;
+  margin: 0px;
+  display: grid;
+}
+
+ul#search-results li p {
+   font-weight: bold;
+    margin-bottom: 4px;
+}
+
+hr {
+	border: 0;
+	border-top: 1px solid #777777;
+}
+
+.topnav-page-selection {
+    margin-left: 10px;
+}
+
+.topnav-page-selection a {
+    color: #000000;
+    text-decoration: none;
+}
+
+.topnav-page-selection a:hover {
+    color: #2879BE;
+}
+
+/* When the screen is less than 600px wide, stack the links and the search field vertically instead of horizontally */
+@media screen and (max-width: 600px) {
+  .topnav a, .topnav input[type=text] {
+    float: none;
+    display: block;
+    text-align: left;
+    width: 100%;
+    margin: 0;
+    padding: 14px;
+  }
+  .topnav input[type=text] {
+    border: 1px solid #ccc;
+  }
+}
+
+@media screen and (max-width: 1040px) {
+  .topnav-page-selection {
+    display: none;
+  }
+}
+
+div#full ul {
+    padding-left: 2em;
+    padding-right: 0em;
+}
+
+#sidebar-full{
+	height: 100%;
+	overflow: hidden;
+}
+
+#sidebar-full .sidebar-menu{
+	overflow: auto;
+	height: calc(100% - 80px);
+    margin-top: 20px;
+}
+
+div#sidebar-full ul {
+    padding-left: 0em;
+    padding-right: 0em;
+}
+
+div#sidebar-full ul.sub-menu {
+    padding-left: 30px;
+}
+
+a.top-menu {
+    padding-left: 10px;
+    font-weight: bold;
+}
+
+.navbar-brand {
+    padding: 10px 0px;
+}
+
+@media screen and (max-width: 720px) {
+  .navbar-brand {
+    display: none;
+  }
+}
+
+.versions-dropdown {
+  position: relative;
+  display: inline-block;
+  z-index: 999;
+}
+
+.versions-dropdown-selection {
+    margin-left: auto;
+}
+
+.versions-dropdown-selection a {
+    color: #000000;
+    text-decoration: none;
+}
+
+.versions-dropdown-selection a:hover {
+    color: #2879BE;
+}
+
+.versions-dropdown-content {
+    display: none;
+    position: fixed;
+    background-color: #f9f9f9;
+    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+}
+
+.versions-dropdown-content ul {
+    list-style-type: none;
+    align-items: left;
+    padding: 5px;
+    margin: 5px;
+}
+
+.versions-dropdown-content a {
+    color: black;
+    text-decoration: none;
+}
+
+.versions-dropdown:hover .versions-dropdown-content {
+    display: block;
+}
+
+.quickstart-card {
+    color: #fff;
+    width:300px;
+    position: relative;
+    -webkit-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    -moz-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    -o-box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    box-shadow: 0px 5px 5px 0px rgba(0,0,0,0.3);
+    background-image: linear-gradient(to bottom right, #2879be, #57A7D8);
+}
+
+.quickstart-card .quickstart-card-content {
+    padding: 30px;
+    height: 250px;
+}
+
+.quickstart-card .quickstart-card-title {
+    font-size: 25px;
+    font-family: 'Open Sans', sans-serif;
+}
+
+.quickstart-card .quickstart-card-text {
+    line-height: 1.6;
+}
+
+.quickstart-card .quickstart-card-link {
+    padding: 25px;
+    width: -webkit-fill-available;
+    border-top:1px solid #82c1bb;
+}
+
+.quickstart-card-link a {
+    text-decoration: none;
+    position: relative;
+    padding: 10px 0px;
+    color: #fff;
+}
+
+.quickstart-card .quickstart-card-link a:after {
+    top: 30px;
+    content: "";
+    display: block;
+    height: 2px;
+    left: 50%;
+    position: absolute;
+    width: 0;
+    background:#fff;
+
+    -webkit-transition: width 0.3s ease 0s, left 0.3s ease 0s;
+    -moz-transition: width 0.3s ease 0s, left 0.3s ease 0s;
+    -o-transition: width 0.3s ease 0s, left 0.3s ease 0s;
+    transition: width 0.3s ease 0s, left 0.3s ease 0s;
+}
+
+.quickstart-card .quickstart-card-link a:hover:after {
+    width: 100%;
+    left: 0;
+}
+
+.quickstart-card .quickstart-card-link a:after {
+    background:#fff;
+}
+
+/*styling for codetabs*/
+.codetabs h1 {
+  padding: 50px 0;
+  font-weight: 400;
+  text-align: center;
+}
+
+.codetabs p {
+  margin: 0 0 20px;
+  line-height: 1.5;
+}
+
+.codetabs main {
+  min-width: 320px;
+  max-width: 800px;
+  padding: 50px;
+  margin: 0 auto;
+  background: #fff;
+}
+
+.codetabs codeblock {
+  display: none;
+  padding: 20px 0 0;
+  border-top: 1px solid #ddd;
+}
+
+.codetabs input {
+  display: none;
+  visibility:hidden;
+}
+
+.codetabs label {
+  display: inline-block;
+  margin: 0 0 -1px;
+  padding: 15px 25px;
+  font-weight: 600;
+  text-align: center;
+  color: #bbb;
+  border: 1px solid transparent;
+}
+
+.codetabs label:before {
+  font-family: fontawesome;
+  font-weight: normal;
+  margin-right: 10px;
+}
+
+.codetabs label:hover {
+  color: #888;
+  cursor: pointer;
+}
+
+.codetabs input:checked + label {
+  color: #555;
+  border: 1px solid #ddd;
+  border-top: 2px solid #277ABE;
+  border-bottom: 1px solid #fff;
+}
+
+@media screen and (max-width: 500px) {
+  .codetabs label {
+    font-size: 0;
+  }
+  #LaunchSparkClient label:before {
+    margin: 0;
+    font-size: 18px;
+  }
+}
+
+@media screen and (max-width: 400px) {
+  .codetabs label {
+    padding: 15px;
+  }
 }
\ No newline at end of file
diff --git a/amoro-theme/static/css/bootstrap.css b/css/bootstrap.css
similarity index 100%
copy from amoro-theme/static/css/bootstrap.css
copy to css/bootstrap.css
diff --git a/amoro-theme/static/css/home-page.css b/css/home-page.css
similarity index 100%
copy from amoro-theme/static/css/home-page.css
copy to css/home-page.css
diff --git a/amoro-theme/static/css/katex.min.css b/css/katex.min.css
similarity index 100%
copy from amoro-theme/static/css/katex.min.css
copy to css/katex.min.css
diff --git a/amoro-theme/static/css/markdown.css b/css/markdown.css
similarity index 100%
copy from amoro-theme/static/css/markdown.css
copy to css/markdown.css
diff --git a/amoro-theme/static/css/termynal.css b/css/termynal.css
similarity index 100%
copy from amoro-theme/static/css/termynal.css
copy to css/termynal.css
diff --git a/docs/latest/404.html b/docs/latest/404.html
new file mode 100644
index 0000000..384ee9a
--- /dev/null
+++ b/docs/latest/404.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/latest/admin-guides/deployment-on-kubernetes/index.html b/docs/latest/admin-guides/deployment-on-kubernetes/index.html
new file mode 100644
index 0000000..81fda94
--- /dev/null
+++ b/docs/latest/admin-guides/deployment-on-kubernetes/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/latest/deployment-on-kubernetes/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/latest/deployment-on-kubernetes/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/latest/deployment-on-kubernetes/">
+  </head>
+</html>
diff --git a/docs/latest/admin-guides/deployment/index.html b/docs/latest/admin-guides/deployment/index.html
new file mode 100644
index 0000000..b9096ab
--- /dev/null
+++ b/docs/latest/admin-guides/deployment/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <title>https://amoro.apache.org/docs/latest/deployment/</title>
+    <link rel="canonical" href="https://amoro.apache.org/docs/latest/deployment/">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=https://amoro.apache.org/docs/latest/deployment/">
+  </head>
+</html>
diff --git a/docs/latest/admin-guides/index.xml b/docs/latest/admin-guides/index.xml
new file mode 100644
index 0000000..c1c33da
--- /dev/null
+++ b/docs/latest/admin-guides/index.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Admin-Guides on Amoro</title>
+    <link>https://amoro.apache.org/docs/latest/admin-guides/</link>
+    <description>Recent content in Admin-Guides on Amoro</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    <atom:link href="https://amoro.apache.org/docs/latest/admin-guides/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Deployment</title>
+      <link>https://amoro.apache.org/docs/latest/deployment/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/latest/deployment/</guid>
+      <description>Deployment You can choose to download the stable release package from download page, or the source code form Github and compile it according to the README.&#xA;System requirements Java 8 is required. Java 17 is required for Trino. Optional: MySQL 5.5 or higher Optional: PostgreSQL 14.x or higher Optional: ZooKeeper 3.4.x or higher Optional: Hive (2.x or 3.x) Optional: Hadoop (2.9.x or 3.x) Download the distribution All released package can be downloaded from download p [...]
+    </item>
+    <item>
+      <title>Deployment On Kubernetes</title>
+      <link>https://amoro.apache.org/docs/latest/deployment-on-kubernetes/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      <guid>https://amoro.apache.org/docs/latest/deployment-on-kubernetes/</guid>
... 29243 lines suppressed ...