You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2026/10/15 07:35:12 UTC

(doris-website) branch master updated: docs(i18n): translate 100 Japanese pages for T09-DEV-083 (#4300)

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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 4c45218039e docs(i18n): translate 100 Japanese pages for T09-DEV-083 (#4300)
4c45218039e is described below

commit 4c45218039eb274922119dfba204400a585f09bc
Author: Mingyu Chen (Rayner) <mo...@gmail.com>
AuthorDate: Thu Oct 15 15:35:03 2026 +0800

    docs(i18n): translate 100 Japanese pages for T09-DEV-083 (#4300)
    
    ## Summary
    
    Translate 100 Japanese pages for `T09-DEV-083` from merged master
    `618b88463542c388ef5d477f53e4f17162fd5eb7`. 0 pages reused a validated
    same-source translation from the other version; 100 required new
    Japanese work. All pages have machine-reviewed state records.
    
    ## Pages
    
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/outfile.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-with-mysql-dump.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-best-practice.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/querying-overview.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/mysql-compatibility.md`
    - `i18n/ja/docusaurus-plugin-content-docs/current/query-data/join.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/asof-join.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/subquery.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/multi-dimensional-analytics.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/window-function.md`
    - `i18n/ja/docusaurus-plugin-content-docs/current/query-data/cte.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/udf/alias-function.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/udf/java-user-defined-function.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/udf/python-user-defined-function.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/complex-type.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-data/lateral-view.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/intro.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/overview.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/sync-materialized-view.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/transparent-rewriting-with-sync-mv.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/async-materialized-view/overview.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/async-materialized-view/functions-and-demands.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/async-materialized-view/incremental-materialized-view.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/async-materialized-view/use-guide.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/transparent-rewriting-with-async-mv.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/async-materialized-view/faq.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/performance-tuning-intro.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/performance-tuning-overview/tuning-overview.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/performance-tuning-overview/diagnostic-tools.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/performance-tuning-overview/analysis-tools.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/performance-tuning-overview/tuning-process.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/schema-and-index-optimization.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/optimizing-table-schema.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/optimizing-table-index.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/optimizing-table-scanning.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/materialized-view/intro-link.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/join-optimization-intro.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/colocation-join.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/adjusting-join-shuffle.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/reordering-join-with-leading-hint.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/caching-intro.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/sql-cache-manual.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/condition-cache.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-execution/intro.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-execution/parallelism-tuning.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-execution/adjustment-of-runtimefilter-wait-time.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-execution/data-skew-handling.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/controlling-hints-with-cbo-rule.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/high-concurrency-intro.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/high-concurrent-point-query.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/dictionary.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/distinct-counts/intro.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/distinct-counts/bitmap-precise-deduplication.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/distinct-counts/hll-approximate-deduplication.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/query-profile.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/tuning/tuning-plan/dml-tuning-plan.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/optimization-technology-principle/query-optimizer.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/optimization-technology-principle/pipeline-execution-engine.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/optimization-technology-principle/runtime-filter.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/optimization-technology-principle/topn-optimization.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/query-acceleration/optimization-technology-principle/statistics.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/lakehouse-overview.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalog-overview.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/hive-catalog.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/iceberg-catalog.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg-capability-matrix.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aws-s3tables.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aliyun-oss-tables.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-polaris.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-gravitino.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-onelake.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-unity-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-snowflake-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-lakekeeper.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-seaweedfs.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-nessie.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-iceberg.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/paimon-catalog.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon-capability-matrix.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-paimon.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/fluss-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/hudi-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-hudi.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/maxcompute-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-maxcompute.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/delta-lake-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/bigquery-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/kudu-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/kafka-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/es-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/doris-catalog.mdx`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/adbc-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/jdbc-catalog-overview.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/jdbc-mysql-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/jdbc-pg-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/jdbc-oracle-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/jdbc-sqlserver-catalog.md`
    -
    `i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/jdbc-ibmdb2-catalog.md`
    
    ## Validation
    
    - Bundled protected-structure and state validator: 100/100 passed.
    - `git diff --check`: 0 source-inherited trailing-space notices; EOF
    blank-line notices ignored.
    - Only the listed Japanese targets and their independent page-state
    files changed.
    - No local site build was run for this translation-only batch; PR CI
    checks the build.
    
    Passing pages use `reviewStatus=machine`; failed pages use
    `reviewStatus=unverified`. All pages use `ownership=machine`; no human
    Japanese proofreading is claimed.
    
    Co-authored-by: morningman <mo...@apache.org>
---
 .../data-operate/export/export-best-practice.md    |  174 +
 .../data-operate/export/export-with-mysql-dump.md  |   95 +
 .../current/data-operate/export/outfile.md         |  341 ++
 .../best-practices/doris-aliyun-oss-tables.md      |  200 ++
 .../lakehouse/best-practices/doris-aws-s3tables.md |  202 ++
 .../lakehouse/best-practices/doris-dlf-iceberg.md  |  120 +
 .../lakehouse/best-practices/doris-dlf-paimon.md   |  150 +
 .../lakehouse/best-practices/doris-gravitino.md    |  307 ++
 .../current/lakehouse/best-practices/doris-hudi.md |  294 ++
 .../doris-iceberg-capability-matrix.mdx            |  878 +++++
 .../lakehouse/best-practices/doris-iceberg.md      |  561 +++
 .../lakehouse/best-practices/doris-lakekeeper.md   |  409 +++
 .../lakehouse/best-practices/doris-maxcompute.md   |  237 ++
 .../lakehouse/best-practices/doris-nessie.md       |  367 ++
 .../lakehouse/best-practices/doris-onelake.md      |  283 ++
 .../doris-paimon-capability-matrix.mdx             |  701 ++++
 .../lakehouse/best-practices/doris-paimon.md       |  250 ++
 .../lakehouse/best-practices/doris-polaris.md      |  383 +++
 .../lakehouse/best-practices/doris-seaweedfs.md    |  170 +
 .../best-practices/doris-snowflake-catalog.md      |  451 +++
 .../best-practices/doris-unity-catalog.md          |  173 +
 .../current/lakehouse/catalog-overview.md          |  362 ++
 .../current/lakehouse/catalogs/adbc-catalog.md     |  555 +++
 .../current/lakehouse/catalogs/bigquery-catalog.md |  171 +
 .../lakehouse/catalogs/delta-lake-catalog.md       |  168 +
 .../current/lakehouse/catalogs/doris-catalog.mdx   |  288 ++
 .../current/lakehouse/catalogs/es-catalog.md       |  569 ++++
 .../current/lakehouse/catalogs/fluss-catalog.md    |  622 ++++
 .../current/lakehouse/catalogs/hive-catalog.mdx    | 1268 +++++++
 .../current/lakehouse/catalogs/hudi-catalog.md     |  287 ++
 .../current/lakehouse/catalogs/iceberg-catalog.mdx | 3440 +++++++++++++++++++
 .../lakehouse/catalogs/jdbc-catalog-overview.md    |  465 +++
 .../lakehouse/catalogs/jdbc-ibmdb2-catalog.md      |   82 +
 .../lakehouse/catalogs/jdbc-mysql-catalog.md       |  291 ++
 .../lakehouse/catalogs/jdbc-oracle-catalog.md      |   76 +
 .../current/lakehouse/catalogs/jdbc-pg-catalog.md  |  111 +
 .../lakehouse/catalogs/jdbc-sqlserver-catalog.md   |  119 +
 .../current/lakehouse/catalogs/kafka-catalog.md    |  358 ++
 .../current/lakehouse/catalogs/kudu-catalog.md     |  174 +
 .../lakehouse/catalogs/maxcompute-catalog.md       |  533 +++
 .../current/lakehouse/catalogs/paimon-catalog.mdx  | 1681 +++++++++
 .../current/lakehouse/lakehouse-overview.md        |  156 +
 .../current/query-acceleration/caching-intro.mdx   |   53 +
 .../current/query-acceleration/colocation-join.md  |  547 +++
 .../current/query-acceleration/condition-cache.md  |  183 +
 .../current/query-acceleration/dictionary.md       |  722 ++++
 .../bitmap-precise-deduplication.md                |  189 ++
 .../hll-approximate-deduplication.md               |  201 ++
 .../query-acceleration/distinct-counts/intro.mdx   |   31 +
 .../query-acceleration/high-concurrency-intro.mdx  |   31 +
 .../high-concurrent-point-query.md                 |  257 ++
 .../query-acceleration/join-optimization-intro.mdx |   37 +
 .../async-materialized-view/faq.md                 |  558 +++
 .../functions-and-demands.md                       | 1563 +++++++++
 .../incremental-materialized-view.mdx              | 1420 ++++++++
 .../async-materialized-view/overview.md            |  279 ++
 .../async-materialized-view/use-guide.md           | 1066 ++++++
 .../materialized-view/intro-link.mdx               |   13 +
 .../query-acceleration/materialized-view/intro.mdx |   77 +
 .../materialized-view/overview.md                  |   95 +
 .../materialized-view/sync-materialized-view.md    |  679 ++++
 .../pipeline-execution-engine.md                   |  174 +
 .../query-optimizer.md                             |  125 +
 .../runtime-filter.md                              |  507 +++
 .../statistics.md                                  |  544 +++
 .../topn-optimization.md                           |  337 ++
 .../performance-tuning-intro.mdx                   |  139 +
 .../performance-tuning-overview/analysis-tools.md  |  265 ++
 .../diagnostic-tools.md                            |  221 ++
 .../performance-tuning-overview/tuning-overview.md |   87 +
 .../performance-tuning-overview/tuning-process.md  |  136 +
 .../current/query-acceleration/query-profile.md    |  813 +++++
 .../current/query-acceleration/sql-cache-manual.md |  339 ++
 .../adjustment-of-runtimefilter-wait-time.md       |  192 ++
 .../tuning/tuning-execution/data-skew-handling.md  |  187 +
 .../tuning/tuning-execution/intro.mdx              |   43 +
 .../tuning/tuning-execution/parallelism-tuning.md  |  249 ++
 .../tuning/tuning-plan/adjusting-join-shuffle.md   |  144 +
 .../tuning-plan/controlling-hints-with-cbo-rule.md |  142 +
 .../tuning/tuning-plan/dml-tuning-plan.md          |   64 +
 .../tuning/tuning-plan/optimizing-table-index.md   |  173 +
 .../tuning-plan/optimizing-table-scanning.md       |  151 +
 .../tuning/tuning-plan/optimizing-table-schema.md  |  214 ++
 .../reordering-join-with-leading-hint.md           |  319 ++
 .../tuning-plan/schema-and-index-optimization.mdx  |   31 +
 .../transparent-rewriting-with-async-mv.md         |  269 ++
 .../transparent-rewriting-with-sync-mv.md          |  155 +
 .../current/query-data/asof-join.md                |  445 +++
 .../current/query-data/complex-type.md             |   41 +
 .../current/query-data/cte.md                      |  219 ++
 .../current/query-data/join.md                     |  448 +++
 .../current/query-data/lateral-view.md             |  105 +
 .../query-data/multi-dimensional-analytics.md      |  569 ++++
 .../current/query-data/mysql-compatibility.md      |  300 ++
 .../current/query-data/querying-overview.mdx       |  105 +
 .../current/query-data/subquery.md                 |  341 ++
 .../current/query-data/udf/alias-function.md       |   84 +
 .../query-data/udf/java-user-defined-function.md   |  611 ++++
 .../query-data/udf/python-user-defined-function.md | 3560 ++++++++++++++++++++
 .../current/query-data/window-function.md          |  787 +++++
 .../data-operate/export/export-best-practice.json  |   20 +
 .../export/export-with-mysql-dump.json             |   20 +
 .../current/data-operate/export/outfile.json       |   20 +
 .../best-practices/doris-aliyun-oss-tables.json    |   20 +
 .../best-practices/doris-aws-s3tables.json         |   20 +
 .../best-practices/doris-dlf-iceberg.json          |   20 +
 .../lakehouse/best-practices/doris-dlf-paimon.json |   20 +
 .../lakehouse/best-practices/doris-gravitino.json  |   20 +
 .../lakehouse/best-practices/doris-hudi.json       |   20 +
 .../doris-iceberg-capability-matrix.json           |   20 +
 .../lakehouse/best-practices/doris-iceberg.json    |   20 +
 .../lakehouse/best-practices/doris-lakekeeper.json |   20 +
 .../lakehouse/best-practices/doris-maxcompute.json |   20 +
 .../lakehouse/best-practices/doris-nessie.json     |   20 +
 .../lakehouse/best-practices/doris-onelake.json    |   20 +
 .../doris-paimon-capability-matrix.json            |   20 +
 .../lakehouse/best-practices/doris-paimon.json     |   20 +
 .../lakehouse/best-practices/doris-polaris.json    |   20 +
 .../lakehouse/best-practices/doris-seaweedfs.json  |   20 +
 .../best-practices/doris-snowflake-catalog.json    |   20 +
 .../best-practices/doris-unity-catalog.json        |   20 +
 .../current/lakehouse/catalog-overview.json        |   20 +
 .../current/lakehouse/catalogs/adbc-catalog.json   |   20 +
 .../lakehouse/catalogs/bigquery-catalog.json       |   20 +
 .../lakehouse/catalogs/delta-lake-catalog.json     |   20 +
 .../current/lakehouse/catalogs/doris-catalog.json  |   20 +
 .../current/lakehouse/catalogs/es-catalog.json     |   20 +
 .../current/lakehouse/catalogs/fluss-catalog.json  |   20 +
 .../current/lakehouse/catalogs/hive-catalog.json   |   20 +
 .../current/lakehouse/catalogs/hudi-catalog.json   |   20 +
 .../lakehouse/catalogs/iceberg-catalog.json        |   20 +
 .../lakehouse/catalogs/jdbc-catalog-overview.json  |   20 +
 .../lakehouse/catalogs/jdbc-ibmdb2-catalog.json    |   20 +
 .../lakehouse/catalogs/jdbc-mysql-catalog.json     |   20 +
 .../lakehouse/catalogs/jdbc-oracle-catalog.json    |   20 +
 .../lakehouse/catalogs/jdbc-pg-catalog.json        |   20 +
 .../lakehouse/catalogs/jdbc-sqlserver-catalog.json |   20 +
 .../current/lakehouse/catalogs/kafka-catalog.json  |   20 +
 .../current/lakehouse/catalogs/kudu-catalog.json   |   20 +
 .../lakehouse/catalogs/maxcompute-catalog.json     |   20 +
 .../current/lakehouse/catalogs/paimon-catalog.json |   20 +
 .../current/lakehouse/lakehouse-overview.json      |   20 +
 .../current/query-acceleration/caching-intro.json  |   20 +
 .../query-acceleration/colocation-join.json        |   20 +
 .../query-acceleration/condition-cache.json        |   20 +
 .../current/query-acceleration/dictionary.json     |   20 +
 .../bitmap-precise-deduplication.json              |   20 +
 .../hll-approximate-deduplication.json             |   20 +
 .../query-acceleration/distinct-counts/intro.json  |   20 +
 .../query-acceleration/high-concurrency-intro.json |   20 +
 .../high-concurrent-point-query.json               |   20 +
 .../join-optimization-intro.json                   |   20 +
 .../async-materialized-view/faq.json               |   20 +
 .../functions-and-demands.json                     |   20 +
 .../incremental-materialized-view.json             |   20 +
 .../async-materialized-view/overview.json          |   20 +
 .../async-materialized-view/use-guide.json         |   20 +
 .../materialized-view/intro-link.json              |   20 +
 .../materialized-view/intro.json                   |   20 +
 .../materialized-view/overview.json                |   20 +
 .../materialized-view/sync-materialized-view.json  |   20 +
 .../pipeline-execution-engine.json                 |   20 +
 .../query-optimizer.json                           |   20 +
 .../runtime-filter.json                            |   20 +
 .../statistics.json                                |   20 +
 .../topn-optimization.json                         |   20 +
 .../performance-tuning-intro.json                  |   20 +
 .../analysis-tools.json                            |   20 +
 .../diagnostic-tools.json                          |   20 +
 .../tuning-overview.json                           |   20 +
 .../tuning-process.json                            |   20 +
 .../current/query-acceleration/query-profile.json  |   20 +
 .../query-acceleration/sql-cache-manual.json       |   20 +
 .../adjustment-of-runtimefilter-wait-time.json     |   20 +
 .../tuning-execution/data-skew-handling.json       |   20 +
 .../tuning/tuning-execution/intro.json             |   20 +
 .../tuning-execution/parallelism-tuning.json       |   20 +
 .../tuning/tuning-plan/adjusting-join-shuffle.json |   20 +
 .../controlling-hints-with-cbo-rule.json           |   20 +
 .../tuning/tuning-plan/dml-tuning-plan.json        |   20 +
 .../tuning/tuning-plan/optimizing-table-index.json |   20 +
 .../tuning-plan/optimizing-table-scanning.json     |   20 +
 .../tuning-plan/optimizing-table-schema.json       |   20 +
 .../reordering-join-with-leading-hint.json         |   20 +
 .../tuning-plan/schema-and-index-optimization.json |   20 +
 .../transparent-rewriting-with-async-mv.json       |   20 +
 .../transparent-rewriting-with-sync-mv.json        |   20 +
 .../default/current/query-data/asof-join.json      |   20 +
 .../default/current/query-data/complex-type.json   |   20 +
 .../ja/pages/default/current/query-data/cte.json   |   20 +
 .../ja/pages/default/current/query-data/join.json  |   20 +
 .../default/current/query-data/lateral-view.json   |   20 +
 .../query-data/multi-dimensional-analytics.json    |   20 +
 .../current/query-data/mysql-compatibility.json    |   20 +
 .../current/query-data/querying-overview.json      |   20 +
 .../pages/default/current/query-data/subquery.json |   20 +
 .../current/query-data/udf/alias-function.json     |   20 +
 .../query-data/udf/java-user-defined-function.json |   20 +
 .../udf/python-user-defined-function.json          |   20 +
 .../current/query-data/window-function.json        |   20 +
 200 files changed, 42158 insertions(+)

diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-best-practice.md b/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-best-practice.md
new file mode 100644
index 00000000000..2e10b0622bf
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-best-practice.md
@@ -0,0 +1,174 @@
+---
+{
+    "title": "データエクスポートのベストプラクティス",
+    "language": "ja",
+    "description": "Doris のデータエクスポートでリソース使用率が適切かどうかを判断する方法を説明します。SELECT INTO OUTFILE と EXPORT の並行処理の調整方法と、エクスポート速度の評価方法を取り上げます。",
+    "sidebar_label": "ベストプラクティス",
+    "keywords": [
+        "Doris データエクスポート",
+        "SELECT INTO OUTFILE",
+        "EXPORT コマンド",
+        "並行エクスポート",
+        "エクスポート性能の調整",
+        "enable_parallel_outfile",
+        "並行度",
+        "data_consistency",
+        "async_task_consumer_thread_num",
+        "エクスポート時の帯域幅のボトルネック"
+    ]
+}
+---
+
+<!-- Knowledge type: Performance tuning / Configuration parameters -->
+<!-- Applicable scenarios: Export performance bottleneck analysis / Concurrency tuning / Bandwidth utilization evaluation -->
+
+この記事では、Doris のデータエクスポートについて、リソース使用率が適切かどうかを判断し、並行度などのパラメータを調整してエクスポート効率を高める方法を説明します。次の二つの一般的なエクスポート方法を扱います。
+
+| エクスポート方法       | 適したシナリオ                                                      | 並行処理の制御                                  |
+| ---------------------- | ------------------------------------------------------------------- | ----------------------------------------------- |
+| `SELECT INTO OUTFILE`  | 単一の SQL クエリ結果を柔軟に指定してエクスポートする場合           | セッション変数 `enable_parallel_outfile`        |
+| `EXPORT`               | 大きなテーブルやパーティションを、複数の Outfile タスクに自動分割して一括エクスポートする場合 | `parallelism`、`data_consistency` など |
+
+## SELECT INTO OUTFILE の調整
+
+<!-- Knowledge type: Operating procedure -->
+
+`SELECT INTO OUTFILE` は Writer を使用してデータを並行して書き出します。Writer が多いほどエクスポートの並行度は高くなりますが、生成されるファイルも増えます。
+
+### 1. 並行エクスポートを有効にする
+
+**目的**: `SELECT INTO OUTFILE` の並行度を高めます。
+
+**判断方法**: `SELECT INTO OUTFILE` が返す行数は、並行して動作する Writer の数を表します。返された行が 1 行だけ(Writer が一つだけ)の場合は、並行エクスポートを有効にしてみてください。
+
+**コマンド**:
+
+```sql
+SET enable_parallel_outfile = true;
+```
+
+**注意事項**:
+
+- 有効にすると、`SELECT INTO OUTFILE` はクエリの並行度と同じ数の Writer を生成します。
+- クエリの並行度はセッション変数 `parallel_pipeline_task_num` で制御します。デフォルト値は、単一 BE の CPU コア数の半分です。
+- 例: BE が 3 ノードあり、各ノードが 8 コアのクラスターでは、並行エクスポートを有効にすると `4 × 3 = 12` 個の Writer が生成されます。
+
+**制限事項**: `enable_parallel_outfile` を有効にしていても、次のクエリは並行してエクスポートできません。
+
+- `SELECT * FROM table ORDER BY id;` のように、グローバルソートを含むクエリ
+- `SELECT SUM(cost) FROM table;` のように、グローバル集計のセマンティクスを持つクエリ
+
+### 2. エクスポート速度を評価する
+
+**目的**: エクスポート速度がディスクまたはネットワークの帯域幅による上限に達しているかを判断します。
+
+**手順**:
+
+1. `SELECT INTO OUTFILE` が返す各行で、Writer の書き込み時間(秒)と速度(KB/s)を確認します。
+2. 同じノード上の複数の Writer の速度を合計し、そのノードの書き込み速度を求めます。
+3. 求めた速度を、ボトルネックとなる帯域幅と比較します。
+    - ローカルへのエクスポート: ディスクの帯域幅と比較します。
+    - オブジェクトストレージへのエクスポート: ネットワークの帯域幅と比較します。
+
+実際の速度がボトルネックとなる帯域幅に近ければ、リソースはすでに十分に活用されています。そうでなければ、並行度をさらに調整できます。
+
+## EXPORT の調整
+
+<!-- Knowledge type: Operating procedure / Configuration parameters -->
+
+`EXPORT` コマンドは、基本的に一つのエクスポートジョブを複数の `SELECT INTO OUTFILE` 文に分割して実行します。調整するには、まずこの分割の仕組みを理解する必要があります。
+
+### 1. 返された結果から実行状況を確認する
+
+**コマンド**:
+
+```sql
+SHOW EXPORT;
+```
+
+返された結果には、二次元配列の構造を持つ JSON 文字列が含まれます。
+
+- **一次元目**: 並行して実行される Export スレッドの数、つまり並行して発行される Outfile 文の数。
+- **二次元目**: 一つの Outfile 文の戻り値(複数の Writer の書き込み情報)。
+
+**例**:
+
+```json
+[
+    [
+        {
+            "fileNumber": "1",
+            "totalRows": "640321",
+            "fileSize": "350758307",
+            "url": "file:///127.0.0.1/mnt/disk2/ftw/tmp/export/exp_59fd917c43874adc-9b1c3e9cd6e655be_*",
+            "writeTime": "17.989",
+            "writeSpeed": "19041.66"
+        },
+        {...},
+        {...},
+        {...}
+    ],
+    [
+        {
+            "fileNumber": "1",
+            "totalRows": "646609",
+            "fileSize": "354228704",
+            "url": "file:///127.0.0.1/mnt/disk2/ftw/tmp/export/exp_c75b9d4b59bf4943-92eb94a7b97e46cb_*",
+            "writeTime": "17.249",
+            "writeSpeed": "20054.64"
+        },
+        {...},
+        {...},
+        {...}
+    ]
+]
+```
+
+**説明**: 上の例では、2 つの Outfile コマンドが発行され、それぞれ 4 つの Writer が並行して書き込んでいます。Export コマンドのプロパティ `parallelism` を使用すると、並行して実行する Outfile コマンドの数、ひいては全体の並行度を制御できます。
+
+### 2. 並行度に影響するパラメータ
+
+<!-- Knowledge type: Configuration parameters -->
+
+Export ジョブ全体の並行度は、次のパラメータで決まります。
+
+| パラメータ                       | 適用範囲        | デフォルト値 | 説明                                                                   |
+| -------------------------------- | --------------- | ------------ | ---------------------------------------------------------------------- |
+| `parallelism`                    | Export コマンド | -            | Export ジョブを分割できる Outfile コマンドの最大数を制御します         |
+| `data_consistency`               | Export コマンド | `partition`  | パーティション内で Outfile コマンドをさらに分割するかを制御します     |
+| `async_task_consumer_thread_num` | FE 設定         | `64`         | クラスター全体で同時に実行できる Export Task の総数を制御します。すべての Export Task で共有します |
+
+#### parallelism
+
+単一の Export ジョブを分割できる Outfile コマンドの最大数、つまりジョブ内の並行度の上限を制御します。
+
+#### data_consistency
+
+パーティション内で Outfile コマンドをさらに分割するかを制御します。
+
+- `partition`(デフォルト): パーティションをそれ以上分割しません。Outfile コマンドの数は、対象のパーティション数以下になります。
+- `none`: パーティションをさらに分割して並行度を高めます。ただし、パーティションにデータを書き込んでいる場合、エクスポートの一貫性が損なわれる可能性があります(同じパーティションに対する異なる Outfile コマンドが、異なるバージョンのデータをエクスポートする可能性があります)。
+
+詳しくは、[EXPORT コマンドのマニュアル](../../sql-manual/sql-statements/data-modification/load-and-export/EXPORT.md)を参照してください。
+
+#### async_task_consumer_thread_num
+
+現在のクラスターで同時に実行できる Export Task の数の上限を表す FE 設定パラメータです。デフォルト値は `64` です。
+
+- Export Job は、その並行度に基づいて複数の Export Task に分割されます。
+- すべての Export Task がこの上限を共有します。
+- クラスターで同時に実行できるエクスポートタスクの数を増やすには、このパラメータを増やして FE ノードを再起動します。
+
+## 調整手順の参考例
+
+<!-- Knowledge type: Operating procedure -->
+<!-- Applicable scenarios: Export performance bottleneck localization -->
+
+エクスポート性能が期待どおりでない場合は、次の順序で調査します。
+
+1. **並行度を確認する**: 返された結果(`SELECT INTO OUTFILE` の行数、または `SHOW EXPORT` の JSON)から、実際に並行して動作する Writer の数を確認します。
+2. **帯域幅の使用状況を評価する**: 単一ノード上の Writer の速度を合計し、ディスクまたはネットワークの帯域幅と比較して、上限に達しているかを判断します。
+3. **並行度のパラメータを調整する**:
+    - `SELECT INTO OUTFILE`: `enable_parallel_outfile` を有効にし、必要に応じて `parallel_pipeline_task_num` を調整します。
+    - `EXPORT`: `parallelism` を調整し、必要に応じて `data_consistency` を `none` に設定します。
+4. **クラスター全体の上限を調整する**: クラスターで同時に実行される Export タスクが多すぎて制限を受けている場合は、FE の設定パラメータ `async_task_consumer_thread_num` を増やして FE を再起動します。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-with-mysql-dump.md b/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-with-mysql-dump.md
new file mode 100644
index 00000000000..06d131f9e79
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/export-with-mysql-dump.md
@@ -0,0 +1,95 @@
+---
+{
+    "title": "MySQL Dump",
+    "language": "ja",
+    "description": "mysqldump ツールを使用して Apache Doris のテーブルスキーマとデータをエクスポートする方法を説明します。開発、テスト、小規模なデータ移行に適しています。",
+    "keywords": [
+        "mysqldump",
+        "Doris エクスポート",
+        "スキーマのエクスポート",
+        "データのエクスポート",
+        "no-tablespaces",
+        "source によるインポート"
+    ]
+}
+---
+
+<!-- Knowledge type: Procedure -->
+<!-- Applicable scenarios: Development and testing / Small-scale export and import / Schema backup -->
+
+`mysqldump` は MySQL が提供する公式の論理エクスポートツールです。Apache Doris は **バージョン 0.15** 以降、`mysqldump` と互換性があります。テーブルのスキーマ(DDL)またはデータ(DML)をエクスポートし、`source` コマンドで Doris に再インポートできます。
+
+### 適用シナリオ
+
+| シナリオ | 推奨度 | 説明 |
+| --- | --- | --- |
+| 開発・テスト環境でのデータ移行 | 推奨 | 操作が簡単で、ツールを入手しやすい |
+| スキーマのバックアップと移行 | 推奨 | `--no-data` を指定して DDL のみをエクスポートします |
+| 小規模なデータのエクスポート | 推奨 | 数 MB から数百 MB 程度 |
+| 本番環境での大規模なデータのエクスポート | **非推奨** | 性能と安定性に制約があります。代わりに `EXPORT` または `OUTFILE` を使用してください |
+
+## 前提条件
+
+- Doris のバージョンが 0.15 以降であること
+- クライアント環境に `mysqldump` がインストールされていること
+- 対象のデータベースとテーブルに対する読み取り権限があること(FE の MySQL プロトコルのデフォルトポートは `9030`)
+
+## 使用例
+
+### データまたはスキーマのエクスポート
+
+以下の例はいずれも `127.0.0.1:9030` の FE に `root` アカウントで接続します。`--no-tablespaces` オプションを必ず指定してください(理由は後述の「注意事項」を参照してください)。
+
+1. **指定したテーブルのスキーマとデータをエクスポートする**
+
+    ```shell
+    mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces \
+        --databases test --tables table1
+    ```
+
+2. **指定したテーブルのスキーマのみをエクスポートする(データは含めない)**
+
+    ```shell
+    mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces \
+        --databases test --tables table1 --no-data
+    ```
+
+3. **複数のデータベースに含まれるすべてのテーブルをエクスポートする**
+
+    ```shell
+    mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces \
+        --databases test1 test2
+    ```
+
+4. **すべてのデータベースとテーブルをエクスポートする**
+
+    ```shell
+    mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces \
+        --all-databases
+    ```
+
+その他のオプションについては、[MySQL 公式の mysqldump マニュアル](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)を参照してください。
+
+### エクスポートした結果を Doris にインポートする
+
+`mysqldump` の出力を `.sql` ファイルにリダイレクトし、Doris クライアントで `source` コマンドを実行してインポートできます。
+
+```shell
+# 1. Export to a file
+mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces \
+    --databases test --tables table1 > table1.sql
+
+# 2. Log in to Doris and run source to import
+mysql -h127.0.0.1 -P9030 -uroot
+```
+
+```sql
+source table1.sql;
+```
+
+## 注意事項
+
+1. **`--no-tablespaces` オプションは必須です**:Doris は MySQL のテーブルスペースという概念に対応していません。このオプションを指定しないと、エクスポートは失敗します。
+2. **開発、テスト、または小規模なデータの処理にのみ適しています**:`mysqldump` はシングルスレッドの論理エクスポートツールです。大量のデータを扱う際の性能と安定性は十分ではありません。**本番環境で大規模なデータを扱う場合は使用しないでください。**本番環境でデータをエクスポートする場合は、次のいずれかの方法を使用してください。
+    - [`EXPORT` 文](../../sql-manual/sql-statements/data-modification/load-and-export/EXPORT.md):オブジェクトストレージまたは HDFS へ非同期でエクスポートします
+    - [`SELECT INTO OUTFILE`](../../sql-manual/sql-statements/data-modification/load-and-export/OUTFILE.md):クエリ結果をファイルへ同期的にエクスポートします
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/outfile.md b/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/outfile.md
new file mode 100644
index 00000000000..8069eb0f42e
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/data-operate/export/outfile.md
@@ -0,0 +1,341 @@
+---
+{
+    "title": "SELECT INTO OUTFILE",
+    "language": "ja",
+    "description": "SELECT INTO OUTFILE を使用して Doris のクエリ結果を S3、HDFS などのストレージに同期的にエクスポートする方法を、Parquet、ORC、CSV の例とともに説明します。",
+    "keywords": [
+        "SELECT INTO OUTFILE",
+        "Doris のエクスポート",
+        "クエリ結果のエクスポート",
+        "S3 へのエクスポート",
+        "HDFS へのエクスポート",
+        "Parquet エクスポート",
+        "ORC エクスポート",
+        "CSV エクスポート",
+        "並列エクスポート",
+        "enable_parallel_outfile",
+        "max_file_size",
+        "success_file_name"
+    ]
+}
+---
+
+<!-- Knowledge type: Operation steps / Configuration parameters -->
+<!-- Applicable scenarios: Data export / Query result persistence / Offline analysis data delivery -->
+
+このドキュメントでは、`SELECT INTO OUTFILE` コマンドを使用して、Doris のクエリ結果を指定したファイル形式でオブジェクトストレージまたは HDFS に同期的にエクスポートする方法を説明します。
+
+`SELECT INTO OUTFILE` は、Doris が提供する**同期エクスポートコマンド**です。`SELECT` クエリの結果を、Parquet、ORC、CSV などの形式でオブジェクトストレージ(S3/COS/OSS/OBS/GCS)または HDFS に書き込みます。コマンドが返った時点で、エクスポートは完了しています。
+
+- 成功した場合: エクスポートしたファイル数、サイズ、パスなどの情報を返します。
+- 失敗した場合: エラーメッセージを返します。
+
+> `SELECT INTO OUTFILE` と `EXPORT` の使い分けについては、[エクスポートの概要](./export-overview.md)を参照してください。
+> コマンドの完全なリファレンスについては、[SELECT INTO OUTFILE の構文](../../sql-manual/sql-statements/data-modification/load-and-export/OUTFILE)を参照してください。
+
+## 適用シナリオ
+
+<!-- Knowledge type: Architecture selection decision -->
+
+`SELECT INTO OUTFILE` は、次のデータエクスポートのシナリオに適しています。
+
+| シナリオ | 説明 |
+| --- | --- |
+| 複雑な計算結果のエクスポート | エクスポートするデータにフィルタリング、集計、結合(JOIN)などの複雑な計算処理が必要な場合。 |
+| 同期処理 | 後続の処理を行う前に、業務ワークフローがエクスポートの完了を待つ必要がある場合。 |
+
+### 制限事項
+
+- 圧縮されたテキスト形式でのエクスポートはサポートされていません。
+- バージョン 2.1 のパイプラインエンジンは並列エクスポートをサポートしていません。
+
+## 機能の概要
+
+<!-- Knowledge type: Configuration parameters -->
+
+### 対応する保存先
+
+| ストレージの種類 | 対応する保存先 |
+| --- | --- |
+| オブジェクトストレージ | Amazon S3、Tencent Cloud COS、Alibaba Cloud OSS、Huawei Cloud OBS、Google GCS |
+| 分散ファイルシステム | HDFS |
+| ローカルファイルシステム | デバッグ専用。手動で有効化する必要があります(付録を参照)。 |
+
+### 対応するファイル形式
+
+- Parquet
+- ORC
+- csv
+- csv\_with\_names
+- csv\_with\_names\_and\_types
+
+## クイックスタート
+
+<!-- Knowledge type: Operation steps -->
+
+### ステップ 1: テーブルを作成してデータをロードする
+
+```sql
+CREATE TABLE IF NOT EXISTS tbl (
+    `c1` int(11) NULL,
+    `c2` string NULL,
+    `c3` bigint NULL
+)
+DISTRIBUTED BY HASH(c1) BUCKETS 20
+PROPERTIES("replication_num" = "1");
+
+insert into tbl values
+    (1, 'doris', 18),
+    (2, 'nereids', 20),
+    (3, 'pipelibe', 99999),
+    (4, 'Apache', 122123455),
+    (5, null, null);
+```
+
+### ステップ 2: HDFS にエクスポートする
+
+クエリ結果を `hdfs://path/to/` ディレクトリに Parquet 形式でエクスポートします。
+
+```sql
+SELECT c1, c2, c3 FROM tbl
+INTO OUTFILE "hdfs://ip:port/path/to/result_"
+FORMAT AS PARQUET
+PROPERTIES
+(
+    "fs.defaultFS" = "hdfs://ip:port",
+    "hadoop.username" = "hadoop"
+);
+```
+
+### ステップ 3: オブジェクトストレージにエクスポートする
+
+クエリ結果を `s3://bucket/export/` ディレクトリに ORC 形式でエクスポートします。`ak` や `sk` などのアクセス認証情報を指定する必要があります。
+
+```sql
+SELECT * FROM tbl
+INTO OUTFILE "s3://bucket/export/result_"
+FORMAT AS ORC
+PROPERTIES(
+    "s3.endpoint" = "xxxxx",
+    "s3.region" = "xxxxx",
+    "s3.secret_key"="xxxx",
+    "s3.access_key" = "xxxxx"
+);
+```
+
+## 高度な機能
+
+### 並列エクスポートを有効にする(エクスポート効率の向上)
+
+<!-- Applicable scenarios: Large data volume export / Performance tuning -->
+
+セッション変数 `enable_parallel_outfile` を使用して並列エクスポートを有効にします。
+
+```sql
+SET enable_parallel_outfile=true;
+```
+
+| 項目 | 説明 |
+| --- | --- |
+| 動作の仕組み | 複数の BE ノードと複数のスレッドを使用して、結果データを並行してエクスポートします。 |
+| 利点 | エクスポート全体の効率が大幅に向上します。 |
+| 副作用 | 生成されるファイルが増える可能性があります。 |
+| 適用されない場合 | クエリにグローバルソートが含まれる場合、このパラメータを有効にしても並列エクスポートは機能しません。 |
+| 有効になったことの確認方法 | エクスポートコマンドが複数行を返した場合、並列エクスポートが機能しています。 |
+
+## 代表的なシナリオの例
+
+### シナリオ 1: 高可用性が有効な HDFS クラスターへのエクスポート
+
+<!-- Applicable scenarios: HA HDFS environment -->
+
+HDFS で HA が有効な場合は、ネームサービスと NameNode に関する設定も指定する必要があります。
+
+```sql
+SELECT c1, c2, c3 FROM tbl
+INTO OUTFILE "hdfs://HDFS8000871/path/to/result_"
+FORMAT AS PARQUET
+PROPERTIES
+(
+    "fs.defaultFS" = "hdfs://HDFS8000871",
+    "hadoop.username" = "hadoop",
+    "dfs.nameservices" = "your-nameservices",
+    "dfs.ha.namenodes.your-nameservices" = "nn1,nn2",
+    "dfs.namenode.rpc-address.HDFS8000871.nn1" = "ip:port",
+    "dfs.namenode.rpc-address.HDFS8000871.nn2" = "ip:port",
+    "dfs.client.failover.proxy.provider.HDFS8000871" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
+);
+```
+
+### シナリオ 2: HA と Kerberos 認証が有効な HDFS クラスターへのエクスポート
+
+<!-- Applicable scenarios: Kerberos secure authentication environment -->
+
+HDFS クラスターで高可用性と Kerberos 認証の両方が有効な場合は、次の SQL を参照してください。
+
+```sql
+SELECT * FROM tbl
+INTO OUTFILE "hdfs://path/to/result_"
+FORMAT AS PARQUET
+PROPERTIES
+(
+    "fs.defaultFS"="hdfs://hacluster/",
+    "hadoop.username" = "hadoop",
+    "dfs.nameservices"="hacluster",
+    "dfs.ha.namenodes.hacluster"="n1,n2",
+    "dfs.namenode.rpc-address.hacluster.n1"="192.168.0.1:8020",
+    "dfs.namenode.rpc-address.hacluster.n2"="192.168.0.2:8020",
+    "dfs.client.failover.proxy.provider.hacluster"="org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
+    "dfs.namenode.kerberos.principal"="hadoop/_HOST@REALM.COM",
+    "hadoop.security.authentication"="kerberos",
+    "hadoop.kerberos.principal"="doris_test@REALM.COM",
+    "hadoop.kerberos.keytab"="/path/to/doris_test.keytab"
+);
+```
+
+### シナリオ 3: エクスポート成功を示すマーカーファイルを生成する
+
+<!-- Applicable scenarios: Synchronous task integrity verification / Avoiding unknown status caused by network disconnection -->
+
+**背景**: `SELECT INTO OUTFILE` は同期コマンドです。SQL の実行中に接続が切断された場合、エクスポートが完了したかどうか判断できません。
+
+**対処方法**: `success_file_name` パラメータを使用します。エクスポートが成功すると、ディレクトリ内にマーカーファイル(Hive の `_SUCCESS` に相当)が生成されます。このファイルの有無を確認することで、エクスポートの完全性を確認できます。
+
+次の例では、クエリ結果を CSV 形式で S3 にエクスポートし、完了後に `SUCCESS` という名前のマーカーファイルを生成します。
+
+```sql
+SELECT k1,k2,v1 FROM tbl1 LIMIT 100000
+INTO OUTFILE "s3://bucket/export/result_"
+FORMAT AS CSV
+PROPERTIES
+(
+    "s3.endpoint" = "xxxxx",
+    "s3.region" = "xxxxx",
+    "s3.secret_key"="xxxx",
+    "s3.access_key" = "xxxxx",
+    "column_separator" = ",",
+    "line_delimiter" = "\n",
+    "success_file_name" = "SUCCESS"
+);
+```
+
+### シナリオ 4: エクスポート前に出力先ディレクトリを空にする
+
+<!-- Applicable scenarios: Overwrite-style export / Periodic full replacement -->
+
+`delete_existing_files` パラメータを使用して、エクスポート前に出力先ディレクトリ内の既存ファイルを削除します。
+
+```sql
+SELECT * FROM tbl1
+INTO OUTFILE "s3://bucket/export/result_"
+FORMAT AS CSV
+PROPERTIES
+(
+    "s3.endpoint" = "xxxxx",
+    "s3.region" = "xxxxx",
+    "s3.secret_key"="xxxx",
+    "s3.access_key" = "xxxxx",
+    "column_separator" = ",",
+    "line_delimiter" = "\n",
+    "delete_existing_files" = "true"
+);
+```
+
+**条件とリスク**:
+
+| 項目 | 説明 |
+| --- | --- |
+| 動作 | まず `s3://bucket/export/` 配下のすべてのファイルとサブディレクトリを削除し、その後データをエクスポートします。 |
+| 有効化の条件 | `enable_delete_existing_files = true` の設定を `fe.conf` に追加し、FE を再起動する必要があります。 |
+| リスクに関する警告 | この操作は外部システムのデータを削除します。リスクの高い操作であるため、外部システムの権限とデータの安全性を自身で確保する必要があります。 |
+
+### シナリオ 5: エクスポートするファイルごとのサイズを制御する
+
+`max_file_size` パラメータを使用して、エクスポートする各ファイルの最大サイズを制御します。
+
+```sql
+SELECT * FROM tbl
+INTO OUTFILE "s3://path/to/result_"
+FORMAT AS ORC
+PROPERTIES(
+    "s3.endpoint" = "xxxxx",
+    "s3.region" = "xxxxx",
+    "s3.secret_key"="xxxx",
+    "s3.access_key" = "xxxxx",
+    "max_file_size" = "2048MB"
+);
+```
+
+**補足**:
+
+- 最終的に生成されるデータが 2 GB 以下の場合、ファイルは一つだけ生成されます。
+- 2 GB を超える場合、データは複数のファイルに分割されます。
+- 各行のデータは必ず単一のファイル内に収まるように分割されるため、実際のファイルサイズは厳密には `max_file_size` と一致しません。
+
+## 注意事項
+
+<!-- Knowledge type: Configuration parameters / Troubleshooting -->
+
+### パフォーマンスとタイムアウト
+
+| 項目 | 説明 |
+| --- | --- |
+| エクスポート時間の内訳 | `SELECT INTO OUTFILE` は基本的に SQL クエリであるため、合計時間 = クエリ時間 + 結果セットの書き出し時間です。 |
+| 単一スレッドのボトルネック | 並列エクスポートが有効でない場合、クエリ結果は単一の BE ノード上の単一スレッドで書き出されます。 |
+| パフォーマンスの最適化 | `enable_parallel_outfile` を有効にすると並列エクスポートを使用でき、所要時間を大幅に短縮できます。 |
+| エクスポートのタイムアウト | エクスポートコマンドのタイムアウトはクエリのタイムアウトと同じです。データ量が多い場合は、`query_timeout` を設定して適切に延長できます。 |
+
+### ファイル管理
+
+- **Doris はエクスポート済みファイルを管理しません**: エクスポートが成功した場合も、失敗後にファイルが残った場合も、自身でクリーンアップする必要があります。
+- **パスやファイルの存在確認は行いません**: `SELECT INTO OUTFILE` はファイルやパスの存在を確認しません。パスが自動的に作成されるか、既存ファイルが上書きされるかは、リモートストレージシステムの仕様によって決まります。
+
+### データと形式
+
+- **空の結果セット**: クエリの結果セットが空でも、空のファイルが生成されます。
+- **ファイル分割のルール**: 各行のデータは必ず単一のファイル内に収まるため、ファイルサイズは厳密には `max_file_size` と一致しません。
+- **印字できない文字を出力する関数**: `BITMAP` や `HLL` など、印字できない文字を出力する関数の値は、CSV へのエクスポート時に `\N` として書き込まれます。
+
+## 付録
+
+### ローカルファイルシステムへのエクスポート(デバッグ専用)
+
+<!-- Applicable scenarios: Local debugging / Development verification -->
+<!-- Knowledge type: Configuration parameters -->
+
+:::caution
+この機能はローカルでのデバッグと開発専用です。**本番環境では使用しないでください**。また、エクスポート先ディレクトリの権限とデータの安全性を自身で確保する必要があります。
+:::
+
+**有効化方法**: `enable_outfile_to_local=true` の設定を `fe.conf` に追加し、FE を再起動します。
+
+**例**: `tbl` テーブルのすべてのデータをローカルファイルシステムに CSV 形式(デフォルトの形式)でエクスポートします。列区切り文字には `,` を使用します。
+
+```sql
+SELECT c1, c2 FROM db.tbl
+INTO OUTFILE "file:///path/to/result_"
+FORMAT AS CSV
+PROPERTIES(
+    "column_separator" = ","
+);
+```
+
+**動作に関する注意事項**:
+
+- データは BE ノードのローカルディスクに書き込まれます。
+- 複数の BE ノードがある環境では、エクスポートタスクの並行度に応じて、データが異なる BE ノードに分散されます。
+- `result_c6df5f01bd664dde-a2168b019b6c2b3f_0.csv` のようなファイルが、BE ノード上の `/path/to/` ディレクトリに生成されます。
+- 対象の BE ノードの IP アドレスは、返される結果に表示されます。
+
+**戻り値の例**:
+
+```text
++------------+-----------+----------+--------------------------------------------------------------------------+
+| FileNumber | TotalRows | FileSize | URL                                                                      |
++------------+-----------+----------+--------------------------------------------------------------------------+
+|          1 |   1195072 |  4780288 | file:///172.20.32.136/path/to/result_c6df5f01bd664dde-a2168b019b6c2b3f_* |
+|          1 |   1202944 |  4811776 | file:///172.20.32.136/path/to/result_c6df5f01bd664dde-a2168b019b6c2b40_* |
+|          1 |   1198880 |  4795520 | file:///172.20.32.137/path/to/result_c6df5f01bd664dde-a2168b019b6c2b43_* |
+|          1 |   1198880 |  4795520 | file:///172.20.32.137/path/to/result_c6df5f01bd664dde-a2168b019b6c2b45_* |
++------------+-----------+----------+--------------------------------------------------------------------------+
+```
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aliyun-oss-tables.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aliyun-oss-tables.md
new file mode 100644
index 00000000000..4ebc9e5e043
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aliyun-oss-tables.md
@@ -0,0 +1,200 @@
+---
+{
+    "title": "Alibaba Cloud OSS Tables との連携",
+    "language": "ja",
+    "description": "Iceberg REST Catalog と S3FileIO を使用して Doris を Alibaba Cloud OSS Tables に接続し、マネージド Iceberg テーブルを読み書きする方法を説明します。",
+    "keywords": [
+        "Alibaba Cloud OSS Tables",
+        "Apache Doris OSS Tables",
+        "Iceberg REST Catalog",
+        "S3FileIO",
+        "OSS Table Bucket",
+        "OSS Tables Catalog",
+        "マネージド Iceberg テーブル",
+        "SigV4 osstables",
+        "OSS Tables 403 Forbidden",
+        "OSS STS 認証情報",
+        "Doris レイクハウス"
+    ]
+}
+---
+
+<!-- Knowledge Type: Capability Definition + Integration Guide -->
+<!-- Applicable Scenarios: Alibaba Cloud OSS Tables integration / Managed Iceberg table queries and writes -->
+
+[Alibaba Cloud OSS Tables](https://www.alibabacloud.com/help/en/oss/user-guide/oss-tables/) は、Apache Iceberg テーブル向けのマネージドストレージサービスです。OSS Tables は Table Bucket をストレージ単位として使用し、Apache Iceberg REST Catalog と互換性のあるメタデータインターフェースを公開します。テーブルデータには OSS の S3 互換インターフェースを介してアクセスできます。
+
+通常の OSS Bucket で Iceberg テーブルを管理する場合と比べて、OSS Tables には次の機能があります。
+
+- Iceberg REST Catalog を内蔵しているため、Hive Metastore などの外部メタデータサービスをデプロイする必要がありません。
+- 小さなファイルの自動コンパクション、スナップショットの期限切れ処理、孤立ファイルのクリーンアップを行います。
+- 標準の Iceberg インターフェースを通じて、複数の計算エンジンから同じテーブルデータにアクセスできます。
+
+Apache Doris は Iceberg REST Catalog を介して OSS Tables に接続します。REST Catalog は名前空間とテーブルメタデータを管理し、`S3FileIO` はデータファイルを読み書きします。このガイドでは、Doris で OSS Tables Catalog を作成し、Iceberg テーブルをクエリしてデータを書き込む方法を説明します。
+
+:::caution
+この機能は実験的な機能であり、Doris 5.0.0 でリリースされる予定です。
+:::
+
+<!-- Knowledge Type: Operational Steps -->
+<!-- Applicable Scenarios: Creating an OSS Tables Catalog / Querying and writing Iceberg tables -->
+
+## 利用ガイド
+
+### 01 OSS Table Bucket を作成する
+
+Alibaba Cloud OSS コンソールで Table Bucket を作成します。作成後、Table Bucket の ARN、リージョン、名前を控えてください。ARN の形式は次のとおりです。
+
+```text
+acs:osstables:<region>:<account_id>:bucket/<table_bucket_name>
+```
+
+対象の Table Bucket へのアクセス権を持つ RAM ユーザーの AccessKey を作成するか、一時的な STS 認証情報を取得します。FE ノードから OSS Tables REST Catalog のエンドポイントにアクセスでき、FE ノードと BE ノードから OSS データアクセス用エンドポイントにアクセスできることを確認してください。
+
+OSS Tables の各操作に必要な権限については、[Alibaba Cloud OSS Tables の権限とアクセス制御](https://www.alibabacloud.com/help/en/oss/user-guide/oss-tables-access-control)を参照してください。
+
+<!-- Knowledge Type: Configuration Parameters -->
+<!-- Applicable Scenarios: Configuring REST Catalog authentication and S3FileIO data access -->
+
+### 02 Iceberg Catalog を作成する
+
+リージョン、アカウント ID、Table Bucket 名、アクセス認証情報を実際の値に置き換えてください。
+
+```sql
+CREATE CATALOG oss_tables PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'https://<region>.oss-tables.aliyuncs.com/iceberg',
+    'warehouse' = 'acs:osstables:<region>:<account_id>:bucket/<table_bucket_name>',
+
+    'iceberg.rest.sigv4-enabled' = 'true',
+    'iceberg.rest.signing-name' = 'osstables',
+    'iceberg.rest.signing-region' = '<region>',
+    'iceberg.rest.view-enabled' = 'false',
+
+    'io-impl' = 'org.apache.iceberg.aws.s3.S3FileIO',
+    'oss.endpoint' = 'https://oss-<region>.aliyuncs.com',
+    'oss.region' = '<region>',
+    'oss.access_key' = '<access_key_id>',
+    'oss.secret_key' = '<access_key_secret>',
+    'oss.use_path_style' = 'false',
+
+    'test_connection' = 'true'
+);
+```
+
+Alibaba Cloud の内部ネットワーク経由でアクセスする場合は、`iceberg.rest.uri` と `oss.endpoint` をそれぞれ `https://<region>-internal.oss-tables.aliyuncs.com/iceberg` と `https://oss-<region>-internal.aliyuncs.com` に置き換えてください。
+
+一時的な STS 認証情報を使用する場合は、`oss.session_token` を `oss.secret_key` の後に追加します。
+
+```sql
+'oss.session_token' = '<sts_token>',
+```
+
+Doris は、`oss.access_key`、`oss.secret_key`、および任意の `oss.session_token` を、REST Catalog の SigV4 署名と `S3FileIO` によるデータアクセスの両方に使用します。`iceberg.rest.access-key-id` と `iceberg.rest.secret-access-key` を別途設定する必要はありません。
+
+#### パラメータ
+
+| パラメータ | 必須 | 説明 |
+| --- | --- | --- |
+| `type` | はい | `iceberg` を指定する必要があります。 |
+| `iceberg.catalog.type` | はい | Iceberg REST Catalog を介して OSS Tables にアクセスするため、`rest` を指定する必要があります。 |
+| `iceberg.rest.uri` | はい | OSS Tables REST Catalog のエンドポイントです。 |
+| `warehouse` | はい | Table Bucket の ARN です。 |
+| `iceberg.rest.sigv4-enabled` | はい | `true` を指定する必要があります。 |
+| `iceberg.rest.signing-name` | はい | 小文字の `osstables` を指定する必要があります。大文字と小文字は区別されます。 |
+| `iceberg.rest.signing-region` | はい | SigV4 署名に使用するリージョンです。Table Bucket のリージョンと一致する必要があります。 |
+| `iceberg.rest.view-enabled` | はい | `false` に設定します。OSS Tables は現在、Iceberg View インターフェースをサポートしていません。 |
+| `io-impl` | はい | `org.apache.iceberg.aws.s3.S3FileIO` を指定する必要があります。`HadoopFileIO` は使用しないでください。 |
+| `oss.endpoint` | はい | `S3FileIO` が OSS のデータファイルへのアクセスに使用するエンドポイントです。 |
+| `oss.region` | はい | OSS データアクセスに使用するリージョンです。Table Bucket のリージョンと一致する必要があります。 |
+| `oss.access_key` | はい | Alibaba Cloud の AccessKey ID です。 |
+| `oss.secret_key` | はい | Alibaba Cloud の AccessKey Secret です。 |
+| `oss.session_token` | いいえ | 一時的な STS 認証情報を使用する場合に設定します。 |
+| `oss.use_path_style` | いいえ | パス形式のアクセスを使用するかどうかを指定します。デフォルトは `false` です。 |
+| `test_connection` | いいえ | `true` に設定すると、Doris は Catalog の作成時に REST Catalog への接続と認証を確認します。 |
+
+`test_connection=true` は、データアクセスの検証に代わるものではありません。Catalog の作成後に実際のクエリまたは書き込み操作を実行し、FE ノードと BE ノードから OSS データアクセス用エンドポイントへのネットワーク接続とアクセス権を確認してください。
+
+### 03 OSS Tables にアクセスする
+
+```sql
+SWITCH oss_tables;
+
+SHOW DATABASES;
+
+USE <namespace_name>;
+
+SHOW TABLES;
+
+SELECT * FROM <table_name> LIMIT 10;
+```
+
+<!-- Knowledge Type: Operational Example -->
+<!-- Applicable Scenarios: Creating an Iceberg table and writing data to OSS Tables -->
+
+### 04 OSS Tables のテーブルを作成してデータを書き込む
+
+```sql
+SWITCH oss_tables;
+
+CREATE DATABASE IF NOT EXISTS doris_demo;
+USE doris_demo;
+
+CREATE TABLE orders (
+    order_id BIGINT,
+    customer STRING,
+    amount DECIMAL(10, 2),
+    created_at DATETIME
+)
+PROPERTIES (
+    'format-version' = '2',
+    'write-format' = 'parquet',
+    'write.format.default' = 'parquet',
+    'write.parquet.compression-codec' = 'zstd'
+);
+
+INSERT INTO orders VALUES
+    (1, 'Alice', 99.50, '2026-08-11 10:00:00'),
+    (2, 'Bob', 120.00, '2026-08-11 10:01:00');
+
+SELECT order_id, customer, amount, created_at
+FROM orders
+ORDER BY order_id;
+```
+
+Iceberg の `$files` メタデータテーブルをクエリすると、データファイルが OSS Tables に書き込まれたことを確認できます。
+
+```sql
+SELECT file_path, file_format, record_count
+FROM `orders$files`
+ORDER BY file_path;
+```
+
+<!-- Knowledge Type: Limitations + Usage Guidance -->
+
+## 利用上の注意
+
+- OSS Tables がサポートするテーブル形式は Iceberg のみです。
+- `iceberg.rest.signing-name` には小文字の `osstables` を指定する必要があります。また、`iceberg.rest.signing-region` に正しいリージョンを指定し、`iceberg.rest.sigv4-enabled` を `true` に設定する必要があります。
+- 一時的な STS 認証情報を使用する場合は、認証情報の有効期限が切れる前に Catalog 内の AK、SK、トークンを更新してください。
+
+<!-- Knowledge Type: Troubleshooting -->
+<!-- Applicable Scenarios: 403 authentication errors / Metadata access succeeds but data queries fail -->
+
+## FAQ
+
+### Catalog の作成時に 403 Forbidden が返される
+
+次の設定を確認してください。
+
+- `oss.access_key` と `oss.secret_key` が有効であることを確認します。一時的な STS 認証情報を使用する場合は、`oss.session_token` も正しく、有効期限が切れていないことを確認します。
+- RAM ユーザーまたは STS 認証主体に、対象の Table Bucket に対する `oss:GetTableBucket` と `oss:ListNamespaces` の権限があることを確認します。
+- `warehouse` に指定したアカウント ID、リージョン、Table Bucket 名が正しいことを確認します。
+- `iceberg.rest.signing-name` が `osstables` であり、`iceberg.rest.signing-region` が Table Bucket のリージョンであることを確認します。
+
+### 名前空間とテーブルは表示されるが、データのクエリに失敗する
+
+FE ノードとすべての BE ノードから `oss.endpoint` にアクセスできること、および RAM ユーザーまたは STS 認証主体に `oss:GetTableMetadataLocation` と `oss:GetTableData` の権限があることを確認してください。
+
+OSS Tables の各操作に必要な権限の完全な一覧については、[Alibaba Cloud OSS Tables の権限とアクセス制御](https://www.alibabacloud.com/help/en/oss/user-guide/oss-tables-access-control)を参照してください。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aws-s3tables.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aws-s3tables.md
new file mode 100644
index 00000000000..fec9dbfb415
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-aws-s3tables.md
@@ -0,0 +1,202 @@
+---
+{
+    "title": "Glue + AWS S3 Tables との連携",
+    "language": "ja",
+    "description": "AWS S3 Tables は、Apache Iceberg テーブル形式の標準に準拠した読み書きインターフェースを提供する、特別な種類の S3 バケットです。"
+}
+---
+
+[AWS S3 Tables](https://aws.amazon.com/s3/features/tables/) は Amazon S3 上に構築された特別な種類の S3 バケットで、Apache Iceberg テーブル形式の標準に準拠した読み書きインターフェースを提供します。S3 と同等の耐久性、可用性、スケーラビリティ、パフォーマンス特性を備えています。さらに、S3 Tables には次の機能があります。
+
+- 通常の S3 バケットに保存した Iceberg テーブルと比較して、S3 Tables ではクエリ性能が最大 3 倍、毎秒のトランザクション数が最大 10 倍になります。
+- テーブル管理の自動化。S3 Tables は、小さなファイルのコンパクション、スナップショット管理、不要なファイルのクリーンアップなど、Iceberg テーブルのデータを自動的に最適化します。
+
+S3 Tables の登場により、レイクハウスのアーキテクチャがさらに簡素化され、クラウドネイティブなレイクウェアハウスシステムの可能性が広がります。ホット・コールド分離、データのアーカイブ、データのバックアップ、コンピューティングとストレージの分離といった構成も、S3 Tables を基盤とする新たなアーキテクチャへ発展する可能性があります。
+
+Amazon S3 Tables は Iceberg API との互換性が高いため、Apache Doris は S3 Tables と容易に連携できます。この記事では、Apache Doris を S3 Tables に接続し、データを分析・処理する方法を示します。
+
+:::tip
+この機能は Doris 3.1 以降でサポートされています。
+:::
+
+## 利用ガイド
+
+### 01 S3 Table Bucket を作成する
+
+S3 Table Bucket は、汎用バケットとディレクトリバケットに続く、S3 の第三のバケット種別です。
+
+![AWS S3 Table Bucket の画面](/images/Lakehouse/s3-table-bucket.png)
+
+ここでは、doris-s3-table-bucket という名前の Table Bucket を作成します。作成すると、その Table Bucket を表す ARN が得られます。
+
+![AWS S3 Table Bucket の作成画面](/images/Lakehouse/s3-table-bucket-create.png)
+
+### 02 Iceberg Catalog を作成する
+
+- AWS S3 Table REST Catalog を使用して `s3 tables` に接続する
+
+    ```sql
+    CREATE CATALOG aws_s3_tables PROPERTIES (
+        'type' = 'iceberg',
+        'iceberg.catalog.type' = 'rest',
+        'warehouse' = 'arn:aws:s3tables:us-east-1:<account_id>:bucket/<s3_table_bucket_name>',
+        'iceberg.rest.uri' = 'https://s3tables.us-east-1.amazonaws.com/iceberg',
+        'iceberg.rest.sigv4-enabled' = 'true',
+        'iceberg.rest.signing-name' = 's3tables',
+        'iceberg.rest.signing-region' = 'us-east-1',
+        'iceberg.rest.access-key-id' = '<ak>',
+        'iceberg.rest.secret-access-key' = '<sk>'
+    );
+    ```
+
+- Glue REST Catalog を使用して `s3 tables` に接続する 
+
+    ```sql
+    CREATE CATALOG glue_s3 PROPERTIES (
+        'type' = 'iceberg',
+        'iceberg.catalog.type' = 'rest',
+        'iceberg.rest.uri' = 'https://glue.<region>.amazonaws.com/iceberg',
+        'warehouse' = '<acount_id>:s3tablescatalog/<s3_table_bucket_name>',
+        'iceberg.rest.sigv4-enabled' = 'true',
+        'iceberg.rest.signing-name' = 'glue',
+        'iceberg.rest.access-key-id' = '<ak>',
+        'iceberg.rest.secret-access-key' = '<sk>',
+        'iceberg.rest.signing-region' = '<region>'
+    );
+    ```
+
+### 03 S3 Tables にアクセスする
+
+```sql
+Doris > SWITCH aws_s3_tables;
+
+Doris > SHOW DATABASES;
++--------------------+
+| Database           |
++--------------------+
+| information_schema |
+| my_namespace       |
+| mysql              |
++--------------------+
+
+Doris > USE my_namespace;
+
+Doris > SHOW TABLES;
++------------------------+
+| Tables_in_my_namespace |
++------------------------+
+| my_table               |
++------------------------+
+
+Doris > SELECT * FROM my_table;
++------+------+-------+
+| id   | name | value |
++------+------+-------+
+|    1 | ABC  |   100 |
+|    2 | XYZ  |   200 |
++------+------+-------+
+```
+
+### 04 S3 Tables のテーブルを作成してデータを書き込む
+
+```sql
+Doris > CREATE TABLE partition_table (
+    ->   `ts` DATETIME COMMENT 'ts',
+    ->   `id` INT COMMENT 'col1',
+    ->   `pt1` STRING COMMENT 'pt1',
+    ->   `pt2` STRING COMMENT 'pt2'
+    -> )
+    -> PARTITION BY LIST (day(ts), pt1, pt2) ();
+
+Doris > INSERT INTO partition_table VALUES
+    -> ("2024-01-01 08:00:00", 1000, "us-east", "PART1"),
+    -> ("2024-01-02 10:00:00", 1002, "us-sout", "PART2");
+Query OK, 2 rows affected
+{'status':'COMMITTED', 'txnId':'1736935786473'}
+
+Doris > SELECT * FROM partition_table;
++----------------------------+------+---------+-------+
+| ts                         | id   | pt1     | pt2   |
++----------------------------+------+---------+-------+
+| 2024-01-02 10:00:00.000000 | 1002 | us-sout | PART2 |
+| 2024-01-01 08:00:00.000000 | 1000 | us-east | PART1 |
++----------------------------+------+---------+-------+
+```
+
+### 05 タイムトラベル
+
+別のデータを追加した後、`$snapshots` システムテーブルを使用して Iceberg のスナップショットを確認できます。
+
+```sql
+Doris > INSERT INTO partition_table VALUES
+    -> ("2024-01-03 08:00:00", 1000, "us-east", "PART1"),
+    -> ("2024-01-04 10:00:00", 1002, "us-sout", "PART2");
+Query OK, 2 rows affected (9.76 sec)
+{'status':'COMMITTED', 'txnId':'1736935786474'}
+```
+
+```
+Doris > SELECT * FROM partition_table$snapshots\G
+*************************** 1. row ***************************
+ committed_at: 2025-01-15 23:27:01
+  snapshot_id: 6834769222601914216
+    parent_id: -1
+    operation: append
+manifest_list: s3://80afcb3f-6edf-46f2-7fhehwj6cengfwc7n6iz7ipzakd7quse1b--table-s3/metadata/snap-6834769222601914216-1-a6b2230d-fc0d-4c1d-8f20-94bb798f27b1.avro
+      summary: {"added-data-files":"2","added-records":"2","added-files-size":"5152","changed-partition-count":"2","total-records":"2","total-files-size":"5152","total-data-files":"2","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0","iceberg-version":"Apache Iceberg 1.6.1 (commit 8e9d59d299be42b0bca9461457cd1e95dbaad086)"}
+*************************** 2. row ***************************
+ committed_at: 2025-01-15 23:30:00
+  snapshot_id: 5670090782912867298
+    parent_id: 6834769222601914216
+    operation: append
+manifest_list: s3://80afcb3f-6edf-46f2-7fhehwj6cengfwc7n6iz7ipzakd7quse1b--table-s3/metadata/snap-5670090782912867298-1-beeed339-be96-4710-858b-f39bb01cc3ff.avro
+      summary: {"added-data-files":"2","added-records":"2","added-files-size":"5152","changed-partition-count":"2","total-records":"4","total-files-size":"10304","total-data-files":"4","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0","iceberg-version":"Apache Iceberg 1.6.1 (commit 8e9d59d299be42b0bca9461457cd1e95dbaad086)"}
+```
+
+`VERSION AS OF` 構文を使用すると、異なるスナップショットをクエリできます。
+
+```sql
+Doris > SELECT * FROM partition_table FOR VERSION AS OF 5670090782912867298;
++----------------------------+------+---------+-------+
+| ts                         | id   | pt1     | pt2   |
++----------------------------+------+---------+-------+
+| 2024-01-04 10:00:00.000000 | 1002 | us-sout | PART2 |
+| 2024-01-03 08:00:00.000000 | 1000 | us-east | PART1 |
+| 2024-01-01 08:00:00.000000 | 1000 | us-east | PART1 |
+| 2024-01-02 10:00:00.000000 | 1002 | us-sout | PART2 |
++----------------------------+------+---------+-------+
+
+Doris > SELECT * FROM partition_table FOR VERSION AS OF 6834769222601914216;
++----------------------------+------+---------+-------+
+| ts                         | id   | pt1     | pt2   |
++----------------------------+------+---------+-------+
+| 2024-01-02 10:00:00.000000 | 1002 | us-sout | PART2 |
+| 2024-01-01 08:00:00.000000 | 1000 | us-east | PART1 |
++----------------------------+------+---------+-------+
+```
+
+### 06 EMR Spark から S3 Tables にアクセスする
+
+Doris で書き込んだデータには、Spark からもアクセスできます。
+
+```shell
+spark-shell --jars /usr/share/aws/iceberg/lib//iceberg-spark-runtime-3.5_2.12-1.6.1-amzn-1.jar \
+--packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.3 \
+--conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog \
+--conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog \
+--conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:us-east-1:169698000000:bucket/doris-s3-table-bucket \
+--conf spark.sql.defaultCatalog=s3tablesbucket \
+--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
+```
+
+```sql
+scala> spark.sql("SELECT * FROM s3tablesbucket.my_namespace.`partition_table` ").show()
++-------------------+----+-------+-----+
+|                 ts|  id|    pt1|  pt2|
++-------------------+----+-------+-----+
+|2024-01-02 10:00:00|1002|us-sout|PART2|
+|2024-01-01 08:00:00|1000|us-east|PART1|
+|2024-01-04 10:00:00|1002|us-sout|PART2|
+|2024-01-03 08:00:00|1000|us-east|PART1|
++-------------------+----+-------+-----+
+```
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-iceberg.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-iceberg.md
new file mode 100644
index 00000000000..1c771bc29e2
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-iceberg.md
@@ -0,0 +1,120 @@
+---
+{
+    "title": "Alibaba Cloud DLF REST Catalog との連携",
+    "language": "ja",
+    "description": "この記事では、Apache Doris と Alibaba Cloud DLF(Data Lake Formation)REST Catalog を連携し、Iceberg テーブルのデータにシームレスにアクセスして分析する方法を説明します。Catalog の作成、データのクエリ、増分読み取りの手順を含みます。"
+}
+---
+
+Alibaba Cloud の [Data Lake Formation(DLF)](https://cn.aliyun.com/product/bigdata/dlf) は、クラウドネイティブなデータレイクアーキテクチャの中核コンポーネントとして、クラウドネイティブなデータレイクソリューションを迅速に構築するのに役立ちます。DLF はデータレイク上のメタデータの一元管理、企業レベルの権限管理、複数の計算エンジンとのシームレスな連携を提供し、データサイロを解消してビジネスに役立つ知見を得られるようにします。
+
+- メタデータとストレージの一元管理
+
+    ビッグデータ計算エンジンが同じデータレイクのメタデータとストレージを共有し、データレイク関連製品間でデータをシームレスにやり取りできます。
+
+- 権限の一元管理
+
+    ビッグデータ計算エンジンが同じデータレイクテーブルの権限設定を共有するため、一度設定すれば全体に適用されます。
+
+- ストレージの最適化
+
+    小さなファイルの統合、期限切れのスナップショットの削除、パーティションの再編成、不要になったファイルの削除などの最適化手法により、ストレージ効率を向上させます。
+
+- 幅広いクラウドエコシステムのサポート
+
+    ストリーミングおよびバッチ処理エンジンを含む Alibaba Cloud 製品と緊密に連携し、すぐに使える機能と優れたユーザー体験を提供します。
+
+Doris はバージョン 4.1.0 以降、DLF Iceberg REST Catalog との連携をサポートしており、DLF にシームレスに接続して Iceberg テーブルのデータにアクセスし、分析できます。この記事では、Apache Doris を DLF に接続し、Iceberg テーブルのデータにアクセスする方法を示します。
+
+:::tip
+この機能は Doris バージョン 4.1.0 以降でサポートされています。
+:::
+
+## 利用ガイド
+
+### 01 DLF サービスの有効化
+
+DLF の公式ドキュメントを参照して DLF サービスを有効化し、対応する Catalog、Database、Table を作成してください。
+
+### 02 EMR Spark SQL を使用した DLF へのアクセス
+
+- 接続
+
+    ```shell
+    spark-sql --master yarn \
+        --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
+        --conf spark.sql.catalog.iceberg=org.apache.iceberg.spark.SparkCatalog \
+        --conf spark.sql.catalog.iceberg.catalog-impl=org.apache.iceberg.rest.RESTCatalog \
+        --conf spark.sql.catalog.iceberg.uri=http://<region>-vpc.dlf.aliyuncs.com/iceberg \
+        --conf spark.sql.catalog.iceberg.warehouse=<your-catalog-name> \
+        --conf spark.sql.catalog.iceberg.credential=<ak>:<sk>
+    ```
+
+    > 該当する `<region>`、`warehouse`、`<ak>`、`<sk>` を置き換えてください。
+
+- データの書き込み
+
+    ```sql
+    USE iceberg.<your-catalog-name>;
+
+    CREATE TABLE users_samples
+    (
+        user_id INT,             
+        age_level STRING,           
+        final_gender_code STRING,    
+        clk BOOLEAN
+    ) USING iceberg;
+
+    INSERT INTO users_samples VALUES
+    (1, '25-34', 'M', true),
+    (2, '18-24', 'F', false);
+
+    INSERT INTO users_samples VALUES
+    (3, '25-34', 'M', true),
+    (4, '18-24', 'F', false);
+
+    INSERT INTO users_samples VALUES
+    (5, '25-34', 'M', true),
+    (6, '18-24', 'F', false);
+    ```
+
+### 03 Doris を使用した DLF への接続
+
+- Iceberg Catalog の作成
+
+    ```sql
+    CREATE CATALOG ice PROPERTIES (
+        'type' = 'iceberg',
+        'iceberg.catalog.type' = 'rest',
+        'iceberg.rest.uri' = 'http://<region>-vpc.dlf.aliyuncs.com/iceberg',
+        'warehouse' = '<your-catalog-name>',
+        'iceberg.rest.sigv4-enabled' = 'true',
+        'iceberg.rest.signing-name' = 'DlfNext',
+        'iceberg.rest.access-key-id' = '<ak>',
+        'iceberg.rest.secret-access-key' = '<sk>',
+        'iceberg.rest.signing-region' = '<region>',
+        'iceberg.rest.vended-credentials-enabled' = 'true',
+        'io-impl' = 'org.apache.iceberg.rest.DlfFileIO',
+        'fs.oss.support' = 'true'
+    );
+    ```
+
+    - Doris は DLF から返される一時的な認証情報を使用して OSS オブジェクトストレージにアクセスするため、OSS の認証情報を追加で設定する必要はありません。
+    - DLF には同じ VPC 内からのみアクセスできます。正しい URI アドレスを指定してください。
+    - DLF Iceberg REST Catalog では SigV4 署名を有効にし、DLF 固有の署名名 `DlfNext` を指定する必要があります。
+
+- データのクエリ
+
+    ```sql
+    SELECT * FROM users_samples ORDER BY user_id;
+    +---------+-----------+-------------------+------+
+    | user_id | age_level | final_gender_code | clk  |
+    +---------+-----------+-------------------+------+
+    |       1 | 25-34     | M                 |    1 |
+    |       2 | 18-24     | F                 |    0 |
+    |       3 | 25-34     | M                 |    1 |
+    |       4 | 18-24     | F                 |    0 |
+    |       5 | 25-34     | M                 |    1 |
+    |       6 | 18-24     | F                 |    0 |
+    +---------+-----------+-------------------+------+
+    ```
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-paimon.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-paimon.md
new file mode 100644
index 00000000000..6ae43d99b85
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-dlf-paimon.md
@@ -0,0 +1,150 @@
+---
+{
+    "title": "Alibaba Cloud DLF Rest Catalog との連携",
+    "language": "ja",
+    "description": "Apache Doris を Alibaba Cloud DLF(Data Lake Formation)Rest Catalog と連携し、Paimon テーブルのデータにアクセスして分析する方法を説明します。Catalog の作成、データのクエリ、増分読み取りについても取り上げます。"
+}
+---
+
+Alibaba Cloud の [Data Lake Formation(DLF)](https://cn.aliyun.com/product/bigdata/dlf) は、クラウドネイティブなデータレイクアーキテクチャの中核となるコンポーネントで、クラウドネイティブなデータレイクソリューションを迅速に構築するのに役立ちます。DLF は、データレイク上のメタデータの一元管理、企業向けの権限制御、複数のコンピュートエンジンとのシームレスな連携を提供し、データサイロを解消してビジネス上の知見を得られるようにします。
+
+- メタデータとストレージの一元化
+
+    ビッグデータ処理エンジン間でデータレイクのメタデータとストレージを共有し、データレイク関連製品間でデータをシームレスにやり取りできます。
+
+- 権限管理の一元化
+
+    ビッグデータ処理エンジン間でデータレイクのテーブル権限設定を共有できるため、一度の設定で全体に適用できます。
+
+- ストレージの最適化
+
+    小さなファイルのコンパクション、期限切れスナップショットのクリーンアップ、パーティションの再編成、不要ファイルのクリーンアップなどの最適化手法により、ストレージ効率を向上させます。
+
+- 幅広いクラウドエコシステムへの対応
+
+    ストリーミングおよびバッチ処理エンジンを含む Alibaba Cloud 製品と深く連携し、すぐに使える機能と優れたユーザー体験を提供します。
+
+DLF はバージョン 2.5 以降で Paimon Rest Catalog をサポートしています。Doris はバージョン 3.0.3/3.1.0 以降で DLF 2.5+ の Paimon Rest Catalog との連携をサポートし、DLF に接続して Paimon テーブルのデータにアクセスし、分析できます。この記事では、Apache Doris を DLF 2.5+ に接続し、Paimon テーブルのデータにアクセスする方法を示します。
+
+:::tip
+この機能は Doris バージョン 3.0.3/3.1.0 以降でサポートされています。
+:::
+
+## 利用ガイド
+
+### 01 DLF サービスを有効化する
+
+DLF の公式ドキュメントを参照して DLF サービスを有効化し、対応する Catalog、Database、Table を作成してください。
+
+### 02 EMR Spark SQL を使用して DLF にアクセスする
+
+- 接続する
+
+    ```sql
+    spark-sql --master yarn \
+        --conf spark.driver.memory=5g \
+        --conf spark.sql.defaultCatalog=paimon \
+        --conf spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog \
+        --conf spark.sql.catalog.paimon.metastore=rest \
+        --conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions \
+        --conf spark.sql.catalog.paimon.uri=http://<region>-vpc.dlf.aliyuncs.com \
+        --conf spark.sql.catalog.paimon.warehouse=<your-catalog-name> \
+        --conf spark.sql.catalog.paimon.token.provider=dlf \
+        --conf spark.sql.catalog.paimon.dlf.token-loader=ecs
+    ```
+
+    > `warehouse` と `uri` の値を、使用する環境に合わせて置き換えてください。
+
+- データを書き込む
+
+    ```sql
+    USE <your-catalog-name>;
+
+    CREATE TABLE users_samples
+    (
+        user_id INT,             
+        age_level STRING,           
+        final_gender_code STRING,    
+        clk BOOLEAN
+    );
+
+    INSERT INTO users_samples VALUES
+    (1, '25-34', 'M', true),
+    (2, '18-24', 'F', false);
+
+    INSERT INTO users_samples VALUES
+    (3, '25-34', 'M', true),
+    (4, '18-24', 'F', false);
+
+    INSERT INTO users_samples VALUES
+    (5, '25-34', 'M', true),
+    (6, '18-24', 'F', false);
+    ```
+
+    次のエラーが発生した場合は、`paimon-jindo-x.y.z.jar` を `/opt/apps/PAIMON/paimon-dlf-2.5/lib/spark3` から削除し、Spark サービスを再起動してから、もう一度試してください。
+
+    ```
+    Ambiguous FileIO classes are:
+    org.apache.paimon.jindo.JindoLoader
+    org.apache.paimon.oss.OSSLoader
+    ```
+
+### 03 Doris を使用して DLF に接続する
+
+- Paimon Catalog を作成する
+
+    ```sql
+    CREATE CATALOG paimon_dlf_test PROPERTIES (
+        'type' = 'paimon',
+        'paimon.catalog.type' = 'rest',
+        'uri' = 'http://<region>-vpc.dlf.aliyuncs.com',
+        'warehouse' = '<your-catalog-name>',
+        'paimon.rest.token.provider' = 'dlf',
+        'paimon.rest.dlf.access-key-id' = '<ak>',
+        'paimon.rest.dlf.access-key-secret' = '<sk>'
+    );
+    ```
+
+    - Doris は DLF から返される一時的な認証情報を使用して OSS オブジェクトストレージにアクセスするため、OSS の認証情報を追加で設定する必要はありません。
+    - DLF には同じ VPC 内からのみアクセスできます。正しい URI アドレスを指定してください。
+
+- データをクエリする
+
+    ```sql
+    SELECT * FROM users_samples ORDER BY user_id;
+    +---------+-----------+-------------------+------+
+    | user_id | age_level | final_gender_code | clk  |
+    +---------+-----------+-------------------+------+
+    |       1 | 25-34     | M                 |    1 |
+    |       2 | 18-24     | F                 |    0 |
+    |       3 | 25-34     | M                 |    1 |
+    |       4 | 18-24     | F                 |    0 |
+    |       5 | 25-34     | M                 |    1 |
+    |       6 | 18-24     | F                 |    0 |
+    +---------+-----------+-------------------+------+
+    ```
+
+- システムテーブルをクエリする
+
+    ```sql
+    SELECT snapshot_id, commit_time, total_record_count FROM users_samples$snapshots;
+    +-------------+-------------------------+--------------------+
+    | snapshot_id | commit_time             | total_record_count |
+    +-------------+-------------------------+--------------------+
+    |           1 | 2025-08-09 05:56:02.906 |                  2 |
+    |           2 | 2025-08-13 03:41:32.732 |                  4 |
+    |           3 | 2025-08-13 03:41:35.218 |                  6 |
+    +-------------+-------------------------+--------------------+
+    ```
+
+- 増分読み取りを行う
+
+    ```sql
+    SELECT * FROM users_samples@incr('startSnapshotId'=1, 'endSnapshotId'=2) ORDER BY user_id;
+    +---------+-----------+-------------------+------+
+    | user_id | age_level | final_gender_code | clk  |
+    +---------+-----------+-------------------+------+
+    |       3 | 25-34     | M                 |    1 |
+    |       4 | 18-24     | F                 |    0 |
+    +---------+-----------+-------------------+------+
+    ```
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-gravitino.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-gravitino.md
new file mode 100644
index 00000000000..d66733369cf
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-gravitino.md
@@ -0,0 +1,307 @@
+---
+{
+    "title": "Apache Gravitino との連携",
+    "language": "ja",
+    "description": "データレイク技術の急速な発展に伴い、統一された安全な、"
+}
+---
+
+データレイク技術の急速な発展に伴い、統一性、安全性、効率性を備えたレイクハウスアーキテクチャの構築は、企業のデジタルトランスフォーメーションにおける重要な課題となっています。次世代の統合メタデータ管理プラットフォームである Apache Gravitino は、マルチクラウドおよびマルチエンジン環境におけるデータガバナンスのための包括的なソリューションを提供します。さまざまなデータソースやコンピューティングエンジンを一元管理できるだけでなく、認証情報の払い出しの仕組みによって、データアクセスの安全性と制御可能性も確保します。
+
+この記事では、Apache Doris と Apache Gravitino を連携させ、Iceberg REST Catalog に基づく最新のレイクハウスアーキテクチャを構築する方法を詳しく説明します。Gravitino の統合メタデータ管理機能と認証情報の動的な配布機能を利用することで、S3 上の Iceberg データに効率的かつ安全にアクセスできます。
+
+**このドキュメントでは、次の内容を確認できます。**
+
+* **AWS 環境の準備**: AWS で S3 バケットと IAM ロールを作成し、Gravitino 向けの安全な認証情報管理システムを設定して、一時的な認証情報を動的に配布する方法。
+
+* **Gravitino のデプロイと設定**: Gravitino サービスを迅速にデプロイし、Iceberg REST Catalog を設定して、認証情報の払い出し機能を有効にする方法。
+
+* **Doris から Gravitino への接続**: Doris が Gravitino の REST API を介して Iceberg データにアクセスする方法の詳細。
+
+## 実践ガイド
+
+### 1. AWS 環境の準備
+
+始める前に、S3 バケットと適切に設計された IAM ロールの仕組みを含む AWS インフラストラクチャを準備します。これは、安全で信頼性の高いレイクハウスアーキテクチャを構築するための基盤です。
+
+### 1.1 S3 バケットの作成
+
+まず、Iceberg データを保存する専用の S3 バケットを作成します。
+
+```bash
+# Create S3 bucket
+aws s3 mb s3://gravitino-iceberg-demo --region us-west-2
+# Verify bucket creation success
+aws s3 ls | grep gravitino-iceberg-demo
+```
+
+### 1.2 IAM ロール構成の設計
+
+認証情報を安全に管理するため、Gravitino が STS AssumeRole の仕組みを通じて使用する IAM ロールを作成します。この設計は、最小権限と職務分離というセキュリティ上のベストプラクティスに従っています。
+
+**データアクセス用ロールの作成**
+
+1. 信頼ポリシーファイルの作成
+
+   `gravitino-trust-policy.json` ファイルを作成します。
+
+   ```json
+   {
+       "Version": "2012-10-17",
+       "Statement": [
+           {
+               "Effect": "Allow",
+               "Principal": {
+                   "AWS": [
+                       "arn:aws:iam::YOUR_ACCOUNT_ID:root"
+                   ]
+               },
+               "Action": "sts:AssumeRole"
+           }
+       ]
+   }
+   ```
+
+2. IAM ロールの作成
+
+   この例では簡潔にするため、AWS のマネージドポリシーをそのまま使用します。本番環境では、より細かく権限を制御してください。
+
+   ```bash
+   # Create IAM role
+   aws iam create-role \
+       --role-name gravitino-iceberg-access \
+       --assume-role-policy-document file://gravitino-trust-policy.json \
+       --description "Gravitino Iceberg data access role"
+
+   # Attach S3 full access permissions (for testing, use fine-grained permissions in production)
+   aws iam attach-role-policy \
+       --role-name gravitino-iceberg-access \
+       --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
+   ```
+
+3. IAM 設定の確認
+
+    ロールの設定が正しいことを確認します。
+
+    ```bash
+    # Test role assumption functionality
+    aws sts assume-role \
+        --role-arn arn:aws:iam::YOUR_ACCOUNT_ID:role/gravitino-iceberg-access \
+        --role-session-name gravitino-test
+    ```
+
+    成功した場合のレスポンス例:
+
+    ```json
+    {
+        "Credentials": {
+            "AccessKeyId": "ASIA***************",
+            "SecretAccessKey": "***************************",
+            "SessionToken": "IQoJb3JpZ2luX2VjEOj...",
+            "Expiration": "2025-07-23T08:33:30+00:00"
+        }
+    }
+    ```
+
+## 2. Gravitino のデプロイと設定
+
+### 2.1 Gravitino のダウンロードとインストール
+
+Gravitino のビルド済みパッケージを使用して、環境をすばやくセットアップします。
+
+```bash
+# Create working directory
+mkdir gravitino-deployment && cd gravitino-deployment
+
+# Download Gravitino main program
+wget https://github.com/apache/gravitino/releases/download/v0.9.1/gravitino-0.9.1-bin.tar.gz
+
+# Download Iceberg REST server component
+wget https://github.com/apache/gravitino/releases/download/v0.9.1/gravitino-iceberg-rest-server-0.9.1-bin.tar.gz
+
+# Extract and install
+tar -xzf gravitino-0.9.1-bin.tar.gz
+cd gravitino-0.9.1-bin
+tar -xzf ../gravitino-iceberg-rest-server-0.9.1-bin.tar.gz --strip-components=1
+```
+
+### 2.2 必要な依存パッケージのインストール
+
+AWS S3 と認証情報管理の機能を利用するには、追加の JAR パッケージをインストールする必要があります。
+
+```bash
+# Create necessary directory structure
+mkdir -p catalogs/lakehouse-iceberg/libs
+mkdir -p iceberg-rest-server/libs
+mkdir -p logs
+mkdir -p /tmp/gravitino
+
+# Download Iceberg AWS bundle
+wget https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-aws-bundle/1.6.1/iceberg-aws-bundle-1.6.1.jar \
+  -P catalogs/lakehouse-iceberg/libs/
+
+# Download Gravitino AWS support package (core for vended-credentials functionality)
+wget https://repo1.maven.org/maven2/org/apache/gravitino/gravitino-aws/0.9.1/gravitino-aws-0.9.1.jar \
+  -P iceberg-rest-server/libs/
+
+# Distribute JAR packages to various directories
+cp catalogs/lakehouse-iceberg/libs/iceberg-aws-bundle-1.6.1.jar iceberg-rest-server/libs/
+cp catalogs/lakehouse-iceberg/libs/iceberg-aws-bundle-1.6.1.jar libs/
+cp iceberg-rest-server/libs/gravitino-aws-0.9.1.jar libs/
+```
+
+### 2.3 Gravitino サービスの設定
+
+1. メインサービスの設定
+
+    `conf/gravitino.conf` ファイルを作成または編集します。
+
+    ```properties
+    # Gravitino server basic configuration
+    gravitino.server.webserver.host = 0.0.0.0
+    gravitino.server.webserver.httpPort = 8090
+
+    # Metadata store configuration (PostgreSQL/MySQL recommended for production)
+    gravitino.entity.store = relational
+    gravitino.entity.store.relational = JDBCBackend
+    gravitino.entity.store.relational.jdbcUrl = jdbc:h2:file:/tmp/gravitino/gravitino.db;DB_CLOSE_DELAY=-1;MODE=MYSQL
+    gravitino.entity.store.relational.jdbcDriver = org.h2.Driver
+    gravitino.entity.store.relational.jdbcUser = gravitino
+    gravitino.entity.store.relational.jdbcPassword = gravitino
+
+    # Enable Iceberg REST service
+    gravitino.auxService.names = iceberg-rest
+
+    # Iceberg REST service detailed configuration
+    gravitino.iceberg-rest.classpath = iceberg-rest-server/libs, iceberg-rest-server/conf
+    gravitino.iceberg-rest.host = 0.0.0.0
+    gravitino.iceberg-rest.httpPort = 9001
+
+    # Iceberg catalog backend configuration
+    gravitino.iceberg-rest.catalog-backend = jdbc
+    gravitino.iceberg-rest.uri = jdbc:h2:file:/tmp/gravitino/catalog_iceberg.db;DB_CLOSE_DELAY=-1;MODE=MYSQL
+    gravitino.iceberg-rest.jdbc-driver = org.h2.Driver
+    gravitino.iceberg-rest.jdbc-user = iceberg
+    gravitino.iceberg-rest.jdbc-password = iceberg123
+    gravitino.iceberg-rest.jdbc-initialize = true
+    gravitino.iceberg-rest.warehouse = s3://gravitino-iceberg-demo/warehouse
+    gravitino.iceberg-rest.io-impl = org.apache.iceberg.aws.s3.S3FileIO
+    gravitino.iceberg-rest.s3-region = us-west-2
+
+    # Enable Vended-Credentials functionality
+    # Note: Gravitino uses these AK/SK to call STS AssumeRole and obtain temporary credentials for distribution to clients
+    gravitino.iceberg-rest.credential-providers = s3-token
+    gravitino.iceberg-rest.s3-access-key-id = YOUR_AWS_ACCESS_KEY_ID
+    gravitino.iceberg-rest.s3-secret-access-key = YOUR_AWS_SECRET_ACCESS_KEY
+    gravitino.iceberg-rest.s3-role-arn = arn:aws:iam::YOUR_ACCOUNT_ID:role/gravitino-iceberg-access
+    gravitino.iceberg-rest.s3-region = us-west-2
+    gravitino.iceberg-rest.s3-token-expire-in-secs = 3600
+    ```
+
+2. サービスの起動
+
+    ```bash
+    # Start Gravitino service
+    ./bin/gravitino.sh start
+
+    # Check service status
+    ./bin/gravitino.sh status
+
+    # View logs
+    tail -f logs/gravitino-server.log
+    ```
+
+3. サービスの状態の確認
+
+    ```bash
+    # Verify main service
+    curl -v http://localhost:8090/api/version
+
+    # Verify Iceberg REST service
+    curl -v http://localhost:9001/iceberg/v1/config
+    ```
+
+### 2.4 Gravitino のメタデータ構造の作成
+
+REST API を介して必要なメタデータ構造を作成します。
+
+```bash
+# Create MetaLake
+curl -X POST -H "Accept: application/vnd.gravitino.v1+json" \
+  -H "Content-Type: application/json" \
+  -d '{
+    "name": "lakehouse",
+    "comment": "Gravitino lakehouse for Doris integration",
+    "properties": {}
+  }' http://localhost:8090/api/metalakes
+
+# Create Iceberg Catalog
+curl -X POST -H "Accept: application/vnd.gravitino.v1+json" \
+  -H "Content-Type: application/json" \
+  -d '{
+    "name": "iceberg_catalog",
+    "type": "RELATIONAL",
+    "provider": "lakehouse-iceberg",
+    "comment": "Iceberg catalog with S3 storage and vended credentials",
+    "properties": {
+      "catalog-backend": "jdbc",
+      "uri": "jdbc:h2:file:/tmp/gravitino/catalog_iceberg.db;DB_CLOSE_DELAY=-1;MODE=MYSQL",
+      "jdbc-user": "iceberg",
+      "jdbc-password": "iceberg123",
+      "jdbc-driver": "org.h2.Driver",
+      "jdbc-initialize": "true",
+      "warehouse": "s3://gravitino-iceberg-demo/warehouse",
+      "io-impl": "org.apache.iceberg.aws.s3.S3FileIO",
+      "s3-region": "us-west-2"
+    }
+  }' http://localhost:8090/api/metalakes/lakehouse/catalogs
+```
+
+## 3. Doris から Gravitino への接続
+
+### 3.1 払い出された認証情報の使用
+
+Gravitino は一時的な認証情報を動的に生成し、Doris に配布します。
+
+```sql
+-- Create dynamic credential mode Catalog
+CREATE CATALOG gravitino_vending PROPERTIES (
+    'type' = 'iceberg',
+    'warehouse' = 'warehouse',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'http://127.0.0.1:9001/iceberg/',
+    'iceberg.rest.vended-credentials-enabled' = 'true'
+);
+```
+
+### 3.2 接続とデータ操作の確認
+
+```sql
+-- Verify connection
+SHOW DATABASES FROM gravitino_vending;
+
+-- Switch to vended credentials catalog
+SWITCH gravitino_vending;
+
+-- Create database and table
+CREATE DATABASE demo;
+USE gravitino_vending.demo;
+
+CREATE TABLE gravitino_table (
+    id INT,
+    name STRING
+)
+PROPERTIES (
+    'write-format' = 'parquet'
+);
+
+-- Insert test data
+INSERT INTO gravitino_table VALUES (1, 'Doris'), (2, 'Gravitino');
+
+-- Query verification
+SELECT * FROM gravitino_table;
+```
+
+## まとめ
+
+このガイドに従うことで、Gravitino と Doris に基づく最新のレイクハウスアーキテクチャを構築できます。このアーキテクチャは、高いパフォーマンスと可用性を提供するとともに、高度なセキュリティの仕組みによってデータアクセスの安全性とコンプライアンスを確保します。データ量の増加やビジネス要件の変化に応じて柔軟に拡張し、さまざまな企業のニーズに対応できます。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-hudi.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-hudi.md
new file mode 100644
index 00000000000..adfd7275727
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-hudi.md
@@ -0,0 +1,294 @@
+---
+{
+    "title": "Doris と Hudi の使用方法",
+    "language": "ja",
+    "description": "新しいオープンなデータ管理アーキテクチャであるデータレイクハウスは、データウェアハウスの高性能とリアルタイム処理能力を"
+}
+---
+
+新しいオープンなデータ管理アーキテクチャであるデータレイクハウスは、データウェアハウスの高性能とリアルタイム処理能力に、データレイクの低コストと柔軟性を組み合わせます。これにより、さまざまなデータ処理・分析のニーズに、より容易に対応できます。企業のビッグデータシステムでの採用も増えています。
+
+近年のバージョンで、Apache Doris はデータレイクとの連携を深め、成熟したデータレイクハウスソリューションへと発展してきました。
+
+- バージョン 0.15 から、Apache Doris は Hive と Iceberg の外部テーブルを導入し、データレイクにおける Apache Iceberg との連携を模索してきました。
+- バージョン 1.2 から、Apache Doris は Multi-Catalog 機能を正式に導入しました。これにより、さまざまなデータソースのメタデータを自動的にマッピングしてデータにアクセスできるようになり、外部データの読み取りやクエリ実行にも多くの性能改善が加わりました。高速で使いやすいレイクハウスアーキテクチャを構築できるようになっています。
+- バージョン 2.1 では、Apache Doris のデータレイクハウスアーキテクチャが大幅に強化されました。主要なデータレイク形式(Hudi、Iceberg、Paimon など)の読み書き能力が向上し、複数の SQL 方言との互換性が導入され、既存システムから Apache Doris への移行が容易になりました。また、データサイエンスや大規模なデータ読み取りのために、Doris は高速読み取りインターフェースの Arrow Flight を統合し、データ転送効率を 100 倍に高めました。
+
+![Doris と Hudi を使用したレイクハウスの構築](/images/lakehouse-architecture-for-doris-and-hudi.png)
+
+## Apache Doris と Hudi
+
+[Apache Hudi](https://hudi.apache.org/) は、現在広く利用されているオープンなデータレイク形式の一つであり、トランザクションに対応したデータレイク管理プラットフォームです。Apache Doris を含む、主要なクエリエンジンをサポートしています。
+
+Apache Doris は、Apache Hudi のデータテーブルを読み取る機能も強化しています。
+
+- Copy on Write テーブル:スナップショットクエリをサポート
+- Merge on Read テーブル:スナップショットクエリと読み取り最適化クエリをサポート
+- タイムトラベルをサポート
+- 増分読み取りをサポート
+
+Apache Doris の高性能なクエリ実行と Apache Hudi のリアルタイムデータ管理を組み合わせることで、効率的かつ柔軟に、低コストでデータを照会・分析できます。データリネージ、監査、増分処理の機能も利用できます。Apache Doris と Apache Hudi の組み合わせは、複数のコミュニティユーザーの実際の業務で検証・活用されています。
+
+- リアルタイムのデータ分析と処理:金融、広告、EC などでは、リアルタイムのデータ更新とクエリ分析が必要になることがよくあります。Hudi はデータの一貫性と信頼性を確保しながら、リアルタイムの更新と管理を可能にします。Doris は大規模なデータに対するクエリ要求をリアルタイムで効率的に処理し、両者の組み合わせでリアルタイム分析・処理の要件に対応します。
+- データリネージと監査:金融や医療など、データの安全性と正確性が強く求められる業界では、データリネージと監査が重要です。Hudi のタイムトラベル機能で過去のデータ状態を確認し、Apache Doris の効率的なクエリと組み合わせることで、任意の時点のデータを迅速に分析し、正確な追跡と監査に役立てられます。
+- 増分データの読み取りと分析:大規模データの分析では、データ量の多さや頻繁な更新が課題になります。Hudi は増分読み取りをサポートしており、データ全体を更新せずに変更分だけを処理できます。Apache Doris の増分読み取り機能もこの処理を強化し、データ処理と分析の効率を大幅に向上させます。
+- データソースをまたぐ連合クエリ:多くの企業では、複雑なデータが異なるデータベースに保存されています。Doris の Multi-Catalog 機能は、さまざまなデータソースの自動マッピングと同期をサポートし、データソースをまたぐ連合クエリを可能にします。複数のデータソースからデータを取得・統合して分析する企業では、データの移動経路を大幅に短縮し、作業効率を高められます。
+
+この記事では、Docker 環境で Apache Doris と Apache Hudi のテスト・デモ環境をすばやく構築する方法と、基本操作を紹介します。
+
+詳細については、[Hudi Catalog](../catalogs/hudi-catalog.md) を参照してください。
+
+## ユーザーガイド
+
+この記事で使用するすべてのスクリプトとコードは、[https://github.com/apache/doris/tree/master/samples/datalake/hudi](https://github.com/apache/doris/tree/master/samples/datalake/hudi) から入手できます。
+
+### 01 環境の準備
+
+この記事では、Docker Compose を使用して、次のコンポーネントとバージョンをデプロイします。
+
+| コンポーネント | バージョン |
+| --- | --- |
+| Apache Doris | デフォルトは 2.1.4。変更可能 |
+| Apache Hudi | 0.14 |
+| Apache Spark | 3.4.2 |
+| Apache Hive | 2.1.3 |
+| MinIO | 2022-05-26T05-48-41Z |
+
+### 02 環境のデプロイ
+
+1. Docker ネットワークを作成します。
+
+	`sudo docker network create -d bridge hudi-net`
+
+2. すべてのコンポーネントを起動します。
+
+	`sudo ./start-hudi-compose.sh`
+	
+	> 注:起動前に、`DORIS_PACKAGE` と `DORIS_DOWNLOAD_URL` を `start-hudi-compose.sh` 内で変更して、使用する Doris のバージョンを指定できます。バージョン 2.1.4 以降を推奨します。
+
+3. 起動後、次のスクリプトを使用して Spark または Doris のコマンドラインにログインできます。
+
+	```
+	-- Spark
+	sudo ./login-spark.sh
+	
+	-- Doris
+	sudo ./login-doris.sh
+	```
+
+### 03 データの準備
+
+次に、Spark を使用して Hudi データを生成します。以下のコードに示すように、クラスターには `customer` という Hive テーブルがすでに存在します。この Hive テーブルを使用して Hudi テーブルを作成できます。
+
+```
+-- ./login-spark.sh
+spark-sql> use default;
+
+-- create a COW table
+spark-sql> CREATE TABLE customer_cow
+USING hudi
+TBLPROPERTIES (
+  type = 'cow',
+  primaryKey = 'c_custkey',
+  preCombineField = 'c_name'
+)
+PARTITIONED BY (c_nationkey)
+AS SELECT * FROM customer;
+
+-- create a MOR table
+spark-sql> CREATE TABLE customer_mor
+USING hudi
+TBLPROPERTIES (
+  type = 'mor',
+  primaryKey = 'c_custkey',
+  preCombineField = 'c_name'
+)
+PARTITIONED BY (c_nationkey)
+AS SELECT * FROM customer;
+```
+
+### 04 データのクエリ
+
+以下のように、Doris クラスターには `hudi` という Catalog が作成済みです(`SHOW CATALOGS` で確認できます)。この Catalog の作成文は次のとおりです。
+
+```
+-- Already created, no need to execute again
+CREATE CATALOG `hudi` PROPERTIES (
+    "type"="hms",
+    'hive.metastore.uris' = 'thrift://hive-metastore:9083',
+    "s3.access_key" = "minio",
+    "s3.secret_key" = "minio123",
+    "s3.endpoint" = "http://minio:9000",
+    "s3.region" = "us-east-1",
+    "use_path_style" = "true"
+);
+```
+
+1. 作成した Hudi テーブルを同期するために、この Catalog を手動で更新します。
+
+	```
+	-- ./login-doris.sh
+	doris> REFRESH CATALOG hudi;
+	```
+
+2. Spark を使用した Hudi データへの操作は、Catalog を更新しなくても Doris にすぐに反映されます。Spark を使用して、COW テーブルと MOR テーブルの両方に一行ずつデータを挿入します。
+
+	```
+	spark-sql> insert into customer_cow values (100, "Customer#000000100", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 25);
+	spark-sql> insert into customer_mor values (100, "Customer#000000100", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 25);
+	```
+
+3. Doris から、新しく挿入したデータを直接クエリできます。
+
+	```
+	doris> use hudi.default;
+	doris> select * from customer_cow where c_custkey = 100;
+	doris> select * from customer_mor where c_custkey = 100;
+	```
+
+4. Spark を使用して、既存の c_custkey=32 のデータを挿入し、既存のデータを上書きします。
+
+	```
+	spark-sql> insert into customer_cow values (32, "Customer#000000032_update", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 15);
+	spark-sql> insert into customer_mor values (32, "Customer#000000032_update", "jD2xZzi", "25-430-914-2194", 3471.59, "BUILDING", "cial ideas. final, furious requests", 15);
+	```
+
+5. Doris で更新後のデータをクエリできます。
+
+	```
+	doris> select * from customer_cow where c_custkey = 32;
+	+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+	| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
+	+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+	|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
+	+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+	doris> select * from customer_mor where c_custkey = 32;
+	+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+	| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
+	+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+	|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
+	+-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+	```
+
+### 05 増分読み取り
+
+増分読み取りは、Hudi が提供する機能の一つです。指定した期間内の増分データを取得し、データを増分処理できます。ここでは、`c_custkey=100` を挿入した後の変更データを Doris でクエリできます。以下に示すように、`c_custkey=32` のデータを挿入しました。
+
+```
+doris> select * from customer_cow@incr('beginTime'='20240603015018572');
++-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
++-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
++-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+spark-sql> select * from hudi_table_changes('customer_cow', 'latest_state', '20240603015018572');
+
+doris> select * from customer_mor@incr('beginTime'='20240603015058442');
++-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+| c_custkey | c_name                    | c_address | c_phone         | c_acctbal | c_mktsegment | c_comment                           | c_nationkey |
++-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+|        32 | Customer#000000032_update | jD2xZzi   | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests |          15 |
++-----------+---------------------------+-----------+-----------------+-----------+--------------+-------------------------------------+-------------+
+spark-sql> select * from hudi_table_changes('customer_mor', 'latest_state', '20240603015058442');
+```
+
+### 06 タイムトラベル
+
+Doris は、Hudi データの特定のスナップショットバージョンをクエリでき、タイムトラベル機能を利用できます。まず、Spark を使用して二つの Hudi テーブルのコミット履歴を確認します。
+
+```
+spark-sql> call show_commits(table => 'customer_cow', limit => 10);
+20240603033556094        20240603033558249        commit        448833        0        1        1        183        0        0
+20240603015444737        20240603015446588        commit        450238        0        1        1        202        1        0
+20240603015018572        20240603015020503        commit        436692        1        0        1        1        0        0
+20240603013858098        20240603013907467        commit        44902033        100        0        25        18751        0        0
+
+spark-sql> call show_commits(table => 'customer_mor', limit => 10);
+20240603033745977        20240603033748021        deltacommit        1240        0        1        1        0        0        0
+20240603015451860        20240603015453539        deltacommit        1434        0        1        1        1        1        0
+20240603015058442        20240603015100120        deltacommit        436691        1        0        1        1        0        0
+20240603013918515        20240603013922961        deltacommit        44904040        100        0        25        18751        0        0
+```
+
+次に、Doris で `c_custkey=32` を条件にして、既存のデータを上書きする前のスナップショットをクエリします。以下のように、`c_custkey=32` のデータはまだ更新されていません。
+
+> 注:現在、新しいオプティマイザーはタイムトラベル構文をサポートしていません。先に `set enable_nereids_planner=false;` を実行して新しいオプティマイザーを無効にする必要があります。この問題は将来のバージョンで修正される予定です。
+
+```
+doris> select * from customer_cow for time as of '20240603015018572' where c_custkey = 32 or c_custkey = 100;
++-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
+| c_custkey | c_name             | c_address                             | c_phone         | c_acctbal | c_mktsegment | c_comment                                        | c_nationkey |
++-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
+|        32 | Customer#000000032 | jD2xZzi UmId,DCtNBLXKj9q0Tlp2iQ6ZcO3J | 25-430-914-2194 |   3471.53 | BUILDING     | cial ideas. final, furious requests across the e |          15 |
+|       100 | Customer#000000100 | jD2xZzi                               | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests              |          25 |
++-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
+-- compare with spark-sql
+spark-sql> select * from customer_mor timestamp as of '20240603015018572' where c_custkey = 32 or c_custkey = 100;
+
+doris> select * from customer_mor for time as of '20240603015058442' where c_custkey = 32 or c_custkey = 100;
++-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
+| c_custkey | c_name             | c_address                             | c_phone         | c_acctbal | c_mktsegment | c_comment                                        | c_nationkey |
++-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
+|       100 | Customer#000000100 | jD2xZzi                               | 25-430-914-2194 |   3471.59 | BUILDING     | cial ideas. final, furious requests              |          25 |
+|        32 | Customer#000000032 | jD2xZzi UmId,DCtNBLXKj9q0Tlp2iQ6ZcO3J | 25-430-914-2194 |   3471.53 | BUILDING     | cial ideas. final, furious requests across the e |          15 |
++-----------+--------------------+---------------------------------------+-----------------+-----------+--------------+--------------------------------------------------+-------------+
+spark-sql> select * from customer_mor timestamp as of '20240603015058442' where c_custkey = 32 or c_custkey = 100;
+```
+
+## クエリの最適化
+
+Apache Hudi のデータは、大きくベースデータと増分データの二種類に分けられます。ベースデータは通常、マージ済みの Parquet ファイルです。増分データは、INSERT、UPDATE、DELETE 操作によって生成された変更分を指します。ベースデータは直接読み取れますが、増分データの読み取りには Merge on Read が必要です。
+
+Hudi の COW テーブルへのクエリや MOR テーブルへの読み取り最適化クエリでは、対象はベースデータであり、Doris のネイティブ Parquet Reader で直接読み取ることで、すばやく応答できます。増分データについては、Doris は JNI 呼び出しを介して Hudi の Java SDK にアクセスする必要があります。Apache Doris はクエリ対象のデータをベースデータと増分データに分け、それぞれに前述の読み取り方法を適用してクエリ性能を最適化します。
+
+この最適化を確認するには、以下の例で EXPLAIN 文を使用し、クエリに含まれるベースデータと増分データの割合を確認します。COW テーブルでは、101 個のデータ分割がすべてベースデータ(`hudiNativeReadSplits=101/101`)のため、Doris の Parquet Reader でテーブル全体を直接読み取ることができ、最も高いクエリ性能が得られます。MOR テーブルでは、ほとんどのデータ分割がベースデータ(`hudiNativeReadSplits=100/101`)で、一つが増分データです。この場合も良好なクエリ性能が得られます。
+
+```
+-- COW table is read natively
+doris> explain select * from customer_cow where c_custkey = 32;
+|   0:VHUDI_SCAN_NODE(68)                                        |
+|      table: customer_cow                                       |
+|      predicates: (c_custkey[#5] = 32)                          |
+|      inputSplitNum=101, totalFileSize=45338886, scanRanges=101 |
+|      partition=26/26                                           |
+|      cardinality=1, numNodes=1                                 |
+|      pushdown agg=NONE                                         |
+|      hudiNativeReadSplits=101/101                              |
+
+-- MOR table: because only the base file contains `c_custkey = 32` that is updated, 100 splits are read natively, while the split with log file is read by JNI.
+doris> explain select * from customer_mor where c_custkey = 32;
+|   0:VHUDI_SCAN_NODE(68)                                        |
+|      table: customer_mor                                       |
+|      predicates: (c_custkey[#5] = 32)                          |
+|      inputSplitNum=101, totalFileSize=45340731, scanRanges=101 |
+|      partition=26/26                                           |
+|      cardinality=1, numNodes=1                                 |
+|      pushdown agg=NONE                                         |
+|      hudiNativeReadSplits=100/101                              |
+```
+
+さらに、Spark で削除操作を実行すると、Hudi のベースデータと増分データの変化を確認できます。
+
+```
+-- Use delete statement to see more differences
+spark-sql> delete from customer_cow where c_custkey = 64;
+doris> explain select * from customer_cow where c_custkey = 64;
+
+spark-sql> delete from customer_mor where c_custkey = 64;
+doris> explain select * from customer_mor where c_custkey = 64;
+```
+
+また、パーティション条件によるパーティションプルーニングで読み取るデータ量を減らし、クエリを高速化できます。以下の例では、パーティション条件 `c_nationkey=15` を使用してパーティションプルーニングを行い、クエリが一つのパーティション(`partition=1/26`)のデータだけにアクセスするようにします。
+
+```
+-- customer_xxx is partitioned by c_nationkey, we can use the partition column to prune data
+doris> explain select * from customer_mor where c_custkey = 64 and c_nationkey = 15;
+|   0:VHUDI_SCAN_NODE(68)                                        |
+|      table: customer_mor                                       |
+|      predicates: (c_custkey[#5] = 64), (c_nationkey[#12] = 15) |
+|      inputSplitNum=4, totalFileSize=1798186, scanRanges=4      |
+|      partition=1/26                                            |
+|      cardinality=1, numNodes=1                                 |
+|      pushdown agg=NONE                                         |
+|      hudiNativeReadSplits=3/4                                  |
+```
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg-capability-matrix.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg-capability-matrix.mdx
new file mode 100644
index 00000000000..ac32d79c655
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg-capability-matrix.mdx
@@ -0,0 +1,878 @@
+---
+{
+    "title": "Iceberg Catalog の機能対応表",
+    "language": "ja",
+    "description": "Apache Doris がサポートする Iceberg Catalog バックエンドの機能対応表。"
+}
+---
+
+以下の表は、Doris で現在利用できる Iceberg Catalog の機能をまとめたものです。行は機能分野ごとに分類され、バックエンドの各列は、Doris が対応するメタデータサービスを使用する場合に各操作を利用できるかどうかを示します。✅ は Doris がその操作をサポートしていることを、❌ は現在サポートしていないことを示します。
+
+<table>
+  <thead>
+    <tr>
+      <th>機能カテゴリ</th>
+      <th>操作</th>
+      <th>REST</th>
+      <th>HMS</th>
+      <th>Hadoop</th>
+      <th>Glue</th>
+      <th>DLF</th>
+      <th>S3 Tables</th>
+      <th>JDBC</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td rowSpan={8}>名前空間 / データベース</td>
+      <td><code>LIST_NAMESPACES</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>LOAD_NAMESPACE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>NAMESPACE_EXISTS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_NAMESPACE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_NAMESPACE_PROPERTIES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>DROP_NAMESPACE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DROP_NAMESPACE_CASCADE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>MULTILEVEL_NAMESPACE</code></td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={13}>テーブルのライフサイクル</td>
+      <td><code>LIST_TABLES</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>LOAD_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>TABLE_EXISTS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_TABLE_WITH_LOCATION</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>CTAS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ATOMIC_CTAS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REGISTER_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REPLACE_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>DROP_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>PURGE_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>RENAME_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>SET_TABLE_LOCATION</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={9}>スキーマとレイアウトの変更</td>
+      <td><code>ADD_COLUMN</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DROP_COLUMN</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>RENAME_COLUMN</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_COLUMN_TYPE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_COLUMN_NULLABILITY</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>SET_TABLE_PROPERTIES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>UNSET_TABLE_PROPERTIES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>EVOLVE_PARTITION_SPEC</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>EVOLVE_SORT_ORDER</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={8}>ビュー</td>
+      <td><code>LIST_VIEWS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>LOAD_VIEW</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>READ_VIEW</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REPLACE_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>RENAME_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>DROP_VIEW</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td rowSpan={11}>データの書き込み</td>
+      <td><code>APPEND</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>OVERWRITE_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>OVERWRITE_PARTITION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DYNAMIC_PARTITION_OVERWRITE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>UPDATE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DELETE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>MERGE_INTO</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>UPSERT</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>PARTIAL_UPDATE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>WRITE_TO_BRANCH</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>SCHEMA_EVOLUTION_ON_WRITE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={12}>トランザクションと同時実行</td>
+      <td><code>ATOMIC_SINGLE_TABLE_COMMIT</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>MULTI_TABLE_COMMIT</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>STAGED_CREATE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>OPTIMISTIC_CONCURRENCY</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_CONFLICT_DETECTION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_RETRY</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_IDEMPOTENCY</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_STATUS_RECOVERY</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>LOCK_REQUIRED</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>LOCK_CONFIGURED</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>SERIALIZABLE_ISOLATION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>FAILED_WRITE_CLEANUP</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={10}>ブランチ / タグ</td>
+      <td><code>BRANCH_CREATE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>BRANCH_DROP</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>READ_BY_BRANCH</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>BRANCH_WRITE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>BRANCH_FAST_FORWARD</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>TAG_CREATE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>TAG_DROP</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>READ_BY_TAG</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>TAG_WRITE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>TAG_FAST_FORWARD</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={4}>スナップショット</td>
+      <td><code>READ_BY_VERSION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>READ_BY_TIME</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ROLLBACK</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>EXPIRE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td>メタデータテーブル</td>
+      <td><code>READ_METADATA_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td rowSpan={5}>メンテナンス</td>
+      <td><code>REMOVE_ORPHAN_FILES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REWRITE_DATA_FILES / COMPACT</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>REWRITE_MANIFESTS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>REWRITE_DELETE_FILES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>EXPIRE_CHANGELOGS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={3}>データ取り込み</td>
+      <td><code>ADD_FILES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>MIGRATE_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>COMPUTE_TABLE_STATS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+  </tbody>
+</table>
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg.md
new file mode 100644
index 00000000000..57d1fec5da9
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-iceberg.md
@@ -0,0 +1,561 @@
+---
+{
+    "title": "Doris と Iceberg の活用",
+    "language": "ja",
+    "description": "新しいオープンなデータ管理アーキテクチャとして、データレイクハウスはデータウェアハウスの高性能とリアルタイム処理能力を"
+}
+---
+
+新しいオープンなデータ管理アーキテクチャであるデータレイクハウスは、データウェアハウスの高性能とリアルタイム処理能力に、データレイクの低コストと柔軟性を組み合わせます。これにより、さまざまなデータ処理や分析のニーズに対応しやすくなります。企業のビッグデータシステムでも採用が進んでいます。
+
+近年のバージョンでは、Apache Doris とデータレイクの連携が強化され、成熟したデータレイクハウスソリューションが提供されています。
+
+- バージョン 0.15 以降、Apache Doris は Hive と Iceberg の外部テーブルを導入し、データレイクにおける Apache Iceberg との連携を模索してきました。
+- バージョン 1.2 から、Apache Doris は Multi-Catalog 機能を正式に導入しました。さまざまなデータソースのメタデータの自動マッピングとデータアクセスが可能になり、外部データの読み取りやクエリ実行についても多くの性能最適化が行われました。これにより、高速で使いやすいレイクハウスアーキテクチャを構築できます。
+- バージョン 2.1 では、Apache Doris はデータレイクハウスアーキテクチャをさらに強化しました。主要なデータレイク形式(Hudi、Iceberg、Paimon など)の読み書き能力を高め、複数の SQL 方言との互換性を導入し、既存システムから Apache Doris へのシームレスな移行を可能にしました。データサイエンスや大規模なデータ読み取りの用途向けには、高速な Arrow Flight 読み取りインターフェースを統合し、データ転送効率を 100 倍に向上させました。
+
+![Doris と Iceberg を使用したレイクハウスの構築](/images/lakehouse-architecture-for-doris-and-iceberg.png)
+
+## Apache Doris & Iceberg
+
+Apache Iceberg は、オープンソースで高性能かつ信頼性の高いデータレイクのテーブル形式であり、大規模データの分析と管理を可能にします。Apache Doris を含む主要なクエリエンジンをサポートし、HDFS や各種オブジェクトストレージに対応しています。また、ACID 準拠、スキーマ進化、高度なフィルタリング、隠しパーティション、パーティションレイアウトの進化などの機能により、高性能なクエリ、データの信頼性と一貫性、タイムトラベルやバージョンのロールバックといった柔軟性を実現します。
+
+Apache Doris は、Iceberg の主要な機能をネイティブにサポートしています。
+
+- Hive Metastore、Hadoop、REST、Glue、Google Dataproc Metastore、DLF など、複数の種類の Iceberg Catalog をサポートします。
+- Iceberg V1/V2 テーブル形式と、Position Delete および Equality Delete ファイルの読み取りをネイティブにサポートします。
+- テーブル関数を使用して、Iceberg テーブルのスナップショット履歴を照会できます。
+- タイムトラベル機能をサポートします。
+- Iceberg テーブルエンジンをネイティブにサポートします。Apache Doris から Iceberg テーブルを直接作成・管理し、データを書き込めます。多様なパーティション Transform 関数に対応し、隠しパーティションやパーティションレイアウトの進化などを利用できます。
+- Iceberg V2 テーブルで、`UPDATE`、`DELETE`、`MERGE INTO` を含む行レベルの DML をサポートします。
+
+Apache Doris と Apache Iceberg を組み合わせることで、効率的なデータレイクハウスをすばやく構築し、さまざまなリアルタイムデータ分析・処理のニーズに柔軟に対応できます。
+
+- Doris の高性能なクエリエンジンを使い、Iceberg テーブルのデータをほかのデータソースと結合して分析することで、**統合されたフェデレーションデータ分析プラットフォーム**を構築できます。
+- Doris から Iceberg テーブルを直接管理・構築し、データのクレンジング、処理、Iceberg テーブルへの書き込みを Doris 上で完結させることで、**データレイク向けの統合データ処理プラットフォーム**を構築できます。
+- Iceberg テーブルエンジンを介して Doris のデータをほかの上流・下流システムと共有し、さらに処理することで、**統合されたオープンデータストレージプラットフォーム**を構築できます。
+
+今後、Apache Iceberg は Apache Doris のネイティブなテーブルエンジンの一つとして、データレイク形式のデータに対して、より包括的な分析・管理機能を提供していきます。Apache Doris はすでに `INSERT`、`UPDATE`、`DELETE`、`MERGE INTO` など、Iceberg の主要な行レベル DML をサポートしています。書き込み時のソート、増分データの読み取り、メタデータ管理などの機能も引き続き改善し、統合された高性能なリアルタイムデータレイクプラットフォームを構築していきます。
+
+詳細については、[Iceberg Catalog](../catalogs/iceberg-catalog.mdx) を参照してください。
+
+## ユーザーガイド
+
+このドキュメントでは、Docker 環境で Apache Doris と Apache Iceberg のテスト・デモ環境をすばやく構築し、各機能を使用する方法を説明します。
+
+このドキュメントで使用するスクリプトとコードは、[https://github.com/apache/doris/tree/master/samples/datalake/iceberg_and_paimon](https://github.com/apache/doris/tree/master/samples/datalake/iceberg_and_paimon) から入手できます。
+
+### 01 環境の準備
+
+このドキュメントでは Docker Compose を使用して、次のコンポーネントとバージョンをデプロイします。
+
+| コンポーネント | バージョン |
+| --- | --- |
+| Apache Doris | デフォルトは 2.1.5、変更可能 |
+| Apache Iceberg | 1.4.3 |
+| MinIO | RELEASE.2024-04-29T09-56-05Z |
+
+### 02 環境のデプロイ
+
+1. すべてのコンポーネントを起動します。
+
+	`bash ./start_all.sh`
+
+2. 起動後、次のスクリプトを使用して Doris のコマンドラインにログインできます。
+
+	```
+	-- login doris
+	bash ./start_doris_client.sh
+	```
+
+### 03 Iceberg テーブルの作成
+
+Doris のコマンドラインにログインすると、Doris クラスターには Iceberg という名前の Iceberg Catalog がすでに作成されています(`SHOW CATALOGS` または `SHOW CREATE CATALOG iceberg` で確認できます)。この Catalog の作成文は次のとおりです。
+
+```
+-- Already created
+CREATE CATALOG `iceberg` PROPERTIES (
+    "type" = "iceberg",
+    "iceberg.catalog.type" = "rest",
+    "warehouse" = "s3://warehouse/",
+    "uri" = "http://rest:8181",
+    "s3.access_key" = "admin",
+    "s3.secret_key" = "password",
+    "s3.endpoint" = "http://minio:9000"
+);
+```
+
+Iceberg Catalog にデータベースと Iceberg テーブルを作成します。
+
+```
+mysql> SWITCH iceberg;
+Query OK, 0 rows affected (0.00 sec)
+
+mysql> CREATE DATABASE nyc;
+Query OK, 0 rows affected (0.12 sec)
+
+mysql> CREATE TABLE iceberg.nyc.taxis
+       (
+           vendor_id BIGINT,
+           trip_id BIGINT,
+           trip_distance FLOAT,
+           fare_amount DOUBLE,
+           store_and_fwd_flag STRING,
+           ts DATETIME
+       )
+       PARTITION BY LIST (vendor_id, DAY(ts)) ()
+       PROPERTIES (
+           "compression-codec" = "zstd",
+           "write-format" = "parquet"
+       );
+Query OK, 0 rows affected (0.15 sec)
+```
+
+### 04 データの挿入
+
+Iceberg テーブルにデータを挿入します。
+
+```
+mysql> INSERT INTO iceberg.nyc.taxis
+       VALUES
+        (1, 1000371, 1.8, 15.32, 'N', '2024-01-01 9:15:23'),
+        (2, 1000372, 2.5, 22.15, 'N', '2024-01-02 12:10:11'),
+        (2, 1000373, 0.9, 9.01, 'N', '2024-01-01 3:25:15'),
+        (1, 1000374, 8.4, 42.13, 'Y', '2024-01-03 7:12:33');
+Query OK, 4 rows affected (1.61 sec)
+{'status':'COMMITTED', 'txnId':'10085'}
+```
+
+`CREATE TABLE AS SELECT` を使用して Iceberg テーブルを作成します。
+
+```
+mysql> CREATE TABLE iceberg.nyc.taxis2 AS SELECT * FROM iceberg.nyc.taxis;
+Query OK, 4 rows affected (0.25 sec)
+{'status':'COMMITTED', 'txnId':'10088'}
+```
+
+### 05 データのクエリ
+
+- 単純なクエリ
+
+	```
+	mysql> SELECT * FROM iceberg.nyc.taxis;
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	|         1 | 1000374 |           8.4 |       42.13 | Y                  | 2024-01-03 07:12:33.000000 |
+	|         1 | 1000371 |           1.8 |       15.32 | N                  | 2024-01-01 09:15:23.000000 |
+	|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
+	|         2 | 1000372 |           2.5 |       22.15 | N                  | 2024-01-02 12:10:11.000000 |
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	4 rows in set (0.37 sec)
+	
+	mysql> SELECT * FROM iceberg.nyc.taxis2;
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	|         1 | 1000374 |           8.4 |       42.13 | Y                  | 2024-01-03 07:12:33.000000 |
+	|         1 | 1000371 |           1.8 |       15.32 | N                  | 2024-01-01 09:15:23.000000 |
+	|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
+	|         2 | 1000372 |           2.5 |       22.15 | N                  | 2024-01-02 12:10:11.000000 |
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	4 rows in set (0.35 sec)
+	```
+
+- パーティションプルーニング
+
+	```
+	mysql> SELECT * FROM iceberg.nyc.taxis where vendor_id = 2 and ts >= '2024-01-01' and ts < '2024-01-02';
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
+	+-----------+---------+---------------+-------------+--------------------+----------------------------+
+	1 row in set (0.06 sec)
+	
+	mysql> EXPLAIN VERBOSE SELECT * FROM iceberg.nyc.taxis where vendor_id = 2 and ts >= '2024-01-01' and ts < '2024-01-02';
+	                                                                                                                                                             
+	....                                                                                                                                                                                  
+	|   0:VICEBERG_SCAN_NODE(71)                                                                                                                                                          
+	|      table: taxis                                                                                                                                                                   
+	|      predicates: (ts[#5] < '2024-01-02 00:00:00'), (vendor_id[#0] = 2), (ts[#5] >= '2024-01-01 00:00:00')                                                                           
+	|      inputSplitNum=1, totalFileSize=3539, scanRanges=1                                                                                                                              
+	|      partition=1/0                                                                                                                                                                  
+	|      backends:                                                                                                                                                                      
+	|        10002                                                                                                                                                                        
+	|          s3://warehouse/wh/nyc/taxis/data/vendor_id=2/ts_day=2024-01-01/40e6ca404efa4a44-b888f23546d3a69c_5708e229-2f3d-4b68-a66b-44298a9d9815-0.zstd.parquet start: 0 length: 3539 
+	|      cardinality=6, numNodes=1                                                                                                                                                      
+	|      pushdown agg=NONE                                                                                                                                                              
+	|      icebergPredicatePushdown=                                                                                                                                                      
+	|           ref(name="ts") < 1704153600000000                                                                                                                                         
+	|           ref(name="vendor_id") == 2                                                                                                                                                
+	|           ref(name="ts") >= 1704067200000000                                                                                                                                        
+	....
+	```
+
+	`EXPLAIN VERBOSE` 文の結果を見ると、述語条件 `vendor_id = 2 and ts >= '2024-01-01' and ts < '2024-01-02'` が最終的に一つのパーティション(`partition=1/0`)だけに一致していることがわかります。
+
+	また、テーブル作成時にパーティション Transform 関数 `DAY(ts)` を指定したため、データ中の元の値 `2024-01-01 03:25:15.000000` が、ファイルディレクトリ内のパーティション情報 `ts_day=2024-01-01` に変換されていることも確認できます。
+
+### 06 タイムトラベル
+
+さらに数行のデータを挿入します。
+
+```
+INSERT INTO iceberg.nyc.taxis VALUES (1, 1000375, 8.8, 55.55, 'Y', '2024-01-01 8:10:22'), (3, 1000376, 7.4, 32.35, 'N', '2024-01-02  1:14:45');
+Query OK, 2 rows affected (0.17 sec)
+{'status':'COMMITTED', 'txnId':'10086'}
+
+mysql> SELECT * FROM iceberg.nyc.taxis;
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+|         3 | 1000376 |           7.4 |       32.35 | N                  | 2024-01-02 01:14:45.000000 |
+|         2 | 1000372 |           2.5 |       22.15 | N                  | 2024-01-02 12:10:11.000000 |
+|         1 | 1000374 |           8.4 |       42.13 | Y                  | 2024-01-03 07:12:33.000000 |
+|         1 | 1000371 |           1.8 |       15.32 | N                  | 2024-01-01 09:15:23.000000 |
+|         1 | 1000375 |           8.8 |       55.55 | Y                  | 2024-01-01 08:10:22.000000 |
+|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+6 rows in set (0.11 sec)
+```
+
+`$snapshots` システムテーブルを使用して、テーブルのスナップショット情報を照会します(バージョン 4.1.4 より前は `iceberg_meta()` テーブル関数も使用できましたが、バージョン 4.1.4 以降は削除されています)。
+
+```
+mysql> select * from iceberg.nyc.taxis$snapshots;
++---------------------+---------------------+---------------------+-----------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| committed_at        | snapshot_id         | parent_id           | operation | manifest_list                                                                                             | summary                                                                                                                                                                                                                                                        |
++---------------------+---------------------+---------------------+-----------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 2024-07-29 03:38:22 | 8483933166442433486 |                  -1 | append    | s3://warehouse/wh/nyc/taxis/metadata/snap-8483933166442433486-1-5f7b7736-8022-4ba1-9db2-51ae7553be4d.avro | {"added-data-files":"4","added-records":"4","added-files-size":"14156","changed-partition-count":"4","total-records":"4","total-files-size":"14156","total-data-files":"4","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0"} |
+| 2024-07-29 03:40:23 | 4726331391239920914 | 8483933166442433486 | append    | s3://warehouse/wh/nyc/taxis/metadata/snap-4726331391239920914-1-6aa3d142-6c9c-4553-9c04-08ad4d49a4ea.avro | {"added-data-files":"2","added-records":"2","added-files-size":"7078","changed-partition-count":"2","total-records":"6","total-files-size":"21234","total-data-files":"6","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0"}  |
++---------------------+---------------------+---------------------+-----------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+2 rows in set (0.07 sec)
+```
+
+`FOR VERSION AS OF` 文を使用して、指定したスナップショットを照会します。
+
+```
+mysql> SELECT * FROM iceberg.nyc.taxis FOR VERSION AS OF 8483933166442433486;
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+|         1 | 1000371 |           1.8 |       15.32 | N                  | 2024-01-01 09:15:23.000000 |
+|         1 | 1000374 |           8.4 |       42.13 | Y                  | 2024-01-03 07:12:33.000000 |
+|         2 | 1000372 |           2.5 |       22.15 | N                  | 2024-01-02 12:10:11.000000 |
+|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+4 rows in set (0.05 sec)
+
+mysql> SELECT * FROM iceberg.nyc.taxis FOR VERSION AS OF 4726331391239920914;
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+|         1 | 1000374 |           8.4 |       42.13 | Y                  | 2024-01-03 07:12:33.000000 |
+|         1 | 1000375 |           8.8 |       55.55 | Y                  | 2024-01-01 08:10:22.000000 |
+|         3 | 1000376 |           7.4 |       32.35 | N                  | 2024-01-02 01:14:45.000000 |
+|         2 | 1000372 |           2.5 |       22.15 | N                  | 2024-01-02 12:10:11.000000 |
+|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
+|         1 | 1000371 |           1.8 |       15.32 | N                  | 2024-01-01 09:15:23.000000 |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+6 rows in set (0.04 sec)
+```
+
+`FOR TIME AS OF` 文を使用して、指定したスナップショットを照会します。
+
+```
+mysql> SELECT * FROM iceberg.nyc.taxis FOR TIME AS OF "2024-07-29 03:38:23";
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+|         1 | 1000374 |           8.4 |       42.13 | Y                  | 2024-01-03 07:12:33.000000 |
+|         1 | 1000371 |           1.8 |       15.32 | N                  | 2024-01-01 09:15:23.000000 |
+|         2 | 1000372 |           2.5 |       22.15 | N                  | 2024-01-02 12:10:11.000000 |
+|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+4 rows in set (0.04 sec)
+
+mysql> SELECT * FROM iceberg.nyc.taxis FOR TIME AS OF "2024-07-29 03:40:22";
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+| vendor_id | trip_id | trip_distance | fare_amount | store_and_fwd_flag | ts                         |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+|         2 | 1000373 |           0.9 |        9.01 | N                  | 2024-01-01 03:25:15.000000 |
+|         1 | 1000374 |           8.4 |       42.13 | Y                  | 2024-01-03 07:12:33.000000 |
+|         2 | 1000372 |           2.5 |       22.15 | N                  | 2024-01-02 12:10:11.000000 |
+|         1 | 1000371 |           1.8 |       15.32 | N                  | 2024-01-01 09:15:23.000000 |
++-----------+---------+---------------+-------------+--------------------+----------------------------+
+4 rows in set (0.05 sec)
+```
+
+### 07 Iceberg の行レベル DML
+
+行レベル DML(`UPDATE`、`DELETE`、`MERGE INTO`)を使用するには、対象テーブルが Iceberg V2 である必要があります。タイムトラベルのセクションで使用した `iceberg.nyc.taxis` の状態を変えないように、次の例では `iceberg.nyc.taxis2` から専用のテーブルを初期化します。
+
+```sql
+mysql> CREATE TABLE iceberg.nyc.taxis_dml
+       (
+           vendor_id BIGINT,
+           trip_id BIGINT,
+           trip_distance FLOAT,
+           fare_amount DOUBLE,
+           store_and_fwd_flag STRING,
+           ts DATETIME
+       )
+       PARTITION BY LIST (vendor_id, DAY(ts)) ()
+       PROPERTIES (
+           "format-version" = "2",
+           "compression-codec" = "zstd",
+           "write-format" = "parquet"
+       );
+Query OK, 0 rows affected (0.18 sec)
+
+mysql> INSERT INTO iceberg.nyc.taxis_dml SELECT * FROM iceberg.nyc.taxis2;
+Query OK, 4 rows affected (0.32 sec)
+{'status':'COMMITTED', 'txnId':'10089'}
+```
+
+Iceberg テーブルの行を更新します。
+
+```sql
+mysql> UPDATE iceberg.nyc.taxis_dml
+       SET fare_amount = fare_amount + 3,
+           store_and_fwd_flag = 'Y'
+       WHERE trip_id = 1000371;
+Query OK, 1 row affected (0.44 sec)
+{'status':'COMMITTED', 'txnId':'10090'}
+
+mysql> SELECT trip_id, fare_amount, store_and_fwd_flag
+       FROM iceberg.nyc.taxis_dml
+       WHERE trip_id = 1000371;
++---------+-------------+--------------------+
+| trip_id | fare_amount | store_and_fwd_flag |
++---------+-------------+--------------------+
+| 1000371 |       18.32 | Y                  |
++---------+-------------+--------------------+
+1 row in set (0.07 sec)
+```
+
+Iceberg テーブルから行を削除します。
+
+```sql
+mysql> DELETE FROM iceberg.nyc.taxis_dml
+       WHERE trip_id = 1000373;
+Query OK, 1 row affected (0.31 sec)
+{'status':'COMMITTED', 'txnId':'10091'}
+
+mysql> SELECT trip_id
+       FROM iceberg.nyc.taxis_dml
+       ORDER BY trip_id;
++---------+
+| trip_id |
++---------+
+| 1000371 |
+| 1000372 |
+| 1000374 |
++---------+
+3 rows in set (0.06 sec)
+```
+
+`MERGE INTO` を使用して、一つの文で既存の行を更新し、新しい行を挿入します。
+
+```sql
+mysql> MERGE INTO iceberg.nyc.taxis_dml t
+       USING (
+           SELECT 2 AS vendor_id, 1000372 AS trip_id, 2.5 AS trip_distance,
+                  30.00 AS fare_amount, 'Y' AS store_and_fwd_flag,
+                  CAST('2024-01-02 12:10:11' AS DATETIME) AS ts
+           UNION ALL
+           SELECT 3, 1000380, 6.7, 28.50, 'N', CAST('2024-01-04 10:20:00' AS DATETIME)
+       ) s
+       ON t.trip_id = s.trip_id
+       WHEN MATCHED THEN UPDATE SET
+           fare_amount = s.fare_amount,
+           store_and_fwd_flag = s.store_and_fwd_flag
+       WHEN NOT MATCHED THEN INSERT
+           (vendor_id, trip_id, trip_distance, fare_amount, store_and_fwd_flag, ts)
+       VALUES
+           (s.vendor_id, s.trip_id, s.trip_distance, s.fare_amount, s.store_and_fwd_flag, s.ts);
+Query OK, 2 rows affected (0.53 sec)
+{'status':'COMMITTED', 'txnId':'10092'}
+
+mysql> SELECT vendor_id, trip_id, fare_amount, store_and_fwd_flag
+       FROM iceberg.nyc.taxis_dml
+       ORDER BY trip_id;
++-----------+---------+-------------+--------------------+
+| vendor_id | trip_id | fare_amount | store_and_fwd_flag |
++-----------+---------+-------------+--------------------+
+|         1 | 1000371 |       18.32 | Y                  |
+|         2 | 1000372 |       30.00 | Y                  |
+|         1 | 1000374 |       42.13 | Y                  |
+|         3 | 1000380 |       28.50 | N                  |
++-----------+---------+-------------+--------------------+
+4 rows in set (0.09 sec)
+```
+
+### 08 PyIceberg との連携
+
+> Doris 2.1.8/3.0.4 以降を使用してください。
+
+前の例の状態を変えないように、以下の例では `nyc.taxis2` を使用します。
+
+Iceberg テーブルを読み込みます。
+
+```python
+from pyiceberg.catalog import load_catalog
+
+catalog = load_catalog(
+	"iceberg",
+	**{
+		"warehouse" = "warehouse",
+		"uri" = "http://rest:8181",
+		"s3.access-key-id" = "admin",
+		"s3.secret-access-key" = "password",
+		"s3.endpoint" = "http://minio:9000"
+	},
+)
+table = catalog.load_table("nyc.taxis2")
+```
+
+テーブルを `Arrow Table` として読み取ります。
+
+```python
+print(table.scan().to_arrow())
+
+pyarrow.Table
+vendor_id: int64
+trip_id: int64
+trip_distance: float
+fare_amount: double
+store_and_fwd_flag: large_string
+ts: timestamp[us]
+----
+vendor_id: [[1],[1],[2],[2]]
+trip_id: [[1000371],[1000374],[1000373],[1000372]]
+trip_distance: [[1.8],[8.4],[0.9],[2.5]]
+fare_amount: [[15.32],[42.13],[9.01],[22.15]]
+store_and_fwd_flag: [["N"],["Y"],["N"],["N"]]
+ts: [[2024-01-01 09:15:23.000000],[2024-01-03 07:12:33.000000],[2024-01-01 03:25:15.000000],[2024-01-02 12:10:11.000000]]
+```
+
+テーブルを `Pandas DataFrame` として読み取ります。
+
+```python
+print(table.scan().to_pandas())
+
+vendor_id  trip_id  trip_distance  fare_amount store_and_fwd_flag                    ts
+0          1  1000371            1.8        15.32                  N   2024-01-01 09:15:23
+1          1  1000374            8.4        42.13                  Y   2024-01-03 07:12:33
+2          2  1000373            0.9         9.01                  N   2024-01-01 03:25:15
+3          2  1000372            2.5        22.15                  N   2024-01-02 12:10:11
+```
+
+テーブルを `Polars DataFrame` として読み取ります。
+
+```python
+import polars as pl
+
+print(pl.scan_iceberg(table).collect())
+
+shape: (4, 6)
+┌───────────┬─────────┬───────────────┬─────────────┬────────────────────┬─────────────────────┐
+│ vendor_id ┆ trip_id ┆ trip_distance ┆ fare_amount ┆ store_and_fwd_flag ┆ ts                  │
+│ ---       ┆ ---     ┆ ---           ┆ ---         ┆ ---                ┆ ---                 │
+│ i64       ┆ i64     ┆ f32           ┆ f64         ┆ str                ┆ datetime[μs]        │
+╞═══════════╪═════════╪═══════════════╪═════════════╪════════════════════╪═════════════════════╡
+│ 1         ┆ 1000371 ┆ 1.8           ┆ 15.32       ┆ N                  ┆ 2024-01-01 09:15:23 │
+│ 1         ┆ 1000374 ┆ 8.4           ┆ 42.13       ┆ Y                  ┆ 2024-01-03 07:12:33 │
+│ 2         ┆ 1000373 ┆ 0.9           ┆ 9.01        ┆ N                  ┆ 2024-01-01 03:25:15 │
+│ 2         ┆ 1000372 ┆ 2.5           ┆ 22.15       ┆ N                  ┆ 2024-01-02 12:10:11 │
+└───────────┴─────────┴───────────────┴─────────────┴────────────────────┴─────────────────────┘
+```
+
+> PyIceberg で Iceberg テーブルに書き込む方法については、[手順](#write-iceberg-table-by-pyiceberg)を参照してください。
+
+### 09 付録
+
+#### PyIceberg による Iceberg テーブルへの書き込み
+
+Iceberg テーブルを読み込みます。
+
+```python
+from pyiceberg.catalog import load_catalog
+
+catalog = load_catalog(
+	"iceberg",
+	**{
+		"warehouse" = "warehouse",
+		"uri" = "http://rest:8181",
+		"s3.access-key-id" = "admin",
+		"s3.secret-access-key" = "password",
+		"s3.endpoint" = "http://minio:9000"
+	},
+)
+table = catalog.load_table("nyc.taxis2")
+```
+
+`Arrow Table` を使用してテーブルに書き込みます。
+
+```python
+import pyarrow as pa
+
+df = pa.Table.from_pydict(
+	{
+		"vendor_id": pa.array([1, 2, 2, 1], pa.int64()),
+		"trip_id": pa.array([1000371, 1000372, 1000373, 1000374], pa.int64()),
+		"trip_distance": pa.array([1.8, 2.5, 0.9, 8.4], pa.float32()),
+		"fare_amount": pa.array([15.32, 22.15, 9.01, 42.13], pa.float64()),
+		"store_and_fwd_flag": pa.array(["N", "N", "N", "Y"], pa.string()),
+		"ts": pa.compute.strptime(
+			["2024-01-01 9:15:23", "2024-01-02 12:10:11", "2024-01-01 3:25:15", "2024-01-03 7:12:33"],
+			"%Y-%m-%d %H:%M:%S",
+			"us",
+		),
+	}
+)
+table.append(df)
+```
+
+`Pandas DataFrame` を使用してテーブルに書き込みます。
+
+```python
+import pyarrow as pa
+import pandas as pd
+
+df = pd.DataFrame(
+	{
+		"vendor_id": pd.Series([1, 2, 2, 1]).astype("int64[pyarrow]"),
+		"trip_id": pd.Series([1000371, 1000372, 1000373, 1000374]).astype("int64[pyarrow]"),
+		"trip_distance": pd.Series([1.8, 2.5, 0.9, 8.4]).astype("float32[pyarrow]"),
+		"fare_amount": pd.Series([15.32, 22.15, 9.01, 42.13]).astype("float64[pyarrow]"),
+		"store_and_fwd_flag": pd.Series(["N", "N", "N", "Y"]).astype("string[pyarrow]"),
+		"ts": pd.Series(["2024-01-01 9:15:23", "2024-01-02 12:10:11", "2024-01-01 3:25:15", "2024-01-03 7:12:33"]).astype("timestamp[us][pyarrow]"),
+	}
+)
+table.append(pa.Table.from_pandas(df))
+```
+
+`Polars DataFrame` を使用してテーブルに書き込みます。
+
+```python
+import polars as pl
+
+df = pl.DataFrame(
+	{
+		"vendor_id": [1, 2, 2, 1],
+		"trip_id": [1000371, 1000372, 1000373, 1000374],
+		"trip_distance": [1.8, 2.5, 0.9, 8.4],
+		"fare_amount": [15.32, 22.15, 9.01, 42.13],
+		"store_and_fwd_flag": ["N", "N", "N", "Y"],
+		"ts": ["2024-01-01 9:15:23", "2024-01-02 12:10:11", "2024-01-01 3:25:15", "2024-01-03 7:12:33"],
+	},
+	{
+		"vendor_id": pl.Int64,
+		"trip_id": pl.Int64,
+		"trip_distance": pl.Float32,
+		"fare_amount": pl.Float64,
+		"store_and_fwd_flag": pl.String,
+		"ts": pl.String,
+	},
+).with_columns(pl.col("ts").str.strptime(pl.Datetime, "%Y-%m-%d %H:%M:%S"))
+table.append(df.to_arrow())
+```
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-lakekeeper.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-lakekeeper.md
new file mode 100644
index 00000000000..e50ceb9ba64
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-lakekeeper.md
@@ -0,0 +1,409 @@
+---
+{
+    "title": "Lakekeeper との連携",
+    "language": "ja"
+}
+---
+
+[Lakekeeper](https://lakekeeper.io/) は、Rust で書かれたオープンソースの Apache Iceberg REST Catalog 実装です。AWS S3、Alibaba Cloud OSS、MinIO など、複数のストレージバックエンドに対応する軽量で高性能なメタデータ管理サービスを提供します。
+
+この記事では、Apache Doris と Lakekeeper を連携させ、Iceberg データを効率的にクエリおよび管理する方法を説明します。環境の準備から最終的なクエリまで、手順を追って進めます。
+
+**この記事で学べること:**
+
+* **AWS 環境の準備**:AWS で S3 バケットを作成・設定し、Lakekeeper に必要な IAM ロールとポリシーを用意して、Lakekeeper が S3 にアクセスし、Doris にアクセス認証情報を提供できるようにする方法。
+
+* **Lakekeeper のデプロイと設定**:Docker Compose を使って Lakekeeper サービスをデプロイし、Lakekeeper に Project と Warehouse を作成して、Doris にメタデータへのアクセスエンドポイントを提供する方法。
+
+* **Doris から Lakekeeper への接続**:Doris から Lakekeeper を介して Iceberg データにアクセスし、読み書きする方法。
+
+## 1. AWS 環境の準備
+
+まず、AWS で S3 バケットと対応する IAM ロールを準備します。これらは、Lakekeeper によるデータ管理と Doris によるデータアクセスの基盤となります。
+
+### 1.1 S3 バケットの作成
+
+後で作成する Iceberg テーブルのデータを保存するために、`lakekeeper-doris-demo` という名前の S3 バケットを作成します。
+
+```bash
+# Create S3 storage bucket
+aws s3 mb s3://lakekeeper-doris-demo --region us-east-1
+# Verify bucket creation success
+aws s3 ls | grep lakekeeper-doris-demo
+```
+
+### 1.2 オブジェクトストレージにアクセスするための IAM ロールの作成
+
+認証情報を安全に管理するため、Lakekeeper が STS AssumeRole を通じて使用する IAM ロールを作成します。この設計は、最小権限の原則と職務の分離というセキュリティのベストプラクティスに沿っています。
+
+1. 信頼ポリシーファイルの作成
+
+    `lakekeeper-trust-policy.json` ファイルを作成します:
+
+    ```bash
+    cat > lakekeeper-trust-policy.json << 'EOF'
+    {
+        "Version": "2012-10-17",
+        "Statement": [
+        {
+            "Effect": "Allow",
+            "Principal": {
+                "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/YOUR_USER"
+            },
+            "Action": "sts:AssumeRole"
+        }
+        ]
+    }
+    EOF
+    ```
+
+    > 注:YOUR\_ACCOUNT\_ID を実際の AWS アカウント ID に置き換えてください。アカウント ID は `aws sts get-caller-identity --query Account --output text` で確認できます。YOUR\_USER は実際の IAM ユーザー名に置き換えてください。
+
+2. IAM ロールの作成
+
+    ```bash
+    aws iam create-role \
+        --role-name lakekeeper-sts-role \
+        --assume-role-policy-document file://lakekeeper-trust-policy.json \
+        --description "IAM Role for Lakekeeper to access S3 storage"
+    ```
+
+3. S3 アクセス権限ポリシーのアタッチ
+
+    `lakekeeper-s3-policy.json` ファイルを作成します:
+
+    ```bash
+    cat > lakekeeper-s3-policy.json << 'EOF'
+    {
+        "Version": "2012-10-17",
+        "Statement": [{
+            "Effect": "Allow",
+            "Action": [
+                "s3:ListBucket",
+                "s3:GetBucketLocation",
+                "s3:ListBucketMultipartUploads",
+                "s3:ListMultipartUploadParts",
+                "s3:AbortMultipartUpload",
+                "s3:GetObject",
+                "s3:PutObject",
+                "s3:DeleteObject"
+            ],
+            "Resource": [
+                "arn:aws:s3:::lakekeeper-doris-demo",
+                "arn:aws:s3:::lakekeeper-doris-demo/*"
+            ]
+        }]
+    }
+    EOF
+    ```
+
+    ポリシーをロールにアタッチします:
+
+    ```bash
+    aws iam put-role-policy \
+        --role-name lakekeeper-sts-role \
+        --policy-name lakekeeper-s3-access \
+        --policy-document file://lakekeeper-s3-policy.json
+    ```
+
+4. ユーザーへの AssumeRole 権限の付与
+
+    ```bash
+    cat > user-assume-policy.json << 'EOF'
+    {
+        "Version": "2012-10-17",
+        "Statement": [{
+            "Effect": "Allow",
+            "Action": "sts:AssumeRole",
+            "Resource": "arn:aws:iam::YOUR_ACCOUNT_ID:role/lakekeeper-sts-role"
+        }]
+    }
+    EOF
+
+    aws iam put-user-policy \
+        --user-name YOUR_USER \
+        --policy-name allow-assume-lakekeeper-role \
+        --policy-document file://user-assume-policy.json
+    ```
+
+5. 作成結果の確認
+
+    ```bash
+    aws iam get-role --role-name lakekeeper-sts-role
+    aws iam list-role-policies --role-name lakekeeper-sts-role
+    
+    # Verify AssumeRole is available
+    aws sts assume-role \
+        --role-arn arn:aws:iam::YOUR_ACCOUNT_ID:role/lakekeeper-sts-role \
+        --role-session-name lakekeeper-test
+    ```
+
+## 2. Lakekeeper のデプロイと Warehouse の作成
+
+環境の準備が完了したら、Lakekeeper サービスをデプロイし、Warehouse を設定します。
+
+### 2.1 Docker Compose を使った Lakekeeper のデプロイ
+
+`docker-compose.yml` ファイルを作成します:
+
+```yaml
+services:
+  db:
+    image: postgres:17
+    environment:
+      POSTGRES_PASSWORD: postgres
+    volumes:
+      - pgdata:/var/lib/postgresql/data
+    healthcheck:
+      test: ["CMD-SHELL", "pg_isready -U postgres -p 5432 -d postgres"]
+      interval: 2s
+      timeout: 10s
+      retries: 10
+
+  migrate:
+    image: quay.io/lakekeeper/catalog:latest-main
+    restart: "no"
+    environment:
+      - LAKEKEEPER__PG_DATABASE_URL_READ=postgresql://postgres:postgres@db:5432/postgres
+      - LAKEKEEPER__PG_DATABASE_URL_WRITE=postgresql://postgres:postgres@db:5432/postgres
+      - LAKEKEEPER__PG_ENCRYPTION_KEY=CHANGE_ME_TO_A_LONG_RANDOM_SECRET
+      - RUST_LOG=info
+    command: ["migrate"]
+    depends_on:
+      db:
+        condition: service_healthy
+
+  lakekeeper:
+    image: quay.io/lakekeeper/catalog:latest-main
+    environment:
+      - LAKEKEEPER__PG_DATABASE_URL_READ=postgresql://postgres:postgres@db:5432/postgres
+      - LAKEKEEPER__PG_DATABASE_URL_WRITE=postgresql://postgres:postgres@db:5432/postgres
+      - LAKEKEEPER__PG_ENCRYPTION_KEY=CHANGE_ME_TO_A_LONG_RANDOM_SECRET
+      - LAKEKEEPER__BASE_URI=http://YOUR_HOST_IP:8181
+      - LAKEKEEPER__ENABLE_DEFAULT_PROJECT=true
+      - RUST_LOG=info
+    command: ["serve"]
+    ports:
+      - "8181:8181"
+    depends_on:
+      migrate:
+        condition: service_completed_successfully
+      db:
+        condition: service_healthy
+
+volumes:
+  pgdata:
+```
+
+**主な設定パラメータ:**
+
+| パラメータ | 説明 |
+| --------- | ----------- |
+| `LAKEKEEPER__PG_ENCRYPTION_KEY` | デフォルトの Postgres シークレットバックエンドを使用する場合に、Postgres に保存される機密情報の暗号化に使用します。十分に長いランダムな文字列を設定してください。 |
+| `LAKEKEEPER__BASE_URI` | Lakekeeper サービスのベース URI です。`YOUR_HOST_IP` を実際のホスト IP アドレスに置き換えてください。 |
+| `LAKEKEEPER__ENABLE_DEFAULT_PROJECT` | `true` に設定すると、デフォルト Project 機能が有効になります。 |
+
+Lakekeeper を起動します:
+
+```bash
+docker compose up -d
+```
+
+起動後、次のエンドポイントにアクセスできます:
+
+* Swagger UI: `http://YOUR_HOST_IP:8181/swagger-ui/`
+* Web UI: `http://YOUR_HOST_IP:8181/ui`
+
+### 2.2 Project と Warehouse の作成
+
+1. Project の作成
+
+    ```bash
+    curl -i -X POST "http://localhost:8181/management/v1/project" \
+      -H "Content-Type: application/json" \
+      --data '{"project-name":"default"}'
+    ```
+
+    確認します:
+
+    ```bash
+    curl -s "http://localhost:8181/management/v1/project-list"
+    ```
+
+    レスポンス内の `project-id` を控えてください。後続の手順では、これを `PROJECT_ID` として使用します。
+
+2. Warehouse の作成(Credential Vending モード)
+
+    Credential Vending モードを使用する場合は、Warehouse 設定ファイル `create-warehouse-vc.json` を作成します:
+
+    ```bash
+    cat > create-warehouse-vc.json <<'JSON'
+    {
+      "warehouse-name": "lakekeeper-vc-warehouse",
+      "storage-profile": {
+        "type": "s3",
+        "bucket": "lakekeeper-doris-demo",
+        "key-prefix": "warehouse-vc",
+        "region": "us-east-1",
+        "endpoint": "https://s3.us-east-1.amazonaws.com",
+        "sts-enabled": true,
+        "flavor": "aws",
+        "assume-role-arn": "arn:aws:iam::YOUR_ACCOUNT_ID:role/lakekeeper-sts-role"
+      },
+      "storage-credential": {
+        "type": "s3",
+        "credential-type": "access-key",
+        "aws-access-key-id": "YOUR_ACCESS_KEY",
+        "aws-secret-access-key": "YOUR_SECRET_KEY"
+      }
+    }
+    JSON
+    ```
+
+    * `sts-enabled`:`true` に設定すると、Credential Vending が有効になります。
+    * `assume-role-arn`:Lakekeeper が S3 にアクセスするために引き受ける IAM ロールの ARN です。
+
+    Warehouse を作成します:
+
+    ```bash
+    curl -i -X POST "http://localhost:8181/management/v1/warehouse" \
+      -H "Content-Type: application/json" \
+      -H "x-project-id: $PROJECT_ID" \
+      --data @create-warehouse-vc.json
+    ```
+
+3. Warehouse の作成(静的認証情報モード)
+
+    Warehouse 設定ファイル `create-warehouse-static.json` を作成します:
+
+    ```bash
+    cat > create-warehouse-static.json <<'JSON'
+    {
+      "warehouse-name": "lakekeeper-warehouse",
+      "storage-profile": {
+        "type": "s3",
+        "bucket": "lakekeeper-doris-demo",
+        "key-prefix": "warehouse",
+        "region": "us-east-1",
+        "endpoint": "https://s3.us-east-1.amazonaws.com",
+        "sts-enabled": false,
+        "flavor": "aws"
+      },
+      "storage-credential": {
+        "type": "s3",
+        "credential-type": "access-key",
+        "aws-access-key-id": "YOUR_ACCESS_KEY",
+        "aws-secret-access-key": "YOUR_SECRET_KEY"
+      }
+    }
+    JSON
+    ```
+
+    Warehouse を作成します:
+
+    ```bash
+    curl -i -X POST "http://localhost:8181/management/v1/warehouse" \
+      -H "Content-Type: application/json" \
+      -H "x-project-id: $PROJECT_ID" \
+      --data @create-warehouse-static.json
+    ```
+
+4. Warehouse の作成結果の確認
+
+    ```bash
+    curl -s "http://localhost:8181/management/v1/warehouse" \
+      -H "x-project-id: $PROJECT_ID"
+    ```
+
+5. Namespace の作成
+
+    前の手順のレスポンス内の `warehouse-id` を控えてください。これを使って Namespace を作成します:
+
+    ```bash
+    curl -sS -X POST \
+      -H "Content-Type: application/json" \
+      -H "Accept: application/json" \
+      "http://localhost:8181/catalog/v1/$WAREHOUSE_ID/namespaces" \
+      -d '{
+        "namespace": ["demo"],
+        "properties": {}
+      }'
+    ```
+
+    これにより、Warehouse 内に `demo` という名前の Namespace(データベース)が作成されます。
+
+これで、Lakekeeper 側の設定はすべて完了です。
+
+## 3. Doris から Lakekeeper への接続
+
+次に、設定した Lakekeeper サービスに接続する Iceberg Catalog を Doris に作成します。
+
+### 方法 1:一時的なストレージ認証情報(Credential Vending)
+
+これは**最も推奨される**方法です。S3 上のデータファイルを読み書きする際、Doris は Lakekeeper に一時的な最小権限の S3 アクセス認証情報を要求します。
+
+```sql
+CREATE CATALOG lakekeeper_vc PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'http://YOUR_LAKEKEEPER_HOST:8181/catalog',
+    'warehouse' = 'lakekeeper-vc-warehouse',
+    -- Enable credential vending
+    'iceberg.rest.vended-credentials-enabled' = 'true'
+);
+```
+
+### 方法 2:静的なストレージ認証情報(AK/SK)
+
+この方法では、Doris が設定に直接記述された静的な AK/SK を使ってオブジェクトストレージにアクセスします。設定が簡単で手早いテストに適していますが、セキュリティは低くなります。
+
+```sql
+CREATE CATALOG lakekeeper_static PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'http://YOUR_LAKEKEEPER_HOST:8181/catalog',
+    'warehouse' = 'lakekeeper-warehouse',
+    -- Directly provide S3 access keys
+    's3.access_key' = 'YOUR_ACCESS_KEY',
+    's3.secret_key' = 'YOUR_SECRET_KEY',
+    's3.endpoint' = 'https://s3.us-east-1.amazonaws.com',
+    's3.region' = 'us-east-1'
+);
+```
+
+## 4. Doris での接続確認
+
+Catalog の作成に使用した方法にかかわらず、次の SQL でエンドツーエンドの接続を確認できます。
+
+```sql
+-- Switch to the Catalog and Namespace configured in Lakekeeper
+USE lakekeeper_static.demo;
+
+-- Create an Iceberg table
+CREATE TABLE my_iceberg_table (
+  id INT,
+  name STRING
+)
+PROPERTIES (
+  'write-format'='parquet'
+);
+
+-- Insert data
+INSERT INTO my_iceberg_table VALUES (1, 'Doris'), (2, 'Lakekeeper');
+
+-- Query data
+SELECT * FROM my_iceberg_table;
+-- Expected result:
+-- +------+------------+
+-- | id   | name       |
+-- +------+------------+
+-- | 1    | Doris      |
+-- | 2    | Lakekeeper |
+-- +------+------------+
+```
+
+上記の操作がすべて成功すれば、Doris -> Lakekeeper -> S3 という一連のデータレイクパイプラインが構築されています。
+
+Doris による Iceberg テーブルの管理について詳しくは、次を参照してください:
+
+https://doris.apache.org/docs/lakehouse/catalogs/iceberg-catalog
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-maxcompute.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-maxcompute.md
new file mode 100644
index 00000000000..28e9197622c
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-maxcompute.md
@@ -0,0 +1,237 @@
+---
+{
+    "title": "Doris と MaxCompute のデータ連携",
+    "language": "ja",
+    "description": "MaxCompute Catalog を使用して Apache Doris と Alibaba Cloud MaxCompute の間で双方向のデータ連携を実現します。データの取り込み、書き戻し、データベースとテーブルの管理をサポートし、効率的なレイクハウス構成の構築に役立ちます。"
+}
+---
+
+このドキュメントでは、[MaxCompute Catalog](../catalogs/maxcompute-catalog.md) を使用して Apache Doris と Alibaba Cloud MaxCompute の間でデータを連携する方法を説明します。
+
+- **データの取り込み**: MaxCompute から Doris にデータを素早く取り込み、分析します。
+- **データの書き戻し** (4.1.0 以降): Doris で得られた分析結果や、ほかのソースから取り込んだデータを MaxCompute に書き戻します。
+- **データベースとテーブルの管理** (4.1.0 以降): Doris から直接 MaxCompute のデータベースとテーブルを作成、管理します。
+
+このドキュメントは Apache Doris バージョン 2.1.9 に基づいています。一部の機能にはバージョン 4.1.0 以降が必要です。
+
+## 環境の準備
+
+### 01 MaxCompute Open Storage API の有効化
+
+[MaxCompute コンソール](https://maxcompute.console.aliyun.com/)の左側のサイドバーから `Tenant Management` -> `Tenant Properties` に移動し、`Open Storage (Storage API) Switch` を有効にします。
+
+### 02 MaxCompute の権限付与
+
+Doris は AK/SK を使用して MaxCompute のサービスにアクセスします。AK/SK に対応する IAM ユーザーに、MaxCompute サービスに対する次のロールまたは権限があることを確認してください。
+
+```json
+{
+    "Statement": [
+        {
+            "Action": [
+                "odps:List",
+                "odps:Usage"
+            ],
+            "Effect": "Allow",
+            "Resource": ["acs:odps:*:regions/*/quotas/pay-as-you-go"]
+        }
+    ],
+    "Version": "1"
+}
+```
+
+### 03 Doris と MaxCompute のネットワーク環境の確認
+
+Doris クラスターと MaxCompute サービスを同じ VPC 内に配置し、セキュリティグループを適切に設定することを強く推奨します。
+
+このドキュメントの例は、両者が同じ VPC にあるネットワーク環境でテストされています。
+
+## MaxCompute データの取り込み
+
+### 01 Catalog の作成
+
+```sql
+CREATE CATALOG mc PROPERTIES (
+    "type" = "max_compute",
+    "mc.default.project" = "xxx",
+    "mc.access_key" = "AKxxxxx",
+    "mc.secret_key" = "SKxxxxx",
+    "mc.endpoint" = "xxxxx"
+);
+```
+
+スキーマ階層を使用する場合 (3.1.3 以降):
+
+```sql
+CREATE CATALOG mc PROPERTIES (
+    "type" = "max_compute",
+    "mc.default.project" = "xxx",
+    "mc.access_key" = "AKxxxxx",
+    "mc.secret_key" = "SKxxxxx",
+    "mc.endpoint" = "xxxxx",
+    "mc.enable.namespace.schema" = "true"
+);
+```
+
+詳細については、[MaxCompute Catalog](../catalogs/maxcompute-catalog.md) のドキュメントを参照してください。
+
+### 02 TPCH データセットの取り込み
+
+MaxCompute のパブリックデータセットに含まれる TPCH 100 データセットを例に (データはすでに MaxCompute に取り込まれています)、`CREATE TABLE AS SELECT` 文を使用して MaxCompute のデータを Doris に取り込みます。
+
+このデータセットには 7 つのテーブルが含まれます。最大の `lineitem` テーブルには 16 列、600,037,902 行があり、ディスク使用量は約 30GB です。
+
+```sql
+-- switch catalog
+SWITCH internal;
+-- create database
+CREATE DATABASE tpch_100g;
+-- ingest data
+CREATE TABLE tpch_100g.lineitem AS SELECT * FROM mc.selectdb_test.lineitem;
+CREATE TABLE tpch_100g.nation AS SELECT * FROM mc.selectdb_test.nation;
+CREATE TABLE tpch_100g.orders AS SELECT * FROM mc.selectdb_test.orders;
+CREATE TABLE tpch_100g.part AS SELECT * FROM mc.selectdb_test.part;
+CREATE TABLE tpch_100g.partsupp AS SELECT * FROM mc.selectdb_test.partsupp;
+CREATE TABLE tpch_100g.region AS SELECT * FROM mc.selectdb_test.region;
+CREATE TABLE tpch_100g.supplier AS SELECT * FROM mc.selectdb_test.supplier;
+```
+
+単一の BE (16C 64G) で構成された Doris クラスターでは、上記の操作を順番に実行すると約 6~7 分かかります。
+
+### 03 GitHub Event データセットの取り込み
+
+MaxCompute のパブリックデータセットに含まれる GitHub Event データセットを例に (データはすでに MaxCompute に取り込まれています)、`CREATE TABLE AS SELECT` 文を使用して MaxCompute のデータを Doris に取り込みます。
+
+ここでは、`dwd_github_events_odps` テーブルの `2015-01-01` から `2016-01-01` までの 365 パーティションからデータを選択します。このデータには 32 列、212,786,803 行があり、ディスク使用量は約 10GB です。
+
+```sql
+-- switch catalog
+SWITCH internal;
+-- create database
+CREATE DATABASE github_events;
+-- ingest data
+CREATE TABLE github_events.dwd_github_events_odps
+AS SELECT * FROM mc.github_events.dwd_github_events_odps
+WHERE ds BETWEEN '2015-01-01' AND '2016-01-01';
+```
+
+単一の BE (16C 64G) で構成された Doris クラスターでは、上記の操作に約 2 分かかります。
+
+## MaxCompute へのデータの書き戻し (4.1.0 以降)
+
+バージョン 4.1.0 以降、Doris は MaxCompute へのデータの書き戻しをサポートします。この機能は次のような場面で使用できます。
+
+- **分析結果の書き戻し**: Doris でデータ分析を終えた後、結果を MaxCompute に書き戻し、ほかのシステムで利用します。
+- **データ処理**: Doris の高い計算能力を使用してデータを ETL 処理し、処理後のデータを MaxCompute に保存します。
+- **複数ソース間のデータ連携**: 複数のソースのデータを Doris に集約し、MaxCompute に書き込んで一元管理します。
+
+:::note
+- この機能は実験的な機能であり、バージョン 4.1.0 以降でサポートされます。
+- パーティションテーブルと非パーティションテーブルへの書き込みをサポートします。
+- クラスターテーブル、トランザクションテーブル、Delta Table、外部テーブルへの書き込みはサポートしません。
+:::
+
+### 01 INSERT INTO による追記
+
+INSERT 操作は MaxCompute の対象テーブルにデータを追記します。
+
+```sql
+-- Switch to MaxCompute Catalog
+SWITCH mc;
+
+-- Insert a single row of data
+INSERT INTO mc_db.mc_tbl VALUES (val1, val2, val3, val4);
+
+-- Import data from Doris internal table to MaxCompute
+INSERT INTO mc_db.mc_tbl SELECT col1, col2 FROM internal.db1.tbl1;
+
+-- Write to specific columns
+INSERT INTO mc_db.mc_tbl(col1, col2) VALUES (val1, val2);
+
+-- Write to specific partition (you can specify only some partition columns, with the rest written dynamically)
+INSERT INTO mc_db.mc_tbl PARTITION(ds='20250201') SELECT id, name FROM internal.db1.source_tbl;
+```
+
+### 02 INSERT OVERWRITE による上書き
+
+INSERT OVERWRITE は、テーブル内の既存データを新しいデータで完全に置き換えます。
+
+```sql
+-- Full table overwrite
+INSERT OVERWRITE TABLE mc_db.mc_tbl VALUES (val1, val2, val3, val4);
+
+-- Overwrite from another table
+INSERT OVERWRITE TABLE mc_db.mc_tbl(col1, col2) SELECT col1, col2 FROM internal.db1.tbl1;
+
+-- Overwrite specific partition
+INSERT OVERWRITE TABLE mc_db.mc_tbl PARTITION(ds='20250101') VALUES (10, 'new1');
+```
+
+### 03 CTAS によるテーブル作成と書き込み
+
+`CREATE TABLE AS SELECT` 文を使用すると、MaxCompute に新しいテーブルを作成してデータを書き込めます。
+
+```sql
+-- Create table in MaxCompute and import data
+CREATE TABLE mc_db.mc_new_tbl AS SELECT * FROM internal.db1.source_tbl;
+```
+
+## データベースとテーブルの管理 (4.1.0 以降)
+
+バージョン 4.1.0 以降、Doris から直接 MaxCompute のデータベースとテーブルを作成、削除できます。この機能は次のような場面で使用できます。
+
+- **データの一元管理**: MaxCompute コンソールに切り替えることなく、複数のデータソースのメタデータを Doris で一元管理します。
+- **データパイプラインの自動化**: ETL ワークフロー内で対象テーブルを動的に作成し、処理全体を自動化します。
+
+:::note
+- この機能は実験的な機能であり、バージョン 4.1.0 以降でサポートされます。
+- この機能を使用できるのは、`mc.enable.namespace.schema` プロパティを `true` に設定した場合のみです。
+- パーティションテーブルと非パーティションテーブルの作成と削除をサポートします。
+- クラスターテーブル、トランザクションテーブル、Delta Table、外部テーブルの作成はサポートしません。
+:::
+
+### 01 データベースの作成と削除
+
+```sql
+-- Switch to MaxCompute Catalog
+SWITCH mc;
+
+-- Create Schema
+CREATE DATABASE IF NOT EXISTS mc_schema;
+
+-- Create using fully qualified name
+CREATE DATABASE IF NOT EXISTS mc.mc_schema;
+
+-- Drop Schema (will also delete all tables within it)
+DROP DATABASE IF EXISTS mc.mc_schema;
+```
+
+:::caution
+MaxCompute のデータベースを削除すると、その中のすべてのテーブルも削除されます。慎重に操作してください。
+:::
+
+### 02 テーブルの作成と削除
+
+```sql
+-- Create non-partitioned table
+CREATE TABLE mc_schema.mc_tbl1 (
+    id INT,
+    name STRING,
+    amount DECIMAL(18, 6),
+    create_time DATETIME
+);
+
+-- Create partitioned table
+CREATE TABLE mc_schema.mc_tbl2 (
+    id INT,
+    val STRING,
+    ds STRING,
+    region STRING
+)
+PARTITION BY (ds, region)();
+
+-- Drop table (will also delete data, including partition data)
+DROP TABLE IF EXISTS mc_schema.mc_tbl1;
+```
+
+詳細については、[MaxCompute Catalog](../catalogs/maxcompute-catalog.md) のドキュメントを参照してください。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-nessie.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-nessie.md
new file mode 100644
index 00000000000..69aa19daaf3
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-nessie.md
@@ -0,0 +1,367 @@
+---
+{
+    "title": "Nessie との連携",
+    "language": "ja",
+    "description": "この記事では、Apache Doris と Nessie を連携させ、Iceberg データを効率的にクエリ・管理する方法を説明します。環境の準備から最後のクエリまで、手順を追って紹介します。"
+}
+---
+
+[Nessie](https://projectnessie.org/) は、データレイク向けのオープンソースのトランザクションカタログです。データに対して Git に似たバージョン管理機能を提供します。Iceberg REST Catalog 仕様を実装し、Apache Iceberg を含む複数のテーブル形式でブランチ、タグ、タイムトラベルなどの機能をサポートします。
+
+この記事では、Apache Doris と Nessie を連携させ、Iceberg データを効率的にクエリ・管理する方法を説明します。環境の準備から最後のクエリまで、手順を追って紹介します。
+
+**このドキュメントで学べること:**
+
+* **AWS 環境の準備**:AWS で S3 ストレージバケットを作成・設定し、Nessie 用の IAM ロールとポリシーを準備する方法。これにより、Nessie が S3 にアクセスし、Doris にアクセス認証情報を配布できるようになります。
+
+* **Nessie のデプロイと設定**:Docker Compose で Nessie サービスをデプロイし、Doris がメタデータにアクセスできるエンドポイントを提供するように Warehouse を設定する方法。
+
+* **Doris から Nessie への接続**:Nessie を介して Doris から Iceberg データにアクセスし、読み書きする方法。
+
+## 1. AWS 環境の準備
+
+まず、AWS 上に S3 ストレージバケットと対応する IAM ロールを準備します。これが、Nessie によるデータ管理と Doris によるデータアクセスの基盤になります。
+
+### 1.1 S3 ストレージバケットの作成
+
+後で作成する Iceberg テーブルのデータを保存するために、`nessie-doris-demo` という名前の S3 バケットを作成します。
+
+```bash
+# Create S3 storage bucket
+aws s3 mb s3://nessie-doris-demo --region us-east-1
+# Verify bucket creation success
+aws s3 ls | grep nessie-doris-demo
+```
+
+### 1.2 オブジェクトストレージにアクセスするための IAM ロールの作成(任意)
+
+Credential Vending モードを使用する場合は、Nessie が STS AssumeRole を介して使用する IAM ロールを作成する必要があります。この設計は、最小権限と職務分離のセキュリティ上のベストプラクティスに従います。
+
+1. 信頼ポリシーファイルを作成する
+
+    `nessie-trust-policy.json` ファイルを作成します。
+
+    ```bash
+    cat > nessie-trust-policy.json << 'EOF'
+    {
+        "Version": "2012-10-17",
+        "Statement": [
+        {
+            "Effect": "Allow",
+            "Principal": {
+                "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/YOUR_USER"
+            },
+            "Action": "sts:AssumeRole"
+        }
+        ]
+    }
+    EOF
+    ```
+
+    > 注:YOUR\_ACCOUNT\_ID は実際の AWS アカウント ID に置き換えてください。ID は `aws sts get-caller-identity --query Account --output text` で取得できます。YOUR\_USER は実際の IAM ユーザー名に置き換えてください。
+
+2. IAM ロールを作成する
+
+    ```bash
+    aws iam create-role \
+        --role-name nessie-sts-role \
+        --assume-role-policy-document file://nessie-trust-policy.json \
+        --description "IAM Role for Nessie to access S3 storage"
+    ```
+
+3. S3 アクセス権限ポリシーをアタッチする
+
+    `nessie-s3-policy.json` ファイルを作成します。
+
+    ```bash
+    cat > nessie-s3-policy.json << 'EOF'
+    {
+        "Version": "2012-10-17",
+        "Statement": [{
+            "Effect": "Allow",
+            "Action": [
+                "s3:ListBucket",
+                "s3:GetBucketLocation",
+                "s3:ListBucketMultipartUploads",
+                "s3:ListMultipartUploadParts",
+                "s3:AbortMultipartUpload",
+                "s3:GetObject",
+                "s3:PutObject",
+                "s3:DeleteObject"
+            ],
+            "Resource": [
+                "arn:aws:s3:::nessie-doris-demo",
+                "arn:aws:s3:::nessie-doris-demo/*"
+            ]
+        }]
+    }
+    EOF
+    ```
+
+    ポリシーをロールにアタッチします。
+
+    ```bash
+    aws iam put-role-policy \
+        --role-name nessie-sts-role \
+        --policy-name nessie-s3-access \
+        --policy-document file://nessie-s3-policy.json
+    ```
+
+4. ユーザーに AssumeRole 権限を付与する
+
+    ```bash
+    cat > user-assume-policy.json << 'EOF'
+    {
+        "Version": "2012-10-17",
+        "Statement": [{
+            "Effect": "Allow",
+            "Action": "sts:AssumeRole",
+            "Resource": "arn:aws:iam::YOUR_ACCOUNT_ID:role/nessie-sts-role"
+        }]
+    }
+    EOF
+
+    aws iam put-user-policy \
+        --user-name YOUR_USER \
+        --policy-name allow-assume-nessie-role \
+        --policy-document file://user-assume-policy.json
+    ```
+
+5. 作成結果を確認する
+
+    ```bash
+    aws iam get-role --role-name nessie-sts-role
+    aws iam list-role-policies --role-name nessie-sts-role
+    
+    # Verify AssumeRole is available
+    aws sts assume-role \
+        --role-arn arn:aws:iam::YOUR_ACCOUNT_ID:role/nessie-sts-role \
+        --role-session-name nessie-test
+    ```
+
+## 2. Nessie のデプロイと Warehouse の設定
+
+環境の準備が完了したら、Nessie サービスをデプロイし、Warehouse を設定します。
+
+### 2.1 Docker Compose による Nessie のデプロイ(Credential Vending モード)
+
+これは、**最も推奨される**デプロイ方法です。一時的な認証情報を使用することでセキュリティを高めます。
+
+AWS 認証情報を保存する `.env` ファイルを作成します。
+
+```bash
+AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
+AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
+```
+
+`docker-compose.yml` ファイルを作成します。
+
+```yaml
+version: "3.8"
+
+services:
+  postgres:
+    image: postgres:16
+    environment:
+      POSTGRES_DB: nessie
+      POSTGRES_USER: nessie
+      POSTGRES_PASSWORD: nessie
+    ports:
+      - "5432:5432"
+    volumes:
+      - pgdata:/var/lib/postgresql/data
+
+  nessie:
+    image: ghcr.io/projectnessie/nessie:0.106.0-java
+    depends_on:
+      - postgres
+    ports:
+      - "19120:19120"
+    environment:
+      JAVA_OPTS_APPEND: >-
+        -Dnessie.version.store.type=JDBC2
+        -Dnessie.version.store.persist.jdbc.datasource=postgresql
+        -Dquarkus.datasource.postgresql.jdbc.url=jdbc:postgresql://postgres:5432/nessie
+        -Dquarkus.datasource.postgresql.username=nessie
+        -Dquarkus.datasource.postgresql.password=nessie
+        -Dnessie.catalog.default-warehouse=nessie-warehouse
+        -Dnessie.catalog.warehouses.nessie-warehouse.location=s3://nessie-doris-demo/warehouse
+        -Dnessie.catalog.service.s3.default-options.region=us-east-1
+        -Dnessie.catalog.service.s3.default-options.auth-type=APPLICATION_GLOBAL
+        -Dnessie.catalog.service.s3.default-options.server-iam.enabled=true
+        -Dnessie.catalog.service.s3.default-options.server-iam.assume-role=arn:aws:iam::YOUR_ACCOUNT_ID:role/nessie-sts-role
+        -Dnessie.catalog.service.s3.default-options.server-iam.role-session-name=nessie-doris
+      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
+      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
+
+volumes:
+  pgdata:
+```
+
+**Credential Vending の主な設定パラメータ:**
+
+| パラメータ | 説明 |
+| --------- | ----------- |
+| `nessie.version.store.type` | バージョンストアの種類。PostgreSQL バックエンドには JDBC2 を使用します。 |
+| `nessie.catalog.default-warehouse` | デフォルトの Warehouse 名。 |
+| `nessie.catalog.warehouses.<name>.location` | Iceberg テーブルのデータを保存する S3 の場所。 |
+| `server-iam.enabled` | `true` に設定すると Credential Vending が有効になります。 |
+| `server-iam.assume-role` | Nessie が S3 にアクセスするために引き受ける IAM ロールの ARN。 |
+| `server-iam.role-session-name` | 引き受けたロールのセッション名。 |
+| `auth-type` | アプリケーションレベルの認証情報を使用する場合は `APPLICATION_GLOBAL` に設定します。 |
+
+Nessie を起動します。
+
+```bash
+docker compose up -d
+```
+
+起動後、`http://YOUR_HOST_IP:19120` から Nessie API にアクセスできます。
+
+### 2.2 Docker Compose による Nessie のデプロイ(静的認証情報モード)
+
+Credential Vending が不要な場合は、簡単なテスト用に静的認証情報モードを使用できます。
+
+AWS 認証情報を保存する `.env` ファイルを作成します。
+
+```bash
+AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
+AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
+```
+
+`docker-compose.yml` ファイルを作成します。
+
+```yaml
+version: "3.8"
+
+services:
+  postgres:
+    image: postgres:16
+    environment:
+      POSTGRES_DB: nessie
+      POSTGRES_USER: nessie
+      POSTGRES_PASSWORD: nessie
+    ports:
+      - "5432:5432"
+    volumes:
+      - pgdata:/var/lib/postgresql/data
+
+  nessie:
+    image: ghcr.io/projectnessie/nessie:0.106.0-java
+    depends_on:
+      - postgres
+    ports:
+      - "19120:19120"
+    environment:
+      JAVA_OPTS_APPEND: >-
+        -Dnessie.version.store.type=JDBC2
+        -Dnessie.version.store.persist.jdbc.datasource=postgresql
+        -Dquarkus.datasource.postgresql.jdbc.url=jdbc:postgresql://postgres:5432/nessie
+        -Dquarkus.datasource.postgresql.username=nessie
+        -Dquarkus.datasource.postgresql.password=nessie
+
+        -Dnessie.catalog.default-warehouse=nessie-warehouse
+        -Dnessie.catalog.warehouses.nessie-warehouse.location=s3://nessie-doris-demo/warehouse
+
+        -Dnessie.catalog.service.s3.default-options.region=us-east-1
+        -Dnessie.catalog.service.s3.default-options.access-key=urn:nessie-secret:quarkus:my-secrets-default
+        -Dmy-secrets-default.name=${AWS_ACCESS_KEY_ID}
+        -Dmy-secrets-default.secret=${AWS_SECRET_ACCESS_KEY}
+
+    env_file:
+      - .env
+
+volumes:
+  pgdata:
+```
+
+**主な設定パラメータ:**
+
+| パラメータ | 説明 |
+| --------- | ----------- |
+| `nessie.version.store.type` | バージョンストアの種類。PostgreSQL バックエンドには JDBC2 を使用します。 |
+| `nessie.catalog.default-warehouse` | デフォルトの Warehouse 名。 |
+| `nessie.catalog.warehouses.<name>.location` | Iceberg テーブルのデータを保存する S3 の場所。 |
+| `nessie.catalog.service.s3.default-options.region` | S3 バケットの AWS リージョン。 |
+
+## 3. Doris から Nessie への接続
+
+ここでは、Nessie サービスに接続する Iceberg Catalog を Doris で作成します。
+
+### 方法 1:一時的なストレージ認証情報(Credential Vending)
+
+これは**最も推奨される**方法です。S3 上のデータファイルを読み書きする際、Doris は Nessie に対して、権限を最小限に抑えた一時的な S3 アクセス認証情報を要求します。
+
+```sql
+CREATE CATALOG nessie_vc PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'http://YOUR_NESSIE_HOST:19120/iceberg/main',
+    'warehouse' = 'nessie-warehouse',
+    's3.endpoint' = 'https://s3.us-east-1.amazonaws.com',
+    's3.region' = 'us-east-1',
+    -- Enable credential vending
+    'iceberg.rest.vended-credentials-enabled' = 'true'
+);
+```
+
+> 注:Nessie REST Catalog の URI 形式は `http://HOST:PORT/iceberg/{branch}` です。`main` はデフォルトのブランチ名です。
+
+### 方法 2:静的なストレージ認証情報(AK/SK)
+
+この方法では、Doris は設定に直接記述した静的な AK/SK を使ってオブジェクトストレージにアクセスします。設定は簡単で、簡単なテストに適していますが、セキュリティは低くなります。
+
+```sql
+CREATE CATALOG nessie_static PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'http://YOUR_NESSIE_HOST:19120/iceberg/main',
+    'warehouse' = 'nessie-warehouse',
+    -- Directly provide S3 access keys
+    's3.access_key' = 'YOUR_ACCESS_KEY',
+    's3.secret_key' = 'YOUR_SECRET_KEY',
+    's3.endpoint' = 'https://s3.us-east-1.amazonaws.com',
+    's3.region' = 'us-east-1'
+);
+```
+
+## 4. Doris での接続確認
+
+どちらの方法で Catalog を作成した場合でも、次の SQL でエンドツーエンドの接続を確認できます。
+
+```sql
+-- Switch to the Catalog
+USE nessie_vc;
+
+-- Create a namespace (database)
+CREATE DATABASE demo;
+USE demo;
+
+-- Create an Iceberg table
+CREATE TABLE my_iceberg_table (
+  id INT,
+  name STRING
+)
+PROPERTIES (
+  'write-format'='parquet'
+);
+
+-- Insert data
+INSERT INTO my_iceberg_table VALUES (1, 'alice'), (2, 'bob');
+
+-- Query data
+SELECT * FROM my_iceberg_table;
+-- Expected result:
+-- +------+-------+
+-- | id   | name  |
+-- +------+-------+
+-- | 1    | alice |
+-- | 2    | bob   |
+-- +------+-------+
+```
+
+上記の操作がすべて成功すれば、Doris -> Nessie -> S3 という一連のデータレイクパイプラインが構築できています。
+
+Doris での Iceberg テーブルの管理について詳しくは、次のページを参照してください。
+
+https://doris.apache.org/docs/lakehouse/catalogs/iceberg-catalog
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-onelake.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-onelake.md
new file mode 100644
index 00000000000..2d3b1a0bbc8
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-onelake.md
@@ -0,0 +1,283 @@
+---
+{
+    "title": "Microsoft OneLake との連携",
+    "language": "ja",
+    "description": "Microsoft OneLake は Fabric エコシステムの一部であり、組織に一元化された論理データストレージ層を提供する、統合されたオープンな SaaS データレイクです。"
+}
+---
+
+**Microsoft OneLake** は Fabric エコシステムの一部であり、組織に一元化された論理データストレージ層を提供する、統合されたオープンな SaaS データレイクです。OneLake のデータは **Parquet** 形式で保存され、**Delta Lake** と **Apache Iceberg** のメタデータを同時に保持できます。この設計により、複数の分析エンジンが共有データセットに**データの複製や移行をせずに**直接アクセスでき、データの管理とガバナンスを大幅に簡素化できます。
+
+**Apache Doris の Iceberg REST Catalog** を利用すると、OneLake に保存されたデータをコピーしたり移動したりせずに、直接クエリと分析を実行できます。
+
+この連携により、OneLake の統合ストレージとガバナンス機能に Doris の高性能な分析処理を組み合わせ、単一のデータレイク上に**エンドツーエンドの分析パイプライン**を構築できます。
+
+技術的には、Doris はオープンなテーブル形式と標準化されたインターフェースを通じて OneLake と連携し、メタデータと Parquet ファイルの両方にアクセスします。このアーキテクチャでは、ガバナンス、アクセス制御、セキュリティポリシーの一元管理を維持し、プラットフォームの信頼性、拡張性、保守性を確保します。
+
+この記事では、環境の準備、認証、クエリの実行例を含め、Doris を OneLake に接続する手順を説明します。
+
+> Doris バージョン 3.1.4 以降が必要です。
+
+## OneLake のセットアップ
+
+まず **Fabric(OneLake)** 側でデータと認証を準備し、次にそのデータへアクセスするための **Iceberg REST Catalog** を Doris で作成します。
+
+### OneLake にデータを読み込む
+
+1. **Microsoft Fabric** コンソールを開き、新しい**ワークスペース(Workspace)**を作成します。一部の設定が制限される可能性があるため、既定のワークスペースは*使用しない*ことを推奨します。
+
+   ![Microsoft Fabric でワークスペースを作成する画面](/images/integrations/lakehouse/onelake/onelake-1.png)
+
+2. ワークスペース内で **新しいアイテム(New Item)→ Lakehouse** を選択し、Lakehouse インスタンスを作成します。
+
+   ![ワークスペースで Lakehouse を作成する画面](/images/integrations/lakehouse/onelake/onelake-2.png)
+
+3. **ワークスペースの設定(Workspace Settings)** に移動し、Lakehouse の機能を有効にするために必要な機能スイッチをオンにします。
+
+   ![ワークスペースの設定画面](/images/integrations/lakehouse/onelake/onelake-3.png)
+
+### ローカルファイルをアップロードする
+
+例として、ローカルの CSV ファイルを OneLake に直接アップロードします。以下はサンプルファイルです。
+
+![アップロードする CSV サンプルファイル](/images/integrations/lakehouse/onelake/onelake-4.png)
+
+1. ワークスペースの **ファイル(Files)** セクションに移動し、**アップロード(Upload)→ ファイルのアップロード(Upload Files)** をクリックして CSV ファイルを選択します。
+
+   ![OneLake にファイルをアップロードする画面](/images/integrations/lakehouse/onelake/onelake-5.png)
+
+2. アップロード後、**テーブルの読み込み(Load Tables)→ 新しいテーブル(New table)** を選択します。既存のテーブルがある場合は、そのテーブルに読み込むこともできます。
+
+3. インポートが完了したら、**テーブル(Tables)** ビューでテーブルとデータを確認します。
+
+   ![インポートしたテーブルの表示画面](/images/integrations/lakehouse/onelake/onelake-6.png)
+
+### 認証の設定
+
+Doris が Iceberg REST Catalog を介して OneLake にアクセスできるように、Azure ポータルで**アプリの登録とアクセス許可**を設定します。
+
+1. **Azure ポータル(Azure Portal)→ アプリの登録(App registrations)→ 新規登録(New registration)** を開き、後で使用する次の値を控えます。
+
+   * アプリケーション(クライアント)ID
+
+   * ディレクトリ(テナント)ID
+
+   ![Azure でのアプリ登録画面](/images/integrations/lakehouse/onelake/onelake-7.png)
+
+* **API のアクセス許可(API Permissions)** で、**Azure Storage** に必要なアクセス許可を追加します。最小権限の原則に従ってください。
+
+  ![Azure Storage の API アクセス許可設定画面](/images/integrations/lakehouse/onelake/onelake-8.png)
+
+* **証明書とシークレット(Certificates & secrets)** で**クライアントシークレット**を作成し、その値を安全に保管します。ページを離れると値は表示されなくなります。
+
+  ![クライアントシークレットの作成画面](/images/integrations/lakehouse/onelake/onelake-9.png)
+
+* **Fabric ワークスペース(Fabric Workspace)→ アクセスの管理(Manage Access)** に戻り、登録したアプリを表示名で検索してアクセス主体として追加します。
+
+  ![Fabric ワークスペースのアクセス管理画面](/images/integrations/lakehouse/onelake/onelake-10.png)
+
+これで、OneLake のデータと認証の準備は完了です。
+
+## Apache Doris から OneLake に接続する
+
+次に、Doris で **Iceberg REST Catalog** を作成し、OneLake のデータに接続します。
+
+### Catalog を作成する
+
+```sql
+Doris> CREATE CATALOG onelake_doris PROPERTIES (
+            'type' = 'iceberg',
+            'iceberg.catalog.type' = 'rest',
+            'uri'='https://onelake.table.fabric.microsoft.com/iceberg',
+            'warehouse'='<workerspace_id>/<data_item_id>',
+            'iceberg.rest.security.type'='oauth2',
+            'iceberg.rest.oauth2.server-uri'='https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token',
+            'iceberg.rest.oauth2.credential'='<oauth2.client_id>:<oauth2.client_secret>',
+            'iceberg.rest.oauth2.scope'='https://storage.azure.com/.default', 
+            'fs.azure.support'='true',
+            'azure.endpoint'='https://onelake.dfs.fabric.microsoft.com',
+            'azure.auth_type'='OAuth2',
+            'azure.oauth2_account_host'='onelake.dfs.fabric.microsoft.com',
+            'azure.oauth2_server_uri'='https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token',
+            'azure.oauth2_client_id'='<oauth2.client_id>',
+            'azure.oauth2_client_secret'='<oauth2.client_secret>'
+        );
+```
+
+Catalog を作成する際には、次のパラメータが必要です。
+
+* `WORKSPACE_ID` と `DATA_ITEM_ID` は、Lakehouse の URL から確認できます。
+
+  `https://app.fabric.microsoft.com/groups/<WORKSPACE_ID>/lakehouses/<DATA_ITEM_ID>`
+
+* `client_id`、`client_secret`、`tenant` などのパラメータには、Azure で登録したアプリの情報を使用します。
+
+* OneLake では、`iceberg.rest.oauth2.scope`、`uri`、`azure.oauth2_account_host`、`azure.endpoint` などの設定キーの値は通常固定です。詳細は公式ドキュメントや設定例を参照してください。
+
+設定が完了すると、標準 SQL を使用して Doris から OneLake の Iceberg テーブルに直接クエリを実行できます。
+
+### 基本的な分析
+
+以下は、Doris と OneLake を組み合わせた統合分析の一般的なビジネス向けの例です。
+
+```sql
+Doris> SWITCH onelake_doris;
+Query OK, 0 rows affected
+
+Doris> USE dbo;
+Database changed
+
+Doris> SHOW TABLES;
++----------------+
+| Tables_in_dbo  |
++----------------+
+| customer_order |
++----------------+
+1 row in set
+```
+
+1. 過去三日間の新規注文を追跡する
+
+   保留中、支払い済み、完了済みの注文を含む最近の販売状況をリアルタイムに把握し、受注処理の優先順位付けに役立てます。
+
+   ```sql
+   Doris> SELECT order_id, customer_name, product_name, total_price, status
+       -> FROM customer_order
+       -> WHERE order_date >= DATE_SUB(NOW(), INTERVAL 3 DAY)
+       -> ORDER BY order_date DESC;
+
+   +----------------+---------------+---------------------+-------------+-----------+
+   | order_id       | customer_name | product_name        | total_price | status    |
+   +----------------+---------------+---------------------+-------------+-----------+
+   | ORD20251112002 | Bob Li        | Smart Watch         |        1128 | Completed |
+   | ORD20251112001 | Alice Zhang   | Wireless Headphones |         499 | Completed |
+   | ORD20251112003 | Chen Wei      | Bluetooth Speaker   |         299 | Pending   |
+   +----------------+---------------+---------------------+-------------+-----------+
+   3 rows in set
+   ```
+
+2. 都市別の販売実績を分析する
+
+   都市ごとの売上合計と注文数を集計し、地域別の販売戦略や在庫計画に役立てます。
+
+   ```sql
+   Doris> SELECT city,
+       ->        SUM(total_price) AS total_sales,
+       ->        COUNT(*) AS order_count
+       -> FROM customer_order
+       -> WHERE status = 'Completed'
+       -> GROUP BY city
+       -> ORDER BY total_sales DESC;
+
+   +----------+-------------+-------------+
+   | city     | total_sales | order_count |
+   +----------+-------------+-------------+
+   | Beijing  |        1128 |           1 |
+   | Shanghai |         499 |           1 |
+   | Shenzhen |         387 |           1 |
+   +----------+-------------+-------------+
+   3 rows in set
+   ```
+
+3. 支払い方法別の返金率を分析する
+
+   返金率が特に高い支払い手段を特定し、財務部門やリスク管理部門によるポリシーの調整や監視の強化に役立てます。
+
+   ```sql
+   Doris> SELECT payment_method,
+       -> SUM(CASE WHEN status = 'Refunded' THEN 1 ELSE 0 END) * 100.0 / COUNT(*)
+       ->    AS refund_rate_percent
+       -> FROM customer_order
+       -> GROUP BY payment_method
+       -> ORDER BY refund_rate_percent DESC;
+
+   +----------------+---------------------+
+   | payment_method | refund_rate_percent |
+   +----------------+---------------------+
+   | Credit Card    |            50.00000 |
+   | WeChat Pay     |             0.00000 |
+   | Alipay         |             0.00000 |
+   | UnionPay       |             0.00000 |
+   +----------------+---------------------+
+   4 rows in set
+   ```
+
+4. システム間でユーザー行動を比較する
+
+   旧システム(Hive など)と OneLake の両方が稼働している場合、移行後のユーザーの重複や行動の変化を分析し、ビジネスへの影響を評価できます。
+
+   ```sql
+   -- "hive_catalog" is a Hive Catalog created in Doris 
+   Doris> SELECT
+       ->     a.customer_id,
+       ->     COUNT(DISTINCT b.order_id) AS new_order_count,
+       ->     SUM(b.total_price) AS new_total_amount
+       -> FROM hive_catalog.order_db.hive_customer_order a
+       -> JOIN onelake_doris.dbo.customer_order b
+       ->   ON a.customer_id = b.customer_id
+       -> GROUP BY a.customer_id
+       -> ORDER BY new_total_amount DESC
+       -> LIMIT 100;
+       
+   +-------------+-----------------+------------------+
+   | customer_id | new_order_count | new_total_amount |
+   +-------------+-----------------+------------------+
+   | CUST1002    |               1 |             1128 |
+   | CUST1001    |               1 |              499 |
+   | CUST1004    |               1 |              387 |
+   | CUST1003    |               1 |              299 |
+   | CUST1005    |               1 |              189 |
+   +-------------+-----------------+------------------+
+   5 rows in set
+   ```
+
+### スナップショットとタイムトラベル
+
+```sql
+Doris> SELECT * FROM customer_order$snapshots\G
+*************************** 1. row ***************************
+ committed_at: 2025-11-12 17:21:06.692000
+  snapshot_id: 7623467350518045470
+    parent_id: NULL
+    operation: overwrite
+manifest_list: abfss://181a804a-ea52-...
+      summary: {"XTABLE_METADATA":"{"lastInstantSynced":"2025-11-12...
+1 row in set (1.90 sec)
+
+mysql> SELECT * FROM customer_order FOR VERSION AS OF 7623467350518045470 LIMIT 1\G
+*************************** 1. row ***************************
+      order_id: ORD20251112001
+   customer_id: CUST1001
+ customer_name: Alice Zhang
+         email: alice.zhang@example.com
+         phone: 13812345678
+       country: China
+          city: Shanghai
+    order_date: 2025-11-10 22:23:00.000000
+    product_id: PROD-A100
+  product_name: Wireless Headphones
+      category: Electronics
+      quantity: 1
+    unit_price: 499
+   total_price: 499
+payment_method: Credit Card
+        status: Completed
+1 row in set
+```
+
+## まとめ
+
+このガイドでは、**Apache Doris** と **Microsoft OneLake** を連携させ、統合されたデータレイクアーキテクチャ上で高性能な分析を行う方法を示しました。
+&#x20;この連携には、次の主な利点があります。
+
+* **データ移動が不要**:データのコピーや移行をせずに、OneLake のデータへ直接アクセスできます。
+
+* **統合されたガバナンス**:データレイク全体で、管理、アクセス制御、セキュリティポリシーを一元化できます。
+
+* **オープン形式との互換性**:オープンなテーブル標準である **Iceberg** を基盤とし、プラットフォーム間の相互運用性を確保できます。
+
+* **柔軟な分析**:Doris の強力な OLAP エンジンと OneLake の拡張性の高いストレージ層を組み合わせられます。
+
+**リアルタイムのビジネス監視**、**システム間のデータ比較**、**複雑な多次元分析**のいずれにおいても、このアーキテクチャは高い性能と柔軟性を提供します。データレイク技術が進化し続ける中、Doris と OneLake の連携は企業のデジタル変革を支える堅固なデータ基盤となります。
+
+この記事の設定手順に従って独自の分析環境を構築し、ビジネスのニーズに合わせた、さらに高度な分析シナリオを試してみてください。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon-capability-matrix.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon-capability-matrix.mdx
new file mode 100644
index 00000000000..b48d97e5d7c
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon-capability-matrix.mdx
@@ -0,0 +1,701 @@
+---
+{
+    "title": "Paimon Catalog の機能対応表",
+    "language": "ja",
+    "description": "Apache Doris がサポートする Paimon Catalog バックエンドの機能対応表。"
+}
+---
+
+以下の表は、Doris で現在利用できる Paimon Catalog の機能をまとめたものです。行は機能分野ごとにグループ化され、バックエンドごとの列は、Doris が対応するメタデータサービスを使用する場合に各操作を実行できるかどうかを示します。✅ は Doris がその操作をサポートしていることを、❌ は現時点ではサポートしていないことを示します。
+
+DLF 列は `paimon.catalog.type=dlf` を指します。この設定では Hive 互換のメタストアクライアントを使用し、OSS または OSS-HDFS のストレージ設定が必要です。`paimon.catalog.type=rest` 経由でアクセスする DLF は REST 列に含まれます。
+
+<table>
+  <thead>
+    <tr>
+      <th>機能カテゴリ</th>
+      <th>操作</th>
+      <th>ファイルシステム</th>
+      <th>HMS</th>
+      <th>DLF</th>
+      <th>JDBC</th>
+      <th>REST</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td rowSpan={8}>名前空間 / データベース</td>
+      <td><code>LIST_NAMESPACES</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>LOAD_NAMESPACE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>NAMESPACE_EXISTS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_NAMESPACE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_NAMESPACE_PROPERTIES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>DROP_NAMESPACE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DROP_NAMESPACE_CASCADE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>MULTILEVEL_NAMESPACE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={13}>テーブルのライフサイクル</td>
+      <td><code>LIST_TABLES</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>LOAD_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>TABLE_EXISTS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_TABLE_WITH_LOCATION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>CTAS</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ATOMIC_CTAS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REGISTER_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REPLACE_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>DROP_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>PURGE_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>RENAME_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>SET_TABLE_LOCATION</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={9}>スキーマとレイアウトの変更</td>
+      <td><code>ADD_COLUMN</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DROP_COLUMN</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>RENAME_COLUMN</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_COLUMN_TYPE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_COLUMN_NULLABILITY</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>SET_TABLE_PROPERTIES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>UNSET_TABLE_PROPERTIES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>EVOLVE_PARTITION_SPEC</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>EVOLVE_SORT_ORDER</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={8}>ビュー</td>
+      <td><code>LIST_VIEWS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>LOAD_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>READ_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>CREATE_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REPLACE_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>ALTER_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>RENAME_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>DROP_VIEW</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={11}>データ書き込み</td>
+      <td><code>APPEND</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>OVERWRITE_TABLE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>OVERWRITE_PARTITION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DYNAMIC_PARTITION_OVERWRITE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>UPDATE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>DELETE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>MERGE_INTO</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>UPSERT</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>PARTIAL_UPDATE</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>WRITE_TO_BRANCH</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>SCHEMA_EVOLUTION_ON_WRITE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={12}>トランザクションと同時実行</td>
+      <td><code>ATOMIC_SINGLE_TABLE_COMMIT</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>MULTI_TABLE_COMMIT</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>STAGED_CREATE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>OPTIMISTIC_CONCURRENCY</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_CONFLICT_DETECTION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_RETRY</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_IDEMPOTENCY</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>COMMIT_STATUS_RECOVERY</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>LOCK_REQUIRED</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>LOCK_CONFIGURED</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">✅</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>SERIALIZABLE_ISOLATION</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>FAILED_WRITE_CLEANUP</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td rowSpan={10}>ブランチ / タグ</td>
+      <td><code>BRANCH_CREATE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>BRANCH_DROP</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>READ_BY_BRANCH</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>BRANCH_WRITE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>BRANCH_FAST_FORWARD</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>TAG_CREATE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>TAG_DROP</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>READ_BY_TAG</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>TAG_WRITE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>TAG_FAST_FORWARD</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={4}>スナップショット</td>
+      <td><code>READ_BY_VERSION</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>READ_BY_TIME</code></td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+      <td align="center">✅</td>
+    </tr>
+    <tr>
+      <td><code>ROLLBACK</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>EXPIRE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={5}>メンテナンス</td>
+      <td><code>REMOVE_ORPHAN_FILES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REWRITE_DATA_FILES / COMPACT</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REWRITE_MANIFESTS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>REWRITE_DELETE_FILES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>EXPIRE_CHANGELOGS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td rowSpan={3}>データ取り込み</td>
+      <td><code>ADD_FILES</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>MIGRATE_TABLE</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+    <tr>
+      <td><code>COMPUTE_TABLE_STATS</code></td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+      <td align="center">❌</td>
+    </tr>
+  </tbody>
+</table>
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon.md
new file mode 100644
index 00000000000..070b3a7b4f0
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-paimon.md
@@ -0,0 +1,250 @@
+---
+{
+    "title": "Doris と Paimon の活用",
+    "language": "ja",
+    "description": "新しいオープンなデータ管理アーキテクチャであるデータレイクハウスは、データウェアハウスの高性能とリアルタイム処理能力を、"
+}
+---
+
+データレイクハウスは、新しいオープンなデータ管理アーキテクチャとして、データウェアハウスの高性能とリアルタイム処理能力を、データレイクの低コストと柔軟性と組み合わせます。これにより、ユーザーはさまざまなデータ処理・分析のニーズに対応しやすくなります。企業のビッグデータシステムでも採用が進んでいます。
+
+近年のバージョンで、Apache Doris はデータレイクとの連携を深め、成熟したデータレイクハウスソリューションへと発展してきました。
+
+- バージョン 0.15 以降、Apache Doris は Hive と Iceberg の外部テーブルを導入し、データレイクにおける Apache Iceberg との連携の可能性を探ってきました。
+- バージョン 1.2 から、Apache Doris は Multi-Catalog 機能を正式に導入しました。さまざまなデータソースのメタデータを自動的にマッピングしてデータにアクセスできるようになり、外部データの読み取りとクエリ実行にも多くの性能最適化が加わりました。これにより、高速で使いやすいレイクハウスアーキテクチャを構築できるようになりました。
+- バージョン 2.1 では、Apache Doris のデータレイクハウスアーキテクチャが大幅に強化されました。主要なデータレイク形式(Hudi、Iceberg、Paimon など)の読み書き能力を高め、複数の SQL 方言との互換性を導入して、既存システムから Apache Doris へのシームレスな移行を可能にしました。データサイエンスや大規模なデータ読み取りの用途では、高速読み取りインターフェースの Arrow Flight を統合し、データ転送効率を 100 倍に向上させました。
+
+![Doris と Paimon を使用したレイクハウスの構築](/images/lakehouse-architecture-for-doris-and-paimon.png)
+
+## Apache Doris と Paimon
+
+Apache Paimon は、データレイク形式と LSM 構造の利点を組み合わせたデータレイク形式です。データレイクアーキテクチャに効率的なリアルタイムのストリーミング更新機能をもたらします。これにより、Paimon はデータを効率的に管理してリアルタイムに分析でき、リアルタイムのデータレイクハウスアーキテクチャの構築を支えます。
+
+Paimon の機能を十分に活用し、Paimon データのクエリ効率を高めるため、Apache Doris は Paimon の次の機能をネイティブにサポートしています。
+
+- Hive Metastore や FileSystem など、さまざまな種類の Paimon Catalog をサポートします。
+- Paimon 0.6 の Primary Key Table Read Optimized 機能をネイティブにサポートします。
+- Paimon 0.8 の Primary Key Table Deletion Vector 機能をネイティブにサポートします。
+
+Apache Doris の高性能なクエリエンジンと Apache Paimon の効率的なリアルタイムストリーミング更新機能を組み合わせることで、次のことが可能になります。
+
+- リアルタイムのデータレイクへの取り込み:Paimon の LSM-Tree モデルを活用することで、データレイクへの取り込みの遅延を分単位に短縮できます。また、Paimon は集約、重複排除、列の部分更新など、さまざまなデータ更新機能をサポートしており、データフローをより柔軟かつ効率的にします。
+- 高性能なデータ処理と分析:Paimon の Append Only Table、Read Optimized、Deletion Vector などの技術を Doris の強力なクエリエンジンとシームレスに統合し、データレイク内のデータに対するクエリと分析に高速に応答できます。
+
+今後、Apache Doris は Time Travel や増分データの読み取りなど、Apache Paimon の高度な機能を段階的にサポートし、統一された高性能なリアルタイムレイクハウスプラットフォームの構築を進めます。
+
+この記事では、Docker 環境に Apache Doris と Apache Paimon のテスト・デモ環境をすばやく構築する方法と、さまざまな機能の使い方を説明します。
+
+詳しくは [Paimon Catalog](../catalogs/paimon-catalog.mdx) を参照してください。
+
+## ユーザーガイド
+
+この記事で使用するスクリプトとコードは、次の場所から入手できます。 [https://github.com/apache/doris/tree/master/samples/datalake/iceberg_and_paimon](https://github.com/apache/doris/tree/master/samples/datalake/iceberg_and_paimon)
+
+### 01 環境の準備
+
+この記事では Docker Compose を使用して、次のコンポーネントとバージョンをデプロイします。
+
+| コンポーネント | バージョン |
+| --- | --- |
+| Apache Doris | デフォルトは 2.1.5(変更可能) |
+| Apache Paimon | 0.8 |
+| Apache Flink | 1.18 |
+| MinIO | RELEASE.2024-04-29T09-56-05Z |
+
+### 02 環境のデプロイ
+
+1. すべてのコンポーネントを起動します
+
+	`bash ./start_all.sh`
+
+2. 起動後、次のスクリプトを使用して Flink または Doris のコマンドラインにログインできます。
+
+	```
+	-- login flink
+	bash ./start_flink_client.sh
+	
+	-- login doris
+	bash ./start_doris_client.sh
+	```
+
+### 03 データの準備
+
+Flink のコマンドラインにログインすると、作成済みのテーブルを確認できます。このテーブルにはデータがすでに格納されており、Flink SQL で参照できます。
+
+```
+Flink SQL> use paimon.db_paimon;
+[INFO] Execute statement succeed.
+
+Flink SQL> show tables;
++------------+
+| table name |
++------------+
+|   customer |
++------------+
+1 row in set
+
+Flink SQL> show create table customer;
++------------------------------------------------------------------------+
+|                                                                 result |
++------------------------------------------------------------------------+
+| CREATE TABLE `paimon`.`db_paimon`.`customer` (
+  `c_custkey` INT NOT NULL,
+  `c_name` VARCHAR(25),
+  `c_address` VARCHAR(40),
+  `c_nationkey` INT NOT NULL,
+  `c_phone` CHAR(15),
+  `c_acctbal` DECIMAL(12, 2),
+  `c_mktsegment` CHAR(10),
+  `c_comment` VARCHAR(117),
+  CONSTRAINT `PK_c_custkey_c_nationkey` PRIMARY KEY (`c_custkey`, `c_nationkey`) NOT ENFORCED
+) PARTITIONED BY (`c_nationkey`)
+WITH (
+  'bucket' = '1',
+  'path' = 's3://warehouse/wh/db_paimon.db/customer',
+  'deletion-vectors.enabled' = 'true'
+)
+ |
++-------------------------------------------------------------------------+
+1 row in set
+
+Flink SQL> desc customer;
++--------------+----------------+-------+-----------------------------+--------+-----------+
+|         name |           type |  null |                         key | extras | watermark |
++--------------+----------------+-------+-----------------------------+--------+-----------+
+|    c_custkey |            INT | FALSE | PRI(c_custkey, c_nationkey) |        |           |
+|       c_name |    VARCHAR(25) |  TRUE |                             |        |           |
+|    c_address |    VARCHAR(40) |  TRUE |                             |        |           |
+|  c_nationkey |            INT | FALSE | PRI(c_custkey, c_nationkey) |        |           |
+|      c_phone |       CHAR(15) |  TRUE |                             |        |           |
+|    c_acctbal | DECIMAL(12, 2) |  TRUE |                             |        |           |
+| c_mktsegment |       CHAR(10) |  TRUE |                             |        |           |
+|    c_comment |   VARCHAR(117) |  TRUE |                             |        |           |
++--------------+----------------+-------+-----------------------------+--------+-----------+
+8 rows in set
+
+Flink SQL> select * from customer order by c_custkey limit 4;
++-----------+--------------------+--------------------------------+-------------+-----------------+-----------+--------------+--------------------------------+
+| c_custkey |             c_name |                      c_address | c_nationkey |         c_phone | c_acctbal | c_mktsegment |                      c_comment |
++-----------+--------------------+--------------------------------+-------------+-----------------+-----------+--------------+--------------------------------+
+|         1 | Customer#000000001 |              IVhzIApeRb ot,c,E |          15 | 25-989-741-2988 |    711.56 |     BUILDING | to the even, regular platel... |
+|         2 | Customer#000000002 | XSTf4,NCwDVaWNe6tEgvwfmRchLXak |          13 | 23-768-687-3665 |    121.65 |   AUTOMOBILE | l accounts. blithely ironic... |
+|         3 | Customer#000000003 |                   MG9kdTD2WBHm |           1 | 11-719-748-3364 |   7498.12 |   AUTOMOBILE |  deposits eat slyly ironic,... |
+|        32 | Customer#000000032 | jD2xZzi UmId,DCtNBLXKj9q0Tl... |          15 | 25-430-914-2194 |   3471.53 |     BUILDING | cial ideas. final, furious ... |
++-----------+--------------------+--------------------------------+-------------+-----------------+-----------+--------------+--------------------------------+
+4 rows in set
+```
+
+### 04 データのクエリ
+
+Doris クラスターには、以下のように `paimon` という名前の Catalog が作成されています(SHOW CATALOGS で確認できます)。この Catalog を作成する SQL 文は次のとおりです。
+
+```
+-- Already created, no need to run
+CREATE CATALOG `paimon` PROPERTIES (
+    "type" = "paimon",
+    "warehouse" = "s3://warehouse/wh/",
+    "s3.endpoint"="http://minio:9000",
+    "s3.access_key"="admin",
+    "s3.secret_key"="password",
+    "s3.region"="us-east-1"
+);
+```
+
+Doris から Paimon のデータをクエリできます。
+
+```
+mysql> use paimon.db_paimon;
+Reading table information for completion of table and column names
+You can turn off this feature to get a quicker startup with -A
+
+Database changed
+mysql> show tables;
++---------------------+
+| Tables_in_db_paimon |
++---------------------+
+| customer            |
++---------------------+
+1 row in set (0.00 sec)
+
+mysql> select * from customer order by c_custkey limit 4;
++-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
+| c_custkey | c_name             | c_address                             | c_nationkey | c_phone         | c_acctbal | c_mktsegment | c_comment                                                                                              |
++-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
+|         1 | Customer#000000001 | IVhzIApeRb ot,c,E                     |          15 | 25-989-741-2988 |    711.56 | BUILDING     | to the even, regular platelets. regular, ironic epitaphs nag e                                         |
+|         2 | Customer#000000002 | XSTf4,NCwDVaWNe6tEgvwfmRchLXak        |          13 | 23-768-687-3665 |    121.65 | AUTOMOBILE   | l accounts. blithely ironic theodolites integrate boldly: caref                                        |
+|         3 | Customer#000000003 | MG9kdTD2WBHm                          |           1 | 11-719-748-3364 |   7498.12 | AUTOMOBILE   |  deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov |
+|        32 | Customer#000000032 | jD2xZzi UmId,DCtNBLXKj9q0Tlp2iQ6ZcO3J |          15 | 25-430-914-2194 |   3471.53 | BUILDING     | cial ideas. final, furious requests across the e                                                       |
++-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
+4 rows in set (1.89 sec)
+```
+
+### 05 増分データの読み取り
+
+Flink SQL を使用して Paimon テーブルのデータを更新できます。
+
+```
+Flink SQL> update customer set c_address='c_address_update' where c_nationkey = 1;
+[INFO] Submitting SQL update statement to the cluster...
+[INFO] SQL update statement has been successfully submitted to the cluster:
+Job ID: ff838b7b778a94396b332b0d93c8f7ac
+```
+
+Flink SQL の実行が完了すると、Doris から最新のデータを直接確認できます。
+
+```
+mysql> select * from customer where c_nationkey=1 limit 2;
++-----------+--------------------+-----------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
+| c_custkey | c_name             | c_address       | c_nationkey | c_phone         | c_acctbal | c_mktsegment | c_comment                                                                                              |
++-----------+--------------------+-----------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
+|         3 | Customer#000000003 | c_address_update |           1 | 11-719-748-3364 |   7498.12 | AUTOMOBILE   |  deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov |
+|       513 | Customer#000000513 | c_address_update |           1 | 11-861-303-6887 |    955.37 | HOUSEHOLD    | press along the quickly regular instructions. regular requests against the carefully ironic s          |
++-----------+--------------------+-----------------+-------------+-----------------+-----------+--------------+--------------------------------------------------------------------------------------------------------+
+2 rows in set (0.19 sec)
+```
+
+### ベンチマーク
+
+Paimon 0.8 の TPCDS 1000 データセットを使用し、Primary Key Table Read Optimized 機能を有効にした Apache Doris 2.1.5 と Trino 422 で簡単なテストを実施しました。
+
+![](/images/quick-start/lakehouse-paimon-benchmark.PNG)
+
+テスト結果では、標準的な静的テストセットにおける Doris の平均クエリ性能は、Trino の 3~5 倍でした。今後は Deletion Vector を最適化し、実際のビジネスシナリオでのクエリ効率をさらに高めていきます。
+
+## クエリの最適化
+
+Apache Paimon 0.6 で Primary Key Table Read Optimized 機能が導入され、クエリエンジンは基準データの Parquet/ORC ファイルに直接アクセスできるようになりました。これにより、基準データの読み取り効率が大幅に向上します。マージされていない増分データ(INSERT、UPDATE、DELETE によって生成されたデータの増分)は、Merge-on-Read で読み取れます。さらに、Paimon 0.8 で導入された Deletion Vector 機能は、増分データを読み取る際のクエリエンジンの効率を一段と高めます。
+Apache Doris は、ネイティブ Reader による Deletion Vector の読み取りと Merge on Read をサポートしています。以下では Doris の EXPLAIN 文を使用し、クエリで基準データと増分データを読み取る方法を示します。
+
+```
+mysql> explain verbose select * from customer where c_nationkey < 3;
++------------------------------------------------------------------------------------------------------------------------------------------------+
+| Explain String(Nereids Planner)                                                                                                                |
++------------------------------------------------------------------------------------------------------------------------------------------------+
+| ...............                                                                                                                                |
+|                                                                                                                                                |
+|   0:VPAIMON_SCAN_NODE(68)                                                                                                                      |
+|      table: customer                                                                                                                           |
+|      predicates: (c_nationkey[#3] < 3)                                                                                                         |
+|      inputSplitNum=4, totalFileSize=238324, scanRanges=4                                                                                       |
+|      partition=3/0                                                                                                                             |
+|      backends:                                                                                                                                 |
+|        10002                                                                                                                                   |
+|          s3://warehouse/wh/db_paimon.db/customer/c_nationkey=1/bucket-0/data-15cee5b7-1bd7-42ca-9314-56d92c62c03b-0.orc start: 0 length: 66600 |
+|          s3://warehouse/wh/db_paimon.db/customer/c_nationkey=1/bucket-0/data-5d50255a-2215-4010-b976-d5dc656f3444-0.orc start: 0 length: 44501 |
+|          s3://warehouse/wh/db_paimon.db/customer/c_nationkey=2/bucket-0/data-e98fb7ef-ec2b-4ad5-a496-713cb9481d56-0.orc start: 0 length: 64059 |
+|          s3://warehouse/wh/db_paimon.db/customer/c_nationkey=0/bucket-0/data-431be05d-50fa-401f-9680-d646757d0f95-0.orc start: 0 length: 63164 |
+|      cardinality=18751, numNodes=1                                                                                                             |
+|      pushdown agg=NONE                                                                                                                         |
+|      paimonNativeReadSplits=4/4                                                                                                                |
+|      PaimonSplitStats:                                                                                                                         |
+|        SplitStat [type=NATIVE, rowCount=1542, rawFileConvertable=true, hasDeletionVector=true]                                                 |
+|        SplitStat [type=NATIVE, rowCount=750, rawFileConvertable=true, hasDeletionVector=false]                                                 |
+|        SplitStat [type=NATIVE, rowCount=750, rawFileConvertable=true, hasDeletionVector=false]                                                 |
+|      tuple ids: 0
+| ...............                                                                                                           |                                                                                                  |
++------------------------------------------------------------------------------------------------------------------------------------------------+
+67 rows in set (0.23 sec)
+```
+
+Flink SQL で更新したテーブルには 4 つのシャードがあり、すべて Native Reader からアクセスできます(paimonNativeReadSplits=4/4)。また、最初のシャードの hasDeletionVector プロパティは true で、このシャードに対応する Deletion Vector が存在することを示しています。読み取り時には、この Deletion Vector に従ってデータがフィルタリングされます。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-polaris.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-polaris.md
new file mode 100644
index 00000000000..b41e2929cd7
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-polaris.md
@@ -0,0 +1,383 @@
+---
+{
+    "title": "Apache Polaris との連携",
+    "language": "ja",
+    "description": "データレイク技術が進化し続ける中、AWS S3 などのオブジェクトストレージ上にある膨大なデータを効率的かつ安全に管理しながら"
+}
+---
+
+データレイク技術が進化し続ける中、AWS S3 などのオブジェクトストレージ上にある大量のデータを効率的かつ安全に管理し、同時に Apache Doris などの上流の分析エンジンに統一されたアクセスポイントを提供することは、現代のデータアーキテクチャにおける重要な課題となっています。Apache Polaris は、Iceberg 向けのオープンで標準化された REST Catalog サービスとして、この課題に対する有効な解決策を提供します。メタデータを一元管理するだけでなく、きめ細かなアクセス制御と柔軟な認証情報管理の仕組みによって、データレイクのセキュリティと管理性を大きく向上させます。
+
+この記事では、Apache Doris と Polaris を連携させ、S3 上の Iceberg データを効率的にクエリおよび管理する方法を詳しく説明します。環境の準備から最後のクエリまで、手順を追って説明します。
+
+**このドキュメントで学べること:**
+
+* **AWS 環境の準備**:AWS で S3 バケットを作成・設定し、Polaris と Doris に必要な IAM ロールとポリシーを準備する方法。これにより、Polaris 自身が S3 にアクセスし、Doris にアクセス用の認証情報を配布できるようにします。
+
+* **Polaris のデプロイと設定**:サーバー上で Polaris サービスをダウンロードして起動し、Polaris で Iceberg Catalog、Namespace、および対応する Principal/Role/権限を作成して、Doris に安全なメタデータアクセス用エンドポイントを提供する方法。
+
+* **Doris から Polaris への接続**:Doris が OAuth2 を通じて Polaris からメタデータアクセス用トークンを取得する仕組みと、基盤となるストレージにアクセスする次の二つの主な方法。
+
+  1. Polaris が発行する一時的な AK/SK(Credential Vending の仕組み)
+  2. Doris が静的な AK/SK を直接使用して S3 にアクセスする方法
+
+> Doris バージョン 3.1+ が必要です。
+
+## 1. AWS 環境の準備
+
+最初に、AWS 上で S3 バケットと対応する IAM ロールを準備します。これらは、Polaris によるデータの管理と Doris によるデータへのアクセスの基盤となります。
+
+### 1.1 S3 バケットを作成する
+
+まず、後で作成する Iceberg テーブルのデータを保存するため、`polaris-doris-demo` という名前の S3 バケットを作成します。
+
+```bash
+# Create S3 storage bucket
+aws s3 mb s3://polaris-doris-demo --region us-west-2
+# Verify bucket creation success
+aws s3 ls | grep polaris-doris-demo
+```
+
+### 1.2 オブジェクトストレージへのアクセス用 IAM ロールを作成する
+
+認証情報を安全に管理するため、Polaris が STS AssumeRole の仕組みを通じて使用する IAM ロールを作成します。この設計は、最小権限の原則と職務の分離というセキュリティ上のベストプラクティスに沿っています。
+
+1. 信頼ポリシーファイルを作成する
+
+    `polaris-trust-policy.json` ファイルを作成します。
+
+    ```bash
+    cat > polaris-trust-policy.json << 'EOF'
+    {
+        "Version": "2012-10-17",
+        "Statement": [
+        {
+            "Effect": "Allow",
+            "Principal": {
+            "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:root"
+            },
+            "Action": "sts:AssumeRole",
+            "Condition": {
+            "StringEquals": {
+                "sts:ExternalId": "polaris-doris-demo"
+            }
+            }
+        }
+        ]
+    }
+    EOF
+    ```
+
+    > 注:YOUR_ACCOUNT_ID を実際の AWS アカウント ID に置き換えてください。アカウント ID は `aws sts get-caller-identity --query Account --output text` で取得できます。
+
+2. IAM ロールを作成する
+
+    ```bash
+    aws iam create-role \
+        --role-name polaris-doris-demo \
+        --assume-role-policy-document file:///path/to/polaris-trust-policy.json \
+        --description "IAM Role for Polaris to access S3 storage"
+    ```
+
+3. S3 アクセス権限のポリシーをアタッチする
+
+    ```bash
+    aws iam attach-role-policy \
+        --role-name polaris-doris-demo \
+        --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
+    ```
+
+4. 作成結果を確認する
+
+    ```bash
+    aws iam get-role --role-name polaris-doris-demo
+    aws iam list-attached-role-policies --role-name polaris-doris-demo
+    ```
+
+### 1.3 IAM ロールを EC2 インスタンスに関連付ける(任意)
+
+> この手順を行わない場合は、Polaris を起動する前に AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY を設定する必要があります。
+
+Polaris サービスを EC2 インスタンスで実行する場合は、アクセスキーを使用するよりも、その EC2 インスタンスに IAM ロールを関連付けることを推奨します。これにより、コード内に認証情報を直接記述せずに済み、セキュリティが向上します。
+
+1. EC2 インスタンスロールの信頼ポリシーを作成する
+
+    まず、EC2 サービスがこのロールを引き受けられるようにする信頼ポリシーファイルを作成します。
+
+    ```json
+    cat > ec2-trust-policy.json << 'EOF'
+    {
+    "Version": "2012-10-17",
+    "Statement": [
+        {
+        "Effect": "Allow",
+        "Principal": {
+            "Service": "ec2.amazonaws.com"
+        },
+        "Action": "sts:AssumeRole"
+        }
+    ]
+    }
+    EOF
+    ```
+
+2. EC2 インスタンスロールを作成する
+
+    ```bash
+    aws iam create-role \
+        --role-name polaris-ec2-role \
+        --assume-role-policy-document file:///path/to/ec2-trust-policy.json \
+        --description "IAM Role for EC2 instance running Polaris service"
+    ```
+
+3. S3 アクセス権限のポリシーをアタッチする
+
+    ```bash
+    # Attach AmazonS3FullAccess managed policy
+    aws iam attach-role-policy \
+        --role-name polaris-ec2-role \
+        --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
+    ```
+
+4. インスタンスプロファイルを作成する
+
+    ```bash
+    # Create instance profile
+    aws iam create-instance-profile \
+        --instance-profile-name polaris-ec2-instance-profile
+
+    # Add role to instance profile
+    aws iam add-role-to-instance-profile \
+        --instance-profile-name polaris-ec2-instance-profile \
+        --role-name polaris-ec2-role
+    ```
+
+5. インスタンスプロファイルを EC2 インスタンスにアタッチする
+
+    ```bash
+    # If it's a newly created EC2 instance, specify during launch
+    aws ec2 run-instances \
+        --image-id ami-xxxxxxxxx \
+        --instance-type t3.medium \
+        --iam-instance-profile Name=polaris-ec2-instance-profile \
+        --other-parameters...
+
+    # If it's an existing EC2 instance, associate instance profile
+    aws ec2 associate-iam-instance-profile \
+        --instance-id i-xxxxxxxxx \
+        --iam-instance-profile Name=polaris-ec2-instance-profile
+    ```
+
+## 2. Polaris のデプロイと Catalog の作成
+
+環境の準備ができたら、Polaris サービスをデプロイして Catalog を設定します。
+
+> このドキュメントでは、ソースコードを使用したクイックスタートの方法を説明します。その他のデプロイ方法については、https://polaris.apache.org/releases/1.0.1/getting-started/deploying-polaris/ を参照してください。
+
+### 2.1 ソースコードをクローンして Polaris を起動する
+
+1. Polaris のリポジトリをクローンし、特定のバージョンに切り替える
+
+    ```bash
+    git clone https://github.com/apache/polaris.git
+    cd polaris
+    # Recommend using a released stable version
+    git checkout apache-polaris-1.0.1-incubating
+    ```
+
+2. AWS 認証情報を設定する(任意)
+
+    Polaris を EC2 上で実行しない場合、または EC2 に適切な IAM ロールが関連付けられていない場合は、環境変数を使用して、`polaris-doris-demo` ロールを引き受ける権限を持つ AK/SK を Polaris に提供する必要があります。
+
+    ```bash
+    export AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
+    export AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY
+    ```
+
+3. Polaris をビルドして実行する
+
+    Java 21+ と Docker 27+ がインストールされていることを確認してください。
+
+    ```bash
+    ./gradlew run -Dpolaris.bootstrap.credentials=POLARIS,root,secret
+    ```
+
+* `POLARIS` は realm です。
+* `root` は `CLIENT_ID` です。
+* `secret` は `CLIENT_SECRET` です。
+* 認証情報を設定しない場合は、既定の認証情報 `POLARIS,root,s3cr3t` が使用されます。
+
+このコマンドは Polaris サービスを起動します。既定ではポート `8181` で待ち受けます。
+
+### 2.2 Polaris で Catalog と Namespace を作成する
+
+1. **ROOT 認証情報を環境変数に設定する**
+
+    ```bash
+    export CLIENT_ID=root
+    export CLIENT_SECRET=secret
+    ```
+
+2. Catalog を作成する(S3 ストレージを指定)
+
+    ```bash
+    ./polaris catalogs create \
+    --storage-type s3 \
+    --default-base-location s3://polaris-doris-test/polaris1 \
+    --role-arn arn:aws:iam::<account_id>:role/polaris-doris-test \
+    --external-id polaris-doris-test \
+    doris_catalog
+    ```
+
+    * `--storage-type s3`:基盤となるストレージに S3 を指定します。
+    * `--default-base-location`:Iceberg テーブルデータの既定のルートパスです。
+    * `--role-arn`:Polaris サービスが S3 にアクセスするために引き受ける IAM ロールです。
+    * `--external-id`:ロールを引き受ける際に使用する External ID です。IAM ロールの信頼ポリシーの設定と一致させます。
+
+3. Namespace を作成する
+
+    ```bash
+    ./polaris namespaces create --catalog doris_catalog doris_demo
+    ```
+
+これにより、`doris_demo` という名前のデータベース(Namespace)が `doris_catalog` の下に作成されます。
+
+### 2.3 Polaris のセキュリティロールと権限を設定する
+
+Doris が `root` 以外のユーザーとしてアクセスできるよう、新しいユーザーとロールを作成して適切な権限を付与します。
+
+1. Principal Role と Catalog Role を作成する
+
+    ```bash
+    # Create a Principal Role for aggregating permissions
+    ./polaris principal-roles create doris_pr_role
+
+    # Create a Catalog Role under doris_catalog
+    ./polaris catalog-roles create --catalog doris_catalog doris_catalog_role
+    ```
+
+2. Catalog Role に権限を付与する
+
+    ```bash
+    # Grant doris_catalog_role permission to manage content within this Catalog
+    ./polaris privileges catalog grant \
+        --catalog doris_catalog \
+        --catalog-role doris_catalog_role \
+        CATALOG_MANAGE_CONTENT
+    ```
+
+3. Principal Role と Catalog Role を関連付ける
+
+    ```bash
+    # Assign doris_catalog_role to doris_pr_role
+    ./polaris catalog-roles grant \
+    --catalog doris_catalog \
+    --principal-role doris_pr_role \
+    doris_catalog_role
+    ```
+
+4. 新しい Principal(ユーザー)を作成し、Role を関連付ける
+
+    ```bash
+    # Create a new user (Principal) named doris_user
+    ./polaris principals create doris_user
+    # Example output: {"clientId": "6e155b128dc06c13", "clientSecret": "ce9fbb4cc91c43ff2955f2c6545239d7"}
+    # Please note down this new client_id and client_secret pair, as Doris will use it for connection.
+
+    # Bind doris_user to doris_pr_role
+    ./polaris principal-roles grant \
+    doris_pr_role \
+    --principal doris_user
+    ```
+
+これで Polaris 側の設定はすべて完了です。作成した `doris_user` は、`doris_catalog` を管理する権限を `doris_pr_role` を通じて取得します。
+
+## 3. Doris から Polaris への接続
+
+ここでは、設定した Polaris サービスに接続する Iceberg Catalog を Doris で作成します。Doris は複数の認証方法の組み合わせに対応しています。
+
+> **注:** この例では、OAuth2 の認証情報を使用して Polaris の REST サービスに接続します。また、Doris は `iceberg.rest.oauth2.token` を使用し、あらかじめ取得した Bearer Token を直接指定する方法にも対応しています。
+
+### 方法 1:OAuth2 と一時的なストレージ認証情報(Credential Vending)
+
+この方法を**最も推奨します**。Doris は OAuth2 の認証情報を使用して Polaris で認証し、メタデータを取得します。S3 上のデータファイルの読み書きが必要な場合は、Polaris に最小権限の一時的な S3 アクセス認証情報を要求します。
+
+生成された `clientId` と `clientSecret` を `doris_user` 用の認証情報として使用します。
+
+```sql
+CREATE CATALOG polaris_vended PROPERTIES (
+    'type' = 'iceberg',
+    -- Catalog name in Polaris
+    'warehouse' = 'doris_catalog',
+    'iceberg.catalog.type' = 'rest',
+    -- Polaris service address
+    'iceberg.rest.uri' = 'http://YOUR_POLARIS_HOST:8181/api/catalog',
+    -- Metadata authentication method
+    'iceberg.rest.security.type' = 'oauth2',
+    -- Replace with doris_user's client_id:client_secret
+    'iceberg.rest.oauth2.credential' = 'client_id:client_secret',
+    'iceberg.rest.oauth2.server-uri' = 'http://YOUR_POLARIS_HOST:8181/api/catalog/v1/oauth/tokens',
+    'iceberg.rest.oauth2.scope' = 'PRINCIPAL_ROLE:doris_pr_role',
+    -- Enable credential vending
+    'iceberg.rest.vended-credentials-enabled' = 'true'
+);
+```
+
+### 方法 2:OAuth2 と静的なストレージ認証情報(AK/SK)
+
+この方法でも、Doris は OAuth2 を使用して Polaris のメタデータにアクセスしますが、S3 データへのアクセスには Doris Catalog の設定に直接記述した静的な AK/SK を使用します。設定は簡単で簡易的なテストに適していますが、セキュリティは低下します。
+
+```sql
+CREATE CATALOG polaris_aksk PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'http://YOUR_POLARIS_HOST:8181/api/catalog',
+    'iceberg.rest.warehouse' = 'doris_catalog',
+    'iceberg.rest.security.type' = 'oauth2',
+    'iceberg.rest.oauth2.credential' = '6e155b128dc06c13:ce9fbb4cc91c43ff2955f2c6545239d7',
+    'iceberg.rest.oauth2.server-uri' = 'http://YOUR_POLARIS_HOST:8181/api/catalog/v1/oauth/tokens',
+    'iceberg.rest.oauth2.scope' = 'PRINCIPAL_ROLE:doris_pr_role',
+    -- Directly provide S3 access keys
+    's3.access_key' = 'YOUR_S3_ACCESS_KEY',
+    's3.secret_key' = 'YOUR_S3_SECRET_KEY',
+    's3.endpoint' = 'https://s3.us-west-2.amazonaws.com',
+    's3.region' = 'us-west-2'
+);
+```
+
+## 4. Doris で接続を確認する
+
+どちらの方法で Catalog を作成した場合でも、次の SQL を使用してエンドツーエンドの接続を確認できます。
+
+```sql
+-- Switch to the Catalog you created and the Namespace configured in Polaris
+USE polaris_vended.doris_demo;
+
+-- Create an Iceberg table
+CREATE TABLE my_iceberg_table (
+  id INT,
+  name STRING
+)
+PROPERTIES (
+  'write-format'='parquet'
+);
+
+-- Insert data
+INSERT INTO my_iceberg_table VALUES (1, 'Doris'), (2, 'Polaris');
+
+-- Query data
+SELECT * FROM my_iceberg_table;
+-- Expected result:
+-- +------+---------+
+-- | id   | name    |
+-- +------+---------+
+-- | 1    | Doris   |
+-- | 2    | Polaris |
+-- +------+---------+
+```
+
+上記の操作がすべて正常に完了すれば、Doris -> Polaris -> S3 というデータレイクの一連の処理を構築できています。
+
+Doris を使用した Iceberg テーブルの管理について詳しくは、次を参照してください。
+
+https://doris.apache.org/docs/lakehouse/catalogs/iceberg-catalog
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-seaweedfs.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-seaweedfs.md
new file mode 100644
index 00000000000..8f6042f75db
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-seaweedfs.md
@@ -0,0 +1,170 @@
+---
+{
+    "title": "SeaweedFS との連携",
+    "language": "ja"
+}
+---
+
+[SeaweedFS](https://seaweedfs.com/) は、単一の `weed` プロセスから S3 互換のオブジェクト API と Apache Iceberg REST Catalog の両方を提供する分散ストレージシステムです。Parquet データと Iceberg メタデータを単一の実行ファイルで提供し、同じ S3 認証情報のペアで認証します。
+
+このページでは、SeaweedFS を Doris から利用する Iceberg レイクハウスにするための最小構成を示します。同じ一連の手順は、SeaweedFS リポジトリの統合テスト [`TestDorisIcebergCatalog`](https://github.com/seaweedfs/seaweedfs/tree/master/test/s3tables/catalog_doris) でも検証されています。このテストでは、SeaweedFS のミニクラスターを起動し、Doris に Iceberg カタログとして登録し、PyIceberg で行を書き込み、`apache/doris:doris-all-in-one-2.1.0` からその行を読み取ります。
+
+## Iceberg レイクハウスで SeaweedFS を使う理由 {#why-seaweedfs-for-an-iceberg-lakehouse}
+
+一般的なレイクハウスの構成では、次の三層を組み合わせます。
+
+* オブジェクトストレージ(S3 またはその互換サービス)
+* 独立した Iceberg カタログ(Hive Metastore、Glue、Polaris、Lakekeeper、Nessie など)
+* クエリエンジン(Doris、Spark、Trino など)
+
+SeaweedFS では、最初の二層を単一のプロセスにまとめられます。同じ `weed` 実行ファイルが、次の両方を担います。
+
+* Parquet ファイルを保持する S3 互換オブジェクトストレージ
+* テーブルのメタデータを保持する Iceberg REST Catalog
+
+そのため、Doris は二つではなく一つのシステムに接続します。実用上の利点は次のとおりです。
+
+* **構成要素を減らせる。** Hive Metastore や Glue、別のカタログを支える Postgres、プロビジョニングする STS ロールが不要です。
+* **デプロイが簡単になる。** Doris の Iceberg REST クライアントと S3 リーダーで、単一の実行ファイル、単一の IAM 設定、共通の S3 認証情報のペアを共有します。
+* **ローカル環境やオンプレミス環境でも使いやすい。** この構成にクラウド固有のサービスは必要ありません。同じ設定でノート PC、単一の VM、Kubernetes クラスター上で動作します。
+* **メタデータ参照のレイテンシーを抑えられる。** カタログの状態はデータを提供する SeaweedFS filer にあるため、名前空間やテーブルの参照で別サービスとの通信が発生しません。
+* **S3 上に標準形式で保存できる。** テーブルは S3 バケット内の標準的な Iceberg ディレクトリとして保存されます。任意の S3 クライアント(rclone、`aws s3`、Spark、Trino、Dremio、RisingWave)は、Doris と並行してテーブルを読み取ったり複製したりできます。
+
+構成は次のとおりです。
+
+```text
+Doris
+  |
+  v
+Iceberg tables
+  |
+  v
+SeaweedFS  (S3 storage + REST catalog)
+```
+
+小規模なチームや社内プラットフォームでは、独立したメタストアサービスに依存せずにレイクハウスを構築できます。
+
+## 1. SeaweedFS を起動する {#1-start-seaweedfs}
+
+`weed` を [github.com/seaweedfs/seaweedfs](https://github.com/seaweedfs/seaweedfs) からビルドするか、インストールします。
+
+アクセスキーに S3 への完全なアクセス権を付与する IAM 設定を作成します。同じキーを Iceberg REST エンドポイントの OAuth2 クライアントとしても使用します。
+
+```json
+{
+  "identities": [
+    {
+      "name": "doris",
+      "credentials": [
+        {
+          "accessKey": "AKIAIOSFODNN7EXAMPLE",
+          "secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+        }
+      ],
+      "actions": ["Admin"]
+    }
+  ]
+}
+```
+
+Iceberg REST エンドポイントと事前作成されるテーブル用バケットを備えた、単一プロセスのクラスターを起動します。
+
+```bash
+weed mini \
+  -ip $(hostname -I | awk '{print $1}') \
+  -dir /var/lib/seaweedfs \
+  -s3.config /etc/seaweedfs/iam_config.json \
+  -tableBucket iceberg-tables
+```
+
+`weed mini` は、master、volume、filer、S3、Iceberg REST カタログを単一のプロセスで実行します。デフォルトのポートは次のとおりです。
+
+| コンポーネント | ポート | 変更用フラグ |
+| --------- | ---- | ------------- |
+| Master HTTP | 9333 | `-master.port` |
+| Filer HTTP | 8888 | `-filer.port` |
+| S3 | 8333 | `-s3.port` |
+| Iceberg REST | 8181 | `-s3.port.iceberg` |
+
+`-tableBucket iceberg-tables` は、起動時に S3 Tables バケットを作成します。これは Doris が書き込む Iceberg 対応のバケットです。
+
+カタログに接続できることを確認するには、次のコマンドを実行します。
+
+```bash
+curl -s http://SEAWEED_HOST:8181/v1/config | jq .
+```
+
+## 2. Doris に Iceberg カタログを登録する {#2-register-the-iceberg-catalog-in-doris}
+
+```sql
+CREATE CATALOG seaweedfs PROPERTIES (
+    "type" = "iceberg",
+    "iceberg.catalog.type" = "rest",
+    "uri" = "http://SEAWEED_HOST:8181",
+    "warehouse" = "s3://iceberg-tables",
+    "credential" = "AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
+    "s3.endpoint" = "http://SEAWEED_HOST:8333",
+    "s3.access_key" = "AKIAIOSFODNN7EXAMPLE",
+    "s3.secret_key" = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
+    "s3.region" = "us-west-2",
+    "use_path_style" = "true"
+);
+```
+
+補足事項:
+
+* `credential = "<access_key>:<secret_key>"` は、Doris の Iceberg REST クライアントから OAuth2 クライアント認証情報として送信されます。SeaweedFS は、S3 エンドポイントを保護する IAM 設定と照合して認証します。
+* `s3.*` プロパティは、Doris 自身の Parquet リーダーとライターが使用します。同じホストと同じキーのペアを使い、同じ `weed` プロセスに接続します。
+* SeaweedFS はデフォルトでパス形式の S3 アクセスを提供するため、`use_path_style = "true"` が必要です。
+* 統合テストでもこれらと同じプロパティを使用しています。標準的な記述方法は [`createDorisIcebergCatalog`](https://github.com/seaweedfs/seaweedfs/blob/master/test/s3tables/catalog_doris/doris_catalog_test.go) を参照してください。
+
+カタログを登録する前に Doris 以外から(たとえば PyIceberg で)名前空間やテーブルを作成した場合は、メタデータキャッシュを更新します。
+
+```sql
+REFRESH CATALOG seaweedfs;
+```
+
+## 3. カタログを使用する {#3-use-the-catalog}
+
+```sql
+USE seaweedfs;
+
+CREATE DATABASE IF NOT EXISTS demo;
+
+USE seaweedfs.demo;
+
+CREATE TABLE iceberg_smoke (
+  id BIGINT,
+  label STRING
+);
+
+INSERT INTO iceberg_smoke VALUES (1, 'one'), (2, 'two'), (3, 'three');
+
+SELECT id, label FROM iceberg_smoke ORDER BY id;
+```
+
+期待される出力:
+
+```text
++----+-------+
+| id | label |
++----+-------+
+|  1 | one   |
+|  2 | two   |
+|  3 | three |
++----+-------+
+```
+
+これは SeaweedFS の統合テストで検証されるのと同じ経路です。Iceberg REST カタログを介して名前空間とテーブルを作成し、PyIceberg で行を追加し、Doris が標準的な S3 アクセスと Iceberg メタデータを通じてデータを読み取ります。
+
+## 本番環境での注意事項 {#production-notes}
+
+* 本番クラスターでは、`weed mini` の代わりに `weed master`、`weed volume`、`weed filer`、`weed s3 -iceberg.port=8181` を使用します(または SeaweedFS の Helm チャートを使用します)。Doris 側の設定は同じで、変更するのはホストとポートだけです。
+* OAuth2 の認証情報には S3 アクセスキーを使用します。Doris のカタログへのアクセスに使う認証情報を更新する場合は、ほかの S3 ユーザーと同様に、そのキーを保持する IAM アイデンティティの認証情報を更新します。
+* Iceberg テーブルのメンテナンス(コンパクション、スナップショットの期限切れ処理、孤立ファイルの削除、マニフェストの書き換え)は SeaweedFS に組み込まれており、同じバケットに対して実行されます。詳細は [SeaweedFS Iceberg Catalog wiki](https://github.com/seaweedfs/seaweedfs/wiki/SeaweedFS-Iceberg-Catalog) を参照してください。
+
+## 参考資料 {#references}
+
+* [SeaweedFS](https://github.com/seaweedfs/seaweedfs)
+* [SeaweedFS の Doris Iceberg 統合テスト](https://github.com/seaweedfs/seaweedfs/tree/master/test/s3tables/catalog_doris)
+* [Doris Iceberg Catalog リファレンス](https://doris.apache.org/docs/lakehouse/catalogs/iceberg-catalog)
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-snowflake-catalog.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-snowflake-catalog.md
new file mode 100644
index 00000000000..d94cbae6240
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-snowflake-catalog.md
@@ -0,0 +1,451 @@
+---
+{
+    "title": "Snowflake Catalog との連携",
+    "language": "ja",
+    "description": "Iceberg REST Catalog API を介して Apache Doris を Snowflake Horizon Catalog および Snowflake Open Catalog に接続する方法を説明します。"
+}
+---
+
+Apache Doris は、Iceberg REST Catalog API を介して Snowflake Catalog サービスに接続できます。この連携により、Doris は Snowflake が管理する Iceberg テーブルにクエリを実行できます。また、Snowflake Open Catalog の内部カタログを使用する場合は、Iceberg テーブルの作成と書き込みもできます。
+
+このドキュメントでは、以下の Snowflake カタログサービスを扱います。
+
+- **Snowflake Horizon Catalog**:既存の Snowflake アカウントで Snowflake が管理する Iceberg テーブルにアクセスするために使用します。
+- **Snowflake Open Catalog**:Iceberg カタログ、名前空間、テーブルの管理に使用する、Snowflake が提供する Apache Polaris / Iceberg REST Catalog のマネージドサービスです。
+
+## Snowflake Catalog の選択
+
+| 項目 | Snowflake Horizon Catalog | Snowflake Open Catalog |
+| --- | --- | --- |
+| 主な用途 | Snowflake が管理する Iceberg テーブルへのクエリ | Snowflake Open Catalog 内の Iceberg テーブルの管理 |
+| Doris の `warehouse` | Snowflake のデータベース名 | Open Catalog のカタログ名 |
+| 認証情報 | Snowflake Programmatic Access Token(PAT) | サービス接続の `<client_id>:<client_secret>` |
+| OAuth スコープ | `session:role:<ROLE_NAME>` | `PRINCIPAL_ROLE:<ROLE_NAME>` |
+| Doris からのテーブル作成 | 非推奨 | 内部カタログでサポート |
+| Doris からの書き込み | Snowflake が管理する既存の Iceberg テーブルへの挿入 | 内部カタログのテーブルへの挿入 |
+
+テーブルを Snowflake が管理している場合は、Horizon Catalog を使用します。Doris から Snowflake Open Catalog を介して Iceberg テーブルを作成、管理したい場合は、Open Catalog の内部カタログを使用します。
+
+> 注:Horizon Catalog に接続する場合は、`iceberg.rest.view-enabled` を `false` に設定してください。(Doris 4.0.6/4.1.1 以降)
+
+### ストレージへのアクセスモデル
+
+Horizon Catalog は、Snowflake が管理する Iceberg テーブルに使用し、そのストレージアクセスは Snowflake が管理します。Doris は REST Catalog API を介してテーブルのメタデータを取得します。`iceberg.rest.vended-credentials-enabled` を `true` に設定すると、Snowflake はオブジェクトストレージの一時的な認証情報を返します。そのため、Horizon Catalog 用の Doris カタログに AWS IAM ロールや S3 の認証情報を設定する必要はありません。
+
+Open Catalog の内部カタログは、カタログに設定されたオブジェクトストレージの場所を使用します。その場所が AWS S3 上にある場合、Open Catalog には Iceberg のメタデータとデータファイルを読み書きするために引き受けられる IAM ロールが必要です。IAM ロールの信頼ポリシーでは、信頼するプリンシパルとして `sts:AssumeRole` の呼び出しを許可する AWS プリンシパルを指定します。Snowflake Open Catalog では、カタログのストレージ詳細に表示される IAM ユーザー ARN を信頼するプリンシパルに指定し、同じページに表示される External ID を設定します。External ID は、この Open Catalog 連携だけにロールの引き受けを制限し、権限を持つサービスが第三者に悪用されるリスクを抑えます。
+
+## Snowflake Horizon Catalog への接続
+
+### Snowflake 環境の設定
+
+Snowflake Horizon Catalog は、Iceberg REST Catalog API を介して Snowflake が管理する Iceberg テーブルを公開します。
+
+REST エンドポイントは次のとおりです。
+
+```text
+REST endpoint:
+https://<snowflake_account_identifier>.snowflakecomputing.com/polaris/api/catalog
+
+Token endpoint:
+https://<snowflake_account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens
+```
+
+Snowflake が管理する Iceberg テーブルを作成します。
+
+```sql
+CREATE OR REPLACE ICEBERG TABLE <database_name>.<schema_name>.<table_name> (
+  ID BIGINT,
+  NAME STRING
+)
+CATALOG = 'SNOWFLAKE'
+EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED';
+```
+
+`SNOWFLAKE_MANAGED` は Snowflake の予約値です。ユーザーが作成する外部ボリュームではないため、この値について Doris に外部ボリュームへのアクセス権を付与する必要はありません。
+
+Doris が使用する Snowflake ロールに権限を付与します。
+
+```sql
+GRANT USAGE ON DATABASE <database_name> TO ROLE <role_name>;
+GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;
+GRANT SELECT ON TABLE <database_name>.<schema_name>.<table_name> TO ROLE <role_name>;
+```
+
+Doris からテーブルに書き込む必要がある場合は、書き込み権限を付与します。
+
+```sql
+GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE
+ON TABLE <database_name>.<schema_name>.<table_name>
+TO ROLE <role_name>;
+```
+
+サービスユーザーの Programmatic Access Token(PAT)を作成します。
+
+```sql
+ALTER USER IF EXISTS <service_user>
+ADD PAT <pat_name>
+  DAYS_TO_EXPIRY = 7
+  ROLE_RESTRICTION = '<role_name>'
+  COMMENT = 'Horizon Iceberg REST access for Doris';
+```
+
+トークンエンドポイントを使用して PAT を検証できます。
+
+```bash
+curl -i --fail -X POST \
+  "https://<snowflake_account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens" \
+  --header "Content-Type: application/x-www-form-urlencoded" \
+  --data-urlencode "grant_type=client_credentials" \
+  --data-urlencode "scope=session:role:<role_name>" \
+  --data-urlencode "client_secret=<PAT_token>"
+```
+
+### Doris カタログの作成
+
+Doris で Iceberg REST Catalog を作成します。
+
+```sql
+CREATE CATALOG snowflake_horizon PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'https://<snowflake_account_identifier>.snowflakecomputing.com/polaris/api/catalog',
+    'warehouse' = '<snowflake_database_name>',
+    'iceberg.rest.security.type' = 'oauth2',
+    'iceberg.rest.oauth2.credential' = '<PAT_token>',
+    'iceberg.rest.oauth2.server-uri' = 'https://<snowflake_account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens',
+    'iceberg.rest.oauth2.scope' = 'session:role:<role_name>',
+    'iceberg.rest.vended-credentials-enabled' = 'true',
+    'client.region' = '<storage_region>',
+    'iceberg.rest.nested-namespace-enabled' = 'true',
+    'iceberg.rest.view-enabled' = 'false',
+    'iceberg.rest.connection-timeout-ms' = '30000',
+    'iceberg.rest.socket-timeout-ms' = '120000'
+);
+```
+
+パラメータに関する補足:
+
+- `warehouse`:Snowflake のデータベース名です。Snowflake のコンピューティングウェアハウスではありません。
+- `iceberg.rest.oauth2.credential`:Snowflake の PAT です。
+- `iceberg.rest.oauth2.scope`:`session:role:<role_name>` を指定します。
+- `iceberg.rest.vended-credentials-enabled`:Snowflake がオブジェクトストレージの一時的な認証情報を返すようにします。
+- `client.region`:基盤となるオブジェクトストレージのリージョンです。
+- `iceberg.rest.view-enabled`:Horizon Catalog に接続する場合は `false` に設定します。
+
+### Horizon テーブルへのアクセス
+
+カタログを作成した後、Doris から Snowflake が管理する Iceberg テーブルにクエリを実行します。
+
+```sql
+SHOW DATABASES FROM snowflake_horizon;
+SHOW TABLES FROM snowflake_horizon.<schema_name>;
+
+SELECT COUNT(*)
+FROM snowflake_horizon.<schema_name>.<table_name>;
+```
+
+出力例:
+
+```text
+mysql> SHOW DATABASES FROM snowflake_horizon;
++--------------------+
+| Database           |
++--------------------+
+| PUBLIC             |
+| information_schema |
+| mysql              |
++--------------------+
+
+mysql> SHOW TABLES FROM snowflake_horizon.PUBLIC;
++------------------+
+| Tables_in_PUBLIC |
++------------------+
+| DORIS_HORIZON_T  |
++------------------+
+
+mysql> SELECT * FROM snowflake_horizon.PUBLIC.DORIS_HORIZON_T;
++------+-------+
+| id   | name  |
++------+-------+
+|    1 | alice |
+|    2 | bob   |
++------+-------+
+```
+
+Snowflake が管理する既存の Iceberg テーブルに書き込むには、次を実行します。
+
+```sql
+INSERT INTO snowflake_horizon.<schema_name>.<table_name>
+VALUES (1, 'doris_insert');
+```
+
+## Snowflake Open Catalog への接続
+
+Snowflake Open Catalog は、Snowflake が提供する Apache Polaris / Iceberg REST Catalog のマネージドサービスです。Doris で Open Catalog を使用するには、まずオブジェクトストレージへのアクセスを準備し、次に Open Catalog のカタログ、名前空間、カタログロール、サービス接続を作成します。
+
+REST エンドポイントは次のとおりです。
+
+```text
+REST endpoint:
+https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog
+
+Token endpoint:
+https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens
+```
+
+### AWS 環境の準備
+
+Open Catalog は、カタログで指定されたオブジェクトストレージの場所に Iceberg のメタデータとデータファイルを保存します。AWS S3 を使用する場合は、Open Catalog のカタログを作成する前に S3 バケットと IAM ロールを準備します。
+
+#### S3 バケットの作成
+
+Iceberg テーブルのデータ用のバケットを作成します。
+
+```bash
+aws s3 mb s3://<bucket_name> --region <region>
+aws s3 ls | grep <bucket_name>
+```
+
+Open Catalog のカタログは、このバケット内のパスをデフォルトのベースロケーションとして使用します。例:
+
+```text
+s3://<bucket_name>/<catalog_prefix>/
+```
+
+#### S3 アクセス用 IAM ポリシーの作成
+
+Open Catalog がカタログの保存先にアクセスできるようにする IAM ポリシーを作成します。次の内容を `snowflake-open-catalog-s3-policy.json` として保存します。
+
+```bash
+cat > snowflake-open-catalog-s3-policy.json <<'EOF'
+{
+  "Version": "2012-10-17",
+  "Statement": [
+    {
+      "Effect": "Allow",
+      "Action": [
+        "s3:ListBucket",
+        "s3:GetBucketLocation",
+        "s3:ListBucketMultipartUploads"
+      ],
+      "Resource": "arn:aws:s3:::<bucket_name>",
+      "Condition": {
+        "StringLike": {
+          "s3:prefix": [
+            "<catalog_prefix>",
+            "<catalog_prefix>/*"
+          ]
+        }
+      }
+    },
+    {
+      "Effect": "Allow",
+      "Action": [
+        "s3:GetObject",
+        "s3:PutObject",
+        "s3:DeleteObject",
+        "s3:AbortMultipartUpload",
+        "s3:ListMultipartUploadParts"
+      ],
+      "Resource": "arn:aws:s3:::<bucket_name>/<catalog_prefix>/*"
+    }
+  ]
+}
+EOF
+```
+
+#### IAM ロールの作成
+
+まず一時的な信頼ポリシーを作成します。Open Catalog のカタログを作成した後、Snowflake Open Catalog が提供する IAM ユーザー ARN と External ID を使用して信頼ポリシーを更新します。
+
+`snowflake-open-catalog-trust-policy.json` を作成します。
+
+```bash
+cat > snowflake-open-catalog-trust-policy.json <<'EOF'
+{
+  "Version": "2012-10-17",
+  "Statement": [
+    {
+      "Effect": "Allow",
+      "Principal": {
+        "AWS": "arn:aws:iam::<aws_account_id>:root"
+      },
+      "Action": "sts:AssumeRole"
+    }
+  ]
+}
+EOF
+```
+
+IAM ロールを作成し、S3 ポリシーをアタッチします。
+
+```bash
+aws iam create-role \
+    --role-name <open_catalog_role_name> \
+    --assume-role-policy-document file://snowflake-open-catalog-trust-policy.json \
+    --description "IAM role for Snowflake Open Catalog to access S3"
+
+aws iam put-role-policy \
+    --role-name <open_catalog_role_name> \
+    --policy-name snowflake-open-catalog-s3-access \
+    --policy-document file://snowflake-open-catalog-s3-policy.json
+```
+
+IAM ロールとインラインポリシーが作成されたことを確認します。
+
+```bash
+aws iam get-role --role-name <open_catalog_role_name>
+aws iam list-role-policies --role-name <open_catalog_role_name>
+```
+
+ロール ARN を記録します。Open Catalog のカタログを作成するときに使用します。
+
+```text
+arn:aws:iam::<aws_account_id>:role/<open_catalog_role_name>
+```
+
+### Open Catalog 環境の設定
+
+Open Catalog のカタログを作成します。Doris から Iceberg テーブルを作成、書き込みする必要がある場合は、**内部カタログ**を使用します。
+
+![Snowflake Open Catalog のカタログを作成](/images/integrations/lakehouse/snowflake/open-catalog-create-catalog.png)
+
+一般的なカタログ設定:
+
+```text
+name: <catalog_name>
+type: INTERNAL
+storage provider: S3
+default base location: s3://<bucket_name>/<catalog_prefix>/
+S3 role ARN: arn:aws:iam::<aws_account_id>:role/<open_catalog_role_name>
+```
+
+Open Catalog のカタログを作成した後、カタログの詳細ページを開き、ストレージの詳細から次の値をコピーします。
+
+- IAM ユーザー ARN
+- External ID
+
+次に、Snowflake Open Catalog が提示した正確な値を使用するように IAM ロールの信頼関係を更新します。
+
+```bash
+cat > snowflake-open-catalog-trust-policy.json <<'EOF'
+{
+  "Version": "2012-10-17",
+  "Statement": [
+    {
+      "Effect": "Allow",
+      "Principal": {
+        "AWS": "<open_catalog_iam_user_arn>"
+      },
+      "Action": "sts:AssumeRole",
+      "Condition": {
+        "StringEquals": {
+          "sts:ExternalId": "<external_id>"
+        }
+      }
+    }
+  ]
+}
+EOF
+
+aws iam update-assume-role-policy \
+    --role-name <open_catalog_role_name> \
+    --policy-document file://snowflake-open-catalog-trust-policy.json
+```
+
+IAM ユーザー ARN、External ID、実際のロール ARN を公開ドキュメントやスクリーンショットに載せないでください。
+
+名前空間を作成します。たとえば `public` です。
+
+> 画像のプレースホルダー:Snowflake Open Catalog で名前空間を作成する画面。
+
+カタログロールを作成し、必要な権限を付与します。
+
+![Snowflake Open Catalog でカタログロールを作成](/images/integrations/lakehouse/snowflake/open-catalog-create-catalog-role.png)
+
+クイックスタートでは `CATALOG_MANAGE_CONTENT` を付与できます。本番環境では、ワークロードに必要な最小限の権限を使用してください。
+
+Doris 用のサービス接続を作成します。
+
+![Snowflake Open Catalog のサービス接続を作成](/images/integrations/lakehouse/snowflake/open-catalog-service-connection.png)
+
+一般的なサービス接続の設定:
+
+```text
+name: doris_connection
+query engine: doris
+principal role: <principal_role_name>
+```
+
+サービス接続を作成した後、クライアント認証情報をコピーします。Doris で使用する値の形式は `<client_id>:<client_secret>` です。
+
+![Snowflake Open Catalog のサービス認証情報をコピー](/images/integrations/lakehouse/snowflake/open-catalog-service-credentials.png)
+
+実際のクライアントシークレットを公開ファイルやスクリーンショットに保存しないでください。
+
+### Doris カタログの作成
+
+Doris で Iceberg REST Catalog を作成します。
+
+```sql
+CREATE CATALOG snowflake_open_catalog PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'rest',
+    'iceberg.rest.uri' = 'https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog',
+    'warehouse' = '<open_catalog_catalog_name>',
+    'iceberg.rest.security.type' = 'oauth2',
+    'iceberg.rest.oauth2.credential' = '<client_id>:<client_secret>',
+    'iceberg.rest.oauth2.server-uri' = 'https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens',
+    'iceberg.rest.oauth2.scope' = 'PRINCIPAL_ROLE:<principal_role_name>',
+    'iceberg.rest.vended-credentials-enabled' = 'true',
+    'client.region' = '<storage_region>',
+    'iceberg.rest.nested-namespace-enabled' = 'true'
+);
+```
+
+パラメータに関する補足:
+
+- `warehouse`:Open Catalog のカタログ名です。
+- `iceberg.rest.oauth2.credential`:`<client_id>:<client_secret>` 形式のサービス接続の認証情報です。
+- `iceberg.rest.oauth2.scope`:`PRINCIPAL_ROLE:<principal_role_name>` を指定します。
+- `iceberg.rest.vended-credentials-enabled`:Doris が Open Catalog から提供される認証情報を使用できるように `true` に設定します。
+- `client.region`:オブジェクトストレージのリージョンです。
+
+### Open Catalog テーブルへのアクセスと管理
+
+Open Catalog の名前空間にアクセスします。
+
+```sql
+SHOW DATABASES FROM snowflake_open_catalog;
+SHOW TABLES FROM snowflake_open_catalog.public;
+```
+
+Doris を介して Iceberg テーブルを作成します。
+
+```sql
+CREATE TABLE snowflake_open_catalog.public.doris_open_catalog_t (
+  id INT,
+  name STRING
+)
+PROPERTIES (
+  'write-format' = 'parquet'
+);
+```
+
+データを挿入してクエリを実行します。
+
+```sql
+INSERT INTO snowflake_open_catalog.public.doris_open_catalog_t
+VALUES (1, 'open_catalog_insert');
+
+SELECT *
+FROM snowflake_open_catalog.public.doris_open_catalog_t
+ORDER BY id;
+```
+
+## まとめ
+
+Apache Doris は、Iceberg REST Catalog API を介して Snowflake Catalog サービスに接続し、Snowflake が管理する Iceberg データを分析できます。
+
+- Snowflake が管理する Iceberg テーブルにクエリを実行するには、Snowflake Horizon Catalog を使用します。Doris カタログを作成するときに `iceberg.rest.view-enabled = false` を設定します。
+- Doris から Snowflake Open Catalog が管理する Iceberg テーブルを作成し、書き込み、クエリを実行するには、Snowflake Open Catalog の内部カタログを使用します。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-unity-catalog.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-unity-catalog.md
new file mode 100644
index 00000000000..dd2d5931e1f
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/best-practices/doris-unity-catalog.md
@@ -0,0 +1,173 @@
+---
+{
+    "title": "Databricks Unity Catalog との統合",
+    "language": "ja",
+    "description": "レイクハウスアーキテクチャで増大するデータ資産を管理する企業向けに、Apache Doris と Databricks Unity Catalog の統合方法を説明します。"
+}
+---
+
+レイクハウスアーキテクチャの下で企業が管理するデータ資産が増えるにつれ、プラットフォームをまたいで高性能かつガバナンスの効いたデータアクセスを実現することが、ますます重要になっています。次世代のリアルタイム分析データベースである Apache Doris は、[Databricks Unity Catalog](https://www.databricks.com/product/unity-catalog) と深く統合されています。これにより、企業は統一されたガバナンスの枠組みの下で、Databricks が管理するデータレイクに直接アクセスして効率的にクエリを実行し、シームレスにデータを連携できます。
+
+**このドキュメントでは、以下について詳しく説明します。**
+
+- Databricks 環境のセットアップ:Databricks での外部ロケーション、カタログ、Iceberg テーブルの作成方法と、関連する権限の設定方法
+
+- Doris から Unity Catalog への接続:Doris を Databricks Unity Catalog に接続し、Iceberg テーブルにアクセスする方法
+
+> 注意:この機能には Doris 3.1.3 以降が必要です。
+
+## Databricks 環境のセットアップ
+
+### 外部ロケーションの作成
+
+Unity Catalog の[外部ロケーション](https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-external-locations)は、クラウドオブジェクトストレージ内のパスとストレージ認証情報を関連付けるセキュリティ保護されたオブジェクトです。外部ロケーションは外部からのアクセスをサポートします。Unity Catalog は Credential Vending 機能を通じて外部システムに短期の認証情報を発行でき、外部システムはその認証情報を使って該当するパスにアクセスできます。
+
+![Databricks のカタログ画面にある外部ロケーションの作成メニュー](/images/integrations/lakehouse/unity/unity-1.png)
+
+このドキュメントでは、AWS Quickstart を使用して AWS S3 に外部ロケーションを作成します。
+
+![外部ロケーション作成画面の AWS Quickstart オプション](/images/integrations/lakehouse/unity/unity-2.png)
+
+作成後、外部ロケーションとそれに対応する認証情報を確認できます。
+
+![作成した外部ロケーションと対応する認証情報](/images/integrations/lakehouse/unity/unity-3.png)
+
+### カタログの作成
+
+画面の「Create a catalog」をクリックします。
+
+![Databricks のカタログ作成メニュー](/images/integrations/lakehouse/unity/unity-4.png)
+
+カタログ名を入力します。`Use default storage` のチェックを外し、先ほど作成した外部ロケーションを選択します。
+
+![カタログ名と外部ロケーションの設定画面](/images/integrations/lakehouse/unity/unity-5.png)
+
+### EXTERNAL USE SCHEMA 権限の付与
+
+新しく作成した `Catalog` をクリックし、`Permissions` → `Grant` の順に選択します。
+
+![カタログの Permissions 画面にある Grant ボタン](/images/integrations/lakehouse/unity/unity-6.png)
+
+`All account users` を選択し、`EXTERNAL USE SCHEMA` にチェックを入れます。
+
+![All account users に対する EXTERNAL USE SCHEMA 権限の選択画面](/images/integrations/lakehouse/unity/unity-7.png)
+
+### Iceberg テーブルの作成とデータの挿入
+
+Databricks SQL Editor で以下の SQL を実行し、Iceberg テーブルを作成してデータを挿入します。
+
+```sql
+CREATE TABLE `my-unity-catalog`.default.iceberg_table (
+  id int,
+  name string
+) USING iceberg;
+
+INSERT INTO `my-unity-catalog`.default.iceberg_table VALUES(1, "jack");
+```
+
+### アクセストークンの取得
+
+右上のユーザーアバターをクリックして `Settings` ページを開き、`Access tokens` を `User` → `Developer` の下から選択します。Doris から Unity Catalog に接続するときに使用する新しいトークンを作成します。トークンは `dapi4f...` のような形式の文字列です。
+
+## Doris から Unity Catalog への接続
+
+### カタログの作成
+
+```sql
+-- Use oauth2 credential and vended credentials
+CREATE CATALOG dbx_unity_catalog PROPERTIES (
+  "uri" = "https://dbc-xx.cloud.databricks.com:443/api/2.1/unity-catalog/iceberg-rest/",
+  "type" = "iceberg",
+  "warehouse" = "my-unity-catalog",
+  "iceberg.catalog.type" = "rest",
+  "iceberg.rest.security.type" = "oauth2",
+  "iceberg.rest.oauth2.credential" = "clientid:clientsecret",
+  "iceberg.rest.oauth2.server-uri" = "https://dbc-xx.cloud.databricks.com:443/oidc/v1/token",
+  "iceberg.rest.oauth2.scope" = "all-apis",
+  "iceberg.rest.vended-credentials-enabled" = "true"
+);
+
+-- Use PAT and vended credentials
+CREATE CATALOG dbx_unity_catalog PROPERTIES (
+  "uri" = "https://<dbc-account>.cloud.databricks.com/api/2.1/unity-catalog/iceberg-rest/",
+  "type" = "iceberg",
+  "warehouse" = "my-unity-catalog",
+  "iceberg.catalog.type" = "rest",
+  "iceberg.rest.security.type" = "oauth2",
+  "iceberg.rest.oauth2.token" = "<token>",
+  "iceberg.rest.vended-credentials-enabled" = "true"
+);
+
+-- Use oauth2 credential and static ak/sk for accessing aws s3
+CREATE CATALOG dbx_unity_catalog PROPERTIES (
+  "uri" = "https://dbc-xx.cloud.databricks.com:443/api/2.1/unity-catalog/iceberg-rest/",
+  "type" = "iceberg",
+  "warehouse" = "my-unity-catalog",
+  "iceberg.catalog.type" = "rest",
+  "iceberg.rest.security.type" = "oauth2",
+  "iceberg.rest.oauth2.credential" = "clientid:clientsecret",
+  "iceberg.rest.oauth2.server-uri" = "https://dbc-xx.cloud.databricks.com:443/oidc/v1/token",
+  "iceberg.rest.oauth2.scope" = "all-apis",
+  "s3.endpoint" = "https://s3.<region>.amazonaws.com",
+  "s3.access_key" = "<ak>",
+  "s3.secret_key" = "<sk>",
+  "s3.region" = "<region>"
+);
+```
+
+### カタログへのアクセス
+
+作成後、Unity Catalog に保存されている Iceberg テーブルにアクセスできます。
+
+```sql
+mysql> USE dbx_unity_catalog.`default`;
+Database changed
+
+mysql> SELECT * FROM iceberg_table;
++------+------+
+| id   | name |
++------+------+
+|    1 | jack |
++------+------+
+1 row in set (3.32 sec)
+```
+
+### Iceberg テーブルの管理
+
+Doris から Unity Catalog 内の Iceberg テーブルを直接作成、管理し、データを書き込むこともできます。
+
+```sql
+-- Write to existing table in Unity Catalog
+INSERT INTO iceberg_table VALUES(2, "mary");
+
+-- Create a partitioned table
+CREATE TABLE partition_table (
+  `ts` DATETIME COMMENT 'ts',
+  `col1` BOOLEAN COMMENT 'col1',
+  `pt1` STRING COMMENT 'pt1',
+  `pt2` STRING COMMENT 'pt2'
+)
+PARTITION BY LIST (day(ts), pt1, pt2) ();
+
+-- Insert data
+INSERT INTO partition_table VALUES("2025-11-12", true, "foo", "bar");
+
+-- View table partition information
+SELECT * FROM partition_table$partitions\G
+*************************** 1. row ***************************
+                    partition: {"ts_day":"2025-11-12", "pt1":"foo", "pt2":"bar"}
+                      spec_id: 0
+                 record_count: 1
+                   file_count: 1
+total_data_file_size_in_bytes: 2552
+ position_delete_record_count: 0
+   position_delete_file_count: 0
+ equality_delete_record_count: 0
+   equality_delete_file_count: 0
+              last_updated_at: 2025-11-18 15:20:45.964000
+     last_updated_snapshot_id: 9024874735105617773
+```
+
+## まとめ
+
+Apache Doris は Databricks Unity Catalog と深く統合することで、企業が統一されたガバナンスの枠組みの下で、データレイク内の主要なデータ資産により高い性能と低いコストでアクセスし、分析できるようにします。この機能はレイクハウスアーキテクチャ全体の一貫性を高めるとともに、リアルタイム分析、対話型クエリ、AI のユースケースにも新たな可能性をもたらします。データチーム、分析エンジニア、プラットフォームアーキテクトは、既存のデータレイクを基盤として Doris を活用し、より俊敏でインテリジェントなデータアプリケーションを構築できます。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalog-overview.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalog-overview.md
new file mode 100644
index 00000000000..b4921a6e895
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalog-overview.md
@@ -0,0 +1,362 @@
+---
+{
+    "title": "データカタログの概要",
+    "language": "ja",
+    "description": "Apache Doris のデータカタログの概念と使い方を説明します。外部データカタログを作成して Hive、Iceberg、Paimon、PostgreSQL などのデータソースに接続し、データソースをまたぐ連携クエリ、データの取り込み、書き戻しを行えます。"
+}
+---
+
+データカタログは、データソースのプロパティを記述します。
+
+Doris では、Hive、Iceberg、Paimon、PostgreSQL など、異なるデータソースを指す複数のデータカタログを作成できます。Doris はデータカタログを通じて、対応するデータソースからデータベース、テーブル、スキーマ、パーティション、データの格納場所を自動的に取得します。ユーザーは標準の SQL 文を使ってこれらのデータカタログにアクセスし、データを分析したり、複数のデータカタログにまたがるデータを結合してクエリしたりできます。
+
+Doris のデータカタログには、次の二種類があります。
+
+| 種類 | 説明 |
+| ---------------- | -------------------------------------------------------- |
+| 内部カタログ | Doris の内部テーブルのデータを格納する組み込みのデータカタログです。名前は `internal` に固定されています。作成、変更、削除はできません。 |
+| 外部カタログ | 内部カタログ以外のデータカタログです。ユーザーは外部データカタログを作成、変更、削除できます。 |
+
+データカタログは主に次の三つのシナリオで使用します。ただし、対応するシナリオはデータカタログごとに異なります。詳細は各データカタログのドキュメントを参照してください。
+
+| シナリオ | 説明 |
+| ---- | ------------------------------------------- |
+| クエリの高速化 | Hive、Iceberg、Paimon などのレイクハウスデータに対するクエリを直接高速化します。 |
+| データ統合 | ゼロ ETL の方法で異なるデータソースに直接アクセスして結果データを生成したり、異なるデータソース間でデータを容易に移動したりします。 |
+| データの書き戻し | Doris でデータを処理・変換し、外部データソースに書き戻します。 |
+
+この記事では、[Iceberg カタログ](./catalogs/iceberg-catalog)を例に、データカタログの基本操作を説明します。各データカタログの詳細は、それぞれのドキュメントを参照してください。
+
+## データカタログの作成
+
+`CREATE CATALOG` 文を使用して Iceberg カタログを作成します。
+
+```sql
+CREATE CATALOG iceberg_catalog PROPERTIES (
+    'type' = 'iceberg',
+    'iceberg.catalog.type' = 'hadoop',
+    'warehouse' = 's3://bucket/dir/key',
+    's3.endpoint' = 'https://s3.us-east-1.amazonaws.com',
+    's3.access_key' = 'ak',
+    's3.secret_key' = 'sk'
+);
+```
+
+Doris で作成したデータカタログは、対応するデータソースのメタデータサービス(Hive Metastore など)やストレージサービス(HDFS/S3 など)にアクセスするための「プロキシ」として機能します。Doris に保存されるのはデータカタログの接続プロパティなどの情報だけで、対応するデータソースの実際のメタデータやデータは保存されません。
+
+### 共通プロパティ
+
+各データカタログ固有のプロパティに加え、このセクションではすべてのデータカタログに共通するプロパティ `{CommonProperties}` を説明します。
+
+| プロパティ | 説明 | 例 |
+| ----------------------- | ------------------------------------------------------------------------- | ------------------------------------- |
+| `include_database_list` | 同期する複数のデータベースを `,` で区切って指定します。デフォルトではすべてのデータベースが同期されます。データベース名は大文字と小文字が区別されます。外部データソースに多数のデータベースがあり、アクセスが必要なのは一部だけの場合、このパラメータを使うと大量のメタデータの同期を避けられます。 | `'include_database_list' = 'db1,db2'` |
+| `exclude_database_list` | 同期から除外する複数のデータベースを `,` で区切って指定します。デフォルトではフィルタリングされず、すべてのデータベースが同期されます。データベース名は大文字と小文字が区別されます。上記と同じシナリオで、アクセス不要なデータベースを除外する場合に使います。指定が競合した場合は `exclude` が `include` より優先されます。 | `'exclude_database_list' = 'db1,db2'` |
+| `include_table_list` | 同期する複数のテーブルを `db.tbl` 形式で `,` 区切りで指定します。設定すると、データベース内のテーブル一覧を表示するとき、リモートのメタデータサービスからテーブルの全件一覧を取得せず、指定したテーブルだけを返します。外部データソースに多数のテーブルがあり、全件一覧の取得がタイムアウトする可能性がある場合に使います。 | `'include_table_list' = 'db1.tbl1,db1.tbl2,db2.tbl3'` |
+| `lower_case_table_names` | カタログ単位でテーブル名の大文字・小文字の扱いを制御します。値と意味については、以下の[テーブル名の大文字・小文字の区別](#table-name-case-sensitivity-lower_case_table_names)を参照してください。デフォルト値はグローバル変数 `lower_case_table_names` から継承されます。 | `'lower_case_table_names' = '1'` |
+| `lower_case_database_names` | カタログ単位でデータベース名の大文字・小文字の扱いを制御します。値と意味については、以下の[データベース名の大文字・小文字の区別](#database-name-case-sensitivity-lower_case_database_names)を参照してください。デフォルト値は `0`(大文字・小文字を区別)です。 | `'lower_case_database_names' = '2'` |
+
+### テーブル一覧の指定
+
+この機能はバージョン 4.1.0 以降でサポートされています。
+
+外部データソース(Hive Metastore など)に多数のテーブルがある場合、リモートのメタデータサービスからテーブルの全件一覧を取得するには長い時間がかかり、タイムアウトすることもあります。`include_table_list` プロパティを設定すると、同期するテーブルを指定でき、リモートから全件一覧を取得せずに済みます。
+
+`include_table_list` では `db.tbl` 形式を使用し、複数のテーブルをカンマ `,` で区切ります。
+
+```sql
+CREATE CATALOG hive_catalog PROPERTIES (
+    'type' = 'hms',
+    'hive.metastore.uris' = 'thrift://hms-host:9083',
+    'include_table_list' = 'db1.table1,db1.table2,db2.table3'
+);
+```
+
+設定後の動作は次のとおりです。
+
+- `db1` 内のテーブルを一覧表示すると、リモートのメタデータサービスのテーブル全件一覧 API を呼び出さずに、`table1` と `table2` だけが返されます。
+- `db2` 内のテーブルを一覧表示すると、`table3` だけが返されます。
+- `include_table_list` に含まれないデータベース(`db3` など)については、引き続きリモートのメタデータサービスからテーブルの全件一覧が取得されます。
+- `include_table_list` 内で形式が正しくないエントリ(`db.tbl` 形式でないもの)は無視されます。
+
+:::tip
+このプロパティは `include_database_list` と組み合わせて使用できます。たとえば、最初に `include_database_list` で必要なデータベースを絞り込み、次に `include_table_list` で必要なテーブルを指定します。
+:::
+
+### テーブル名の大文字・小文字の区別 {#table-name-case-sensitivity-lower_case_table_names}
+
+この機能はバージョン 4.1.0 以降でサポートされています。
+
+`lower_case_table_names` プロパティを使用すると、カタログ単位でテーブル名の大文字・小文字の扱いを制御できます。このプロパティには三つのモードがあります。
+
+| 値 | モード | 説明 |
+| -- | ---- | ---- |
+| `0` | 大文字・小文字を区別(デフォルト) | テーブル名を元の大文字・小文字のまま保存して比較します。テーブル名を参照する際は、リモートのメタデータにある表記と完全に一致させる必要があります。 |
+| `1` | 小文字で保存 | Doris ではテーブル名を小文字で保存します。外部データソースへのアクセスに小文字のテーブル名を統一して使用したい場合に適しています。 |
+| `2` | 大文字・小文字を区別せずに比較 | テーブル名の比較では大文字・小文字を区別しませんが、表示時にはリモートのメタデータにある元の表記を維持します。外部データソースでテーブル名の大文字・小文字が統一されておらず、区別せずにテーブルへアクセスしたい場合に適しています。 |
+
+このプロパティを設定しない場合、デフォルトでグローバル変数 `lower_case_table_names` の値を継承します。
+
+```sql
+CREATE CATALOG hive_catalog PROPERTIES (
+    'type' = 'hms',
+    'hive.metastore.uris' = 'thrift://hms-host:9083',
+    'lower_case_table_names' = '2'
+);
+```
+
+:::caution
+`lower_case_table_names` を `1` または `2` に設定した場合、リモートのメタデータに大文字・小文字だけが異なる名前のテーブル(`MyTable` と `mytable` など)があると、競合する可能性があります。Doris はそのような競合を検出し、エラーを報告します。
+:::
+
+### データベース名の大文字・小文字の区別 {#database-name-case-sensitivity-lower_case_database_names}
+
+この機能はバージョン 4.1.0 以降でサポートされています。
+
+`lower_case_database_names` プロパティを使用すると、カタログ単位でデータベース名の大文字・小文字の扱いを制御できます。このプロパティには三つのモードがあります。
+
+| 値 | モード | 説明 |
+| -- | ---- | ---- |
+| `0` | 大文字・小文字を区別(デフォルト) | データベース名を元の大文字・小文字のまま保存して比較します。データベース名を参照する際は、リモートのメタデータにある表記と完全に一致させる必要があります。 |
+| `1` | 小文字で保存 | Doris ではデータベース名を小文字で保存します。外部データソースへのアクセスに小文字のデータベース名を統一して使用したい場合に適しています。 |
+| `2` | 大文字・小文字を区別せずに比較 | データベース名の比較では大文字・小文字を区別しませんが、表示時にはリモートのメタデータにある元の表記を維持します。外部データソースでデータベース名の大文字・小文字が統一されておらず、区別せずにデータベースへアクセスしたい場合に適しています。 |
+
+デフォルト値は `0`(大文字・小文字を区別)です。
+
+```sql
+CREATE CATALOG hive_catalog PROPERTIES (
+    'type' = 'hms',
+    'hive.metastore.uris' = 'thrift://hms-host:9083',
+    'lower_case_database_names' = '2',
+    'lower_case_table_names' = '2'
+);
+```
+
+:::caution
+`lower_case_database_names` を `1` または `2` に設定した場合、リモートのメタデータに大文字・小文字だけが異なる名前のデータベース(`MyDB` と `mydb` など)があると、競合する可能性があります。Doris はそのような競合を検出し、エラーを報告します。
+:::
+
+:::info
+`lower_case_database_names` と `lower_case_table_names` は、それぞれ独立して設定でき、互いに影響しません。たとえば、データベース名では大文字・小文字を区別(`0`)し、テーブル名では区別しない(`2`)ように設定できます。
+:::
+
+### カラム型のマッピング
+
+ユーザーがデータカタログを作成すると、Doris はそのカタログのデータベース、テーブル、スキーマを自動的に同期します。データカタログごとのカラム型のマッピング規則については、対応するデータカタログのドキュメントを参照してください。
+
+`UNION` や `INTERVAL` など、現在 Doris のカラム型にマッピングできない外部データ型は、`UNSUPPORTED` にマッピングされます。`UNSUPPORTED` 型を含むクエリについては、次の例を参照してください。
+
+同期されたテーブルのスキーマが次のとおりだとします。
+
+```text
+k1 INT,
+k2 INT,
+k3 UNSUPPORTED,
+k4 INT
+```
+
+クエリの動作は次のとおりです。
+
+```sql
+SELECT * FROM table;                -- Error: Unsupported type 'UNSUPPORTED_TYPE' in 'k3'
+SELECT * EXCEPT(k3) FROM table;     -- Query OK.
+SELECT k1, k3 FROM table;           -- Error: Unsupported type 'UNSUPPORTED_TYPE' in 'k3'
+SELECT k1, k4 FROM table;           -- Query OK.
+```
+
+### Nullable プロパティ
+
+Doris では現在、外部テーブルのカラムの Nullable プロパティのサポートに特有の制限があります。具体的な動作は次のとおりです。
+
+| ソース側の型 | Doris での読み取り時の動作 | Doris での書き込み時の動作 |
+| --- | --- | --- |
+| Nullable | Nullable | Null 値を書き込めます。 |
+| Not Null | Nullable。つまり、NULL を許容するカラムとして読み取ります。 | Null 値を書き込めます。つまり、Null 値の厳密なチェックは行われません。データの整合性と一貫性はユーザー自身で確保する必要があります。 |
+
+## データカタログの使用
+
+### データカタログの表示
+
+作成後、`SHOW CATALOGS` コマンドでカタログを表示できます。
+
+```text
+mysql> SHOW CATALOGS;
++-----------+-----------------+----------+-----------+-------------------------+---------------------+------------------------+
+| CatalogId | CatalogName     | Type     | IsCurrent | CreateTime              | LastUpdateTime      | Comment                |
++-----------+-----------------+----------+-----------+-------------------------+---------------------+------------------------+
+|     10024 | iceberg_catalog | iceberg  | yes       | 2023-12-25 16:11:41.687 | 2023-12-25 20:43:18 | NULL                   |
+|         0 | internal        | internal |           | NULL                    | NULL                | Doris internal catalog |
++-----------+-----------------+----------+-----------+-------------------------+---------------------+------------------------+
+```
+
+[SHOW CREATE CATALOG](../sql-manual/sql-statements/catalog/SHOW-CREATE-CATALOG) を使用すると、CREATE CATALOG 文を表示できます。
+
+### データカタログの切り替え
+
+Doris では、`SWITCH` 文で接続セッションのコンテキストを対応するデータカタログに切り替えられます。これは、`USE` 文でデータベースを切り替える操作と同様です。
+
+データカタログに切り替えた後は、`USE` 文でさらに特定のデータベースに切り替えるか、`SHOW DATABASES` で現在のデータカタログ内のデータベースを表示できます。
+
+```sql
+SWITCH iceberg_catalog;
+
+SHOW DATABASES;
++--------------------+
+| Database           |
++--------------------+
+| information_schema |
+| mysql              |
+| test               |
+| iceberg_db         |
++--------------------+
+
+USE iceberg_db;
+```
+
+`USE` 文に完全修飾名 `catalog_name.database_name` を指定すると、特定のデータカタログ内の特定のデータベースへ直接切り替えることもできます。
+
+```sql
+USE iceberg_catalog.iceberg_db;
+```
+
+MySQL 接続プロトコルとの互換性のために、MySQL コマンドラインや JDBC 接続文字列でも完全修飾名を使用できます。
+
+```sql
+# Command line tool
+mysql -h host -P9030 -uroot -Diceberg_catalog.iceberg_db
+
+# JDBC url
+jdbc:mysql://host:9030/iceberg_catalog.iceberg_db
+```
+
+組み込みのデータカタログの名前は `internal` に固定されています。切り替え方法は外部データカタログと同じです。
+
+### デフォルトのデータカタログ
+
+ユーザープロパティ `default_init_catalog` を使用すると、特定のユーザーのデフォルトのデータカタログを設定できます。設定後、指定したユーザーが Doris に接続すると、セッションは設定されたデータカタログに自動的に切り替わります。
+
+```sql
+SET PROPERTY default_init_catalog=hive_catalog;
+```
+
+注 1: MySQL コマンドラインまたは JDBC 接続文字列でデータカタログを明示的に指定した場合は、その指定が優先され、ユーザープロパティ `default_init_catalog` は適用されません。
+
+注 2: ユーザープロパティ `default_init_catalog` で設定したデータカタログが存在しなくなった場合、セッションはデフォルトの `internal` データカタログに自動的に切り替わります。
+
+注 3: この機能はバージョン 3.1.x 以降でサポートされています。
+
+### 基本的なクエリ
+
+Doris がサポートする任意の SQL 文を使用して、外部データカタログ内のテーブルをクエリできます。
+
+```sql
+SELECT id, SUM(cost) FROM iceberg_db.table1
+GROUP BY id ORDER BY id;
+```
+
+### カタログをまたぐクエリ
+
+Doris はデータカタログをまたぐ結合クエリをサポートします。
+
+ここでは、別の [MySQL カタログ](./catalogs/jdbc-mysql-catalog.md)を作成します。
+
+```sql
+CREATE CATALOG mysql_catalog properties(
+    'type' = 'jdbc',
+    'user' = 'root',
+    'password' = '123456',
+    'jdbc_url' = 'jdbc:mysql://host:3306/mysql_db',
+    'driver_url' = 'mysql-connector-java-8.0.25.jar',
+    'driver_class' = 'com.mysql.cj.jdbc.Driver'
+);
+```
+
+次に、SQL を使用して Iceberg テーブルと MySQL テーブルを結合してクエリします。
+
+```sql
+SELECT * FROM
+iceberg_catalog.iceberg_db.table1 tbl1 JOIN mysql_catalog.mysql_db.dim_table tbl2
+ON tbl1.id = tbl2.id;
+```
+
+### データの取り込み
+
+`INSERT` コマンドを使用して、データソースから Doris にデータを取り込めます。
+
+```sql
+INSERT INTO internal.doris_db.tbl1
+SELECT * FROM iceberg_catalog.iceberg_db.table1;
+```
+
+`CTAS (Create Table As Select)` 文を使用して、外部データソースから Doris の内部テーブルを作成し、データを取り込むこともできます。
+
+```sql
+CREATE TABLE internal.doris_db.tbl1
+PROPERTIES('replication_num' = '1')
+AS
+SELECT * FROM iceberg_catalog.iceberg_db.table1;
+```
+
+### データの書き戻し
+
+Doris は `INSERT` 文を使用した外部データソースへの直接の書き戻しをサポートします。詳細は以下を参照してください。
+
+* [Hive カタログ](./catalogs/hive-catalog.mdx)
+
+* [Iceberg カタログ](./catalogs/iceberg-catalog.mdx)
+
+* [JDBC カタログ](./catalogs/jdbc-catalog-overview.md)
+
+## データカタログの更新
+
+Doris で作成したデータカタログは、対応するデータソースのメタデータサービスにアクセスするための「プロキシ」として機能します。Doris は一部のメタデータをキャッシュします。キャッシュによってメタデータへのアクセス性能が向上し、ネットワークをまたぐ頻繁なリクエストを避けられます。ただし、キャッシュには鮮度の問題もあります。キャッシュを更新しないと、最新のメタデータにはアクセスできません。そのため、Doris はデータカタログを更新する方法を複数提供しています。
+
+```sql
+-- Refresh catalog
+REFRESH CATALOG catalog_name;
+
+-- Refresh specified database
+REFRESH DATABASE catalog_name.db_name;
+
+-- Refresh specified table
+REFRESH TABLE catalog_name.db_name.table_name;
+```
+
+Doris はメタデータのキャッシュを無効にして、最新のメタデータへリアルタイムでアクセスすることもサポートします。
+
+- Doris 4.1.x より前: [メタデータキャッシュ](./meta-cache.md)を参照してください。
+- Doris 4.1.x 以降: 各カタログのドキュメントにある「メタデータキャッシュ」のセクションを参照してください。
+    - [Hive カタログ](./catalogs/hive-catalog.mdx#meta-cache)
+    - [Iceberg カタログ](./catalogs/iceberg-catalog.mdx#meta-cache)
+    - [Hudi カタログ](./catalogs/hudi-catalog.md#meta-cache)
+    - [Paimon カタログ](./catalogs/paimon-catalog.mdx#meta-cache)
+    - [MaxCompute カタログ](./catalogs/maxcompute-catalog.md#meta-cache)
+
+## データカタログの変更
+
+`ALTER CATALOG` を使用して、データカタログのプロパティや名前を変更できます。
+
+```sql
+-- Rename a catalog
+ALTER CATALOG iceberg_catalog RENAME iceberg_catalog2;
+
+-- Modify properties of a catalog
+ALTER CATALOG iceberg_catalog SET PROPERTIES ('key1' = 'value1' [, 'key' = 'value2']); 
+
+-- Modify the comment of a catalog
+ALTER CATALOG iceberg_catalog MODIFY COMMENT 'my iceberg catalog';
+```
+
+## データカタログの削除
+
+`DROP CATALOG` を使用して、指定した外部データカタログを削除できます。
+
+```sql
+DROP CATALOG [IF EXISTS] iceberg_catalog;
+```
+
+Doris から外部データカタログを削除しても、実際のデータは削除されません。Doris に保存されているデータカタログのマッピングだけが削除されます。
+
+## 権限管理
+
+外部データカタログ内のデータベースとテーブルの権限管理は、内部テーブルの場合と同じです。詳細は[認証と認可](../admin-manual/auth/authentication-and-authorization.md)のドキュメントを参照してください。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/adbc-catalog.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/adbc-catalog.md
new file mode 100644
index 00000000000..5a77ab7bd7c
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/adbc-catalog.md
@@ -0,0 +1,555 @@
+---
+{
+    "title": "ADBC Catalog",
+    "language": "ja",
+    "description": "ADBC ドライバーを介して Arrow Flight SQL やその他の外部データソースをクエリします。Arrow 形式でデータを転送し、複数の BE で並列に読み取ります。",
+    "keywords": [
+        "ADBC Catalog",
+        "Arrow Database Connectivity",
+        "Arrow Flight SQL",
+        "ADBC ドライバー",
+        "driver_url",
+        "partitioned_read",
+        "並列読み取り",
+        "述語プッシュダウン",
+        "クラスタ間フェデレーションクエリ",
+        "Doris データ統合",
+        "ADBC と JDBC の比較"
+    ]
+}
+---
+
+<!-- Knowledge Type: Capability Definition + Configuration Reference -->
+<!-- Applicable Scenarios: Cross-cluster federated query / External data source access / Data integration -->
+
+## 概要
+
+ADBC([Arrow Database Connectivity](https://arrow.apache.org/adbc/))は、Arrow エコシステムで定義されたデータベースアクセスインターフェースです。**ADBC Catalog は ADBC ドライバーを介して外部データソースを読み取ります。データは Arrow 形式でネットワークを転送され、複数の BE ノードが並列に読み取ります。**
+
+JDBC Catalog との主な違いは次の二点です。
+
+- Arrow ネイティブの転送。データは Arrow 形式でネットワークを転送され、Doris が直接読み取ります。JDBC Catalog で行われる行ごと、値ごとの変換は不要です。
+- 並列読み取り。一回のスキャンをドライバーが生成する結果パーティションに分割し、複数の BE ノードが同時に読み取ります。単一の BE ノードが一本の接続で読み取る方式とは異なります。
+
+:::note
+- この機能は実験的なもので、バージョン 5.0.0 以降でサポートされています。
+- 読み取り操作のみをサポートします。外部データソースへの書き込みはサポートされていません。
+- Doris には ADBC ドライバーが同梱されていません。ドライバーライブラリを FE とすべての BE ノードに自分で配置する必要があります。
+:::
+
+現段階では、別の Doris クラスタを含む Arrow Flight SQL データソースを対象とし、[Doris Catalog](./doris-catalog.mdx) を置き換えます。ほかのデータソースには、そのデータソース用の ADBC ドライバーライブラリと、SQL が ANSI SQL と異なる場合には対応する方言の実装が必要です。
+
+### JDBC Catalog との違い
+
+| 比較項目 | JDBC Catalog | ADBC Catalog |
+| --- | --- | --- |
+| データ転送 | ソースの行を JDBC オブジェクトに変換し、さらに値ごとに Doris のデータに変換する | データを Arrow 形式で転送して直接読み取り、値ごとの変換は行わない |
+| 読み取りの並列性 | 単一の BE ノードが一本の接続で読み取る | ドライバーの結果パーティションに分割して複数の BE ノードで読み取る |
+| ドライバーの形式 | リモート URL からダウンロードできる JDBC ドライバー JAR | ローカルファイルとしてのみ参照できる ADBC ドライバー共有ライブラリ(`.so`) |
+| 書き込みサポート | 書き戻しに対応 | 現時点では未対応 |
+
+## 適用シナリオ
+
+| シナリオ | 説明 |
+| --- | --- |
+| データ統合 | 外部データソースから Doris の内部テーブルに読み込むか、内部テーブルとほかのカタログのテーブルにまたがるフェデレーションクエリを実行します。データは Arrow 形式で転送され、複数の BE ノードで並列に読み取られるため、JDBC 経由より高い性能が得られます。 |
+| 書き戻し | サポートされていません。 |
+
+## 機能一覧
+
+<!-- Knowledge Type: Capability Matrix -->
+
+| 機能 | 対応状況 | 説明 |
+| --- | --- | --- |
+| メタデータへのアクセス | 対応 | `SHOW DATABASES`、`SHOW TABLES`、`DESC`、`SHOW CREATE TABLE`、`information_schema` |
+| データクエリ | 対応 | 外部テーブルへのクエリ、および内部テーブルやほかのカタログのテーブルとの結合、集約、`ORDER BY`、`UNION`、サブクエリ |
+| 列プルーニング | 対応 | クエリに必要な列のみをデータソースに要求する |
+| 述語プッシュダウン | 対応 | 一部のスカラー述語をリモートの `WHERE` 句に変換する |
+| `LIMIT` プッシュダウン | 対応 | `WHERE` 句全体がプッシュダウンされた場合に適用する |
+| `COUNT(*)` 最適化 | 対応 | 列データを読み取らない |
+| 並列読み取り | 対応 | スキャンをドライバーの結果パーティションに分割し、複数の BE ノードで読み取る |
+| 型マッピング | 対応 | `ARRAY`、`MAP`、`STRUCT`、`DECIMAL`、日付、タイムゾーン付き/なしのタイムスタンプを含め、自動的にマッピングする |
+| メタデータキャッシュ | 対応 | デフォルトでは 10 分間キャッシュし、任意の `REFRESH` 文で消去する |
+| `SELECT INTO OUTFILE` | 対応 | クエリ結果をファイルにエクスポートできる |
+| マテリアライズドビュー(MTMV) | 対応 | ADBC テーブル上に MTMV を構築して更新できる |
+| データソースへの書き込み | 現時点では未対応 | `INSERT`、`CREATE TABLE`、`DROP TABLE` などの書き込み文は拒否される |
+| 統計情報 | 現時点では未対応 | 統計情報の収集は利用できない |
+| 集約プッシュダウン | 現時点では未対応 | 集約は Doris で実行する |
+
+## ADBC ドライバーの配置
+
+<!-- Knowledge Type: Deployment Steps -->
+
+Doris には ADBC ドライバーが同梱されていません。カタログを作成する前に、ドライバーライブラリをクラスタノードに配置してください。
+
+### ドライバーの配置要件
+
+:::caution
+`CREATE CATALOG` の実行時に FE は `driver_url` を絶対パスに解決し、そのパスを変更せずに BE に送ります。各 BE はそのパスからドライバーを読み込みます。そのため、次の要件があります。
+
+- ドライバーファイルが FE と**すべての** BE ノードの**同じ絶対パス**に存在すること。
+- FE とすべての BE が**同じビルド**を読み込むこと。ADBC のパーティション情報はドライバー固有の形式で記述され、ドライバー実装間の互換性は保証されません。異なるバージョンを混在させてもエラーにならず、誤った結果が返る可能性があります。
+:::
+
+ビルド出力には、次の二つのドライバーディレクトリが作成されます。
+
+- FE: `<FE_HOME>/plugins/adbc_drivers`
+- BE: `<BE_HOME>/plugins/adbc_drivers`
+
+通常、FE と BE は異なるデプロイ先ディレクトリにあるため、この二つの絶対パスは一致しません。複数ノードに配置する場合は、すべての FE と BE ノードの共通の絶対パス(例: `/opt/doris/adbc_drivers`)にドライバーを置き、`drivers_dir` を FE の `adbc.conf` でそのディレクトリに設定してください。
+
+### adbc.conf
+
+ADBC コネクタプラグインは、FE 上の `<DORIS_HOME>/plugins/connector/adbc/adbc.conf` から設定を読み取ります。このファイルは**すべての FE ノード**に必要です。Doris はカタログメタデータを使ってこのファイルを複製しません。変更は FE の再起動後に有効になります。
+
+| 設定項目 | デフォルト | 説明 |
+| --- | --- | --- |
+| `drivers_dir` | `<DORIS_HOME>/plugins/adbc_drivers` | `driver_url` に指定したファイル名のみの値を解決する基準ディレクトリ。 |
+| `driver_secure_path` | `*` | ドライバーの読み込みを許可するディレクトリ。セミコロン(`;`)で区切ります。`*` または空欄の場合、すべてのディレクトリを許可します。具体的なパスを設定した場合、ドライバーのパスはコンポーネントごとに照合されるため、パストラバーサルやプレフィックスの混同(`/opt/drv` と `/opt/drv-evil`)による回避はできません。 |
+
+設定例:
+
+```properties
+drivers_dir=/opt/doris/adbc_drivers
+driver_secure_path=/opt/doris/adbc_drivers
+```
+
+## カタログの設定
+
+<!-- Knowledge Type: Configuration Parameters -->
+
+### 構文
+
+```sql
+CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
+    'type' = 'adbc',
+    'driver_url' = '<driver_url>',
+    'uri' = '<connection_uri>',
+    {DriverProperties},
+    {ConnectionProperties},
+    {ReadProperties},
+    {DriverOptions},
+    {CommonProperties}
+);
+```
+
+* `<driver_url>`
+
+    必須。ADBC ドライバーの共有ライブラリを**ローカル参照のみ**で指定します。次の三形式に対応します。
+
+    | 形式 | 説明 |
+    | --- | --- |
+    | ファイル名のみ | `drivers_dir` ディレクトリ(`adbc.conf` で指定)を基準に解決します。名前は `[A-Za-z0-9._-]+.so` に一致する必要があり、`.so.1` のようなバージョン接尾辞も指定できます。パス区切り文字は含められません。 |
+    | `file://` URL | オーソリティ、クエリ、フラグメントを含めることはできません。 |
+    | 絶対パス | FE とすべての BE が、そのパスからドライバーライブラリを読み込みます。 |
+
+    `http://` などのリモートスキームは拒否されます。ノードごとにダウンロードすると、すべてのノードに同じドライバービルドが配置されることを保証できないためです。
+
+* `<connection_uri>`
+
+    必須。ADBC の接続文字列です。
+
+    Doris は ADBC の三階層の名前を自身の二階層の名前に対応させるため、`postgresql://host:5432/mydb` のように**単一のリモートカタログを指定する必要があります**。詳しくは[名前空間のマッピング](#namespace-mapping)を参照してください。
+
+* `{DriverProperties}`
+
+    DriverProperties セクションには、ドライバーの読み込みを制御する任意のプロパティを指定します。
+
+    | プロパティ | デフォルト | 説明 |
+    | --- | --- | --- |
+    | `driver_checksum` | 検証しない | ドライバーライブラリファイルの MD5。`CREATE CATALOG` の実行時に検証します。 |
+    | `driver_entrypoint` | 空 | ドライバーのエントリポイントシンボル。空の場合はドライバーが推定します。 |
+
+    `driver_checksum` を指定すると、誤ったドライバービルドや、あるノードに残った古いコピーを検出できます。このようなファイルは通常、問題なく読み込まれ、後になってドライバーとの関連が分からないクエリエラーとして表面化します。
+
+    :::caution
+    `driver_checksum` が検証するのは FE 上のコピーのみで、BE 上のコピーは検証しません。
+    :::
+
+* `{ConnectionProperties}`
+
+    ConnectionProperties セクションには、データソースの認証情報とプッシュダウン SQL の生成に使用する方言を指定します。
+
+    | プロパティ | デフォルト | 説明 |
+    | --- | --- | --- |
+    | `user` | なし | ユーザー名。指定したとおりにドライバーへ渡します。必須かどうかはデータソースによって異なります。 |
+    | `password` | なし | パスワード。指定したとおりにドライバーへ渡します。必須かどうかはデータソースによって異なります。 |
+    | `sql_dialect` | 自動検出 | プッシュダウン SQL の生成に使用する方言。デフォルトでは、ドライバーが報告するデータソースのベンダー名に基づいて Doris が方言を選びます。認識されない名前の場合は `ansi` を使用します。 |
+
+    データソースが報告するベンダー名が適切でない場合や、その名前から想定される SQL と実際の SQL が異なる場合は、`sql_dialect` を明示的に設定してください。次の二つの方言が組み込まれています。
+
+    | 値 | 説明 |
+    | --- | --- |
+    | `ansi` | 標準 SQL。デフォルトであり、認識されないデータソースにも適用されます。 |
+    | `doris` | `ansi` と同じですが、識別子をバッククォート(`` ` ``)で囲みます。Doris は二重引用符で囲んだ名前を文字列リテラルとして読み取るため、Doris データソースに対して ANSI 形式の引用符は解析できません。ベンダー名が大文字と小文字を区別せずに `doris` で始まるデータソースでは、この方言が自動的に選択されます。 |
+
+* `{ReadProperties}`
+
+    ReadProperties セクションでは、並列読み取りを制御します。
+
+    | プロパティ | デフォルト | 説明 |
+    | --- | --- | --- |
+    | `partitioned_read` | `auto` | 並列読み取りモード。無効な値を指定すると、デフォルトにフォールバックせず、エラーになります。 |
+    | `max_partitions` | `1024` | 一回のスキャンで計画できるパーティション数の上限。 |
+
+    `partitioned_read` には次の三つの値を指定できます。
+
+    | 値 | 説明 |
+    | --- | --- |
+    | `auto` | デフォルト。ドライバーが分割できる場合はスキャンを分割し、できない場合は単一の文として読み取ります。 |
+    | `disabled` | パーティションを要求しません。要求にはコストがかかります。Arrow Flight SQL データソースでは、パーティションを返す呼び出し**自体が**クエリの実行であるため、計画時にリモートとの往復が一回増え、Doris がクエリの実行を確定する前にデータソースが処理を開始します。このコストが大きすぎる場合や、返されたパーティションを Doris が読み取れない場合は、この値を使って単一文での読み取りに戻してください。 |
+    | `required` | スキャンを分割できなければ、理由を示してクエリを失敗させます。並列性が知らないうちに失われることを避けたい場合に使用します。`auto` では、ドライバーが分割しなくなってもクエリは成功し、結果からはフォールバック経路を使ったことが分かりません。 |
+
+    `max_partitions` は異常なデータソースから保護するための上限であり、性能調整用のパラメータではありません。各パーティションは計画用のリソースを消費し、多すぎると FE のリソースを使い果たします。上限を超えた場合、単一文での読み取りにフォールバックせずクエリを失敗させます。その時点でデータソースはすでにクエリを実行しており、フォールバックすると二回実行することになるためです。
+
+* `{DriverOptions}`
+
+    DriverOptions セクションには、`adbc.` プレフィックスを付けてドライバーにそのまま渡すオプションを指定します。
+
+    :::caution
+    **プレフィックスはオプション名の一部として扱われ、削除されません。** ADBC 自体のオプション名はすでに `adbc.` で始まります(例: `adbc.snowflake.sql.db`)。そのため、`CREATE CATALOG` では `adbc.adbc.snowflake.sql.db` と記述します。
+    :::
+
+    ```sql
+    'adbc.adbc.snowflake.sql.db' = 'my_database'
+    ```
+
+* `{CommonProperties}`
+
+    CommonProperties セクションには、共通プロパティを指定します。[Catalog Overview](../catalog-overview.md) の「Common Properties」セクションを参照してください。
+
+    メタデータキャッシュのプロパティについては、[メタデータキャッシュ](#meta-cache)を参照してください。
+
+## 例
+
+<!-- Knowledge Type: Operational Examples -->
+
+### 別の Doris クラスタへのクエリ
+
+Arrow Flight SQL ドライバーを介して別の Doris クラスタを読み取ります。`uri` は対象クラスタの FE の Arrow Flight ポートを指します。
+
+```sql
+CREATE CATALOG remote_doris PROPERTIES (
+    'type' = 'adbc',
+    'driver_url' = 'libadbc_driver_flightsql.so',
+    'uri' = 'grpc://remote-doris-fe:8070',
+    'user' = 'root',
+    'password' = '<password>'
+);
+
+SELECT id, name FROM remote_doris.some_db.some_table ORDER BY id LIMIT 10;
+```
+
+この `driver_url` はファイル名のみを指定しており、`drivers_dir`(`adbc.conf` で指定)を基準に解決されます。
+
+### 絶対パスの使用とドライバービルドの固定
+
+絶対パスでドライバーを参照し、`driver_checksum` で FE 上のコピーを固定します。
+
+```sql
+CREATE CATALOG remote_source PROPERTIES (
+    'type' = 'adbc',
+    'driver_url' = '/opt/doris/adbc_drivers/libadbc_driver_flightsql.so',
+    'driver_checksum' = 'd41d8cd98f00b204e9800998ecf8427e',
+    'uri' = 'grpc+tls://remote-host:8070',
+    'user' = 'analyst',
+    'password' = '<password>'
+);
+```
+
+### 方言の指定と並列読み取りの必須化
+
+Doris データソースに対して `doris` 方言を使用し、スキャンの分割を必須にして並列性が知らないうちに失われないようにします。
+
+```sql
+CREATE CATALOG remote_doris_parallel PROPERTIES (
+    'type' = 'adbc',
+    'driver_url' = 'libadbc_driver_flightsql.so',
+    'uri' = 'grpc://remote-doris-fe:8070',
+    'user' = 'root',
+    'password' = '<password>',
+    'sql_dialect' = 'doris',
+    'partitioned_read' = 'required',
+    'max_partitions' = '256'
+);
+```
+
+### 並列読み取りの無効化
+
+クエリ実行前のパーティション要求によるデータソース側の負荷が大きすぎる場合は、並列読み取りを無効にします。
+
+```sql
+CREATE CATALOG remote_source_single PROPERTIES (
+    'type' = 'adbc',
+    'driver_url' = 'libadbc_driver_flightsql.so',
+    'uri' = 'grpc://remote-host:8070',
+    'user' = 'root',
+    'password' = '<password>',
+    'partitioned_read' = 'disabled'
+);
+```
+
+## 名前空間のマッピング {#namespace-mapping}
+
+<!-- Knowledge Type: Behavior Rules -->
+
+ADBC はオブジェクトを三階層(catalog / db_schema / table)で命名しますが、Doris の外部テーブルは二階層(database / table)です。最上位の名前は作成したカタログにすでに使われているため、リモート側の名前から一階層を除く必要があります。
+
+- `uri` で単一のリモートカタログを指定する必要があります。そうすれば、残りの二つのリモート階層のうち変動するのは最大一つとなり、Doris が二つの名前を結合して一つのデータベース名にする必要がありません。
+- リモートの `db_schema` が空でない場合は、その `db_schema` が Doris のデータベース名になります。空の場合はリモートのカタログ名が使用されます。
+
+| リモート(catalog, db_schema) | Doris のデータベース名 |
+| --- | --- |
+| `mydb`, `public` | `public` |
+| `mydb`, 空 | `mydb` |
+
+データソースがカタログ名も db_schema 名もないオブジェクトを報告した場合、Doris はそれをデータベースとして参照できず、エラーになります。
+
+`uri` でリモートカタログを指定していない場合、Doris は `CREATE CATALOG` の実行時にそれを報告し、`postgresql://host:5432/mydb` のように URI にリモートカタログ名を含めるか、ドライバーオプションで指定するよう求めます。一部のドライバーは、この確認に Doris が使用するインターフェースを実装していません。その場合、カタログは指定どおりに受け入れられ、最初の `SHOW DATABASES` で問題が表面化します。
+
+## 列型のマッピング
+
+<!-- Knowledge Type: Type Reference -->
+
+Doris はデータソースから返された Arrow 型をマッピングします。
+
+| Arrow 型 | Doris 型 | 備考 |
+| --- | --- | --- |
+| `bool` | `BOOLEAN` | |
+| `int8` | `TINYINT` | |
+| `int16` | `SMALLINT` | |
+| `int32` | `INT` | |
+| `int64` | `BIGINT` | |
+| `uint8` | `SMALLINT` | 符号なし整数は一段階広い型にする |
+| `uint16` | `INT` | 符号なし整数は一段階広い型にする |
+| `uint32` | `BIGINT` | 符号なし整数は一段階広い型にする |
+| `uint64` | `LARGEINT` | 符号なし整数は一段階広い型にする |
+| `float16`, `float32` | `FLOAT` | |
+| `float64` | `DOUBLE` | |
+| `decimal128(P,S)` | `DECIMAL(P,S)` | 最大精度は 38。超えると列は拒否される |
+| `decimal256(P,S)` | `DECIMAL(P,S)` | 最大精度は 76。超えると列は拒否される |
+| `date32(day)` | `DATE` | |
+| `date64(ms)` | `DATETIME(3)` | `date64` は時刻も保持しており、`DATE` に変換すると失われる |
+| タイムゾーンなしの `timestamp(s)` | `DATETIME(0)` | |
+| タイムゾーンなしの `timestamp(ms)` | `DATETIME(3)` | |
+| タイムゾーンなしの `timestamp(us)`, `timestamp(ns)` | `DATETIME(6)` | ナノ秒の精度はマイクロ秒に切り捨てられる |
+| タイムゾーン付きの `timestamp` | `TIMESTAMPTZ(0-6)` | 精度に関する規則は同じ。タイムゾーン付きの Arrow タイムスタンプは特定の時点を表し、`DATETIME` に変換するとタイムゾーン情報が失われる |
+| `utf8`, `large_utf8`, `utf8_view` | `STRING` | |
+| `binary`, `large_binary`, `binary_view`, `fixed_size_binary` | `STRING` | Doris の外部テーブル経由では汎用のバイナリ列型がない |
+| `list`, `large_list`, `fixed_size_list`, `list_view`, `large_list_view` | `ARRAY` | 要素型は再帰的にマッピングされる |
+| `struct` | `STRUCT` | フィールド型は再帰的にマッピングされ、**フィールド名は小文字に変換される** |
+| `map` | `MAP` | キー型と値型は再帰的にマッピングされる |
+| `dictionary` | 辞書の値型に基づいてマッピング | |
+| `run_end_encoded` | 値型に基づいてマッピング | |
+| その他 | 未対応 | |
+
+:::note
+- Doris には符号なし整数型がないため、符号なし型は一段階広い型にマッピングされます。`uint32` は `BIGINT` にマッピングされ、`INT` にはマッピングされません。狭い型を使うと、2^31 を超える値がすべて負数に変わってしまうためです。
+- 型をマッピングできない場合、Doris は損失のある型に変換せず、テーブル情報を取得する際に列名と Arrow 型を示してエラーにします。データソース側でその列をキャストするか、クエリから除外してください。
+- Doris データソースを読み取る場合、双方で int32 としてエンコードされるため、`IPV4` 列は `INT` として返され、ソースの `DATETIME` 列は `TIMESTAMPTZ` として返されます。
+:::
+
+## クエリ操作
+
+<!-- Knowledge Type: Operational Examples + Behavior Rules -->
+
+### 基本的なクエリ
+
+カタログの設定後は、次のいずれかの方法でテーブルをクエリできます。
+
+```sql
+-- 1. switch to catalog, use database and query
+SWITCH adbc_ctl;
+USE adbc_db;
+SELECT * FROM adbc_tbl LIMIT 10;
+
+-- 2. use adbc database directly
+USE adbc_ctl.adbc_db;
+SELECT * FROM adbc_tbl LIMIT 10;
+
+-- 3. use full qualified name to query
+SELECT * FROM adbc_ctl.adbc_db.adbc_tbl LIMIT 10;
+```
+
+### メタデータ操作
+
+```sql
+SHOW DATABASES FROM adbc_ctl;
+
+SHOW TABLES FROM adbc_ctl.adbc_db;
+
+DESC adbc_ctl.adbc_db.adbc_tbl;
+
+SHOW CREATE TABLE adbc_ctl.adbc_db.adbc_tbl;
+```
+
+データベースとテーブルの一覧は常に最新の情報を読み取るため、データソースで作成したテーブルは `REFRESH` なしで表示されます。テーブルスキーマはキャッシュされます。詳しくは[メタデータキャッシュ](#meta-cache)を参照してください。
+
+:::note
+データソース上のビューはテーブルとして一覧表示されません。
+:::
+
+### データ統合
+
+外部データソースから Doris の内部テーブルへデータを書き込めます。
+
+```sql
+INSERT INTO internal.demo.local_tbl
+SELECT * FROM adbc_ctl.adbc_db.adbc_tbl;
+```
+
+内部テーブルやほかのカタログのテーブルとのフェデレーションクエリに加え、`SELECT ... INTO OUTFILE` や ADBC テーブル上に構築したマテリアライズドビュー(MTMV)も使用できます。
+
+### 列プルーニング
+
+Doris はクエリに必要な列だけを要求します。使用しない列は、生成されるリモート SQL に含まれません。
+
+### 述語プッシュダウン
+
+次の述語は、リモート SQL の `WHERE` 句に変換されます。
+
+| 分類 | 対応する形式 |
+| --- | --- |
+| 比較 | `=`, `!=`, `<`, `<=`, `>`, `>=` |
+| NULL の判定 | `IS NULL`, `IS NOT NULL` |
+| 集合 | `IN`, `NOT IN` |
+| 論理演算子 | 上記の述語に対する `AND`, `OR`, `NOT` |
+
+関数呼び出し、算術式、`LIKE`、`BETWEEN` はプッシュダウンされず、Doris 側で評価されます。
+
+最上位の `AND` で結合された各条件は、条件全体がプッシュダウンされるか、まったくプッシュダウンされないかのどちらかです。**Doris はプッシュダウンした述語もすべて再適用します。**そのため、プッシュダウンが影響するのはクエリの速度だけで、返される行は変わりません。
+
+### LIMIT プッシュダウン
+
+`LIMIT` は `WHERE` 句全体がプッシュダウンされた場合にのみプッシュダウンされます。これにより、Doris 側でまだ適用する必要があるフィルターより先に、データソース側で結果が切り詰められることを防ぎます。
+
+### COUNT(*) 最適化
+
+`COUNT(*)` はデータソースから列データを読み取りません。
+
+### 生成されたリモート SQL の確認
+
+`EXPLAIN` には、実際にデータソースへ送信される SQL 文が表示されます。
+
+```sql
+EXPLAIN
+SELECT id, name
+FROM adbc_ctl.adbc_db.adbc_tbl
+WHERE id > 100 AND name IS NOT NULL
+LIMIT 10;
+```
+
+出力の `QUERY:` 行はプッシュダウンされたリモート文を表し、その列はスキャンで実際に要求される列と一致します。
+
+:::tip
+Arrow Flight SQL データソースでは、パーティションを要求する呼び出し自体がクエリの実行になります。そのため、ADBC テーブルに対して `EXPLAIN` を実行しても、Doris はデータソースにパーティションを要求せず、データソースも実際にはクエリを実行しません。
+:::
+
+### 並列読み取り
+
+`partitioned_read` が `auto`(デフォルト)または `required` の場合、Doris はドライバーに一回のスキャンを複数の結果パーティションに分割するよう要求します。各パーティションを一つの BE ノードが読み取り、ノードは並列に動作します。
+
+データソースがスキャンを分割できない場合:
+
+- `auto`: 単一の BE ノードによる単一文での読み取りにフォールバックします。
+- `required`: 理由を示してクエリを失敗させます。
+
+パーティション数が `max_partitions` を超える場合、クエリは失敗します。
+
+## メタデータキャッシュ {#meta-cache}
+
+<!-- Knowledge Type: Configuration Parameters + Usage Guidance -->
+
+外部データソースへのアクセスを高速化するため、Doris は ADBC カタログのメタデータの一部をキャッシュします。対象はデータベース名の解決、テーブル名の解決、テーブルスキーマです。
+
+データベースとテーブルの一覧は**キャッシュされません**。常に最新の情報を読み取るため、データソースで作成したテーブルには `REFRESH` なしでアクセスできます。
+
+### キャッシュプロパティの設定 {#meta-cache-unified-model}
+
+ADBC カタログのメタデータキャッシュは、共通のキー `meta.cache.<engine>.<entry>.{enable,ttl-second,capacity}` で設定します。
+
+| プロパティ | デフォルト | 意味 |
+| --- | --- | --- |
+| `meta.cache.adbc.metadata.enable` | `true` | メタデータキャッシュを有効にするかどうか。 |
+| `meta.cache.adbc.metadata.ttl-second` | `600` | `0` はキャッシュを無効にします。すぐに有効になり、最新のメタデータを確認できます。`-1` は期限切れになりません。その他の正の整数は、アクセス時刻を基準とする TTL(秒)です。 |
+| `meta.cache.adbc.metadata.capacity` | `1000` | キャッシュエントリ数の上限。`0` はキャッシュを無効にします。 |
+
+**有効になる条件:** キャッシュが有効になるのは、`enable=true`、`ttl-second != 0`、`capacity > 0` のすべてを満たす場合だけです。
+
+:::tip
+デフォルトの TTL である 10 分は、ほかのカタログのデフォルトより大幅に短く設定されています。ADBC データソースは稼働中の別のデータベースであり、ほかのユーザーによる DDL でテーブルがいつでも変更されますが、その変更は Doris に通知されません。この設定値は、`REFRESH` を忘れた場合に古いテーブルスキーマが表示され続ける時間の上限です。
+:::
+
+### キャッシュモジュール {#meta-cache-unified-modules}
+
+データベース名の解決、テーブル名の解決、テーブルスキーマは、一つの設定群を共有します。これらは一緒に読み込まれ、一緒に破棄されます。いずれもリモートデータソースの構造を表すためです。
+
+| モジュール(`<entry>`) | プロパティキーのプレフィックス | キャッシュする内容と影響 |
+| --- | --- | --- |
+| `metadata` | `meta.cache.adbc.metadata.` | データベース名の解決、テーブル名の解決、テーブルスキーマをキャッシュします。ソースで列が追加、削除、または型変更された後、Doris から見えるまでの時間に影響します。 |
+
+### 手動更新
+
+次の各文は、それぞれの対象範囲のキャッシュを破棄します。
+
+```sql
+REFRESH CATALOG adbc_ctl;
+REFRESH DATABASE adbc_ctl.adbc_db;
+REFRESH TABLE adbc_ctl.adbc_db.adbc_tbl;
+```
+
+### ベストプラクティス {#meta-cache-best-practices}
+
+* **最新メタデータへのリアルタイムアクセス**: すべてのクエリでデータソースの現在のテーブルスキーマを読み取りたい場合は、`ttl-second` を `0` に設定します。
+
+  ```sql
+  ALTER CATALOG adbc_ctl SET PROPERTIES ("meta.cache.adbc.metadata.ttl-second" = "0");
+  ```
+
+* **スキーマが頻繁に変わるデータソース**: `ttl-second` を短くするか、変更があったことを確認した時点で `REFRESH` を実行します。
+
+### 可観測性 {#meta-cache-unified-observability}
+
+キャッシュのメトリクスは、`information_schema.catalog_meta_cache_statistics` システムテーブルから取得できます。
+
+```sql
+SELECT catalog_name, engine_name, entry_name,
+       effective_enabled, ttl_second, capacity,
+       estimated_size, hit_rate, load_failure_count, last_error
+FROM information_schema.catalog_meta_cache_statistics
+WHERE catalog_name = 'adbc_ctl' AND engine_name = 'adbc'
+ORDER BY entry_name;
+```
+
+このシステムテーブルについては、[catalog_meta_cache_statistics](../../admin-manual/system-tables/information_schema/catalog_meta_cache_statistics.md)を参照してください。
+
+:::caution
+ADBC 接続では、クエリを実行するユーザーにかかわらず、データソースにはカタログに設定された単一の ID でアクセスします。そのため、キャッシュエントリはすべてのユーザーで共有されます。
+:::
+
+## 制限事項
+
+<!-- Knowledge Type: Limitations -->
+
+- 読み取り専用です。データソースに対する `INSERT`、`CREATE TABLE`、`DROP TABLE` などの書き込み文は拒否されます。
+- 統計情報の収集と集約プッシュダウンはサポートされていません。
+- データソース上のビューはテーブルとして一覧表示されません。
+- `driver_checksum` は FE 上のドライバーのコピーのみを検証します。BE 上のコピーは検証されず、FE と BE のファイル同士も比較されません。
+- `driver_url` に指定できるのはローカル参照のみです。Doris はリモート URL からドライバーをダウンロードしません。
+- Doris データソースを読み取る場合、`IPV4` 列は `INT` として、ソースの `DATETIME` 列は `TIMESTAMPTZ` として返されます。
+
+## 付録
+
+### よくある質問
+
+<!-- Knowledge Type: Troubleshooting -->
+
+| 症状またはエラー | 原因 | 対処方法 |
+| --- | --- | --- |
+| `Driver file not found` | FE が、解決したパスでドライバーファイルを見つけられません。 | `driver_url` にファイル名のみを指定した場合は、`drivers_dir` ディレクトリ(`adbc.conf` で指定)にファイルがあるか確認してください。絶対パスまたは `file://` URL を指定した場合は、そのパスが FE ノードに存在し、読み取り可能か確認してください。 |
+| `Driver path does not match any path allowed by driver_secure_path` | ドライバーのパスが `adbc.conf` の許可リストに含まれていません。 | ドライバーを許可されたディレクトリに移動するか、`driver_secure_path` を変更して FE を再起動してください。 |
+| `scheme 'xxx' is not supported, only a local file is` | `driver_url` に `http://` などのリモートスキームが使用されています。 | ADBC ドライバーはノードごとにダウンロードされません。FE とすべての BE にドライバーファイルを配置し、ファイル名のみ、絶対パス、または `file://` URL で参照してください。 |
+| `The ADBC source reports no current catalog, so 'uri' does not pin one` | `uri` でリモートカタログが指定されていません。 | `postgresql://host:5432/mydb` のように URI にリモートカタログ名を含めるか、`adbc.` プレフィックスを付けたドライバーオプションで指定してください。 |
+| 列の Arrow 型に対応する Doris 型がないというエラーでクエリが失敗する | その列の型をマッピングできません。 | データソース側でマッピング可能な型にキャストするか、`SELECT *` を使わず、クエリからその列を除外してください。 |
+| クエリ結果が誤っているように見えるが、エラーは報告されない | FE とすべての BE でドライバーファイルのビルドが一致していない可能性があります。ADBC はパーティション情報をドライバー固有の形式で記述するため、異なる実装同士でエラーなく誤読する可能性があります。 | `driver_checksum` で FE のビルドを固定し、各 BE 上のドライバーファイルの MD5 を手動で比較してください。 |
+| リモート SQL が構文エラーで失敗する | データソースの SQL 方言と使用中の方言が一致していません。 | `sql_dialect` を明示的に設定してください。たとえば、Doris データソースに対して `'sql_dialect' = 'doris'` を指定します。 |
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/bigquery-catalog.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/bigquery-catalog.md
new file mode 100644
index 00000000000..5d5b4e01023
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/bigquery-catalog.md
@@ -0,0 +1,171 @@
+---
+{
+    "title": "BigQuery Catalog",
+    "language": "ja",
+    "description": "Apache Doris で BigQuery Catalog を設定し、Google BigQuery データウェアハウスに接続する方法を説明します。Trino Connector 互換フレームワークを使用して、BigQuery のテーブルデータのクエリ、データ統合、リアルタイム分析を行えます。Google Cloud の ADC 認証と、ARRAY、MAP、STRUCT などの複合型を含む各種データ型のマッピングをサポートします。インストール、デプロイ、設定パラメータ、使用例を通じて、BigQuery と Doris 間のデータ連携を説明します。"
+}
+---
+
+## 概要
+
+BigQuery Catalog は、[Trino Connector](https://doris.apache.org/community/developer-guide/data-source-extension/trino-connector-developer-guide/) 互換フレームワークを通じて Trino BigQuery Connector を使用し、BigQuery のテーブルにアクセスします。
+
+:::note
+- この機能は実験的な機能で、バージョン 3.0.1 以降でサポートされています。
+- この機能は Trino クラスター環境に依存せず、Trino 互換プラグインのみを使用します。
+:::
+
+### ユースケース
+
+| シナリオ | 対応状況 |
+| -------- | -------- |
+| データ統合 | BigQuery のデータを読み取り、Doris の内部テーブルに書き込む |
+| データの書き戻し | サポート対象外 |
+
+### バージョンの互換性
+
+- **Doris のバージョン**: 3.0.1 以降
+- **Trino Connector のバージョン**: 435
+- **BigQuery のバージョン**: サポート対象のバージョンについては、[Trino のドキュメント](https://trino.io/docs/435/connector/bigquery.html)を参照してください。
+
+## クイックスタート
+
+### ステップ 1: Connector プラグインを準備する
+
+BigQuery Connector プラグインは、次のいずれかの方法で入手できます。
+
+**方法 1: ビルド済みパッケージを使用する(推奨)**
+
+[こちら](https://github.com/apache/doris-thirdparty/releases/tag/trino-435-20240724)からビルド済みのプラグインパッケージをダウンロードし、展開します。
+
+**方法 2: 手動でビルドする**
+
+カスタムビルドが必要な場合は、次の手順に従ってください(JDK 17 が必要です)。
+
+```shell
+git clone https://github.com/apache/doris-thirdparty.git
+cd doris-thirdparty
+git checkout trino-435
+cd plugin/trino-bigquery
+mvn clean install -DskipTests
+```
+
+ビルド後、`trino-bigquery-435/` ディレクトリが `trino/plugin/trino-bigquery/target/` に生成されます。
+
+### ステップ 2: プラグインをデプロイする
+
+1. すべての FE ノードと BE ノードで、`trino-bigquery-435/` ディレクトリをデプロイ先の `connectors/` ディレクトリに配置します(このディレクトリが存在しない場合は手動で作成します)。
+
+   ```text
+   ├── bin
+   ├── conf
+   ├── plugins
+   │   ├── connectors
+   │       ├── trino-bigquery-435
+   ...
+   ```
+
+   > `trino_connector_plugin_dir` の設定を `fe.conf` で変更して、プラグインのパスを指定することもできます。例: `trino_connector_plugin_dir=/path/to/connectors/`
+
+2. Connector が正しく読み込まれるように、すべての FE ノードと BE ノードを再起動します。
+
+### ステップ 3: Google Cloud 認証を準備する
+
+Catalog を作成する前に、Google Cloud 認証を設定する必要があります。推奨される方法は Application Default Credentials(ADC)です。
+
+1. gcloud CLI をインストールします: <https://cloud.google.com/sdk/docs/install>
+
+2. 次のコマンドを実行して初期化と認証を行います。
+
+    ```shell
+    gcloud init --console-only --skip-diagnostics
+    gcloud auth login
+    gcloud auth application-default login
+    ```
+
+3. 認証に成功すると、ADC 認証情報ファイルが `~/.config/gcloud/application_default_credentials.json` に生成されます。
+
+### ステップ 4: Catalog を作成する
+
+**基本的な設定例**
+
+```sql
+CREATE CATALOG bigquery_catalog PROPERTIES (
+    'type' = 'trino-connector',
+    'trino.connector.name' = 'bigquery',
+    'trino.bigquery.project-id' = 'your-bigquery-project-id',
+    'trino.bigquery.credentials-file' = '/path/to/application_default_credentials.json'
+);
+```
+
+### ステップ 5: データをクエリする
+
+Catalog の作成後、次の三通りの方法で BigQuery のテーブルデータをクエリできます。
+
+```sql
+-- Method 1: Query after switching to Catalog
+SWITCH bigquery_catalog;
+USE bigquery_db;
+SELECT * FROM bigquery_tbl LIMIT 10;
+
+-- Method 2: Use two-level path
+USE bigquery_catalog.bigquery_db;
+SELECT * FROM bigquery_tbl LIMIT 10;
+
+-- Method 3: Use fully qualified name
+SELECT * FROM bigquery_catalog.bigquery_db.bigquery_tbl LIMIT 10;
+```
+
+## 設定
+
+### Catalog の設定パラメータ
+
+BigQuery Catalog を作成する基本構文は次のとおりです。
+
+```sql
+CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
+    'type' = 'trino-connector',             -- Required, fixed value
+    'trino.connector.name' = 'bigquery',    -- Required, fixed value
+    {TrinoProperties},                      -- Trino Connector related properties
+    {CommonProperties}                      -- Common properties
+);
+```
+
+#### TrinoProperties パラメータ
+
+TrinoProperties は、`trino.` で始まる Trino BigQuery Connector 固有のプロパティを設定するために使用します。主なパラメータは次のとおりです。
+
+| パラメータ名 | 必須 | デフォルト値 | 説明 |
+| ------------ | ---- | ------------ | ---- |
+| `trino.bigquery.project-id` | はい | - | BigQuery のプロジェクト ID |
+| `trino.bigquery.credentials-file` | はい | - | Google Cloud の認証情報ファイルのパス |
+| `trino.bigquery.views-enabled` | いいえ | false | ビューのサポートを有効にするかどうか |
+| `trino.bigquery.arrow-serialization.enabled` | いいえ | true | パフォーマンス向上のために Arrow シリアル化を有効にするかどうか |
+
+BigQuery Connector のその他の設定パラメータについては、[Trino の公式ドキュメント](https://trino.io/docs/435/connector/bigquery.html)を参照してください。
+
+#### CommonProperties パラメータ
+
+CommonProperties は、メタデータの更新ポリシーやアクセス制御など、Catalog に共通するプロパティを設定するために使用します。詳しくは、[Catalog の概要](../catalog-overview.md)の「共通プロパティ」セクションを参照してください。
+
+## データ型のマッピング
+
+BigQuery Catalog を使用する場合、データ型は次の規則に従ってマッピングされます。
+
+| BigQuery の型 | Trino の型 | Doris の型 |
+| ------------ | ---------- | ---------- |
+| boolean       | boolean                         | boolean       |
+| int64         | bigint                          | bigint        |
+| float64       | double                          | double        |
+| numeric       | decimal(P, S)                   | decimal(P, S) |
+| bignumeric    | decimal(P, S)                   | decimal(P, S) |
+| string        | varchar                         | string        |
+| bytes         | varbinary                       | string        |
+| date          | date                            | date          |
+| datetime      | timestamp(6)                    | datetime(6)   |
+| time          | time(6)                         | string        |
+| timestamp     | timestamp with time zone(6)     | datetime(6)   |
+| geography     | varchar                         | string        |
+| array         | array                           | array         |
+| map           | map                             | map           |
+| struct        | row                             | struct        |
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/delta-lake-catalog.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/delta-lake-catalog.md
new file mode 100644
index 00000000000..831124f125f
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/delta-lake-catalog.md
@@ -0,0 +1,168 @@
+---
+{
+    "title": "Delta Lake Catalog",
+    "language": "ja",
+    "description": "Apache Doris Delta Lake Catalog ユーザーガイド。Trino Connector フレームワークを通じて Delta Lake データレイクに接続し、Delta Lake テーブルのデータをクエリして連携する方法を説明します。Hive Metastore、複数のデータ型のマッピング、および Delta Lake と Doris の迅速な連携をサポートします。"
+}
+---
+
+## 概要
+
+Delta Lake Catalog は、[Trino Connector](https://doris.apache.org/community/developer-guide/data-source-extension/trino-connector-developer-guide/) 互換フレームワークと Trino Delta Lake Connector を使用して、Delta Lake テーブルにアクセスします。
+
+:::note
+- この機能は実験的な機能で、バージョン 3.0.1 以降でサポートされています。
+- この機能に Trino クラスター環境は不要です。Trino 互換プラグインのみを使用します。
+:::
+
+### ユースケース
+
+| シナリオ | サポート状況 |
+| -------- | -------------- |
+| データ連携 | Delta Lake のデータを読み取り、Doris の内部テーブルに書き込む |
+| データの書き戻し | サポートされていません |
+
+### バージョンの互換性
+
+- **Doris のバージョン**: 3.0.1 以降
+- **Trino Connector のバージョン**: 435
+- **Delta Lake のバージョン**: サポートされるバージョンについては、[Trino のドキュメント](https://trino.io/docs/435/connector/delta-lake.html)を参照してください。
+
+## クイックスタート
+
+### ステップ 1: Connector プラグインを準備する
+
+Delta Lake Connector プラグインは、次のいずれかの方法で入手できます。
+
+**方法 1: ビルド済みパッケージを使用する(推奨)**
+
+ビルド済みの [trino-delta-lake-435-20240724.tar.gz](https://github.com/apache/Doris-thirdparty/releases/download/trino-435-20240724/trino-delta-lake-435-20240724.tar.gz) と [hdfs.tar.gz](https://github.com/apache/doris-thirdparty/releases/download/trino-435-20240724/trino-hdfs-435-20240724.tar.gz) をダウンロードし、展開します。
+
+**方法 2: 手動でビルドする**
+
+独自にビルドする必要がある場合は、次の手順に従ってください(JDK 17 が必要です)。
+
+```shell
+git clone https://github.com/apache/doris-thirdparty.git
+cd doris-thirdparty
+git checkout trino-435
+cd plugin/trino-delta-lake
+mvn clean install -DskipTests
+cd ../../lib/trino-hdfs
+mvn clean install -DskipTests
+```
+
+ビルド後、`trino-delta-lake-435` ディレクトリが `trino/plugin/trino-delta-lake/target/` の下に、`hdfs` ディレクトリが `trino/lib/trino-hdfs/target/` の下に作成されます。
+
+### ステップ 2: プラグインを配置する
+
+1. すべての FE および BE のデプロイ先で、`trino-delta-lake-435/` ディレクトリを `connectors/` ディレクトリの下に配置します(ディレクトリが存在しない場合は手動で作成します)。
+
+   ```text
+   ├── bin
+   ├── conf
+   ├── plugins
+   │   ├── connectors
+   │       ├── trino-delta-lake-435
+   │           ├── hdfs
+   ...
+   ```
+
+   > `trino_connector_plugin_dir` 設定(`fe.conf` 内)を変更して、プラグインのパスをカスタマイズすることもできます。例: `trino_connector_plugin_dir=/path/to/connectors/`
+
+2. Connector が正しく読み込まれるように、すべての FE および BE ノードを再起動します。
+
+### ステップ 3: Catalog を作成する
+
+**基本設定**
+
+```sql
+CREATE CATALOG delta_lake_catalog PROPERTIES (
+    'type' = 'trino-connector',
+    'trino.connector.name' = 'delta_lake',
+    'trino.hive.metastore' = 'thrift',
+    'trino.hive.metastore.uri' = 'thrift://ip:port',
+    'trino.hive.config.resources' = '/path/to/core-site.xml,/path/to/hdfs-site.xml'
+);
+```
+
+**設定項目の説明**
+
+- `trino.hive.metastore`: メタデータサービスの種類。`thrift`(Hive Metastore)などをサポートします。
+- `trino.hive.metastore.uri`: Hive Metastore サービスのアドレス。
+- `trino.hive.config.resources`: Hadoop 設定ファイルのパス。複数のファイルはカンマで区切ります。
+
+その他の設定項目については、以下の「設定項目の説明」セクションまたは [Trino の公式ドキュメント](https://trino.io/docs/435/connector/delta-lake.html)を参照してください。
+
+### ステップ 4: データをクエリする
+
+Catalog の作成後、次の三つの方法のいずれかで Delta Lake テーブルのデータをクエリできます。
+
+```sql
+-- Method 1: Switch to Catalog then query
+SWITCH delta_lake_catalog;
+USE delta_lake_db;
+SELECT * FROM delta_lake_tbl LIMIT 10;
+
+-- Method 2: Use two-level path
+USE delta_lake_catalog.delta_lake_db;
+SELECT * FROM delta_lake_tbl LIMIT 10;
+
+-- Method 3: Use fully qualified name
+SELECT * FROM delta_lake_catalog.delta_lake_db.delta_lake_tbl LIMIT 10;
+```
+
+## 設定項目の説明
+
+### Catalog の設定パラメータ
+
+Delta Lake Catalog を作成する基本構文は次のとおりです。
+
+```sql
+CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
+    'type' = 'trino-connector',            -- Required, fixed value
+    'trino.connector.name' = 'delta_lake', -- Required, fixed value
+    {TrinoProperties},                     -- Trino Connector related properties
+    {CommonProperties}                     -- Common properties
+);
+```
+
+#### TrinoProperties パラメータ
+
+TrinoProperties は Trino Delta Lake Connector 固有のプロパティの設定に使用します。これらのプロパティには `trino.` というプレフィックスが付きます。主なパラメータは次のとおりです。
+
+| パラメータ名 | 必須 | デフォルト値 | 説明 |
+| -------------- | -------- | ------------- | ----------- |
+| `trino.hive.metastore` | はい | - | メタデータサービスの種類。`thrift` など |
+| `trino.hive.metastore.uri` | はい | - | Hive Metastore サービスのアドレス |
+| `trino.hive.config.resources` | いいえ | - | Hadoop 設定ファイルのパス。複数のファイルはカンマで区切ります |
+| `trino.delta.hide-non-delta-tables` | いいえ | false | Delta Lake 以外のテーブルを非表示にするかどうか |
+
+その他の Delta Lake Connector の設定パラメータについては、[Trino の公式ドキュメント](https://trino.io/docs/435/connector/delta-lake.html)を参照してください。
+
+#### CommonProperties パラメータ
+
+CommonProperties は、メタデータの更新ポリシーや権限制御など、Catalog に共通するプロパティの設定に使用します。詳しくは、[Catalog の概要](../catalog-overview.md)の「共通プロパティ」セクションを参照してください。
+
+## データ型のマッピング
+
+Delta Lake Catalog を使用する場合、データ型は次の規則に従ってマッピングされます。
+
+| Delta Lake の型 | Trino の型 | Doris の型 | 備考 |
+| --------------- | ---------- | ---------- | ----- |
+| boolean | boolean | boolean | |
+| int | int | int | |
+| byte | tinyint | tinyint | |
+| short | smallint | smallint | |
+| long | bigint | bigint | |
+| float | real | float | |
+| double | double | double | |
+| decimal(P, S) | decimal(P, S) | decimal(P, S) | |
+| string | varchar | string | |
+| binary | varbinary | string | |
+| date | date | date | |
+| timestamp_ntz | timestamp(N) | datetime(N) | |
+| timestamp | timestamp with time zone(N) | datetime(N) | |
+| array | array | array | |
+| map | map | map | |
+| struct | row | struct | |
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/doris-catalog.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/doris-catalog.mdx
new file mode 100644
index 00000000000..c3b5121db12
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/doris-catalog.mdx
@@ -0,0 +1,288 @@
+---
+{
+    "title": "Doris Catalog",
+    "language": "ja",
+    "description": "Doris Catalog は、複数の Doris クラスターを横断するフェデレーション分析をサポートします。Arrow Flight モードと Virtual Cluster モードに対応し、分散データウェアハウス環境で複数クラスターのデータを効率的にクエリ、書き込み、統合分析できます。"
+}
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+:::note
+この機能はバージョン 4.0.2 以降でサポートされています。
+
+この機能は実験的な機能です。
+:::
+
+## ユースケース
+
+複数の Doris クラスターを横断してフェデレーション分析を行います。
+
+JDBC Catalog を使用して他の Doris クラスターに接続する方法とは異なり、Arrow Flight モードまたは Virtual Cluster モードによって複数の Doris クラスターを効率的に統合分析できます。
+
+## Catalog の設定
+
+### 構文
+
+```sql
+CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
+    'type' = 'doris', -- required
+    'fe_http_hosts' = 'http://<fe-host1>:<fe-http-port>,<fe-host2>:<fe-http-port>', -- required
+    'fe_arrow_hosts' = '<fe-host1>:<fe-arrow-flight-port>,<fe-host2>:<fe-arrow-flight-port>', -- required
+    'fe_thrift_hosts' = '<fe-host1>:<fe-thrift-port>,<fe-host2>:<fe-thrift-port>', -- required
+    'use_arrow_flight' = 'true/false', -- required
+    'user' = '', -- required
+    'password' = '', -- required
+    {QueryProperties},
+    {HttpClientProperties},
+    {CommonProperties}
+);
+```
+
+*   `fe_http_hosts`
+
+    リモート Doris クラスターの FE HTTP サービスエンドポイントの一覧。
+
+*   `fe_arrow_hosts`
+
+    リモート Doris クラスターの FE Arrow Flight サービスエンドポイントの一覧。
+
+*   `fe_thrift_hosts`
+
+    リモート Doris クラスターの FE Thrift サービスエンドポイントの一覧。
+
+    > バージョン 4.0.2 では、Master FE のアドレスを指定してください。この問題は後続のバージョンで修正される予定です。
+
+*   `use_arrow_flight`
+
+    リモート Doris クラスターに Arrow Flight 経由でアクセスするか、リモートテーブルを内部テーブルとして扱って実行プランをリモート Doris クラスターに送信するかを指定します。
+
+*   `{QueryProperties}`
+
+    省略可能なプロパティです。
+
+    | パラメータ名                    | 説明                                                                                           | デフォルト値 |
+    |----------------------------------|-------------------------------------------------------------------------------------------------------|---------|
+    | `enable_parallel_result_sink`    | 有効にすると、ローカル Doris の BE ノードがリモート Doris クラスターの複数の BE ノードから並列にデータを取得します(Arrow Flight モード用)。 | true    |
+    | `query_retry_count`              | リモート Doris へのクエリリクエストが失敗した場合の最大リトライ回数。リクエスト受理後の非同期実行中に発生する可能性がある失敗は含みません。 | 3       |
+    | `query_timeout_sec`              | リモート Doris にクエリを送信する際のタイムアウト。リクエスト受理後の非同期実行時間は含みません。 | 15      |
+    | `compatible`                     | ローカルクラスターより古いバージョンのリモート Doris にアクセスする際、メタデータ形式の互換性を試みるために使用します。クラスターのバージョンが同じ場合は有効にする必要はありません。 | false   |
+
+*   `{HttpClientProperties}`
+
+    HttpClientProperties セクションでは、HTTP クライアントに関するパラメータを設定します。このクライアントは、リモートクラスターのメタデータを同期するための HTTP リクエストを送信します。すべて省略可能なパラメータです。
+
+    | パラメータ名                       | 説明                                                | デフォルト値 |
+    |-------------------------------------|-----------------------------------------------------------|---------|
+    | `metadata_http_ssl_enabled`         | HTTP によるメタデータ同期で SSL/TLS 暗号化通信を有効にするかどうか。 | false   |
+    | `metadata_sync_retry_count`         | HTTP リクエストが失敗した場合の最大リトライ回数。        | 3       |
+    | `metadata_max_idle_connections`     | HTTP メタデータ同期クライアントのアイドル接続の最大数。 | 5       |
+    | `metadata_keep_alive_duration_sec`  | HTTP メタデータ同期クライアントのアイドル接続を維持する期間。 | 300     |
+    | `metadata_connect_timeout_sec`      | HTTP メタデータ同期クライアントの TCP 接続タイムアウト。 | 10      |
+    | `metadata_read_timeout_sec`         | HTTP メタデータ同期クライアントのソケット読み取りタイムアウト。 | 10      |
+    | `metadata_write_timeout_sec`        | HTTP メタデータ同期クライアントのソケット書き込みタイムアウト。 | 10      |
+    | `metadata_call_timeout_sec`         | HTTP メタデータ同期クライアントの HTTP リクエスト全体のタイムアウト。 | 10      |
+
+*   `{CommonProperties}`
+
+    CommonProperties セクションには共通プロパティを指定します。Data Catalog の概要にある [共通プロパティ] セクションを参照してください。
+
+## アクセスモード
+
+### Arrow Flight モード
+
+> バージョン 4.0.2 以降でサポートされています。
+
+`use_arrow_flight` プロパティを `true` に設定すると、Arrow Flight モードになります。
+
+![Arrow Flight モードの構成図](/images/Lakehouse/doris-catalog/arrow-flight-mode.png)
+
+このモードでクラスター間クエリを実行すると、FE が HTTP プロトコルを通じてスキーマなどのメタデータを同期し、ローカルクラスターの BE ノードが Arrow Flight インターフェースを通じてリモート Doris クラスターにアクセスします。
+
+**利点**: 実行プランではリモートクラスターに送信するクエリ SQL を生成するだけなので、FE のオーバーヘッドはほとんどありません。
+
+**欠点**: 集約のプッシュダウンなど、Doris の内部テーブル向けのさまざまな最適化機能を利用できない場合があります。述語のプッシュダウンにも制限があります。
+
+### Virtual Cluster モード
+
+> バージョン 4.0.3 以降でサポートされています。
+
+`use_arrow_flight` プロパティを `false` に設定すると、Virtual Cluster モードになります。
+
+> 現時点で、このモードはストレージとコンピュートが一体化した構成でデプロイされた Doris クラスターのみをサポートします。
+
+![Virtual Cluster モードの構成図](/images/Lakehouse/doris-catalog/virtual-cluster-mode.png)
+
+このモードでクラスター間クエリを実行すると、リモート Doris クラスターの Backend ノードは、クエリプランニング時に仮想ノードとして扱われます。
+
+FE は HTTP プロトコルを通じてスキーマなどのメタデータを同期します。BE は内部通信プロトコルを通じてデータを直接転送します。
+
+**利点**: Doris の内部テーブルクエリ向けの最適化機能を基本的にすべて利用できます。クエリの実行フローは単一クラスター内での実行と同じです。
+
+**欠点**: 大きなリモートテーブルでは、パーティション情報やレプリカ情報を含むテーブルの全情報を取得します。FE のメモリ使用量が増えるため、FE のメモリ拡張が必要になります。また、上位バージョンから下位バージョンにクエリする場合など、クラスターのバージョンが一致しないとクエリが失敗することがあります。
+
+> バージョン 4.1 以降、Virtual Cluster モードは INSERT によるデータロードをサポートします。
+
+## カラム型の対応
+
+### Arrow Flight モード
+
+このモードでサポートされるカラム型とテーブル型は、Arrow Flight SQL の対応範囲に依存します。現時点での対応状況と制限は次のとおりです。
+
+-   すべてのプリミティブ型をサポートします。
+-   すべてのネスト型(Array、Map、Struct)をサポートします。
+-   hll、bitmap、variant 型はサポートしません。
+-   すべてのテーブルモデル(Duplicate、Aggregate、Unique テーブル)をサポートします。
+
+### Virtual Cluster モード
+
+Virtual Cluster モードでは、すべてのカラム型とすべてのテーブルモデル(Duplicate、Aggregate、Unique テーブル)をサポートします。
+
+## クエリ操作
+
+Catalog を設定した後は、次の方法で Catalog 内のテーブルデータをクエリできます。
+
+```sql
+-- 1. switch to catalog, use database and query
+SWITCH doris_ctl;
+USE doris_db;
+SELECT * FROM doris_tbl LIMIT 10;
+
+-- 2. use doris database directly
+USE doris_ctl.doris_db;
+SELECT * FROM doris_tbl LIMIT 10;
+
+-- 3. use full qualified name to query
+SELECT * FROM doris_ctl.doris_db.doris_tbl LIMIT 10;
+```
+
+## クエリの最適化
+
+### Arrow Flight モード
+
+このモードでは、Doris は述語や関数の条件をプッシュダウンし、生成する SQL に組み込もうとします。
+
+生成された SQL 文は EXPLAIN SQL で確認できます。
+
+```sql
+...
+|   0:VREMOTE_DORIS_SCAN_NODE(68)                                                                                                                   |
+|      TABLE: test.test_time                                                                                                                        |
+|      QUERY: SELECT /*+ SET_VAR(enable_parallel_result_sink=true) */ `timestamp` FROM test.test_time WHERE (timestamp > '2025-11-03 00:00:00.000') |
+|      PREDICATES: (timestamp[#0] > '2025-11-03 00:00:00.000')
+...
+```
+
+### Virtual Cluster モード
+
+このモードでは、実行プランに引き続き `VOlapScanNode` が表示されます。
+
+Join Runtime Filter など、Doris の内部テーブルクエリ向けの各種最適化を引き続き利用できます。
+
+```sql
+MySQL [(none)]> explain select * from demo.inner_table a join edoris.external.example_tbl_duplicate b on (a.log_type = b.log_type) where error_code=2;
++-------------------------------------------------------------------------------------------------------------------------------------------+
+| Explain String(Nereids Planner)                                                                                                           |
++-------------------------------------------------------------------------------------------------------------------------------------------+
+| PLAN FRAGMENT 0                                                                                                                           |
+|   OUTPUT EXPRS:                                                                                                                           |
+|     log_type[#16]                                                                                                                         |
+|     reason[#17]                                                                                                                           |
+|     log_time[#18]                                                                                                                         |
+|     log_type[#19]                                                                                                                         |
+|     error_code[#20]                                                                                                                       |
+|     error_msg[#21]                                                                                                                        |
+|     op_id[#22]                                                                                                                            |
+|     op_time[#23]                                                                                                                          |
+|   PARTITION: HASH_PARTITIONED: log_type[#6]                                                                                               |
+|                                                                                                                                           |
+|   HAS_COLO_PLAN_NODE: false                                                                                                               |
+|                                                                                                                                           |
+|   VRESULT SINK                                                                                                                            |
+|      MYSQL_PROTOCOL                                                                                                                       |
+|                                                                                                                                           |
+|   3:VHASH JOIN(200)                                                                                                                       |
+|   |  join op: INNER JOIN(BROADCAST)[]                                                                                                     |
+|   |  equal join conjunct: (log_type[#6] = log_type[#1])                                                                                   |
+|   |  cardinality=3                                                                                                                        |
+|   |  vec output tuple id: 3                                                                                                               |
+|   |  output tuple id: 3                                                                                                                   |
+|   |  vIntermediate tuple ids: 2                                                                                                           |
+|   |  hash output slot ids: 0 1 2 3 4 5 6 7                                                                                                |
+|   |  runtime filters: RF000[min_max] <- log_type[#1](1/1/1048576), RF001[in_or_bloom] <- log_type[#1](1/1/1048576)                        |
+|   |  final projections: log_type[#8], reason[#9], log_time[#10], log_type[#11], error_code[#12], error_msg[#13], op_id[#14], op_time[#15] |
+|   |  final project output tuple id: 3                                                                                                     |
+|   |  distribute expr lists: log_type[#6]                                                                                                  |
+|   |  distribute expr lists:                                                                                                               |
+|   |                                                                                                                                       |
+|   |----1:VEXCHANGE                                                                                                                        |
+|   |       offset: 0                                                                                                                       |
+|   |       distribute expr lists: log_type[#1]                                                                                             |
+|   |                                                                                                                                       |
+|   2:VOlapScanNode(187)                                                                                                                    |
+|      TABLE: demo.inner_table(inner_table), PREAGGREGATION: ON                                                                             |
+|      partitions=1/1 (inner_table)                                                                                                         |
+|      tablets=1/1, tabletList=1762832514491                                                                                                |
+|      cardinality=3, avgRowSize=901.6666, numNodes=1                                                                                       |
+|      pushAggOp=NONE                                                                                                                       |
+|      runtime filters: RF000[min_max] -> log_type[#6], RF001[in_or_bloom] -> log_type[#6]                                                  |
+|                                                                                                                                           |
+| PLAN FRAGMENT 1                                                                                                                           |
+|                                                                                                                                           |
+|   PARTITION: HASH_PARTITIONED: log_type[#1]                                                                                               |
+|                                                                                                                                           |
+|   HAS_COLO_PLAN_NODE: false                                                                                                               |
+|                                                                                                                                           |
+|   STREAM DATA SINK                                                                                                                        |
+|     EXCHANGE ID: 01                                                                                                                       |
+|     UNPARTITIONED                                                                                                                         |
+|                                                                                                                                           |
+|   0:VOlapScanNode(188)                                                                                                                    |
+|      TABLE: external.example_tbl_duplicate(example_tbl_duplicate), PREAGGREGATION: ON                                                     |
+|      PREDICATES: (error_code[#2] = 2)                                                                                                     |
+|      partitions=1/1 (example_tbl_duplicate)                                                                                               |
+|      tablets=1/1, tabletList=1762481736238                                                                                                |
+|      cardinality=1, avgRowSize=7425.0, numNodes=1                                                                                         |
+|      pushAggOp=NONE
+```
+
+## 書き込み操作
+
+> バージョン 4.1 以降でサポートされています。
+
+Catalog を設定した後は、Virtual Cluster モードで次の INSERT 方法を使用して Catalog 内のテーブルにデータをロードできます。
+
+```sql
+-- 1. switch to catalog, use database and insert
+SWITCH doris_ctl;
+USE doris_db;
+insert into doris_tbl values (1,2);
+
+-- 2. use doris database directly
+USE doris_ctl.doris_db;
+insert into doris_tbl values (1,2);
+
+-- 3. use full qualified name to insert
+insert into doris_ctl.doris_db.doris_tbl values (1,2);
+```
+
+### サポートされるデータロード形式
+
+```sql
+-- 1. insert into values
+insert into doris_ctl.doris_db.doris_tbl values (1,2);
+
+-- 2. insert into select
+insert into doris_ctl.doris_db.doris_tbl select * from doris_db.doris_tbl;
+
+-- 3. insert overwrite
+insert overwrite table doris_ctl.doris_db.doris_tbl select * from doris_db.doris_tbl;
+```
+
+### サポートされないデータロード機能
+
+Catalog の設定後も、現時点では次のデータロード機能はサポートされません。
+
+-   [グループコミット](../../data-operate/import/load-best-practices/group-commit-manual.md)
+-   [トランザクション](../../data-operate/transaction)
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/es-catalog.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/es-catalog.md
new file mode 100644
index 00000000000..2208f89b77b
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/es-catalog.md
@@ -0,0 +1,569 @@
+---
+{
+    "title": "Elasticsearch カタログ",
+    "language": "ja",
+    "description": "Elasticsearch カタログは ES メタデータの自動マッピングに対応するだけでなく、"
+}
+---
+
+Elasticsearch カタログは ES メタデータの自動マッピングに対応するだけでなく、Doris の分散クエリ計画機能と ES(Elasticsearch)の全文検索機能を組み合わせ、より包括的な OLAP 分析ソリューションを提供します。
+
+1. ES 内の複数インデックスにまたがる分散 Join クエリ。
+
+2. Doris のテーブルと ES のテーブルを組み合わせ、より複雑な全文検索フィルタリングを行うクエリ。
+
+## 前提条件
+
+Elasticsearch 5.x 以降に対応しています。
+
+## Elasticsearch への接続
+
+```sql
+CREATE CATALOG es_catalog PROPERTIES (
+    'type' = 'es',
+    'hosts' = 'http://127.0.0.1:9200'
+    {ElasticsearchProperties}
+);
+```
+
+* {ElasticsearchProperties}
+
+| パラメータ             | 必須 | デフォルト | 説明 |
+| ---------------------- | ---- | ---------- | ---- |
+| `hosts`                | はい |            | ES のアドレス。一つでも複数でも指定でき、ES ロードバランサーのアドレスも指定できます。 |
+| `user`                 | いいえ | 空 | ES のユーザー名。 |
+| `password`             | いいえ | 空 | 対応するユーザーのパスワード。 |
+| `doc_value_scan`       | いいえ | true | ES/Lucene の列指向ストレージからクエリ対象フィールドの値を取得するかどうか。 |
+| `keyword_sniff`        | いいえ | true | ES の文字列トークン化型について text フィールドを検出し、keyword を使ってクエリするかどうか。false に設定すると、トークン化された内容に基づいて照合します。 |
+| `nodes_discovery`      | いいえ | true | ES ノードの検出を有効にするかどうか。デフォルトは true です。ネットワークが分離された環境で指定したノードにのみ接続するには false に設定します。 |
+| `ssl`                  | いいえ | false | ES で HTTPS アクセスモードを有効にするかどうか。現在の FE/BE の実装ではすべての証明書を信頼します。 |
+| `mapping_es_id`        | いいえ | false | ES インデックスの \_id フィールドをマッピングするかどうか。 |
+| `like_push_down`       | いいえ | true | LIKE を wildcard に変換して ES にプッシュダウンするかどうか。ES の CPU 使用量が増加します。 |
+| `include_hidden_index` | いいえ | false | 非表示インデックスを含めるかどうか。デフォルトは false です。 |
+
+注:
+
+1. 現在、認証は HTTP Basic 認証にのみ対応しています。ユーザーに `/_cluster/state/`、`_nodes/http` などのパスへのアクセス権限とインデックスの読み取り権限があることを確認してください。クラスターのセキュリティ認証が有効でない場合、ユーザー名とパスワードは不要です。
+
+2. バージョン 5.x と 6.x では、一つのインデックスに複数の型がある場合、デフォルトで最初の型が使用されます。
+
+## 階層のマッピング
+
+Elasticsearch には Database の概念がないため、ES に接続すると、一意の Database `default_db` が自動生成されます。
+
+SWITCH コマンドで ES カタログに切り替えると、`default_db` にも自動的に切り替わるため、`USE default_db` コマンドを実行する必要はありません。
+
+## 列型のマッピング
+
+| ES の型           | Doris の型  | 備考 |
+| ----------------- | ----------- | ---- |
+| null              | null        |      |
+| boolean           | boolean     |      |
+| byte              | tinyint     |      |
+| short             | smallint    |      |
+| integer           | int         |      |
+| long              | bigint      |      |
+| unsigned\_long    | largeint    |      |
+| float             | float       |      |
+| half\_float       | float       |      |
+| double            | double      |      |
+| scaled\_float     | double      |      |
+| date              | date        | `default` / `yyyy-MM-dd HH:mm:ss` / `yyyy-MM-dd` / `epoch_millis` 形式のみ対応します。 |
+| keyword           | string      |      |
+| text              | string      |      |
+| ip                | string      |      |
+| constant\_keyword | string      |      |
+| wildcard          | string      |      |
+| nested            | json        |      |
+| object            | json        |      |
+| flattened         | json        | バージョン 3.1.4、4.0.3 以降で対応します。 |
+| other             | UNSUPPORTED |      |
+
+### 配列型
+
+Elasticsearch には明示的な配列型はありませんが、フィールドには[0 個以上の値](https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html)を含めることができます。
+
+フィールドが配列型であることを示すには、所定の `doris` 構造の注釈をインデックスマッピングの [\_meta](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-meta-field.html) セクションに追加します。
+
+Elasticsearch 6.x 以前のバージョンについては、[\_meta](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping-meta-field.html) を参照してください。
+
+たとえば、次のデータ構造を含むインデックス `doc` があるとします。
+
+```json
+{
+  "array_int_field": [1, 2, 3, 4],
+  "array_string_field": ["doris", "is", "the", "best"],
+  "id_field": "id-xxx-xxx",
+  "timestamp_field": "2022-11-12T12:08:56Z",
+  "array_object_field": [
+    {
+      "name": "xxx",
+      "age": 18
+    }
+  ]
+}
+```
+
+次のコマンドで対象インデックスのマッピングにある `_meta.doris` プロパティへフィールド属性の定義を追加すると、この構造の配列フィールドを定義できます。
+
+```shell
+# ES 7.x and above
+curl -X PUT "localhost:9200/doc/_mapping?pretty" -H 'Content-Type:application/json' -d '
+{
+    "_meta": {
+        "doris":{
+            "array_fields":[
+                "array_int_field",
+                "array_string_field",
+                "array_object_field"
+            ]
+        }
+    }
+}'
+
+# ES 6.x and before
+curl -X PUT "localhost:9200/doc/_mapping/_doc?pretty" -H 'Content-Type: application/json' -d '
+{
+    "_meta": {
+        "doris":{
+            "array_fields":[
+                "array_int_field",
+                "array_string_field",
+                "array_object_field"
+            ]
+        }
+    }
+}
+```
+
+`array_fields`: 配列型のフィールドを示すために使用します。
+
+### flattened 型
+
+`flattened` 型では、`enable_docvalue_scan` プロパティが `false` の場合、読み取られる JSON データ形式はフラット化されます。`enable_docvalue_scan` プロパティが `true` の場合、元の JSON 形式が読み取られます。例を次に示します。
+
+インデックスの定義:
+
+```json
+"mappings": {
+   "properties": {
+      "column1": {
+      "type": "keyword"
+      },
+      "extra": {
+      "type": "flattened"
+      }
+   }
+}
+```
+
+データ:
+
+```json
+{
+  "column1": 1,
+  "extra": {
+    "subcol1": "abc",
+    "sub_array": [
+      {"k1": "element1"},
+      {"k2": "element2"},
+      {"k3": "element3"}
+    ]
+  }
+}
+```
+
+- `enable_docvalue_scan` プロパティが `false` の場合
+
+   `extra` 列のクエリ結果は次のとおりです。
+
+   ```json
+   {
+      "subcol1": "abc",
+      "sub_array": [
+         {"k1": "element1"},
+         {"k2": "element2"},
+         {"k3": "element3"}
+      ]
+   }
+   ```
+
+- `enable_docvalue_scan` プロパティが `true` の場合
+
+   `extra` 列のクエリ結果は次のとおりです。
+
+   ```json
+   ["abc","element1","element2","element3"]
+   ```
+
+## クエリ操作
+
+カタログを設定した後、次の方法でカタログ内のテーブルデータをクエリできます。
+
+```sql
+-- 1. switch to catalog, use database and query
+SWITCH es_ctl;
+SELECT * FROM es_tbl LIMIT 10;
+
+-- 2. use default_db directly
+USE es_ctl.default_db;
+SELECT * FROM es_tbl LIMIT 10;
+
+-- 3. use full qualified name to query
+SELECT * FROM es_ctl.default_db.es_tbl LIMIT 10;
+```
+
+より高度なクエリ機能については、[ベストプラクティス] セクションを参照してください。
+
+## ベストプラクティス
+
+### フィルター述語のプッシュダウン
+
+ES カタログはフィルター述語のプッシュダウンに対応しています。フィルター条件を ES にプッシュダウンするため、実際に条件を満たすデータだけが返されます。これにより、クエリ性能を大幅に向上させ、Doris と Elasticsearch の CPU、メモリ、IO の使用量を削減できます。
+
+次の演算子は、対応する ES クエリに最適化されます。
+
+| SQL 構文                | ES 5.x 以降の構文              |
+| ----------------------- | ----------------------------- |
+| `=`                     | term クエリ                   |
+| `in`                    | terms クエリ                  |
+| `>` , `<` , `>=` , `<=` | range クエリ                  |
+| `and`                   | bool.filter                   |
+| `or`                    | bool.should                   |
+| `not`                   | bool.must\_not                |
+| `not in`                | bool.must\_not + terms クエリ |
+| `is_not_null`           | exists クエリ                 |
+| `is_null`               | bool.must\_not + exists クエリ |
+| `esquery`               | ES ネイティブの JSON 形式の QueryDSL |
+
+### 列指向スキャンを有効にしてクエリ速度を最適化する(enable\_docvalue\_scan=true)
+
+`"enable_docvalue_scan" = "true"` に設定します。
+
+有効にすると、Doris は ES からデータを取得する際に、次の二つの原則に従います。
+
+* **ベストエフォート**: 読み取るフィールドで列指向ストレージが有効か(doc\_value: true)を自動検出します。すべてのフィールドに列指向ストレージがある場合、Doris はすべてのフィールド値をそこから取得します。
+
+* **自動フォールバック**: 取得するフィールドのいずれかに列指向ストレージがない場合、すべてのフィールド値を行指向ストレージ `_source` から解析して取得します。
+
+**利点**:
+
+デフォルトでは、Doris On ES は必要な列をすべて行指向ストレージの `_source` から取得します。`_source` は行指向の JSON 形式で格納されるため、特に必要な列が少ない場合、バッチ読み取り性能が列指向ストレージより低くなります。必要な列が少ない場合、docvalue の性能は \_source の約十倍です。
+
+**注**:
+
+1. ES の `text` 型フィールドには列指向ストレージがありません。そのため、取得するフィールド値のいずれかが `text` 型であれば、`_source` からの取得に自動的に切り替わります。
+
+2. 取得するフィールド数が多すぎる場合(`>= 25`)、`docvalue` からフィールド値を取得する性能は `_source` から取得する場合とほぼ同じになります。
+
+3. `keyword` 型のフィールドでは、長いテキストが [`ignore_above`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#keyword-params) パラメータの上限を超えると、値が空になることがあります。この場合は `enable_docvalue_scan` を無効にして、`_source` から結果を取得する必要があります。
+
+### keyword 型フィールドの検出
+
+`"enable_keyword_sniff" = "true"` に設定します。
+
+ES では、インデックスを作成せずにデータを直接インポートできます。この場合、ES は新しいインデックスを自動作成します。文字列型フィールドに対して、ES は `text` 型と `keyword` 型の両方を持つフィールドを作成します。これは ES のマルチフィールド機能で、マッピングは次のようになります。
+
+```json
+"k4": {
+   "type": "text",
+   "fields": {
+      "keyword": {   
+         "type": "keyword",
+         "ignore_above": 256
+      }
+   }
+}
+```
+
+= などを使って k4 をフィルタリングすると、Doris On ES はクエリを ES の TermQuery に変換します。
+
+SQL のフィルター条件:
+
+```sql
+k4 = "Doris On ES"
+```
+
+変換後の ES クエリ DSL:
+
+```json
+"term" : {
+    "k4": "Doris On ES"
+
+}
+```
+
+k4 の最初のフィールド型は `text` なので、データのインポート時には k4 に設定されたトークナイザー(設定されていない場合は標準トークナイザー)に従ってトークン化され、doris、on、es という三つの Term が生成されます。ES の analyze API では次のように分析できます。
+
+```json
+POST /_analyze
+{
+  "analyzer": "standard",
+  "text": "Doris On ES"
+}
+```
+
+トークン化の結果は次のとおりです。
+
+```json
+{
+   "tokens": [
+      {
+         "token": "doris",
+         "start_offset": 0,
+         "end_offset": 5,
+         "type": "<ALPHANUM>",
+         "position": 0
+      },
+      {
+         "token": "on",
+         "start_offset": 6,
+         "end_offset": 8,
+         "type": "<ALPHANUM>",
+         "position": 1
+      },
+      {
+         "token": "es",
+         "start_offset": 9,
+         "end_offset": 11,
+         "type": "<ALPHANUM>",
+         "position": 2
+      }
+   ]
+}
+```
+
+クエリでは次のように使用します。
+
+```json
+"term" : {
+    "k4": "Doris On ES"
+}
+```
+
+`Doris On ES` という Term は辞書内のどの Term とも一致しないため、結果は返されません。`enable_keyword_sniff: true` を有効にすると、`k4 = "Doris On ES"` は自動的に `k4.keyword = "Doris On ES"` に変換され、SQL のセマンティクスと完全に一致します。変換後の ES クエリ DSL は次のとおりです。
+
+```json
+"term" : {
+    "k4.keyword": "Doris On ES"
+}
+```
+
+`k4.keyword` の型は `keyword` で、データは完全な一つの Term として ES に書き込まれるため、一致させることができます。
+
+### ノードの自動検出を有効にする(nodes\_discovery=true)
+
+`"nodes_discovery" = "true"` に設定します。
+
+true に設定すると、Doris は ES から関連する利用可能なすべてのデータノード(シャードが割り当てられたノード)を検出します。Doris BE から ES データノードのアドレスにアクセスできない場合は、false に設定します。たとえば、ES クラスターがパブリックインターネットから分離されたイントラネットにデプロイされ、ユーザーがプロキシ経由でアクセスする場合です。
+
+### ES クラスターで HTTPS アクセスモードを有効にするかどうか
+
+`"ssl" = "true"` に設定します。
+
+現在の FE/BE の実装ではすべての証明書を信頼します。これは暫定的な方法であり、今後はユーザーが設定した証明書を使用する予定です。
+
+### 拡張 esquery() 関数
+
+`esquery(field, QueryDSL)` 関数を使用すると、`match_phrase` や `geoshape` など、SQL では表現できないクエリを ES にプッシュダウンしてフィルタリングできます。`esquery` の第一引数である列名は `index` との関連付けに使用され、第二引数には ES の基本的な `Query DSL` を中括弧 `{}` で囲んだ JSON 表現を指定します。JSON の `root key` は `match_phrase`、`geo_shape`、`bool` など、必ず一つだけにする必要があります。
+
+`match_phrase` クエリ:
+
+```sql
+select * from es_table where esquery(k4, '{
+        "match_phrase": {
+           "k4": "doris on es"
+        }
+    }');
+```
+
+`geo` 関連のクエリ:
+
+```sql
+select * from es_table where esquery(k4, '{
+      "geo_shape": {
+         "location": {
+            "shape": {
+               "type": "envelope",
+               "coordinates": [
+                  [
+                     13,
+                     53
+                  ],
+                  [
+                     14,
+                     52
+                  ]
+               ]
+            },
+            "relation": "within"
+         }
+      }
+   }');
+```
+
+`bool` クエリ:
+
+```sql
+select * from es_table where esquery(k4, ' {
+         "bool": {
+            "must": [
+               {
+                  "terms": {
+                     "k1": [
+                        11,
+                        12
+                     ]
+                  }
+               },
+               {
+                  "terms": {
+                     "k2": [
+                        100
+                     ]
+                  }
+               }
+            ]
+         }
+      }');
+```
+
+### 時刻型フィールドの使用に関する推奨事項
+
+ES 外部テーブルにのみ適用されます。ES カタログでは、日付型は Date または Datetime に自動的にマッピングされます。
+
+ES では時刻型フィールドを柔軟に使用できますが、ES 外部テーブルでは時刻型フィールドを適切に設定しないと、フィルター条件をプッシュダウンできません。
+
+インデックスを作成する際は、形式の互換性を最大限に確保するため、時刻型のフォーマットを次のように設定します。
+
+```json
+ "dt": {
+     "type": "date",
+     "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
+ }
+```
+
+Doris でこのフィールドを定義する際は、`date` または `datetime` に設定することを推奨します。`varchar` 型に設定することもできます。次の SQL 文を使用すると、フィルター条件を ES に直接プッシュダウンできます。
+
+```sql
+select * from doe where k2 > '2020-06-21';
+
+select * from doe where k2 < '2020-06-21 12:00:00'; 
+
+select * from doe where k2 < 1593497011; 
+
+select * from doe where k2 < now();
+
+select * from doe where k2 < date_format(now(), '%Y-%m-%d');
+```
+
+**注**:
+
+* ES で時刻型フィールドの `format` を設定しない場合、デフォルトの形式は次のとおりです。
+
+  ```sql
+  strict_date_optional_time||epoch_millis
+  ```
+
+* ES にインポートする日付フィールドがタイムスタンプの場合、`ms` に変換する必要があります。ES は内部でタイムスタンプを `ms` 単位で処理するため、変換しないと ES 外部テーブルで表示エラーが発生します。
+
+### ES メタデータフィールド ID の取得
+
+ドキュメントのインポート時に `_id` を指定しない場合、ES は各ドキュメントにグローバルに一意な `_id`(主キー)を割り当てます。ユーザーはインポート時に、業務上の特別な意味を持つ `_id` を指定することもできます。
+
+ES 外部テーブルでこのフィールドの値を取得するには、テーブル作成時に `_id` フィールドを `varchar` 型で追加します。
+
+```sql
+CREATE EXTERNAL TABLE `doe` (
+  `_id` varchar COMMENT "",
+  `city`  varchar COMMENT ""
+) ENGINE=ELASTICSEARCH
+PROPERTIES (
+"hosts" = "http://127.0.0.1:8200",
+"user" = "root",
+"password" = "root",
+"index" = "doe"
+}
+```
+
+ES カタログでこのフィールドの値を取得するには、`"mapping_es_id" = "true"` に設定してください。
+
+**注**:
+
+1. `_id` フィールドのフィルター条件では、`=` と `in` のみがサポートされます。
+
+2. `_id` フィールドは `varchar` 型である必要があります。
+
+### グローバルに順序付けされたクエリ結果の取得
+
+関連度によるランキングや重要なコンテンツの優先表示などでは、ES のクエリ結果をスコア順に並べ替えると便利です。Doris は ES のインデックスのシャード分布に従ってデータを取得し、MPP アーキテクチャの利点を最大限に活用します。
+グローバルに順序付けされた結果を得るには、単一の地点から ES にクエリする必要があります。これはセッション変数 `enable_es_parallel_scroll`(デフォルトは true)で制御できます。
+`enable_es_parallel_scroll=false` に設定すると、Doris は `scroll` クエリを `shard_preference` と `sort` の情報を指定せずに ES クラスターへ送信し、グローバルに順序付けされた結果を取得します。
+注: クエリの結果セットが大きい場合は慎重に使用してください。
+
+### scroll リクエストのバッチサイズの変更
+
+デフォルトの `batch` サイズは、`scroll` リクエストでは 4064 です。セッション変数 `batch_size` で変更できます。
+
+## よくある質問
+
+1. **X-Pack 認証を使用する ES クラスターに対応していますか?**
+
+   HTTP Basic 認証を使用するすべての ES クラスターに対応しています。
+
+2. **一部のクエリが ES に直接リクエストする場合よりも大幅に遅いのはなぜですか?**
+
+   \_count 関連のクエリなどでは、そのような場合があります。ES は、実際のデータをフィルタリングせずに、条件を満たすドキュメント数に関するメタデータを内部で直接読み取ります。
+
+3. **集約処理をプッシュダウンできますか?**
+
+   現在、Doris On ES は sum、avg、min/max などの集約処理のプッシュダウンに対応していません。条件を満たすすべてのドキュメントを ES からバッチでストリーミングし、Doris で計算します。
+
+## 付録
+
+### Doris による ES クエリの仕組み
+
+```plain text
++----------------------------------------------+
+|                                              |
+| Doris      +------------------+              |
+|            |       FE         +--------------+-------+
+|            |                  |  Request Shard Location
+|            +--+-------------+-+              |       |
+|               ^             ^                |       |
+|               |             |                |       |
+|  +-------------------+ +------------------+  |       |
+|  |            |      | |    |             |  |       |
+|  | +----------+----+ | | +--+-----------+ |  |       |
+|  | |      BE       | | | |      BE      | |  |       |
+|  | +---------------+ | | +--------------+ |  |       |
++----------------------------------------------+       |
+   |        |          | |        |         |          |
+   |        |          | |        |         |          |
+   |    HTTP SCROLL    | |    HTTP SCROLL   |          |
++-----------+---------------------+------------+       |
+|  |        v          | |        v         |  |       |
+|  | +------+--------+ | | +------+-------+ |  |       |
+|  | |               | | | |              | |  |       |
+|  | |   DataNode    | | | |   DataNode   +<-----------+
+|  | |               | | | |              | |  |       |
+|  | |               +<--------------------------------+
+|  | +---------------+ | | |--------------| |  |       |
+|  +-------------------+ +------------------+  |       |
+|   Same Physical Node                         |       |
+|                                              |       |
+|           +-----------------------+          |       |
+|           |                       |          |       |
+|           |      MasterNode       +<-----------------+
+| ES        |                       |          |
+|           +-----------------------+          |
++----------------------------------------------+
+```
+
+1. FE はテーブル作成時に指定された hosts にリクエストを送信し、全ノードの HTTP ポート情報やインデックスのシャード分布情報などを取得します。リクエストに失敗した場合、成功するか、すべて失敗するまで、ホストのリストを順番に試します。
+
+2. クエリ時には、FE が取得したノード情報とインデックスのメタデータ情報に基づいてクエリ計画が生成され、対応する BE ノードに送信されます。
+
+3. BE ノードは `proximity principle` に従い、まずローカルにデプロイされた ES ノードにリクエストします。BE は ES インデックスの各シャードから `HTTP Scroll` 方式で、`_source` または `docvalue` を使ってデータを並列にストリーミング取得します。
+
+4. Doris は計算が完了すると、結果をユーザーに返します。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/fluss-catalog.md b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/fluss-catalog.md
new file mode 100644
index 00000000000..106f89f4f5f
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/lakehouse/catalogs/fluss-catalog.md
@@ -0,0 +1,622 @@
+---
+{
+    "title": "Fluss Catalog",
+    "language": "ja",
+    "description": "Doris から Apache Fluss のログテーブルと主キーテーブルをクエリし、Paimon に階層化されたデータと Fluss ログを Union Read で読み取る方法を説明します。",
+    "keywords": [
+        "Fluss Catalog",
+        "Apache Fluss",
+        "Doris から Fluss をクエリ",
+        "Union Read",
+        "レイクとログの Union Read",
+        "階層化されたレイクテーブル",
+        "Fluss Paimon",
+        "Tiering Service",
+        "tbl$lake",
+        "tbl$log",
+        "fluss.union_read.mode",
+        "fluss.bootstrap.servers",
+        "fluss.lake.paimon",
+        "Fluss ログテーブル",
+        "Fluss 主キーテーブル",
+        "Fluss の型マッピング",
+        "ストリーミングストレージ",
+        "has no readable lake snapshot yet",
+        "enable_jni_heap_admission",
+        "Java heap space"
+    ]
+}
+---
+
+<!-- Knowledge Type: Capability Definition + Configuration Parameters + Performance Tuning + Troubleshooting -->
+<!-- Use Case: Real-time queries on Fluss tables / Lake and log Union Read / Data integration and federated queries -->
+
+Doris は Fluss Catalog を通じて [Apache Fluss](https://fluss.apache.org/) のテーブルを読み取ります。Fluss はリアルタイム分析向けのストリーミングストレージシステムで、その階層化サービスはテーブルデータを Paimon データレイクに継続的に書き込めます。Doris は Fluss 内のデータを直接読み取ることができます。また、Paimon に階層化済みの過去データと、Fluss ログに残る新しい行を統合し、一つのテーブルとしてクエリすることもできます。後者の読み取り方法を Union Read と呼びます。
+
+:::note
+- この機能は実験的な機能で、バージョン 5.0.0 から利用できます。
+- 読み取りのみをサポートします。書き込み、およびデータベースやテーブルの管理文はサポートしません。
+- 階層化されたレイクテーブルでサポートするレイク形式は Paimon のみです。
+:::
+
+## ユースケース
+
+| シナリオ | 説明 |
+| --- | --- |
+| リアルタイムクエリ | Fluss のログテーブルと主キーテーブルの最新データを直接クエリします。 |
+| Union Read | レイクへの階層化を有効にしたテーブルでは、一つのクエリで Paimon レイクに階層化された過去データと、まだ階層化されていない Fluss ログの行を一緒に読み取ります。これがレイクとログの Union Read です。 |
+| データ統合 | Fluss のデータを Doris 内部テーブルに取り込むか、フェデレーションクエリで内部テーブルや他の Catalog のテーブルと結合します。 |
+| 書き戻し | サポートしません。 |
+
+## 仕組み
+
+<!-- Knowledge Type: Architecture Principles -->
+
+Fluss テーブルには三つの形態があり、読み取り方法がそれぞれ異なります。
+
+| テーブル種別 | Doris による読み取り方法 |
+| --- | --- |
+| ログテーブル | Fluss ログを読み取ります。各バケットが一つのスキャン範囲になります。 |
+| 主キーテーブル | 各バケットの最新の KV スナップショットを読み取り、その後に書き込まれた変更ログを適用して、主キーでマージし最新の状態を取得します。 |
+| 階層化されたレイクテーブル(`table.datalake.enabled = true`) | Paimon レイク内の階層化済みデータを読み取り、階層化オフセット以降の Fluss ログを適用し、一回のスキャンで両者をマージします。これが Union Read です。 |
+
+レイク側は Doris に組み込まれた Paimon Connector が読み取ります。Fluss Catalog 自体にはレイク用のリーダーはありません。Fluss は階層化された各テーブルについて読み取り可能な Paimon スナップショットを記録し、Doris はそのスナップショット時点の Paimon データを読み取ります。そのため、ネイティブの ORC/Parquet リーダーとファイルキャッシュを利用できます。
+
+階層化された主キーテーブルの Union Read は、レイク側とログ側を主キーでマージします。プランニング時に FE は、バケットのログ末尾のオフセット範囲を、そのバケットの各レイク分割に付加します。BE がレイクデータを読み取る際には、ログ末尾で更新または削除された行を除外し、別のスキャン範囲としてログ末尾自体の最新状態を出力します。各行はちょうど一回だけ出力され、結果はテーブル全体を Fluss から読み取った場合と一致します。
+
+## Catalog の設定
+
+<!-- Knowledge Type: Configuration Parameters -->
+<!-- Use Case: Creating a Fluss Catalog / Configuring SASL authentication / Configuring the Paimon lake connection -->
+
+### 構文
+
+```sql
+CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
+    'type' = 'fluss',
+    'fluss.bootstrap.servers' = '<bootstrap_servers>',
+    {FlussProperties},
+    {LakeProperties},
+    {CommonProperties}
+);
+```
+
+* `<bootstrap_servers>`
+
+    必須です。Fluss クラスターのブートストラップアドレスで、`host:port` をカンマで区切って指定します。通常は CoordinatorServer のアドレスを指定します。例: `'fluss.bootstrap.servers' = '10.0.0.1:9123,10.0.0.2:9123'`。
+
+* `{FlussProperties}`
+
+    FlussProperties セクションには、Fluss Catalog 固有のパラメータを指定します。
+
+    | パラメータ | 必須 | デフォルト | 説明 |
+    | --- | --- | --- | --- |
+    | `fluss.union_read.mode` | いいえ | `auto` | 階層化されたレイクテーブルの Union Read モードです。`auto`、`required`、`disabled` のいずれかを指定します。「Union Read モード」を参照してください。 |
+    | `fluss.union_read.max_tail_rows` | いいえ | `2000000` | 主キーテーブルの Union Read で、単一バケットのログ末尾に許容する最大行数です。「Union Read モード」を参照してください。 |
+    | `fluss.union_read.max_total_tail_rows` | いいえ | `20000000` | 主キーテーブルの Union Read で、一回のスキャンに含まれる全バケットのログ末尾に許容する合計最大行数です。`fluss.union_read.max_tail_rows` より小さくすることはできません。 |
+    | `enable.mapping.varbinary` | いいえ | `false` | Fluss の `BINARY`/`BYTES` 型を Doris の `varbinary` にマッピングするかどうかを指定します。デフォルトでは `string` にマッピングします。 |
+    | `enable.mapping.timestamp_tz` | いいえ | `false` | Fluss の `TIMESTAMP_LTZ` 型を Doris の `timestamptz` にマッピングするかどうかを指定します。デフォルトでは `datetime` にマッピングします。 |
+
+    上記の Doris 固有のパラメータと `fluss.lake.paimon.*` を除き、`fluss.` プレフィックスが付いたその他のプロパティは、プレフィックスを除いた形で Fluss クライアントにそのまま渡されます。FE と BE は同じ設定群を共有します。Doris はパラメータ名を制限しないため、Fluss クライアントが理解できる設定項目なら何でもこの方法で渡せます。例えば、Fluss クラスターで SASL 認証が有効な場合は次のように指定します。
+
+    ```sql
+    'fluss.client.security.protocol' = 'sasl',
+    'fluss.client.security.sasl.mechanism' = 'PLAIN',
+    'fluss.client.security.sasl.username' = '<username>',
+    'fluss.client.security.sasl.password' = '<password>'
+    ```
+
+    全項目については [Fluss の設定リファレンス](https://fluss.apache.org/docs/maintenance/configuration/) と [Fluss の認証ガイド](https://fluss.apache.org/docs/security/authentication/) を参照してください。
+
+    FE と BE の Fluss クライアント設定が異なるのは、ネットワークスレッド数だけです。BE 上の各 Fluss 接続は一度に一つのスキャン範囲を処理します。そのため、Catalog で `fluss.netty.client.num-network-threads` を設定していない場合、BE はスレッドとファイルディスクリプタの使用量を抑えるため、一つのネットワークスレッドで接続を開きます。一方、FE の接続には Fluss クライアントのデフォルト値を使用します。通常、このパラメータを設定する必要はありません。設定すると、FE と BE の両方がその値を使用します。
+
+* `{LakeProperties}`
+
+    LakeProperties セクションには、階層化されたレイクテーブルの背後にある Paimon レイクへの接続設定を、`fluss.lake.paimon.` プレフィックス付きで指定します。プレフィックス以降の部分は、Fluss クラスターの `datalake.paimon.*` 設定(`server.yaml` 内)とまったく同じ形式なので、値をコピーできます。「レイク接続設定」を参照してください。
+
+* `{CommonProperties}`
+
+    CommonProperties セクションには共通プロパティを指定します。[Catalog の概要](../catalog-overview.md) の「共通プロパティ」を参照してください。
+
+### 例
+
+最小構成です。Fluss 自体のデータのみを読み取る場合、またはレイクのストレージに認証情報が不要な場合は、これで十分です。
+
+```sql
+CREATE CATALOG fluss PROPERTIES (
+    'type' = 'fluss',
+    'fluss.bootstrap.servers' = '10.0.0.1:9123'
+);
+```
+
+Paimon レイクがオブジェクトストレージ上にある場合(以下は S3 互換ストレージの例):
+
+```sql
+CREATE CATALOG fluss_lake PROPERTIES (
+    'type' = 'fluss',
+    'fluss.bootstrap.servers' = '10.0.0.1:9123',
+    'fluss.lake.paimon.s3.endpoint' = 'http://minio:9000',
+    'fluss.lake.paimon.s3.access-key' = '<ak>',
+    'fluss.lake.paimon.s3.secret-key' = '<sk>'
+);
+```
+
+Fluss クラスターで SASL 認証が有効な場合:
+
+```sql
+CREATE CATALOG fluss_sasl PROPERTIES (
+    'type' = 'fluss',
+    'fluss.bootstrap.servers' = '10.0.0.1:9123',
+    'fluss.client.security.protocol' = 'sasl',
+    'fluss.client.security.sasl.mechanism' = 'PLAIN',
+    'fluss.client.security.sasl.username' = '<username>',
+    'fluss.client.security.sasl.password' = '<password>'
+);
+```
+
+### デプロイ要件
+
+- FE は Fluss クライアントでメタデータを読み取ってクエリをプランニングし、BE はそれを使ってデータを読み取ります。両方から Fluss クラスターの CoordinatorServer と TabletServer に接続できる必要があります。
+- BE は Fluss クラスターへの接続を再利用します。スキャン範囲の読み取り後も接続は後続のスキャン範囲やクエリのために開いたままになり、アイドル状態が 60 秒を超えて初めて閉じられます。そのため、クエリ終了後も Fluss 側に BE からの接続が表示されることがあります。接続はクライアント設定ごとに分けられます。Catalog プロパティ(SASL のユーザー名やパスワードなど)を変更すると、BE は新しい設定で接続を開きます。
+- 主キーテーブルの KV スナップショットとアーカイブされたログセグメントは、Fluss で設定したリモートストレージ(`remote.data.dir`)に置かれます。BE はこれらのファイルを直接読み取るため、そのリモートストレージにも接続できる必要があります。
+- 階層化されたレイクテーブルを読み取るには、FE と BE の両方から Paimon レイクのストレージに接続できる必要があります。
+- レイクデータは Doris に組み込まれた Paimon Connector プラグインが読み取ります。このプラグインは Doris に同梱されており、別途インストールする必要はありません。
+
+## サポート対象の Fluss バージョン
+
+<!-- Knowledge Type: Version Compatibility -->
+
+| Doris バージョン | Fluss クライアントバージョン |
+| --- | --- |
+| 5.0 | 1.0 |
+
+Fluss 1.0 より古いクラスターはサポートしません。Doris が依存するクライアント API は Fluss 1.0 で初めて導入されました。
+
+## メタデータのマッピング
+
+<!-- Knowledge Type: Behavior Rules -->
+
+Fluss のメタデータ階層は Database -> Table であり、Doris に一対一で対応します。追加の名前マッピングはありません。
+
+レイクへの階層化が有効なテーブルでも、`SHOW TABLES` に表示されるのはテーブル自体だけです。`tbl$lake` と `tbl$log` は同じテーブルを読み取るための二つの方法であり、別のエントリとしては表示されません。
+
+`SHOW CREATE TABLE` は Fluss テーブルの列とコメントを表示しますが、テーブルプロパティは表示しません。レイクへの階層化が有効かどうか(`table.datalake.enabled`)と使用するレイク形式(`table.datalake.format`)を調べるには、Flink SQL などを使って Fluss 側のテーブル定義を確認してください。Doris では、レイクへの階層化が有効なテーブルだけに `tbl$lake` と `tbl$log` があります。
+
+## 列型のマッピング
+
+<!-- Knowledge Type: Type Reference -->
+
+| Fluss の型 | Doris の型 | 備考 |
+| --- | --- | --- |
+| BOOLEAN | boolean | |
+| TINYINT | tinyint | |
+| SMALLINT | smallint | |
+| INT | int | |
+| BIGINT | bigint | |
+| FLOAT | float | |
+| DOUBLE | double | |
+| DECIMAL(P, S) | decimal(P, S) | |
+| CHAR(N) | char(N) | N が 255 を超えると string にマッピングします。 |
+| STRING | string | |
+| BINARY(N) | string / varbinary(N) | `enable.mapping.varbinary` で制御します。デフォルトの `false` では `string`、`true` では `varbinary` にマッピングします。 |
+| BYTES | string / varbinary | 上記と同じです。 |
+| DATE | date | |
+| TIME | UNSUPPORTED | Doris に同じ意味を持つ型はありません。テーブル内の他の列はクエリできますが、この列を参照するクエリだけが失敗します。 |
+| TIMESTAMP(P) | datetime(P) | 精度が 6 を超える場合は datetime(6) にマッピングし、精度が失われる可能性があります。 |
+| TIMESTAMP_LTZ(P) | datetime(P) / timestamptz(P) | 6 を超える精度は 6 にマッピングします。`enable.mapping.timestamp_tz` で制御します。デフォルトの `false` では `datetime`、`true` では `timestamptz` にマッピングします。 |
+| ARRAY | array | |
+| MAP | map | |
+| ROW | struct | |
+
+> 注:
+>
+> `TIMESTAMP_LTZ` 列では、Extra 列に `WITH_TIMEZONE` と表示されます(`DESCRIBE` の出力)。`datetime` にマッピングする場合、Doris は返却前に値を現在のセッションタイムゾーン(`SET time_zone = <tz>`)へ変換します。
+>
+> レイクへの階層化が有効なテーブルでは、`tbl` と `tbl$lake` の列型は同じです。上記のマッピングは、Fluss が Paimon に書き込むときの型変換、および Paimon Catalog の型マッピングと整合しています。
+
+## パーティションテーブル
+
+<!-- Knowledge Type: Behavior Rules + Limitations -->
+
+Doris では、パーティション列は通常の列です。`SHOW PARTITIONS` はパーティションを `k1=v1/k2=v2` の形式で一覧表示します。パーティション列への述語はパーティションプルーニングに使用され、読み取るバケット数を減らします。
+
+Fluss はパーティション値をパーティション名にのみ保存し、パーティション名に使用できない文字(`.` や `:` など)を `_` に置き換えます。Doris が読み取れるのは、この変換を往復しても値が変わらないパーティション列だけです。
+
+- サポート対象: `CHAR`、`STRING`、`BOOLEAN`、`TINYINT`、`SMALLINT`、`INT`、`BIGINT`、`DATE`、および `BINARY`/`BYTES`(`enable.mapping.varbinary` がオフの場合。パーティション値はバイト列の十六進数テキストです)。
+- サポート対象外: `FLOAT`、`DOUBLE`、`TIME`、`TIMESTAMP`、`TIMESTAMP_LTZ`。このようなテーブルでも `DESCRIBE` は実行できますが、クエリと `SHOW PARTITIONS` は失敗し、原因となったパーティション列の名前がエラーメッセージに表示されます。
+
+## クエリ操作
+
+<!-- Knowledge Type: Operational Examples + Behavior Rules -->
+<!-- Use Case: Querying Fluss tables / Reading only the lake or only the log / Controlling the Union Read mode -->
+
+### 基本的なクエリ
+
+```sql
+-- Switch to the catalog, then query
+SWITCH fluss;
+USE db;
+SELECT * FROM tbl LIMIT 10;
+
+-- Use the fully qualified name
+SELECT * FROM fluss.db.tbl WHERE dt = '20260101';
+```
+
+ログテーブルは、クエリのプランニング時点までのすべてのログレコードを返します。同じパーティション内のバケットでは、同じ時点に取得したオフセットを使うため、一つのクエリでは一貫したビューが得られます。主キーテーブルは各キーの最新状態を返し、削除されたキーは結果に現れません。
+
+### 階層化されたレイクテーブルと Union Read
+
+`table.datalake.enabled = true` のテーブルには、三つの読み取り方法があります。デフォルトではレイクとログを一緒に読み取る Union Read を使用します。
+
+```sql
+SELECT * FROM fluss.db.tbl;         -- Union Read: lake + log merged into the full data set (default)
+SELECT * FROM fluss.db.`tbl$lake`;  -- Only the tiered data in the Paimon lake
+SELECT * FROM fluss.db.`tbl$log`;   -- Only the data in the Fluss log that has not been tiered yet
+```
+
+`tbl$lake` と `tbl$log` はデータの保存場所によって分けられています。両者は重複せず、合わせると `tbl` の全データになります。この名前が表すのはデータの場所であり、新しさではありません。階層化サービスが停止しても、`tbl$log` はログに残っているデータを表します。
+
+**`tbl$lake`**
+
+- Paimon Connector は、階層化サービスが書き込んだ Paimon テーブルを直接読み取ります。Fluss 1.0 で階層化されたテーブルでは、`tbl$lake` の列は `tbl` と完全に同じです。以前の Fluss リリースがレイクテーブルに追加していた `__bucket`、`__offset`、`__timestamp` システム列は存在しません。
+- Fluss が記録した読み取り可能なレイクスナップショットの時点でレイクを読み取ります。そのようなスナップショットがまだない場合は、レイクの最新状態を読み取ります。Fluss は Fluss テーブルと同時に Paimon テーブルを作成するため、階層化サービスが何もコミットしていない段階では、`tbl$lake` はエラーではなく空の結果を返します。
+- 現在のレイク接続設定で Doris がレイクテーブルを見つけられない場合、クエリは `nothing has been tiered` で失敗します。通常は `fluss.lake.paimon.warehouse` などの設定が、Fluss クラスターの書き込み先 warehouse を指していないことを意味します。「レイク接続設定」を参照してください。
+- Paimon Catalog のタイムトラベルクエリと増分クエリはサポートしません。
+
+**`tbl$log`**
+
+- レイクスナップショットに対応するログオフセットから読み取りを開始し、そのオフセット以降に書き込まれたデータだけを返します。
+- サポートするのはログテーブルだけです。主キーテーブルでは、レイクスナップショット以降のログは、レイクに既存のキーの更新や削除を含む変更ストリームです。そのため、独立した行の集合として返すことはできません。主キーテーブルの `$log` をクエリすると失敗します。
+- テーブルには読み取り可能なレイクスナップショットがすでに存在する必要があり、存在しない場合はクエリが失敗します。
+- レイクへの階層化が無効なテーブルには、`$lake` も `$log` もありません。
+
+### Union Read モード
+
+<!-- Knowledge Type: Configuration Parameters + Behavior Rules -->
+<!-- Use Case: Controlling whether Union Read happens / Finding out why auto mode fell back -->
+
+階層化されたレイクテーブル自体へのクエリ(`SELECT * FROM tbl`)で Union Read を実行するかどうかは、Catalog プロパティ `fluss.union_read.mode` で制御します。
+
+| 値 | 動作 |
+| --- | --- |
+| `auto`(デフォルト) | 読み取り可能なレイクスナップショットがある場合に Union Read を実行します。条件を満たさない場合は、失敗せずに Fluss からの読み取りへフォールバックします。以下のケースを参照してください。 |
+| `required` | Union Read を必須にします。条件を満たさない場合、フォールバックせずに失敗します。 |
+| `disabled` | Union Read を行いません。レイクにのみ存在するパーティションも含めてレイクを無視し、Fluss に現在あるデータだけを読み取ります。 |
+
+セッション変数 `fluss_union_read_mode` は、現在のセッションについて Catalog の設定を上書きします。
+
+```sql
+SET fluss_union_read_mode = 'required';  -- No fallback to a Fluss-only read; fail instead
+SET fluss_union_read_mode = 'disabled';  -- Read from Fluss only
+SET fluss_union_read_mode = '';          -- Default: follow the catalog setting
+```
+
+単一の文だけでモードを変更するには、`SET_VAR` ヒントを使用します。
+
+```sql
+SELECT /*+ SET_VAR(fluss_union_read_mode='required') */ * FROM fluss.db.tbl;
+```
+
+Union Read モードは、データをどの経路から読み取るかを決めます。Fluss がテーブルの全データを保持している間、つまり TTL によってログが失効しておらず、レイクにまだ存在するパーティションが Fluss から削除されていない間は、三つのモードはすべて同じ行を返します。`required` は、想定外の読み取り経路へ暗黙に切り替わる代わりに失敗するため、回帰テストやトラブルシューティングに役立ちます。
+
+**`auto` がフォールバックするケース**
+
+| ケース | 説明 |
+| --- | --- |
+| 読み取り可能なレイクスナップショットがない | 階層化サービスがまだ何もコミットしておらず、全データが Fluss にあるため、テーブルを Fluss のみから読み取ります。 |
+| `key-type` | 主キーテーブルの主キー列(パーティション列を除く)の型が、レイク側とログ側で値を正確に比較できない型です。対象は `FLOAT`、`DOUBLE`、`TIME`、精度が 6 を超える `TIMESTAMP`、および `TIMESTAMP_LTZ` です。`enable.mapping.timestamp_tz` が `false`(デフォルト)の場合、夏時間から標準時間への切り替わりで異なる二つの時点が同じローカル時刻になり得るため、どの精度の `TIMESTAMP_LTZ` 列も該当します。`true` の場合は、精度が 6 を超える列だけが該当します。 |
+| `partition-type` | 主キーテーブルのパーティション列が `STRING` ではありません。レイク分割と Fluss パーティションはパーティション値のテキスト表現で照合され、双方が同じ表記で書き込むことを保証できるのは `STRING` だけです。 |
+| `tail-truncated` | 主キーテーブルのレイクスナップショット以降のログの一部が Fluss の TTL によってすでに削除され、ログ末尾を完全に読み取れません。 |
+| `tail-too-large` | 主キーテーブルのログ末尾の行数が、`fluss.union_read.max_tail_rows` または `fluss.union_read.max_total_tail_rows` の制限を超えています。 |
+
+最後の四つのケースは主キーテーブルにのみ適用され、`EXPLAIN` の `degraded` フィールドに報告されます。主キーテーブルがフォールバックすると、Fluss にまだ存在するパーティションは Fluss から全体を読み取ります。Fluss はそれらのパーティションの完全な状態を保持しているため、データは失われません。ただし、それらについてレイクの列指向ファイルを使用できないため、クエリは遅くなります。パーティションの有効期限切れなどで Fluss から削除されてもレイクには残っているパーティションは、引き続きレイクから読み取ります。非パーティションテーブルは Fluss のみから読み取ります。
+
+`partition-type` の場合、Doris はレイク分割がどの Fluss パーティションに属するかを確実には判断できません。Fluss にはもう存在しないパーティションがレイクにある場合や、両者でパーティション値の表記が異なる場合は、フォールバックせずに `cannot be matched safely to a live fluss partition` で失敗します。Fluss に残っているデータだけを読み取るには、Union Read モードを `disabled` に設定してください。
+
+ログテーブルは動作が異なります。Fluss のみから読み取ると、Fluss ログにまだ保持されているデータしか返りません。古いログが TTL で失効すると、Union Read より行数が少なくなります。階層化されたログテーブルには `disabled` を推奨しません。また、ログ末尾が不完全なログテーブルにはフォールバックがありません。レイクスナップショット以降のログの一部がすでに失効した場合、Union Read は `Part of the log tail has expired` で失敗します。これは `auto` と `required` の両方に当てはまり、`tbl$log` のクエリもどのモードでも失敗します。Fluss が新しい読み取り可能なレイクスナップショットを公開するまで待ってください。
+
+**ログ末尾の行数制限**
+
+主キーテーブルの Union Read では、BE は各バケットのログ末尾をメモリに保持します。一つはレイクデータのフィルタリングに使う主キーの集合、もう一つはログ末尾自体が出力する行です。メモリ使用量を制限するため、`fluss.union_read.max_tail_rows` は単一バケットのログ末尾の行数を制限し(デフォルトは 2 百万行)、`fluss.union_read.max_total_tail_rows` は一回のスキャンに含まれる全バケットのログ末尾の合計行数を制限します(デフォルトは 20 百万行)。どちらの制限も Fluss が報告するオフセットに基づき、プランニング時に確認されます。通常、ログ末尾に含まれるのは `table.datalake.freshness` の一期間内に書き込まれたデータだけで、デフォルトの制限を大きく下回ります。制限に達する場合、通常は階層化サービスが停止しているか、大幅�
 ��遅れています。ログ末尾が出力する行は BE の JVM ヒープに保持されるため、いずれかの制限を引き上げる前に、JVM ヒープに十分な空きがあるこ [...]
+
+**EXPLAIN で読み取り経路を確認する**
+
+`flussScan` 行には、`EXPLAIN` の出力でクエリが実際にテーブルを読み取る方法が表示されます。
+
+```text
+flussScan: readMode=default, unionRead=yes, lakeSplits=3, suppressedLakeSplits=1, logRanges=0, pkRanges=0, pkTailRanges=1, mode=auto
+```
+
+| フィールド | 意味 |
+| --- | --- |
+| `readMode` | `default` はテーブル全体を、`log` は `tbl$log` を読み取ります。 |
+| `unionRead` | Union Read を実行したかどうかを示します。`yes` は Union Read を実行したことを示し、開始オフセットをレイクスナップショットから取得する `tbl$log` でも同じ値となります。ただし、その場合の `lakeSplits` は 0 です。 |
+| `lakeSplits` | レイク分割の数です。 |
+| `suppressedLakeSplits` | ログ末尾によるフィルタリングが必要なレイク分割の数です。主キーテーブルにのみ適用されます。 |
+| `logRanges` | ログテーブルのログスキャン範囲の数です。 |
+| `pkRanges` | Fluss から全体を読み取る主キーテーブルのバケット数です(KV スナップショット + 変更ログ)。 |
+| `pkTailRanges` | 主キーテーブルの Union Read におけるログ末尾スキャン範囲の数です。 |
+| `mode` | 適用中の Union Read モードです。セッション変数から取得した場合は `(session)` サフィックスが付きます。 |
+| `degraded` | 主キーテーブルが `auto` モードでフォールバックした場合にのみ表示されます。値は上表の `key-type`、`partition-type`、`tail-truncated`、`tail-too-large` のいずれかです。読み取り可能なレイクスナップショットがない場合はここには表示されず、`unionRead=no` としてのみ示されます。レイクにのみ存在するパーティションを引き続きレイクから読み取る場合は、`unionRead=yes` と `degraded` が同時に表示されます。 |
+
+### レイク接続設定
+
+<!-- Knowledge Type: Configuration Parameters -->
+<!-- Use Case: Paimon lake on object storage that needs credentials / Overriding the lake settings reported by the Fluss cluster -->
+
+Fluss クラスターは `datalake.paimon.*` 設定(`server.yaml` 内)を、階層化された各テーブルのプロパティに書き込み、Doris はそこから Paimon レイクへの接続を構築します。多くの場合、Catalog 側にレイク接続設定を追加する必要はありません。
+
+ただし、Fluss はクライアントにテーブルプロパティを返す前に、名前に `key`、`secret`、または `password` を含むすべての設定項目を削除します。Paimon レイクが認証情報を必要とするオブジェクトストレージ上にある場合、Doris は Fluss から認証情報を取得できません。そのため、Catalog に `fluss.lake.paimon.` プレフィックス付きで指定する必要があります。
+
+```sql
+CREATE CATALOG fluss PROPERTIES (
+    'type' = 'fluss',
+    'fluss.bootstrap.servers' = '10.0.0.1:9123',
+    'fluss.lake.paimon.s3.endpoint' = 'http://minio:9000',
+    'fluss.lake.paimon.s3.access-key' = '<ak>',
+    'fluss.lake.paimon.s3.secret-key' = '<sk>'
+);
+```
+
+プレフィックス以降には、`datalake.paimon.` に続く部分と同じ、Paimon 固有のパラメータ名を使用します。この設定は Fluss の `server.yaml` にあります。そのままコピーしてください。
+
+| Fluss server.yaml | Doris Catalog プロパティ |
+| --- | --- |
+| `datalake.paimon.warehouse: s3://bucket/lake` | `'fluss.lake.paimon.warehouse' = 's3://bucket/lake'` |
+| `datalake.paimon.metastore: filesystem` | `'fluss.lake.paimon.metastore' = 'filesystem'` |
+| `datalake.paimon.s3.endpoint: http://minio:9000` | `'fluss.lake.paimon.s3.endpoint' = 'http://minio:9000'` |
+
+上書きは設定全体ではなく、キーごとに適用されます。Catalog に設定したキーは Fluss クラスターが報告する同じキーを上書きし、設定していないキーは引き続きクラスターから取得します。認証情報だけを指定した場合、`warehouse`、`metastore` などは引き続きクラスターから取得されます。
+
+ストレージパラメータ(認証情報、セッショントークン、エンドポイント、リージョン、アドレス指定方式、Hadoop 設定)は Paimon Catalog には渡されません。Doris 固有のストレージパラメータ名に変換され、Doris のストレージ層で適用されます。これらの設定は FE のマニフェスト読み取りと BE のデータファイル読み取りの両方に必要で、ストレージ層だけが双方に同じ設定群を渡せるためです。マッピングは次のとおりです。
+
+| Paimon パラメータ | Doris ストレージパラメータ |
+| --- | --- |
+| `s3.access-key` / `s3.access.key` / `fs.s3a.access.key` | `s3.access_key` |
+| `s3.secret-key` / `s3.secret.key` / `fs.s3a.secret.key` | `s3.secret_key` |
+| `s3.session-token` / `s3.session.token` / `fs.s3a.session.token` | `s3.session_token` |
+| `s3.endpoint` / `fs.s3a.endpoint` | `s3.endpoint` |
+| `s3.region` / `fs.s3a.endpoint.region` | `s3.region` |
+| `s3.path-style-access` / `s3.path.style.access` / `fs.s3a.path.style.access` | `use_path_style` |
+| `fs.oss.accessKeyId` | `oss.access_key` |
+| `fs.oss.accessKeySecret` | `oss.secret_key` |
+| `fs.oss.endpoint` | `oss.endpoint` |
+| `fs.obs.access.key` / `fs.obs.access-key` | `obs.access_key` |
+| `fs.obs.secret.key` / `fs.obs.secret-key` | `obs.secret_key` |
+| `fs.obs.endpoint` | `obs.endpoint` |
+
+HDFS HA や Kerberos の設定など、`fs.`、`dfs.`、`hadoop.` で始まるその他のパラメータも、元の名前のまま Doris のストレージ層に渡されます。
+
+`fluss.lake.paimon.metastore` は `filesystem`(デフォルト)、`hive`、`rest` を受け付けます。Hive Metastore のアドレスや REST の認証設定など、その他のパラメータは [Paimon Catalog](./paimon-catalog.mdx) と同じ方法で指定します。
+
+`ALTER CATALOG` ではプロパティの設定しかできず、削除はできません。`fluss.lake.paimon.*` の上書きを取り消すには、空文字列に設定します。すると Doris は Fluss クラスターが報告する設定に戻ります。
+
+```sql
+ALTER CATALOG fluss SET PROPERTIES ('fluss.lake.paimon.warehouse' = '');
+```
+
+一つの Fluss Catalog は、単一のレイク設定群でレイクテーブルを読み取ります。Fluss クラスターの `datalake.paimon.*` を変更した後は、Doris が新しい設定を読み込めるよう、Catalog を削除して再作成してください。`REFRESH CATALOG` はメタデータキャッシュをクリアするだけで、レイク設定は再読み込みしません。
+
+### クエリプロファイル
+
+<!-- Knowledge Type: Performance Diagnostics -->
+
+一回の Fluss スキャンで Fluss ログ、Paimon レイク、レイクデータを上書きするログ末尾を読み取り、フィルタリングも行うことがあります。そのためプロファイルには読み取り経路別・範囲種別の時間と行数が記録され、どこで時間を費やしているかを確認できます。
+
+```text
+TableReader
+├── FlussLogReadTime            8s25ms      Total time on the Fluss side (JNI)
+│   ├── FlussPkTailRangeNum          2      Only the range types actually read in this scan are registered
+│   ├── FlussPkTailRangeReadTime  6s2ms
+│   └── FlussLogRowsReturned         2
+├── FlussLakeReadTime           8s25ms      Total time on the Paimon side, including tail reads and filtering
+│   ├── FlussLakeRangeNum            1
+│   ├── FlussLakeSuppressRangeNum    2
+│   └── FlussLakeRowsReturned        7      Rows after filtering; add FlussUnionSuppressedRows to get the count before filtering
+├── FlussUnionTailReadTime      5s20ms      One round trip to Fluss per bucket
+└── FlussUnionSuppressTime      16.1us      Filtering per block, grows with the number of lake rows
+```
+
+各経路の合計時間から範囲種別ごとの時間を引くと、そのリーダーの初期化コスト(JNI クラスのロード、または Paimon 読み取りスタックの準備)が分かります。ログテーブルのみを読み取るクエリのプロファイルには、レイクや主キーに関するカウンターはありません。
+
+レイク分割を読み取るスキャンでは、`TableReader` の下に次のカウンターも表示されます。主キーテーブルの Union Read では、これらに値が入ります。
+
+| カウンター | 意味 |
+| --- | --- |
+| `FlussUnionSuppressedRows` | ログ末尾で更新または削除されたために除外したレイクの行数です。 |
+| `FlussUnionTailKeysRead` | ログ末尾から読み取った変更ログのレコード数です。 |
+| `FlussUnionTailKeysRetained` | レイク行のフィルタリングのためメモリに保持した、重複しない主キーの数です。 |
+| `FlussUnionTailCacheHitCount` | 読み取り済みのログ末尾を再利用したレイク分割の数です。同じ BE 上では、同じバケットのレイク分割が、読み取り済みのログ末尾を共有します。 |
+
+Fluss から読み取る部分は JNI リーダーを経由します。そのカウンターは `fluss` ノード(`TableReader` の下)にあり、プロファイルの DetailProfile 部分にだけ表示されます。接続と JVM ヒープに関係するカウンターは次のとおりです。
+
+| カウンター | 意味 |
+| --- | --- |
+| `FlussJniConnectionsOpened` | 読み取りのために開いた Fluss 接続の数です。BE はアイドル接続を再利用するため、直後に同じクエリを実行すると通常は 0 になります。 |
+| `JvmHeapDeclaredBytes` | JNI ヒープの使用量制御が有効な場合、リーダーが保持すると申告した JVM ヒープ容量です。主キーテーブル全体の読み取りと、主キーテーブルの Union Read のログ末尾だけが申告し、その他の読み取りでは 0 になります。「BE の JVM ヒープメモリ」を参照してください。 |
+| `JvmHeapWaitTime` | JNI ヒープの使用量制御が有効な場合、リーダーが JVM ヒープの空きを待った時間です。「BE の JVM ヒープメモリ」を参照してください。 |
+
+レイク分割を Paimon JNI 経由で読み取る場合、同名の JVM ヒープカウンターは `paimon` ノードの下に表示されます。
+
+## クエリ性能
+
+<!-- Knowledge Type: Architecture Principles + Performance Tuning -->
+<!-- Use Case: Performance tuning / Checking whether a query uses the native reader or JNI -->
+
+BE には Fluss テーブルを読み取る経路が二つあり、コストは大きく異なります。
+
+- C++ ネイティブリーダー。BE は Paimon レイクの ORC/Parquet ファイルを、Paimon Catalog と同じリーダーで直接読み取ります。JVM を経由せず、Doris の[ファイルキャッシュ](../data-cache.md)を利用できます。
+- JNI リーダー。BE は JNI を介して Fluss Java SDK を呼び出し、Fluss 自体のデータを読み取ります。ログ、KV スナップショット、変更ログは、この方法でしか読み取れません。各バッチを Java オブジェクトから Doris の列指向ブロックに変換する必要があり、ネイティブリーダーより大幅に遅くなります。この種の読み取りには JVM ヒープを大量に保持するものもあります。「BE の JVM ヒープメモリ」を参照してください。
+
+使用する経路はスキャン範囲の種類によって決まり、`flussScan` 行(`EXPLAIN` の出力)にあるカウンターに対応します。
+
+| 読み取るデータ | EXPLAIN のカウンター | 読み取り経路 |
+| --- | --- | --- |
+| ログテーブルのログ | `logRanges` | JNI |
+| 主キーテーブル全体(KV スナップショット + 変更ログ) | `pkRanges` | JNI |
+| 主キーテーブルの Union Read のログ末尾 | `pkTailRanges` | JNI |
+| ログテーブルの Union Read のレイク分割 | `lakeSplits` | C++ ネイティブリーダー |
+| 主キーテーブルの Union Read のレイク分割 | `lakeSplits`、`suppressedLakeSplits` | 以下に示す Paimon Catalog のルールで決まります。ログ末尾の主キーを使ったレイク行のフィルタリングは、BE 上の C++ で行います。 |
+
+`tbl$lake` は Paimon Connector が直接プランニングするため、その `EXPLAIN` に `flussScan` 行はありません。代わりに `paimonNativeReadSplits=N/M` が表示されます。これは M 個の分割のうち N 個がネイティブリーダーを使用することを意味し、プロファイルに Fluss のカウンターはありません。
+
+レイク分割は Paimon Connector がプランニングし、ネイティブリーダーを使用するかどうかは通常の Paimon テーブルと同じルールに従います。
+
+- ログテーブルは Paimon の追加型テーブルに階層化されます。すべての分割はファイルを直接読み取るため、すべてネイティブリーダーを使用します。
+- 主キーテーブルは Paimon の主キーテーブルに階層化されます。コンパクション済みで他のファイルとのマージが不要な分割はネイティブリーダーを使用します。書き込まれたばかりで未コンパクションのファイルや、ファイル間でキー範囲が重なり、読み取り時のマージが必要な分割は、Paimon JNI リーダーを使用します。
+- セッション変数 `force_jni_scanner = true` を設定すると、すべてのレイク分割が JNI を経由します。トラブルシューティング時にのみ使用してください。
+
+階層化されたテーブルでは、Union Read によってレイク内の部分(通常はデータの大半)をネイティブリーダーで読み取り、階層化オフセット以降の少量のログだけを JNI で読み取れます。階層化が迅速であるほど(`table.datalake.freshness` が小さいほど)、JNI を経由する量は少なくなります。このため、階層化されたテーブルでは Union Read をデフォルトで使用します。次の点を参考にしてください。
+
+- 過去データを分析し、鮮度をあまり重視しない場合は、`tbl$lake` を直接クエリします。Fluss ログを完全にスキップできます。ログテーブルは全体がネイティブリーダーで読み取られ、主キーテーブルは上記の Paimon のルールに従います。
+- `fluss.union_read.mode = disabled` を指定すると、テーブル全体が JNI を経由します。トラブルシューティング以外では推奨しません。
+- `auto` モードがフォールバックすると(`degraded=` が `EXPLAIN` に表示されると)、Fluss から読み取る部分はすべて JNI を経由します。レイクにしか存在しないパーティションだけは、引き続きレイクから読み取られます。`key-type` と `partition-type` のケースに注意してください。これらはテーブルスキーマで決まり、テーブル定義の変更によってのみ解消できます。
+- 主キーテーブルの Union Read では、各 BE 上の各バケットについて、ログ末尾の主キーをもう一度読み取ります(プロファイルの `FlussUnionTailReadTime`)。同じ BE 上のそのバケットの他のレイク分割は、読み取った主キーを再利用します。ログ末尾が長いほどコストは高くなります。
+
+クエリが使用した経路を確認するには、`lakeSplits` と `logRanges`、`pkRanges`、`pkTailRanges` を `EXPLAIN` で比較し、プロファイルの `FlussLakeReadTime` と `FlussLogReadTime` を比較してください。
+
+## BE の JVM ヒープメモリ
+
+<!-- Knowledge Type: Capacity Planning + Configuration Parameters + Troubleshooting -->
+<!-- Use Case: OutOfMemoryError when querying primary-key tables / Sizing the BE JVM heap / Turning on JNI heap admission -->
+
+BE は Fluss 自体のデータを JNI 経由で読み取り、マージが必要な Paimon レイク分割も JNI を経由します(「クエリ性能」を参照)。これらのリーダーはすべて BE に組み込まれた JVM で動作し、他の Catalog の JNI 読み取りや Java UDF と一つのヒープを共有します。ヒープサイズは `-Xmx` で設定します。この値は `JAVA_OPTS_FOR_JDK_17` に指定され、設定ファイルは `be.conf` です。デフォルトは 2 GB(`-Xmx2048m`)です。
+
+ログテーブルのログなど、ほとんどの読み取りはデータをストリーミングし、ヒープを数 MB しか保持しません。次の三種類の読み取りは異なり、最初のバッチを返す前にデータの一部をヒープにロードし、読み取りが終わるまで保持します。
+
+| 読み取るデータ | 保持するヒープ |
+| --- | --- |
+| Fluss からの主キーテーブル全体の読み取り(`pkRanges`、`EXPLAIN` に表示) | バケットの最新の KV スナップショット以降の変更ログをメモリにロードし、主キーでマージします。スナップショット以降の変更が多いほど、より多くのヒープが必要です。 |
+| 主キーテーブルの Union Read のログ末尾(`pkTailRanges`) | ログ末尾の各主キーの最新行です。ログ末尾が長いほど、より多くのヒープが必要です。 |
+| マージが必要な Paimon レイク分割(未コンパクションの Paimon 主キーテーブル) | マージする各ファイルにつき一つの行グループです。一つの分割で数百 MB を使用することがあります。 |
+
+クエリは複数のスキャン範囲を並列に読み取ります。各スキャンインスタンスは一度に最大 `max_file_scanners_concurrency`(デフォルト 16)個のリーダーを実行し、一つの BE 上で複数のインスタンスやクエリが同時に読み取る場合もあります。このようなヒープ使用量の大きいリーダーが同時にいくつか開くと、ヒープがいっぱいになり、クエリが失敗することがあります。エラーメッセージにはヒープサイズと対処方法が示されます。
+
+```text
+errCode = 2, detailMessage = (10.0.0.3)[JNI_ERROR]OutOfMemoryError: Java heap space. BE's JVM is out of heap. Its maximum is 2048 MB, the -Xmx in JAVA_OPTS_FOR_JDK_17 of be.conf: raise it and restart the BE, or have the statement hold less of the heap at once - read with fewer scanners by setting max_file_scanners_concurrency below its default of 16, or set enable_jni_heap_admission = true to have JNI readers wait for room by the heap they declare. A statement that ran out of heap frees  [...]
+```
+
+### ヒープ不足への対処
+
+対処方法は次のとおりです。
+
+1. JVM ヒープを増やします。`-Xmx` を変更してください。この値は `JAVA_OPTS_FOR_JDK_17` に指定され、設定ファイルは `be.conf` です。BE の再起動後に有効になります。主キーテーブルを頻繁にクエリするクラスターでは、まずこれを検討してください。JVM ヒープも BE が動作するマシンのメモリを消費するため、増やす前にマシンのメモリが十分か確認してください。
+2. 同時に開くリーダー数を減らします。`max_file_scanners_concurrency` を下げると、読み取りは遅くなりますが、同時に開くリーダーと保持するヒープが減ります。
+
+    ```sql
+    SET max_file_scanners_concurrency = 4;
+    -- For a single statement only
+    SELECT /*+ SET_VAR(max_file_scanners_concurrency=4) */ * FROM fluss.db.tbl;
+    ```
+
+3. JNI ヒープの使用量制御を有効にし、各リーダーが保持するヒープ容量に応じて順番を待つようにします。詳細は以下を参照してください。
+4. ヒープにロードするデータ量を減らします。Fluss が KV スナップショットを取得する頻度(Fluss クラスターの `kv.snapshot.interval`)を上げると、スナップショット以降の変更ログが短くなります。階層化を迅速にするほど(`table.datalake.freshness` を小さくするほど)、ログ末尾は短くなります。レイク内の Paimon 主キーテーブルがコンパクションされると、その分割はマージが不要になり、ネイティブリーダーを経由して JVM ヒープを使用しなくなります。
+
+### JNI ヒープの使用量制御
+
+セッション変数 `enable_jni_heap_admission`(デフォルト `false`)を有効にすると、FE はプランニング時に上記三種類のリーダーが保持するヒープ容量を見積もり、スキャン範囲とともに BE に渡します。BE は、開いているリーダーが申告した容量の合計を追跡します。現在の合計に新しいリーダーの申告容量を加えても、最大 JVM ヒープに対する `jni_scanner_heap_budget_ratio` の割合に収まる場合にのみ、そのリーダーを開きます。最大 JVM ヒープは `-Xmx` で設定します。収まらない場合は、先行するリーダーが終了して閉じられ、割り当て分を返すまで待機します。
+
+```sql
+SET enable_jni_heap_admission = true;
+-- For a single statement only
+SELECT /*+ SET_VAR(enable_jni_heap_admission=true) */ * FROM fluss.db.tbl;
+```
+
+この変数を有効にした場合の動作は次のとおりです。
+
+- 申告して待機するのは、上記三種類のリーダーだけです。ログテーブルのログやネイティブリーダーで読み取るレイク分割は何も申告せず、変数がオンでもオフでも速度は変わりません。
+- リーダーが待機することはあっても、クエリ結果は変わりません。
+- リーダーは到着順に待機するため、申告容量の大きいリーダーが後から来た小さいリーダーに無期限に追い越されることはありません。割り当て分を保持するリーダーがいないときは、次のリーダーを必ず通します。そのため、予算全体を超える容量を申告したリーダーも開けますが、単独で実行されます。
+- リーダーが待機する時間は最大 `jni_scanner_heap_max_wait_ms`(デフォルト 60 秒)です。その後は待機をやめて開きます。
+- 予算は BE ごとに管理され、その BE 上で変数を有効にしたすべてのクエリで共有されます。無効なクエリは容量を申告せず、待機せず、予算にも計上されません。複数のクエリが同時に主キーテーブルを読み取る場合は、`SET GLOBAL enable_jni_heap_admission = true` で全セッションに対して有効にしてください。
+- この変数は [Paimon Catalog](./paimon-catalog.mdx) で JNI 経由で読み取る分割にも適用されます。
+
+関連する二つの BE 設定項目はどちらも実行時に変更できます。変更方法は [BE の設定](../../admin-manual/config/be-config.md) を参照してください。
+
+| 設定項目 | デフォルト | 説明 |
+| --- | --- | --- |
... 33794 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org