mirror of
https://github.com/hanzoai/datastore.git
synced 2026-09-26 13:55:07 +00:00
Merge branch 'master' into macos-async-signal-safe-unwind
This commit is contained in:
@@ -121,6 +121,7 @@ Run these only when the trigger appears. They are small expansion passes, not a
|
||||
|
||||
- **After first serious invariant failure:** fan out once through the same invariant in foreground paths, background paths, DDL/mutating entrypoints, lifecycle transitions, and sibling engines/settings. Group related issues when they share a cause, but do not omit distinct user-impacting paths.
|
||||
- **New setting/flag/option:** grep consumers that share the settings class or configuration surface. Each relevant engine/mode/API must implement it, reject it, or make an explicit harmless no-op contract.
|
||||
- **Matching a SQL construct in a query:** fires when the diff inspects a query to allow, reject, rewrite, or special-case a construct (for example a specific function, keyword, or operator). First enumerate every AST and query-tree representation of the construct's semantics, not just the one the diff happens to match. The same semantics often live in more than one node shape. `arrayJoin` is the motivating example: the expression form is an `ASTFunction` / `FunctionNode`, but the `ARRAY JOIN` clause is a separate node (`ASTArrayJoin` / `ArrayJoinNode`), so a guard that bans only the function still misses the clause. A guard that covers only one carrier is a gap even if its name matching is perfect. Then, for each name-based carrier, a user can reach the same semantics through forms the surface name does not reveal, so verify the guard handles: (a) **name aliases**: resolve to the canonical name (case-insensitive and registered aliases) instead of comparing a literal string; (b) **user-defined expansions**: SQL UDF bodies, and any macro, lambda, or view inlining, that expand to the construct, so descend into them with cycle protection; (c) **alternate spellings**: equivalent operators or syntaxes for the same construct. The AST and the query tree normalize different things, so confirm which forms the chosen one already resolves and which the guard must still handle. On the raw AST nothing is resolved. On the query tree the analyzer may already inline UDFs and turn operators into functions, but the stored name can still be an alias. Also confirm the guard runs at (or is duplicated at) the point where these expansions have already happened. A check placed before inlining that is not re-checked after inlining is a gap.
|
||||
- **Build flag that drops a global side-effect or weakens numeric semantics:** fires when the diff changes compiler/build flags that remove a documented side-effect or relax FP behavior across many TUs (`-fno-math-errno`, `-ffast-math`, `-ffp-contract=fast`, `-fassociative-math`, `-fno-signed-zeros`, strict-aliasing relaxation, and similar). Read `references.md#build-flags` and follow that procedure before reviewing.
|
||||
- **Native protocol or native format change:** fires when the diff touches the native TCP protocol or the `Native` format wire layout (see the file/symbol list in `references.md#spec-sync`). Read that section and verify the matching spec update.
|
||||
- **New or clarified invariant:** when a PR introduces, tightens, or makes explicit an invariant for a value, type, state, operation, permission, lifecycle, setting, or error condition, verify it across the existing system, not only in the changed code. State the invariant independently of the implementation, then trace pre-existing carriers and paths that can create, copy, transform, store, cache, serialize, expose, or act on the affected data or state. This includes sibling fields, old members, wrapper types, subclasses, alternate constructors, default values, legacy configuration/data, generated values, copied metadata, parallel code paths, and equivalent implementations in other engines or modes. Each path must either preserve the invariant by construction, enforce it before use, reject unsupported cases, or document a deliberate exception. Tests should prove the invariant at the boundary where a violation would matter, not only at the helper or code path touched by the patch.
|
||||
|
||||
@@ -577,11 +577,11 @@ jobs:
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Compatibility check (arm_release)' --workflow "BackportPR" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_distributed_plan_parallel_1_2:
|
||||
stateless_tests_amd_asan_ubsan_distributed_plan_parallel:
|
||||
runs-on: [self-hosted, amd-medium-cpu]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGlzdHJpYnV0ZWQgcGxhbiwgcGFyYWxsZWwsIDEvMik=') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, distributed plan, parallel, 1/2)"
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGlzdHJpYnV0ZWQgcGxhbiwgcGFyYWxsZWwp') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, distributed plan, parallel)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
@@ -610,48 +610,13 @@ jobs:
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, distributed plan, parallel, 1/2)' --workflow "BackportPR" --ci --timestamp
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, distributed plan, parallel)' --workflow "BackportPR" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_distributed_plan_parallel_2_2:
|
||||
runs-on: [self-hosted, amd-medium-cpu]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGlzdHJpYnV0ZWQgcGxhbiwgcGFyYWxsZWwsIDIvMik=') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, distributed plan, parallel, 2/2)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ env.CHECKOUT_REF }}
|
||||
|
||||
- name: Prepare env script
|
||||
run: |
|
||||
rm -rf ./ci/tmp
|
||||
mkdir -p ./ci/tmp
|
||||
cat > ./ci/tmp/praktika_setup_env.sh << 'ENV_SETUP_SCRIPT_EOF'
|
||||
export PYTHONPATH=./ci:.:
|
||||
|
||||
cat > ./ci/tmp/workflow_job.json << 'EOF'
|
||||
${{ toJson(job) }}
|
||||
EOF
|
||||
cat > ./ci/tmp/workflow_status.json << 'EOF'
|
||||
${{ toJson(needs) }}
|
||||
EOF
|
||||
ENV_SETUP_SCRIPT_EOF
|
||||
|
||||
- name: Run
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, distributed plan, parallel, 2/2)' --workflow "BackportPR" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_2:
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_3:
|
||||
runs-on: [self-hosted, amd-small-mem]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMS8yKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/2)"
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMS8zKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/3)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
@@ -680,13 +645,13 @@ jobs:
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/2)' --workflow "BackportPR" --ci --timestamp
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/3)' --workflow "BackportPR" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_2:
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_3:
|
||||
runs-on: [self-hosted, amd-small-mem]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMi8yKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/2)"
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMi8zKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/3)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
@@ -715,7 +680,42 @@ jobs:
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/2)' --workflow "BackportPR" --ci --timestamp
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/3)' --workflow "BackportPR" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_3_3:
|
||||
runs-on: [self-hosted, amd-small-mem]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMy8zKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 3/3)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ env.CHECKOUT_REF }}
|
||||
|
||||
- name: Prepare env script
|
||||
run: |
|
||||
rm -rf ./ci/tmp
|
||||
mkdir -p ./ci/tmp
|
||||
cat > ./ci/tmp/praktika_setup_env.sh << 'ENV_SETUP_SCRIPT_EOF'
|
||||
export PYTHONPATH=./ci:.:
|
||||
|
||||
cat > ./ci/tmp/workflow_job.json << 'EOF'
|
||||
${{ toJson(job) }}
|
||||
EOF
|
||||
cat > ./ci/tmp/workflow_status.json << 'EOF'
|
||||
${{ toJson(needs) }}
|
||||
EOF
|
||||
ENV_SETUP_SCRIPT_EOF
|
||||
|
||||
- name: Run
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 3/3)' --workflow "BackportPR" --ci --timestamp
|
||||
|
||||
unit_tests_asan_ubsan:
|
||||
runs-on: [self-hosted, amd-large]
|
||||
@@ -1314,7 +1314,7 @@ jobs:
|
||||
|
||||
finish_workflow:
|
||||
runs-on: [self-hosted, style-checker-aarch64]
|
||||
needs: [build_amd_asan_ubsan, build_amd_darwin, build_amd_debug, build_amd_release, build_amd_tsan, build_arm_darwin, build_arm_release, compatibility_check_amd_release, compatibility_check_arm_release, config_workflow, docker_keeper_image, docker_server_image, dockers_build_amd, dockers_build_arm, install_packages_amd_release, install_packages_arm_release, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_1_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_2_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_3_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_4_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_5_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_6_6, integration_tests_amd_tsan_1_6, integration_tests_amd_tsan_2_6, integration_tests_amd_tsan_3_6, integration_tests_amd_tsan_4_6, integration_tests_amd_tsan_5_6, integration_tests_amd_tsan_6_6, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_2, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_2, stateless_tests_amd_asan_ubsan_distributed_plan_parallel_1_2, stateless_tests_amd_asan_ubsan_distributed_plan_parallel_2_2, stress_test_amd_tsan, unit_tests_asan_ubsan, unit_tests_asan_ubsan_function_prop_fuzzer, unit_tests_tsan, unit_tests_tsan_function_prop_fuzzer]
|
||||
needs: [build_amd_asan_ubsan, build_amd_darwin, build_amd_debug, build_amd_release, build_amd_tsan, build_arm_darwin, build_arm_release, compatibility_check_amd_release, compatibility_check_arm_release, config_workflow, docker_keeper_image, docker_server_image, dockers_build_amd, dockers_build_arm, install_packages_amd_release, install_packages_arm_release, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_1_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_2_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_3_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_4_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_5_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_6_6, integration_tests_amd_tsan_1_6, integration_tests_amd_tsan_2_6, integration_tests_amd_tsan_3_6, integration_tests_amd_tsan_4_6, integration_tests_amd_tsan_5_6, integration_tests_amd_tsan_6_6, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_3, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_3, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_3_3, stateless_tests_amd_asan_ubsan_distributed_plan_parallel, stress_test_amd_tsan, unit_tests_asan_ubsan, unit_tests_asan_ubsan_function_prop_fuzzer, unit_tests_tsan, unit_tests_tsan_function_prop_fuzzer]
|
||||
if: ${{ always() }}
|
||||
name: "Finish Workflow"
|
||||
outputs:
|
||||
|
||||
+148
-148
File diff suppressed because one or more lines are too long
@@ -0,0 +1,85 @@
|
||||
# generated by praktika
|
||||
|
||||
name: NightlyCloudAPIDocs
|
||||
on:
|
||||
schedule:
|
||||
- cron: 13 7 * * *
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
|
||||
env:
|
||||
PYTHONUNBUFFERED: 1
|
||||
CHECKOUT_REF: ""
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
config_workflow:
|
||||
runs-on: [self-hosted, style-checker-aarch64]
|
||||
needs: []
|
||||
name: "Config Workflow"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ env.CHECKOUT_REF }}
|
||||
|
||||
- name: Prepare env script
|
||||
run: |
|
||||
rm -rf ./ci/tmp
|
||||
mkdir -p ./ci/tmp
|
||||
cat > ./ci/tmp/praktika_setup_env.sh << 'ENV_SETUP_SCRIPT_EOF'
|
||||
export PYTHONPATH=./ci:.:
|
||||
|
||||
cat > ./ci/tmp/workflow_job.json << 'EOF'
|
||||
${{ toJson(job) }}
|
||||
EOF
|
||||
cat > ./ci/tmp/workflow_status.json << 'EOF'
|
||||
${{ toJson(needs) }}
|
||||
EOF
|
||||
ENV_SETUP_SCRIPT_EOF
|
||||
|
||||
- name: Run
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Config Workflow' --workflow "NightlyCloudAPIDocs" --ci --timestamp
|
||||
|
||||
sync_cloud_api_docs:
|
||||
runs-on: [self-hosted, style-checker-aarch64]
|
||||
needs: [config_workflow]
|
||||
name: "Sync Cloud API docs"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ env.CHECKOUT_REF }}
|
||||
|
||||
- name: Prepare env script
|
||||
run: |
|
||||
rm -rf ./ci/tmp
|
||||
mkdir -p ./ci/tmp
|
||||
cat > ./ci/tmp/praktika_setup_env.sh << 'ENV_SETUP_SCRIPT_EOF'
|
||||
export PYTHONPATH=./ci:.:
|
||||
|
||||
cat > ./ci/tmp/workflow_job.json << 'EOF'
|
||||
${{ toJson(job) }}
|
||||
EOF
|
||||
cat > ./ci/tmp/workflow_status.json << 'EOF'
|
||||
${{ toJson(needs) }}
|
||||
EOF
|
||||
ENV_SETUP_SCRIPT_EOF
|
||||
|
||||
- name: Run
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Sync Cloud API docs' --workflow "NightlyCloudAPIDocs" --ci --timestamp
|
||||
+303
-268
File diff suppressed because one or more lines are too long
@@ -680,11 +680,11 @@ jobs:
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Install packages (arm_release)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_distributed_plan_parallel_1_2:
|
||||
stateless_tests_amd_asan_ubsan_distributed_plan_parallel:
|
||||
runs-on: [self-hosted, amd-medium-cpu]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGlzdHJpYnV0ZWQgcGxhbiwgcGFyYWxsZWwsIDEvMik=') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, distributed plan, parallel, 1/2)"
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGlzdHJpYnV0ZWQgcGxhbiwgcGFyYWxsZWwp') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, distributed plan, parallel)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
@@ -713,48 +713,13 @@ jobs:
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, distributed plan, parallel, 1/2)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, distributed plan, parallel)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_distributed_plan_parallel_2_2:
|
||||
runs-on: [self-hosted, amd-medium-cpu]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGlzdHJpYnV0ZWQgcGxhbiwgcGFyYWxsZWwsIDIvMik=') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, distributed plan, parallel, 2/2)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ env.CHECKOUT_REF }}
|
||||
|
||||
- name: Prepare env script
|
||||
run: |
|
||||
rm -rf ./ci/tmp
|
||||
mkdir -p ./ci/tmp
|
||||
cat > ./ci/tmp/praktika_setup_env.sh << 'ENV_SETUP_SCRIPT_EOF'
|
||||
export PYTHONPATH=./ci:.:
|
||||
|
||||
cat > ./ci/tmp/workflow_job.json << 'EOF'
|
||||
${{ toJson(job) }}
|
||||
EOF
|
||||
cat > ./ci/tmp/workflow_status.json << 'EOF'
|
||||
${{ toJson(needs) }}
|
||||
EOF
|
||||
ENV_SETUP_SCRIPT_EOF
|
||||
|
||||
- name: Run
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, distributed plan, parallel, 2/2)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_2:
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_3:
|
||||
runs-on: [self-hosted, amd-small-mem]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMS8yKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/2)"
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMS8zKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/3)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
@@ -783,13 +748,13 @@ jobs:
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/2)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 1/3)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_2:
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_3:
|
||||
runs-on: [self-hosted, amd-small-mem]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMi8yKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/2)"
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMi8zKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/3)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
@@ -818,7 +783,42 @@ jobs:
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/2)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 2/3)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
|
||||
stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_3_3:
|
||||
runs-on: [self-hosted, amd-small-mem]
|
||||
needs: [build_amd_asan_ubsan, config_workflow, dockers_build_amd, dockers_build_arm]
|
||||
if: ${{ !cancelled() && !contains(needs.*.outputs.pipeline_status, 'failure') && !contains(needs.*.outputs.pipeline_status, 'undefined') && !contains(fromJson(needs.config_workflow.outputs.data).workflow_config.cache_success_base64, 'U3RhdGVsZXNzIHRlc3RzIChhbWRfYXNhbl91YnNhbiwgZGIgZGlzaywgZGlzdHJpYnV0ZWQgcGxhbiwgc2VxdWVudGlhbCwgMy8zKQ==') }}
|
||||
name: "Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 3/3)"
|
||||
outputs:
|
||||
data: ${{ steps.run.outputs.DATA }}
|
||||
pipeline_status: ${{ steps.run.outputs.pipeline_status || 'undefined' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ env.CHECKOUT_REF }}
|
||||
|
||||
- name: Prepare env script
|
||||
run: |
|
||||
rm -rf ./ci/tmp
|
||||
mkdir -p ./ci/tmp
|
||||
cat > ./ci/tmp/praktika_setup_env.sh << 'ENV_SETUP_SCRIPT_EOF'
|
||||
export PYTHONPATH=./ci:.:
|
||||
|
||||
cat > ./ci/tmp/workflow_job.json << 'EOF'
|
||||
${{ toJson(job) }}
|
||||
EOF
|
||||
cat > ./ci/tmp/workflow_status.json << 'EOF'
|
||||
${{ toJson(needs) }}
|
||||
EOF
|
||||
ENV_SETUP_SCRIPT_EOF
|
||||
|
||||
- name: Run
|
||||
id: run
|
||||
run: |
|
||||
. ./ci/tmp/praktika_setup_env.sh
|
||||
PYTHONUNBUFFERED=1 python3 -m praktika run 'Stateless tests (amd_asan_ubsan, db disk, distributed plan, sequential, 3/3)' --workflow "ReleaseBranchCI" --ci --timestamp
|
||||
|
||||
unit_tests_asan_ubsan:
|
||||
runs-on: [self-hosted, amd-large]
|
||||
@@ -1837,7 +1837,7 @@ jobs:
|
||||
|
||||
finish_workflow:
|
||||
runs-on: [self-hosted, style-checker-aarch64]
|
||||
needs: [build_amd_asan_ubsan, build_amd_darwin, build_amd_debug, build_amd_msan, build_amd_release, build_amd_tsan, build_arm_asan_ubsan, build_arm_darwin, build_arm_debug, build_arm_msan, build_arm_release, build_arm_tsan, config_workflow, docker_keeper_image, docker_server_image, dockers_build_amd, dockers_build_arm, install_packages_amd_release, install_packages_arm_release, integration_tests_amd_asan_ubsan_db_disk_1_4, integration_tests_amd_asan_ubsan_db_disk_2_4, integration_tests_amd_asan_ubsan_db_disk_3_4, integration_tests_amd_asan_ubsan_db_disk_4_4, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_1_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_2_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_3_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_4_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_5_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_6_6, integration_tests_amd_tsan_1_6, integration_tests_amd_tsan_2_6, integration_tests_amd_tsan_3_6, integration_tests_amd_tsan_4_6, integration_tests_amd_tsan_5_6, integration_tests_amd_tsan_6_6, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_2, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_2, stateless_tests_amd_asan_ubsan_distributed_plan_parallel_1_2, stateless_tests_amd_asan_ubsan_distributed_plan_parallel_2_2, stress_test_amd_asan_ubsan, stress_test_amd_debug, stress_test_amd_msan, stress_test_amd_tsan, stress_test_arm_asan_ubsan, stress_test_arm_asan_ubsan_s3, stress_test_arm_debug, stress_test_arm_msan, stress_test_arm_release, stress_test_arm_tsan, unit_tests_asan_ubsan, unit_tests_msan, unit_tests_tsan]
|
||||
needs: [build_amd_asan_ubsan, build_amd_darwin, build_amd_debug, build_amd_msan, build_amd_release, build_amd_tsan, build_arm_asan_ubsan, build_arm_darwin, build_arm_debug, build_arm_msan, build_arm_release, build_arm_tsan, config_workflow, docker_keeper_image, docker_server_image, dockers_build_amd, dockers_build_arm, install_packages_amd_release, install_packages_arm_release, integration_tests_amd_asan_ubsan_db_disk_1_4, integration_tests_amd_asan_ubsan_db_disk_2_4, integration_tests_amd_asan_ubsan_db_disk_3_4, integration_tests_amd_asan_ubsan_db_disk_4_4, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_1_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_2_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_3_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_4_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_5_6, integration_tests_amd_asan_ubsan_db_disk_old_analyzer_6_6, integration_tests_amd_tsan_1_6, integration_tests_amd_tsan_2_6, integration_tests_amd_tsan_3_6, integration_tests_amd_tsan_4_6, integration_tests_amd_tsan_5_6, integration_tests_amd_tsan_6_6, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_1_3, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_2_3, stateless_tests_amd_asan_ubsan_db_disk_distributed_plan_sequential_3_3, stateless_tests_amd_asan_ubsan_distributed_plan_parallel, stress_test_amd_asan_ubsan, stress_test_amd_debug, stress_test_amd_msan, stress_test_amd_tsan, stress_test_arm_asan_ubsan, stress_test_arm_asan_ubsan_s3, stress_test_arm_debug, stress_test_arm_msan, stress_test_arm_release, stress_test_arm_tsan, unit_tests_asan_ubsan, unit_tests_msan, unit_tests_tsan]
|
||||
if: ${{ always() }}
|
||||
name: "Finish Workflow"
|
||||
outputs:
|
||||
|
||||
@@ -18,6 +18,16 @@ env:
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
skip-images:
|
||||
description: 'Skip update_library_images stage'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
skip-docs:
|
||||
description: 'Skip update_docs stage'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
concurrency:
|
||||
group: official-docker-library
|
||||
@@ -37,6 +47,8 @@ jobs:
|
||||
run: |
|
||||
cat >> "$GITHUB_ENV" << 'EOF'
|
||||
DRY_RUN=${{ github.event.inputs.dry-run == 'true' && '--dry-run' || '' }}
|
||||
SKIP_IMAGES=${{ github.event.inputs.skip-images == 'true' && '--skip-images' || '' }}
|
||||
SKIP_DOCS=${{ github.event.inputs.skip-docs == 'true' && '--skip-docs' || '' }}
|
||||
ROBOT_CLICKHOUSE_SSH_KEY<<RCSK
|
||||
${{secrets.ROBOT_CLICKHOUSE_SSH_KEY}}
|
||||
RCSK
|
||||
@@ -44,4 +56,4 @@ jobs:
|
||||
- name: Update official docker repos
|
||||
run: |
|
||||
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||
python3 official_docker_update.py -vv $DRY_RUN
|
||||
python3 official_docker_update.py -vv $DRY_RUN $SKIP_IMAGES $SKIP_DOCS
|
||||
|
||||
@@ -333,6 +333,9 @@
|
||||
[submodule "contrib/mongo-c-driver"]
|
||||
path = contrib/mongo-c-driver
|
||||
url = https://github.com/ClickHouse/mongo-c-driver.git
|
||||
[submodule "contrib/sz3"]
|
||||
path = contrib/sz3
|
||||
url = https://github.com/ClickHouse/SZ3.git
|
||||
[submodule "contrib/numactl"]
|
||||
path = contrib/numactl
|
||||
url = https://github.com/ClickHouse/numactl.git
|
||||
@@ -399,6 +402,9 @@
|
||||
[submodule "contrib/xsimd"]
|
||||
path = contrib/xsimd
|
||||
url = https://github.com/xtensor-stack/xsimd
|
||||
[submodule "contrib/libdeflate"]
|
||||
path = contrib/libdeflate
|
||||
url = https://github.com/ClickHouse/libdeflate
|
||||
[submodule "contrib/wagyu"]
|
||||
path = contrib/wagyu
|
||||
url = https://github.com/ClickHouse/wagyu
|
||||
|
||||
@@ -46,28 +46,32 @@ Want to speak? Apply [here](https://forms.gle/3h4XCEENJZ3eaVGy7)
|
||||
You can also peruse [ClickHouse Events](https://clickhouse.com/company/news-events) for a list of all upcoming trainings, meetups, speaking engagements, etc.
|
||||
|
||||
Upcoming meetups
|
||||
|
||||
* [AI Builders Offstage: Docker & ClickHouse](https://paris.aitinkerers.org/p/ait-raise-docker-for-ai) - July 7th, 2026
|
||||
* [AI Builders Night NY](https://luma.com/clickh-lz8k) - July 8th, 2026
|
||||
* [Happy Hour Open Source de Montréal](https://luma.com/clickh-o8up) - July 9th, 2026
|
||||
* [AI Builders Night SF](https://luma.com/clickh-gz0r)- July 14th, 2026
|
||||
* [Bangkok OSS & Data Evening: Queries, Code & Community](https://luma.com/gpzn0n8v) - July 23, 2026
|
||||
* [Data at Scale Amsterdam](https://luma.com/clickh-ha56) - October 14th, 2026
|
||||
|
||||
* [AI Builders Night SF](https://luma.com/clickh-gz0r) - July 14th, 2026
|
||||
* [Data Engineering Things Seattle Meetup](https://luma.com/sbonpt98) - July 16th, 2026
|
||||
* [Bangkok OSS & Data Evening: Queries, Code & Community](https://luma.com/gpzn0n8v) - July 23rd, 2026
|
||||
* [Happy Hour warm-up: AWS Summit Bogotá](https://luma.com/clickh-bkld) - July 30th, 2026
|
||||
* [ClickHouse Singapore August 2026 Edition](https://luma.com/clickh-2r4t) - August 4th, 2026
|
||||
* [ClickHouse Jakarta Meetup](https://luma.com/clickh-552k) - August 5th, 2026
|
||||
* [AI Demo Night](https://luma.com/qeg73alr) - August 6th, 2026
|
||||
* [Data Engineering Meetup](https://luma.com/clickh-z578) - August 11th, 2026
|
||||
* [AI Demo Night](https://luma.com/c4alsewg) - August 18th, 2026
|
||||
* [NYC Apache Iceberg™ Community Meetup](https://luma.com/t3z5q5s8) - August 20th, 2026
|
||||
* [Bangalore Iceberg Community Meetup](https://luma.com/clickh-t3iz) - August 22nd, 2026
|
||||
* [Vancouver Meetup](https://luma.com/jr8tc94e) - August 25th, 2026
|
||||
* [The Agentic Data Stack: Berlin](https://luma.com/clickh-2ccj) - September 2nd, 2026
|
||||
* [Amsterdam Meetup](https://luma.com/clickh-vu1p) - September 15th, 2026
|
||||
* [Cape Town Meetup](https://luma.com/clickh-dw1v) - September 15th, 2026
|
||||
* [Rows And Columns Summit](https://luma.com/event/evt-bQcR6tDKi8OmTXu) - September 22nd, 2026
|
||||
* [Paris Meetup](https://luma.com/clickh-gsz1) - September 29th, 2026
|
||||
|
||||
|
||||
Recent meetups
|
||||
* [Happy Hour Open Source de Montréal](https://luma.com/clickh-o8up) - July 9th, 2026
|
||||
* [AI Builders Night NY](https://luma.com/clickh-lz8k) - July 8th, 2026
|
||||
* [AI Builders Offstage: Docker & ClickHouse](https://paris.aitinkerers.org/p/ait-raise-docker-for-ai) - July 7th, 2026
|
||||
* [AI Demo Night SF](https://luma.com/clickh-2crf) - July 1st, 2026
|
||||
* [KL Meetup](https://luma.com/clickh-8cfv) - June 26th, 2026
|
||||
* [Seattle Iceberg Meetup](https://luma.com/vwt2i2rs) - June 25th, 2026
|
||||
* [NY Happy Hour](https://luma.com/odgqf98e) - June 17th, 2026
|
||||
* [ClickHouse Cafe @ Data & AI Summit](https://luma.com/clickh-vrjd) - June 16th, 2026
|
||||
* [Paris Meetup](https://www.meetup.com/clickhouse-france-user-group/events/314863232/) - June 11, 2026
|
||||
* [Meetup São Paulo](https://luma.com/clickh-87tk) - June 11th, 2026
|
||||
* [ClickHouse + Hex AI hackathon](https://luma.com/clickh-2ujv)- June 11th, 2026
|
||||
* [LA Happy Hour](https://luma.com/clickh-tshu) - June 10th, 2026
|
||||
* [Stockholm Meetup](https://www.meetup.com/clickhouse-stockholm-user-group/events/314862596/) - June 9th, 2026
|
||||
* [Toronto Meetup](https://luma.com/d5sytpvo) - June 2nd, 2026
|
||||
|
||||
## Recent Recordings
|
||||
|
||||
|
||||
@@ -6,15 +6,6 @@
|
||||
|
||||
# ─────────────────────────── macOS platform gaps (keep skipped) ───────────────────────────
|
||||
|
||||
# Streaming distributed exchange: the DistributedQuery/stateless-worker layer is eventfd-based and
|
||||
# Linux-only ("Stateless worker client is not enabled" / "Only Persisted exchange is supported").
|
||||
03394_distributed_shuffle_join_with_aggregation
|
||||
03394_distributed_shuffle_join_with_filter
|
||||
03394_distributed_shuffle_join_with_in
|
||||
03394_distributed_shuffle_join_with_prewhere
|
||||
03394_distributed_sort
|
||||
04105_distributed_final_replacing
|
||||
|
||||
# Transactions are not supported on this build (experimental, NOT_IMPLEMENTED).
|
||||
03803_transaction_mutation_race
|
||||
03916_attach_as_replicated_implicit_transaction
|
||||
@@ -27,11 +18,6 @@
|
||||
# succeeds), likely a memory-accounting difference.
|
||||
01961_roaring_memory_tracking
|
||||
|
||||
# Investigate
|
||||
04051_negative_limit_with_ties_distributed
|
||||
04052_negative_limit_with_ties_distributed_large
|
||||
04054_negative_limit_with_ties_distributed_large_boundary
|
||||
|
||||
# ─────── NOT a macOS platform gap: env/harness/portability - verify on CI or fix ───────
|
||||
|
||||
# Local fast-test server lacks these cluster/keeper definitions (CLUSTER_DOESNT_EXIST / NO_ZOOKEEPER);
|
||||
|
||||
+12
-3
@@ -483,11 +483,14 @@ class ArtifactNames:
|
||||
|
||||
LLVM_FT_NUM_BATCHES = 3
|
||||
LLVM_IT_NUM_BATCHES = 8
|
||||
# The old-analyzer + s3 + DatabaseReplicated + WasmEdge parallel variant runs the
|
||||
# The old-analyzer + s3 + DBReplicated + WasmEdge parallel variant runs the
|
||||
# whole stateless suite un-batched and is the slowest job in CI (main run alone
|
||||
# ~1h40m-2h10m under coverage instrumentation). It is split into batches so each
|
||||
# shard finishes well inside the runner lease and is not torn down mid-job.
|
||||
LLVM_FT_OLD_S3_DB_REPL_WASM_NUM_BATCHES = 3
|
||||
# The sequential counterpart is lighter than the parallel variant but still slow
|
||||
# enough to benefit from being split, so it gets its own (smaller) batch count.
|
||||
LLVM_FT_OLD_S3_DB_REPL_WASM_SEQUENTIAL_NUM_BATCHES = 2
|
||||
LLVM_FT_ARTIFACTS_LIST = [
|
||||
# default.profdata files for 3 batches from Stateless(Functional) tests
|
||||
ArtifactNames.LLVM_COVERAGE_FILE + f"_ft_{batch}"
|
||||
@@ -496,15 +499,21 @@ LLVM_FT_ARTIFACTS_LIST = [
|
||||
]
|
||||
|
||||
LLVM_FT_ARTIFACTS_LIST += [
|
||||
# default.profdata files for batches from Functional tests with Old Analyzer + S3 + DatabaseReplicated + WasmEdge, parallel execution
|
||||
# default.profdata files for batches from Functional tests with Old Analyzer + S3 + DBReplicated + WasmEdge, parallel execution
|
||||
ArtifactNames.LLVM_COVERAGE_FILE + f"_ft_old_s3_db_repl_wasm_parallel_{batch}"
|
||||
for total_batches in (LLVM_FT_OLD_S3_DB_REPL_WASM_NUM_BATCHES,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
]
|
||||
|
||||
LLVM_FT_ARTIFACTS_LIST += [
|
||||
# default.profdata files for batches from Functional tests with Old Analyzer + S3 + DBReplicated + WasmEdge, sequential execution
|
||||
ArtifactNames.LLVM_COVERAGE_FILE + f"_ft_old_s3_db_repl_wasm_sequential_{batch}"
|
||||
for total_batches in (LLVM_FT_OLD_S3_DB_REPL_WASM_SEQUENTIAL_NUM_BATCHES,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
]
|
||||
|
||||
LLVM_FT_ARTIFACTS_LIST += [
|
||||
# default.profdata files for jobs from Functional tests with Old Analyzer + S3 + AsyncInsert + parallel/sequential execution
|
||||
ArtifactNames.LLVM_COVERAGE_FILE + "_ft_old_s3_db_repl_wasm_sequential",
|
||||
ArtifactNames.LLVM_COVERAGE_FILE + "_ft_s3_parallel",
|
||||
ArtifactNames.LLVM_COVERAGE_FILE + "_ft_s3_sequential",
|
||||
ArtifactNames.LLVM_COVERAGE_FILE + "_ft_s3_async_parallel",
|
||||
|
||||
+40
-28
@@ -5,6 +5,7 @@ from ci.defs.defs import (
|
||||
LLVM_ARTIFACTS_LIST,
|
||||
LLVM_FT_NUM_BATCHES,
|
||||
LLVM_FT_OLD_S3_DB_REPL_WASM_NUM_BATCHES,
|
||||
LLVM_FT_OLD_S3_DB_REPL_WASM_SEQUENTIAL_NUM_BATCHES,
|
||||
LLVM_IT_NUM_BATCHES,
|
||||
ArtifactNames,
|
||||
BuildTypes,
|
||||
@@ -54,6 +55,7 @@ fast_test_digest_config = Job.CacheDigestConfig(
|
||||
include_paths=[
|
||||
"./ci/jobs/fast_test.py",
|
||||
"./ci/jobs/scripts/clickhouse_proc.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
"./tests/queries/0_stateless/",
|
||||
"./tests/config/",
|
||||
"./tests/clickhouse-test",
|
||||
@@ -102,6 +104,7 @@ common_ft_job_config = Job.Config(
|
||||
include_paths=[
|
||||
"./ci/jobs/functional_tests.py",
|
||||
"./ci/jobs/scripts/clickhouse_proc.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
"./ci/jobs/scripts/functional_tests_results.py",
|
||||
"./ci/jobs/scripts/functional_tests/setup_log_cluster.sh",
|
||||
"./ci/praktika/cidb.py",
|
||||
@@ -626,6 +629,7 @@ class JobConfigs:
|
||||
digest_config=Job.CacheDigestConfig(
|
||||
include_paths=[
|
||||
"./ci/jobs/clickhouse_light.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
"./ci/jobs/queries",
|
||||
],
|
||||
),
|
||||
@@ -633,27 +637,23 @@ class JobConfigs:
|
||||
runs_on=RunnerLabels.AMD_SMALL,
|
||||
)
|
||||
functional_tests_jobs = common_ft_job_config.parametrize(
|
||||
*[
|
||||
Job.ParamSet(
|
||||
parameter=f"amd_asan_ubsan, distributed plan, parallel, {batch}/{total_batches}",
|
||||
runs_on=RunnerLabels.AMD_MEDIUM_CPU,
|
||||
requires=[ArtifactNames.CH_AMD_ASAN_UBSAN],
|
||||
)
|
||||
for total_batches in (2,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
],
|
||||
Job.ParamSet(
|
||||
parameter="amd_asan_ubsan, distributed plan, parallel",
|
||||
runs_on=RunnerLabels.AMD_MEDIUM_CPU,
|
||||
requires=[ArtifactNames.CH_AMD_ASAN_UBSAN],
|
||||
),
|
||||
*[
|
||||
Job.ParamSet(
|
||||
parameter=f"amd_asan_ubsan, db disk, distributed plan, sequential, {batch}/{total_batches}",
|
||||
runs_on=RunnerLabels.AMD_SMALL_MEM,
|
||||
requires=[ArtifactNames.CH_AMD_ASAN_UBSAN],
|
||||
)
|
||||
for total_batches in (2,)
|
||||
for total_batches in (3,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
],
|
||||
*[
|
||||
Job.ParamSet(
|
||||
parameter=f"amd_llvm_coverage, old analyzer, s3 storage, DatabaseReplicated, WasmEdge, parallel, {batch}/{total_batches}",
|
||||
parameter=f"amd_llvm_coverage, old analyzer, s3 storage, DBReplicated, WasmEdge, parallel, {batch}/{total_batches}",
|
||||
runs_on=RunnerLabels.AMD_MEDIUM, # large machine - no boost, why?
|
||||
requires=[ArtifactNames.CH_AMD_LLVM_COVERAGE_BUILD],
|
||||
provides=[
|
||||
@@ -664,12 +664,19 @@ class JobConfigs:
|
||||
for total_batches in (LLVM_FT_OLD_S3_DB_REPL_WASM_NUM_BATCHES,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
],
|
||||
Job.ParamSet(
|
||||
parameter="amd_llvm_coverage, old analyzer, s3 storage, DatabaseReplicated, WasmEdge, sequential",
|
||||
runs_on=RunnerLabels.AMD_SMALL,
|
||||
requires=[ArtifactNames.CH_AMD_LLVM_COVERAGE_BUILD],
|
||||
provides=[ArtifactNames.LLVM_COVERAGE_FILE + "_ft_old_s3_db_repl_wasm_sequential"],
|
||||
),
|
||||
*[
|
||||
Job.ParamSet(
|
||||
parameter=f"amd_llvm_coverage, old analyzer, s3 storage, DBReplicated, WasmEdge, sequential, {batch}/{total_batches}",
|
||||
runs_on=RunnerLabels.AMD_SMALL,
|
||||
requires=[ArtifactNames.CH_AMD_LLVM_COVERAGE_BUILD],
|
||||
provides=[
|
||||
ArtifactNames.LLVM_COVERAGE_FILE
|
||||
+ f"_ft_old_s3_db_repl_wasm_sequential_{batch}"
|
||||
],
|
||||
)
|
||||
for total_batches in (LLVM_FT_OLD_S3_DB_REPL_WASM_SEQUENTIAL_NUM_BATCHES,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
],
|
||||
Job.ParamSet(
|
||||
parameter="amd_llvm_coverage, ParallelReplicas, s3 storage, parallel",
|
||||
runs_on=RunnerLabels.AMD_MEDIUM, # large machine - no boost, why?
|
||||
@@ -704,15 +711,11 @@ class JobConfigs:
|
||||
runs_on=RunnerLabels.AMD_SMALL,
|
||||
requires=[ArtifactNames.CH_AMD_DEBUG],
|
||||
),
|
||||
*[
|
||||
Job.ParamSet(
|
||||
parameter=f"amd_tsan, parallel, {batch}/{total_batches}",
|
||||
runs_on=RunnerLabels.AMD_LARGE,
|
||||
requires=[ArtifactNames.CH_AMD_TSAN],
|
||||
)
|
||||
for total_batches in (2,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
],
|
||||
Job.ParamSet(
|
||||
parameter="amd_tsan, parallel",
|
||||
runs_on=RunnerLabels.AMD_LARGE,
|
||||
requires=[ArtifactNames.CH_AMD_TSAN],
|
||||
),
|
||||
*[
|
||||
Job.ParamSet(
|
||||
parameter=f"amd_tsan, sequential, {batch}/{total_batches}",
|
||||
@@ -756,7 +759,7 @@ class JobConfigs:
|
||||
runs_on=RunnerLabels.AMD_MEDIUM,
|
||||
requires=[ArtifactNames.CH_AMD_TSAN],
|
||||
)
|
||||
for total_batches in (2,)
|
||||
for total_batches in (3,)
|
||||
for batch in range(1, total_batches + 1)
|
||||
],
|
||||
*[
|
||||
@@ -795,7 +798,7 @@ class JobConfigs:
|
||||
).parametrize(
|
||||
Job.ParamSet(
|
||||
parameter="arm_asan_ubsan, azure, parallel",
|
||||
runs_on=RunnerLabels.ARM_MEDIUM,
|
||||
runs_on=RunnerLabels.ARM_LARGE, # ~2h on medium
|
||||
requires=[ArtifactNames.CH_ARM_ASAN_UBSAN],
|
||||
),
|
||||
Job.ParamSet(
|
||||
@@ -1322,6 +1325,11 @@ class JobConfigs:
|
||||
digest_config=Job.CacheDigestConfig(
|
||||
include_paths=[
|
||||
"./ci/jobs/clickbench.py",
|
||||
# ClickBench starts the server via `ClickHouseProc.start_light`,
|
||||
# which now clears leftover processes through `server_cleanup.py`.
|
||||
# Track both so changes to the shared start path reschedule the job.
|
||||
"./ci/jobs/scripts/clickhouse_proc.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
"./ci/jobs/scripts/clickbench/",
|
||||
"./ci/jobs/scripts/functional_tests/setup_log_cluster.sh",
|
||||
],
|
||||
@@ -1456,6 +1464,7 @@ class JobConfigs:
|
||||
digest_config=Job.CacheDigestConfig(
|
||||
include_paths=[
|
||||
"./ci/jobs/sqltest_job.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
],
|
||||
),
|
||||
requires=[ArtifactNames.CH_ARM_RELEASE],
|
||||
@@ -1469,6 +1478,7 @@ class JobConfigs:
|
||||
digest_config=Job.CacheDigestConfig(
|
||||
include_paths=[
|
||||
"./ci/jobs/sqllogic_test.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
"./tests/sqllogic/",
|
||||
],
|
||||
),
|
||||
@@ -1483,6 +1493,7 @@ class JobConfigs:
|
||||
digest_config=Job.CacheDigestConfig(
|
||||
include_paths=[
|
||||
"./ci/jobs/sqlstorm_test.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
"./tests/sqlstorm/",
|
||||
],
|
||||
),
|
||||
@@ -1520,6 +1531,7 @@ class JobConfigs:
|
||||
digest_config=Job.CacheDigestConfig(
|
||||
include_paths=[
|
||||
"./ci/jobs/collect_clickhouse_profiles.py",
|
||||
"./ci/jobs/scripts/server_cleanup.py",
|
||||
"./cmake/profile_optimization.cmake",
|
||||
"./tests/performance/",
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
bottle==0.12.25
|
||||
packaging==24.1
|
||||
pip==25.0.1
|
||||
pip==26.1.2
|
||||
pipdeptree==2.23.0
|
||||
setuptools==78.1.1
|
||||
wheel==0.46.1
|
||||
|
||||
@@ -100,7 +100,7 @@ s3transfer==0.16.0
|
||||
setuptools==82.0.1
|
||||
simplejson==3.20.2
|
||||
sortedcontainers==2.4.0
|
||||
soupsieve==2.8.3
|
||||
soupsieve==2.8.4
|
||||
tenacity==8.5.0
|
||||
tzlocal==2.1
|
||||
websocket-client==1.9.0
|
||||
|
||||
@@ -276,7 +276,7 @@ def main():
|
||||
"add_minmax_index_for_temporal_columns",
|
||||
"allow_coalescing_columns_in_partition_or_order_key",
|
||||
"allow_commit_order_projection",
|
||||
"allow_experimental_text_index_positions",
|
||||
"allow_experimental_text_index_phrase_search",
|
||||
"allow_nullable_key",
|
||||
"allow_part_offset_column_in_projections",
|
||||
"allow_suspicious_indices",
|
||||
|
||||
@@ -13,6 +13,7 @@ from pathlib import Path
|
||||
sys.path.append("./")
|
||||
from typing import List
|
||||
|
||||
from ci.jobs.scripts.server_cleanup import kill_leftover_server_processes
|
||||
from ci.jobs.scripts.stack_trace_reader import StackTraceReader
|
||||
from ci.praktika.info import Info
|
||||
from ci.praktika.result import Result
|
||||
@@ -117,6 +118,11 @@ class ClickHouseSetup:
|
||||
self.start_command = f"{self.binary_path} server -- --path {self.work_dir} --user_files_path {self.work_dir}/user_files --logger.log {self.server_log} --logger.errorlog {self.server_err_log} > /dev/null 2>&1"
|
||||
|
||||
def start_server(self):
|
||||
if self.proc is None:
|
||||
# Right before the very first start, clear any clickhouse-server
|
||||
# leaked by a previous CI job on this reused runner; otherwise its
|
||||
# held ports make this start fail (see kill_leftover_server_processes).
|
||||
kill_leftover_server_processes()
|
||||
if not self.proc or self.proc.poll() is not None:
|
||||
self.proc = subprocess.Popen(
|
||||
self.start_command,
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
"""Nightly job: sync the Cloud API reference docs from the live OpenAPI spec.
|
||||
|
||||
Runs `generate_cloud_api_reference.py --write`, and if the generated pages or the
|
||||
navigation drifted from the spec, opens (or refreshes) a single bot
|
||||
pull request. The bot branch is stable so re-runs update one PR instead of
|
||||
opening a new one every night.
|
||||
|
||||
Fail-closed: the PR is only touched when regeneration succeeded and produced a
|
||||
real diff; a failed regeneration never pushes a branch or opens a PR.
|
||||
"""
|
||||
|
||||
import shlex
|
||||
|
||||
from praktika.result import Result
|
||||
from praktika.utils import Shell
|
||||
|
||||
GENERATOR = "./ci/jobs/scripts/docs/generate_cloud_api_reference.py"
|
||||
BOT_BRANCH = "robot/cloud-api-docs"
|
||||
# Paths the generator owns; everything staged into the bot PR lives here.
|
||||
DOCS_PATHS = (
|
||||
"docs/products/cloud/api-reference docs/_specs/cloud-openapi.json "
|
||||
"docs/products/cloud/navigation.json"
|
||||
)
|
||||
|
||||
PR_TITLE = "Docs: sync Cloud API reference from the OpenAPI spec"
|
||||
PR_BODY = f"""\
|
||||
Automated nightly sync of the ClickHouse Cloud API reference documentation from \
|
||||
the live OpenAPI spec (`https://api.clickhouse.cloud/v1`).
|
||||
|
||||
This refreshes the pinned spec copy (`docs/_specs/cloud-openapi.json`, which the \
|
||||
documentation pages resolve against), the badge stubs under \
|
||||
`docs/products/cloud/api-reference/` (per-endpoint maturity badges and \
|
||||
descriptions), and the "API reference" navigation fragment. Most nights nothing \
|
||||
changes and no PR is opened; when the upstream API changes, this PR carries the \
|
||||
diff and self-updates until merged.
|
||||
|
||||
Generated by `{GENERATOR}`.
|
||||
|
||||
### Changelog category (leave one):
|
||||
- Documentation (changelog entry is not required)
|
||||
|
||||
### Changelog entry (a [user-readable short description]\
|
||||
(https://github.com/ClickHouse/ClickHouse/blob/master/docs/changelog_entry_guidelines.md) \
|
||||
of the changes that goes into CHANGELOG.md):
|
||||
Sync the ClickHouse Cloud API reference documentation from the OpenAPI spec.
|
||||
"""
|
||||
|
||||
|
||||
def regenerate():
|
||||
return Shell.check(f"python3 {GENERATOR} --write", verbose=True)
|
||||
|
||||
|
||||
def has_changes():
|
||||
return bool(Shell.get_output(f"git status --porcelain -- {DOCS_PATHS}").strip())
|
||||
|
||||
|
||||
def open_or_refresh_pr():
|
||||
push = [
|
||||
'git config user.name "robot-clickhouse"',
|
||||
'git config user.email "[email protected]"',
|
||||
f"git checkout -B {BOT_BRANCH}",
|
||||
f"git add -A {DOCS_PATHS}",
|
||||
f"git commit -m {shlex.quote(PR_TITLE)}",
|
||||
f"git push -f origin {BOT_BRANCH}",
|
||||
]
|
||||
if not Shell.check(" && ".join(push), verbose=True):
|
||||
return False
|
||||
|
||||
# A force-push already refreshed any open PR, so a PR is created only when
|
||||
# none exists. The existence probe is explicit rather than `gh pr create
|
||||
# || true`: that would swallow every creation failure (auth scopes, branch
|
||||
# permissions, body validation, GitHub outages) and let the job go green
|
||||
# while the drift never reaches reviewers.
|
||||
existing = Shell.get_output(
|
||||
f"gh pr list --head {BOT_BRANCH} --base master --state open "
|
||||
"--json number --jq '.[].number'"
|
||||
).strip()
|
||||
if existing:
|
||||
print(f"PR #{existing} already open; branch refreshed")
|
||||
return True
|
||||
return Shell.check(
|
||||
f"gh pr create --base master --head {BOT_BRANCH} "
|
||||
f"--title {shlex.quote(PR_TITLE)} --body {shlex.quote(PR_BODY)}",
|
||||
verbose=True,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = [Result.from_commands_run(name="Regenerate", command=regenerate)]
|
||||
|
||||
if results[-1].is_ok():
|
||||
if has_changes():
|
||||
results.append(
|
||||
Result.from_commands_run(name="Open or refresh PR", command=open_or_refresh_pr)
|
||||
)
|
||||
else:
|
||||
results.append(
|
||||
Result.from_commands_run(name="Open or refresh PR", command=lambda: True)
|
||||
)
|
||||
results[-1].set_info("No changes; Cloud API docs already in sync")
|
||||
|
||||
Result.create_from(results=results).complete_job()
|
||||
@@ -23,6 +23,8 @@ import time
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
from ci.defs.defs import ToolSet
|
||||
from ci.jobs.scripts.dataset_download import download_and_extract_datasets
|
||||
from ci.jobs.scripts.server_cleanup import kill_leftover_server_processes
|
||||
from ci.praktika.result import Result
|
||||
from ci.praktika.utils import MetaClasses, Shell, Utils
|
||||
|
||||
@@ -215,15 +217,13 @@ def download_datasets():
|
||||
"values": "https://clickhouse-datasets.s3.amazonaws.com/values_with_expressions/partitions/test_values.tar",
|
||||
"tpch10": "https://clickhouse-datasets.s3.amazonaws.com/h/10/tpch.tar",
|
||||
}
|
||||
cmds = []
|
||||
for dataset_path in dataset_paths.values():
|
||||
cmds.append(
|
||||
f'wget -nv -nd -c "{dataset_path}" -O- | tar --extract --verbose -C {PERF_DB_PATH}'
|
||||
)
|
||||
res = Shell.check_parallel(cmds, verbose=True)
|
||||
if res:
|
||||
Shell.check(f"touch {PERF_DB_PATH}/.done")
|
||||
return res
|
||||
errors = download_and_extract_datasets(dataset_paths.values(), PERF_DB_PATH)
|
||||
for error in errors:
|
||||
print(f"ERROR: {error}")
|
||||
if errors:
|
||||
return False
|
||||
Shell.check(f"touch {PERF_DB_PATH}/.done")
|
||||
return True
|
||||
|
||||
|
||||
def dump_log_tail(log_path, lines=200):
|
||||
@@ -531,6 +531,14 @@ def main():
|
||||
args = parse_args()
|
||||
os.makedirs(temp_dir, exist_ok=True)
|
||||
|
||||
# This job starts its own servers below (the temporary dataset server in
|
||||
# configure_datasets and the profiled server in start_server, once per PGO
|
||||
# and BOLT pass) on fixed shared ports. Before the first of them, clear any
|
||||
# clickhouse-server leaked by a previous CI job on this reused runner;
|
||||
# otherwise its held ports make those starts fail
|
||||
# (see kill_leftover_server_processes).
|
||||
kill_leftover_server_processes()
|
||||
|
||||
stages = list(JobStages)
|
||||
if args.param:
|
||||
assert args.param in JobStages, f"--param must be one of {list(JobStages)}"
|
||||
|
||||
@@ -3,6 +3,7 @@ import json
|
||||
import os
|
||||
import random
|
||||
import subprocess
|
||||
import zlib
|
||||
from pathlib import Path
|
||||
|
||||
from ci.jobs.scripts.bugfix_validation import bugfix_build_types, find_master_builds
|
||||
@@ -19,7 +20,6 @@ from ci.praktika.utils import MetaClasses, Shell, Utils
|
||||
temp_dir = f"{Utils.cwd()}/ci/tmp"
|
||||
|
||||
|
||||
|
||||
class JobStages(metaclass=MetaClasses.WithIter):
|
||||
INSTALL_CLICKHOUSE = "install"
|
||||
START = "start"
|
||||
@@ -36,7 +36,7 @@ def parse_args():
|
||||
)
|
||||
parser.add_argument(
|
||||
"--options",
|
||||
help="Comma-separated options. Examples: parallel|sequential|BATCH_NUM/BATCH_TOT|s3 storage|DatabaseReplicated|azure|AsyncInsert|BugfixValidation|coverage",
|
||||
help="Comma-separated options. Examples: parallel|sequential|BATCH_NUM/BATCH_TOT|s3 storage|DBReplicated|azure|AsyncInsert|BugfixValidation|coverage",
|
||||
default="",
|
||||
)
|
||||
parser.add_argument(
|
||||
@@ -139,7 +139,7 @@ OPTIONS_TO_INSTALL_ARGUMENTS = {
|
||||
"old analyzer": "--analyzer",
|
||||
"WasmEdge": "--wasm-engine wasmedge",
|
||||
"s3 storage": "--s3-storage",
|
||||
"DatabaseReplicated": "--db-replicated",
|
||||
"DBReplicated": "--db-replicated",
|
||||
"DatabaseOrdinary": "--db-ordinary",
|
||||
"wide parts enabled": "--wide-parts",
|
||||
"ParallelReplicas": "--parallel-rep",
|
||||
@@ -154,7 +154,7 @@ OPTIONS_TO_TEST_RUNNER_ARGUMENTS = {
|
||||
"s3 storage": "--s3-storage --no-stateful",
|
||||
"ParallelReplicas": "--no-zookeeper --no-shard --no-parallel-replicas",
|
||||
"AsyncInsert": " --no-async-insert",
|
||||
"DatabaseReplicated": " --no-stateful --replicated-database",
|
||||
"DBReplicated": " --no-stateful --replicated-database",
|
||||
"azure": " --azure-blob-storage --no-random-settings --no-random-merge-tree-settings", # azurite is slow, with randomization it can be super slow
|
||||
"parallel": "--no-sequential",
|
||||
"sequential": "--no-parallel",
|
||||
@@ -312,13 +312,85 @@ def main():
|
||||
is_s3_storage = True
|
||||
if "azure" in to:
|
||||
is_azure_storage = True
|
||||
if "DatabaseReplicated" in to:
|
||||
if "DBReplicated" in to:
|
||||
is_database_replicated = True
|
||||
if "SharedCatalog" in to:
|
||||
is_shared_catalog = True
|
||||
if "ParallelReplicas" in to:
|
||||
is_parallel_replicas = True
|
||||
|
||||
# If this PR only touches test files (no production/config code changed),
|
||||
# this job only needs to run if one of the changed tests would even be
|
||||
# selected here - and, when the job is also hash-batched (N/M), only the
|
||||
# batch(es) containing a changed test need to run. Other jobs/batches
|
||||
# would produce results identical to master and can be skipped. Note:
|
||||
# "parallel"/"sequential" job flavors need no batch number of their own
|
||||
# (e.g. "amd_debug, parallel") - the flavor-applicability check below must
|
||||
# not be gated on batching being active.
|
||||
if (
|
||||
not is_flaky_check
|
||||
and not is_targeted_check
|
||||
and not is_bugfix_validation
|
||||
and not is_per_test_coverage
|
||||
and not args.test
|
||||
):
|
||||
changed_files = info.get_changed_files()
|
||||
if changed_files and all(
|
||||
Targeting.is_functional_test_file(f)
|
||||
or Targeting.is_integration_test_file(f)
|
||||
or Targeting.is_ci_job_script(f)
|
||||
for f in changed_files
|
||||
):
|
||||
changed_functional_files = [
|
||||
f for f in changed_files if Targeting.is_functional_test_file(f)
|
||||
]
|
||||
if not changed_functional_files:
|
||||
Result.create_from(
|
||||
status=Result.Status.SKIPPED,
|
||||
info="Only non-functional test files changed in this PR - nothing for this job to run",
|
||||
).complete_job()
|
||||
# "parallel"/"sequential" is a second, independent sharding dimension:
|
||||
# each is hash-batched separately (--no-sequential/--no-parallel), and
|
||||
# a test tagged no-parallel/sequential never runs under the "parallel"
|
||||
# flavor (and vice versa) regardless of batch. Restrict to the changed
|
||||
# tests that this job flavor would even select before checking batches.
|
||||
is_parallel_flavor = "parallel" in test_options
|
||||
is_sequential_flavor = "sequential" in test_options
|
||||
hash_batch_files = []
|
||||
for f in changed_functional_files:
|
||||
hash_batch_file = Targeting.functional_test_hash_batch_file(f)
|
||||
if hash_batch_file is None:
|
||||
# Could not resolve to a concrete test source file (e.g. an
|
||||
# orphan data file) - be conservative and run the batch normally.
|
||||
hash_batch_files = None
|
||||
break
|
||||
is_sequential_test = Targeting.is_sequential_functional_test(
|
||||
hash_batch_file
|
||||
)
|
||||
if is_parallel_flavor and is_sequential_test:
|
||||
continue
|
||||
if is_sequential_flavor and not is_sequential_test:
|
||||
continue
|
||||
hash_batch_files.append(hash_batch_file)
|
||||
if hash_batch_files is not None and not hash_batch_files:
|
||||
Result.create_from(
|
||||
status=Result.Status.SKIPPED,
|
||||
info="Only test files changed in this PR and none of the changed tests apply to this job's parallel/sequential flavor",
|
||||
).complete_job()
|
||||
if (
|
||||
hash_batch_files is not None
|
||||
and batch_num
|
||||
and total_batches > 1
|
||||
and not any(
|
||||
zlib.crc32(f.encode("utf-8")) % total_batches == batch_num - 1
|
||||
for f in hash_batch_files
|
||||
)
|
||||
):
|
||||
Result.create_from(
|
||||
status=Result.Status.SKIPPED,
|
||||
info="Only test files changed in this PR and none of the changed tests fall into this batch",
|
||||
).complete_job()
|
||||
|
||||
if is_llvm_coverage:
|
||||
# Pin random-by-default fault injection seeds server-side (in the default
|
||||
# profile) so coverage is deterministic, instead of injecting them as
|
||||
@@ -698,6 +770,7 @@ def main():
|
||||
if not CH.prepare_stateful_data(
|
||||
with_s3_storage=is_s3_storage,
|
||||
is_db_replicated=is_database_replicated,
|
||||
build_type=build_types[0] if is_bugfix_validation else None,
|
||||
):
|
||||
print(
|
||||
"SETUP FAILURE: "
|
||||
@@ -901,6 +974,7 @@ def main():
|
||||
if not CH.prepare_stateful_data(
|
||||
with_s3_storage=is_s3_storage,
|
||||
is_db_replicated=is_database_replicated,
|
||||
build_type=bugfix_bt,
|
||||
):
|
||||
# Prefer the concrete sub-command + ClickHouse error
|
||||
# captured by prepare_stateful_data() over the generic
|
||||
@@ -1145,7 +1219,7 @@ def main():
|
||||
|
||||
# Decide whether to block the CI pipeline on test failures
|
||||
force_ok_exit = False
|
||||
if "parallel" in test_options and test_result:
|
||||
if test_result:
|
||||
failures_cnt = len([r for r in test_result.results if not r.is_ok()])
|
||||
if failures_cnt > 0 and failures_cnt < 4:
|
||||
print(
|
||||
|
||||
@@ -750,17 +750,7 @@ tar -czf ./ci/tmp/logs.tar.gz \
|
||||
# TODO: reduce scope to modified test cases instead of entire modules
|
||||
changed_files = info.get_changed_files()
|
||||
for file in changed_files:
|
||||
if (
|
||||
file.startswith("tests/integration/test")
|
||||
# e2e tests require external credentials/backends and are
|
||||
# excluded from the default pytest run via the `e2e`
|
||||
# marker. Skip them so a mixed PR (both e2e and regular
|
||||
# integration tests changed) does not try to run them.
|
||||
and not file.startswith("tests/integration/test_e2e_")
|
||||
and Path(file).name.startswith("test")
|
||||
and file.endswith(".py")
|
||||
and Path(file).is_file()
|
||||
):
|
||||
if Targeting.is_integration_test_file(file):
|
||||
changed_test_modules.append(
|
||||
file.removeprefix("tests/integration/")
|
||||
)
|
||||
@@ -884,6 +874,48 @@ tar -czf ./ci/tmp/logs.tar.gz \
|
||||
sequential_test_modules = []
|
||||
assert not is_sequential
|
||||
|
||||
# If this PR only touches test files (no production/config code changed),
|
||||
# this batch only needs to run whichever of parallel_test_modules /
|
||||
# sequential_test_modules actually contains a changed module - the other
|
||||
# side would produce results identical to master and can be dropped
|
||||
# outright (saving the time to run it), and if neither side contains a
|
||||
# changed module the whole batch can be skipped. Placed after the
|
||||
# is_sequential/is_parallel handling above so it sees the modules this
|
||||
# job invocation will actually run, not the pre-flavor-filter set.
|
||||
if (
|
||||
total_batches > 1
|
||||
and not is_flaky_check
|
||||
and not is_targeted_check
|
||||
and not is_bugfix_validation
|
||||
and not args.test
|
||||
):
|
||||
changed_files = info.get_changed_files()
|
||||
if changed_files and all(
|
||||
Targeting.is_functional_test_file(f)
|
||||
or Targeting.is_integration_test_file(f)
|
||||
or Targeting.is_ci_job_script(f)
|
||||
for f in changed_files
|
||||
):
|
||||
changed_integration_modules = {
|
||||
f.removeprefix("tests/integration/")
|
||||
for f in changed_files
|
||||
if Targeting.is_integration_test_file(f)
|
||||
}
|
||||
if not changed_integration_modules:
|
||||
Result.create_from(
|
||||
status=Result.Status.SKIPPED,
|
||||
info="Only non-integration test files changed in this PR - nothing for this job to run",
|
||||
).complete_job()
|
||||
if not (changed_integration_modules & set(parallel_test_modules)):
|
||||
parallel_test_modules = []
|
||||
if not (changed_integration_modules & set(sequential_test_modules)):
|
||||
sequential_test_modules = []
|
||||
if not parallel_test_modules and not sequential_test_modules:
|
||||
Result.create_from(
|
||||
status=Result.Status.SKIPPED,
|
||||
info="Only test files changed in this PR and none of the changed test modules fall into this batch",
|
||||
).complete_job()
|
||||
|
||||
if (is_targeted_check or is_flaky_check) and not parallel_test_modules and not sequential_test_modules:
|
||||
# Targeted check: all selected tests were stale (removed or renamed since the CIDB record).
|
||||
# Flaky check: all changed tests were filtered out (e.g. by SKIP_LIST in the private fork).
|
||||
@@ -1429,6 +1461,18 @@ tar -czf ./ci/tmp/logs.tar.gz \
|
||||
R.set_success()
|
||||
|
||||
force_ok_exit = False
|
||||
if R:
|
||||
failures_cnt = len([r for r in R.results if not r.is_ok()])
|
||||
if failures_cnt > 0 and failures_cnt < 4:
|
||||
print(
|
||||
f"NOTE: Failed {failures_cnt} tests - do not block pipeline, exit with 0"
|
||||
)
|
||||
force_ok_exit = True
|
||||
elif failures_cnt > 0 and "ci-non-blocking" in info.pr_labels:
|
||||
print(
|
||||
f"NOTE: Failed {failures_cnt} tests, label 'ci-non-blocking' is set - do not block pipeline - exit with 0"
|
||||
)
|
||||
force_ok_exit = True
|
||||
if is_bugfix_validation:
|
||||
# Per-arch bugfix-validation jobs are advisory: their pass/fail status
|
||||
# records "did the bug reproduce on this arch?", not whether the PR
|
||||
|
||||
@@ -10,6 +10,7 @@ from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from ci.jobs.scripts.cidb_cluster import CIDBCluster
|
||||
from ci.jobs.scripts.dataset_download import download_and_extract_datasets
|
||||
from ci.praktika.info import Info
|
||||
from ci.praktika.result import Result
|
||||
from ci.praktika.settings import Settings
|
||||
@@ -24,10 +25,22 @@ perf_right_config = f"{perf_right}/config"
|
||||
perf_left_config = f"{perf_left}/config"
|
||||
raw_query_metrics_path = f"{perf_wd}/analyze/raw-query-metrics-upload.tsv"
|
||||
|
||||
# Disable cgroup memory correction for report-building clickhouse-local so each
|
||||
# process is tracked against its own RSS, not the shared job cgroup (avoids Code 241).
|
||||
# Keep in sync with CHPC_REPORT_LOCAL_SERVER_SETTINGS in compare.sh.
|
||||
REPORT_LOCAL_SERVER_SETTINGS = ["--", "--memory_worker_use_cgroup=0"]
|
||||
# Settings for the report-building clickhouse-local (post-processing, not the
|
||||
# measured servers). Keep in sync with CHPC_REPORT_LOCAL_{QUERY,SERVER}_SETTINGS
|
||||
# in compare.sh.
|
||||
REPORT_LOCAL_QUERY_SETTINGS = [
|
||||
# Keep report aggregations in RAM: report/tmp cannot hold a spill of the
|
||||
# heaviest randomization queries, so spilling only fails with NOT_ENOUGH_SPACE.
|
||||
"--max_bytes_before_external_group_by=0",
|
||||
"--max_bytes_ratio_before_external_group_by=0",
|
||||
"--max_bytes_before_external_sort=0",
|
||||
"--max_bytes_ratio_before_external_sort=0",
|
||||
]
|
||||
REPORT_LOCAL_SERVER_SETTINGS = [
|
||||
# Track each process against its own RSS, not the job cgroup (MEMORY_LIMIT_EXCEEDED).
|
||||
"--",
|
||||
"--memory_worker_use_cgroup=0",
|
||||
]
|
||||
|
||||
GET_HISTORICAL_TRESHOLDS_QUERY = """\
|
||||
SELECT test, query_index,
|
||||
@@ -521,7 +534,7 @@ def get_insert_metadata(info, compare_against_release):
|
||||
def build_raw_query_metrics_tsv():
|
||||
Path(raw_query_metrics_path).unlink(missing_ok=True)
|
||||
result = subprocess.run(
|
||||
["clickhouse-local", "--query", BUILD_RAW_QUERY_METRICS_QUERY, *REPORT_LOCAL_SERVER_SETTINGS],
|
||||
["clickhouse-local", "--query", BUILD_RAW_QUERY_METRICS_QUERY, *REPORT_LOCAL_QUERY_SETTINGS, *REPORT_LOCAL_SERVER_SETTINGS],
|
||||
cwd=perf_wd,
|
||||
text=True,
|
||||
capture_output=True,
|
||||
@@ -561,7 +574,7 @@ def build_flamegraph_upload_tsv():
|
||||
Path(ch_uploads_dir).mkdir(parents=True, exist_ok=True)
|
||||
Path(flamegraph_upload_path).unlink(missing_ok=True)
|
||||
result = subprocess.run(
|
||||
["clickhouse-local", "--query", BUILD_FLAMEGRAPH_UPLOAD_QUERY, *REPORT_LOCAL_SERVER_SETTINGS],
|
||||
["clickhouse-local", "--query", BUILD_FLAMEGRAPH_UPLOAD_QUERY, *REPORT_LOCAL_QUERY_SETTINGS, *REPORT_LOCAL_SERVER_SETTINGS],
|
||||
cwd=perf_wd,
|
||||
text=True,
|
||||
capture_output=True,
|
||||
@@ -1171,16 +1184,16 @@ def main():
|
||||
"tpch10": "https://clickhouse-datasets.s3.amazonaws.com/h/10/tpch_sf10.tar",
|
||||
"tpcds1": "https://clickhouse-datasets.s3.amazonaws.com/ds/scale_1/tpcds.tar",
|
||||
}
|
||||
cmds = []
|
||||
for dataset_path in dataset_paths.values():
|
||||
cmds.append(
|
||||
f'wget -nv -nd -c "{dataset_path}" -O- | tar --extract --verbose -C {db_path}'
|
||||
)
|
||||
res = Shell.check_parallel(cmds, verbose=True)
|
||||
stop_watch = Utils.Stopwatch()
|
||||
errors = download_and_extract_datasets(dataset_paths.values(), db_path)
|
||||
res = not errors
|
||||
results.append(
|
||||
Result(
|
||||
name="Download datasets",
|
||||
status=Result.Status.OK if res else Result.Status.ERROR,
|
||||
start_time=stop_watch.start_time,
|
||||
duration=stop_watch.duration,
|
||||
info="\n".join(errors),
|
||||
)
|
||||
)
|
||||
if res:
|
||||
|
||||
@@ -15,6 +15,7 @@ from typing import List
|
||||
|
||||
from ci.jobs.scripts.clickhouse_service import ClickHouseService
|
||||
from ci.jobs.scripts.log_parser import FuzzerLogParser
|
||||
from ci.jobs.scripts.server_cleanup import kill_leftover_server_processes
|
||||
from ci.praktika import Secret
|
||||
from ci.praktika.info import Info
|
||||
from ci.praktika.result import Result
|
||||
@@ -51,6 +52,9 @@ class ClickHouseProc:
|
||||
WD2 = f"{temp_dir}/ft_wd2"
|
||||
CH_LOCAL_LOG = f"{temp_dir}/clickhouse-local.log"
|
||||
CH_LOCAL_ERR_LOG = f"{temp_dir}/clickhouse-local.err.log"
|
||||
# Per-table wall-clock cap for dump_system_tables (seconds). One stuck dump
|
||||
# must not exhaust the job's 9000s budget and get the whole job SIGKILLed.
|
||||
DUMP_SYSTEM_TABLE_TIMEOUT = 600
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
@@ -305,6 +309,7 @@ class ClickHouseProc:
|
||||
print("Starting ClickHouse server")
|
||||
# check binary available and do decompression in the meantime
|
||||
assert Shell.check("clickhouse --version", verbose=True)
|
||||
kill_leftover_server_processes()
|
||||
self.pid_file = f"{temp_dir}/clickhouse-server.pid"
|
||||
self.start_cmd = f"{temp_dir}/clickhouse-server --config-file={temp_dir}/config.xml --pid-file {self.pid_file}"
|
||||
print("Command: ", self.start_cmd)
|
||||
@@ -449,6 +454,7 @@ profiles:
|
||||
if replica_num == 0:
|
||||
# Clear dmesg to avoid false OOM detection from previous CI jobs on the same host
|
||||
Shell.check("dmesg --clear", verbose=True)
|
||||
kill_leftover_server_processes()
|
||||
|
||||
if replica_num == 1:
|
||||
pid_file = self.pid_file_replica_1
|
||||
@@ -737,7 +743,10 @@ profiles:
|
||||
|
||||
def wait_ready(self, replica_num=0):
|
||||
res, out, err = 0, "", ""
|
||||
attempts = 30
|
||||
# A debug or sanitizer server can legitimately take over a minute from
|
||||
# fork to listening; the loop below exits early on success and detects a
|
||||
# dead server via proc.poll(), so a generous deadline costs nothing.
|
||||
attempts = 60
|
||||
delay = 2
|
||||
if replica_num == 1:
|
||||
pid_file = self.pid_file_replica_1
|
||||
@@ -821,11 +830,18 @@ profiles:
|
||||
return False
|
||||
return True
|
||||
|
||||
def prepare_stateful_data(self, with_s3_storage, is_db_replicated):
|
||||
def prepare_stateful_data(self, with_s3_storage, is_db_replicated, build_type=None):
|
||||
self.stateful_setup_error = None
|
||||
if is_db_replicated:
|
||||
print("Skip stateful data preparation for db replicated")
|
||||
return True
|
||||
# Fewer insert threads on sanitizer binaries: their baseline RSS sits
|
||||
# near max_server_memory_usage, so 16 parallel insert pipelines trip the
|
||||
# total limit (Code 241). Same data is loaded, just a smaller peak.
|
||||
is_sanitizer = build_type is not None and any(
|
||||
san in build_type for san in ("asan", "tsan", "msan", "ubsan")
|
||||
)
|
||||
max_insert_threads = 4 if is_sanitizer else 16
|
||||
command = """
|
||||
set -e
|
||||
set -o pipefail
|
||||
@@ -857,8 +873,8 @@ if [[ -n "$USE_S3_STORAGE_FOR_MERGE_TREE" ]] && [[ "$USE_S3_STORAGE_FOR_MERGE_TR
|
||||
ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID)
|
||||
SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192, storage_policy='s3_cache'"
|
||||
|
||||
clickhouse-client --max_estimated_execution_time 0 --max_execution_time "$MAX_EXECUTION_TIME" --max_memory_usage 25G --query "INSERT INTO test.hits SELECT * FROM datasets.hits_v1 SETTINGS enable_filesystem_cache_on_write_operations=0, max_insert_threads=16"
|
||||
clickhouse-client --max_estimated_execution_time 0 --max_execution_time "$MAX_EXECUTION_TIME" --max_memory_usage 25G --query "INSERT INTO test.visits SELECT * FROM datasets.visits_v1 SETTINGS enable_filesystem_cache_on_write_operations=0, max_insert_threads=16"
|
||||
clickhouse-client --max_estimated_execution_time 0 --max_execution_time "$MAX_EXECUTION_TIME" --max_memory_usage 25G --query "INSERT INTO test.hits SELECT * FROM datasets.hits_v1 SETTINGS enable_filesystem_cache_on_write_operations=0, max_insert_threads=$MAX_INSERT_THREADS"
|
||||
clickhouse-client --max_estimated_execution_time 0 --max_execution_time "$MAX_EXECUTION_TIME" --max_memory_usage 25G --query "INSERT INTO test.visits SELECT * FROM datasets.visits_v1 SETTINGS enable_filesystem_cache_on_write_operations=0, max_insert_threads=$MAX_INSERT_THREADS"
|
||||
clickhouse-client --query "DROP TABLE datasets.visits_v1 SYNC"
|
||||
clickhouse-client --query "DROP TABLE datasets.hits_v1 SYNC"
|
||||
# Note: `tpcds` and `tpch` databases are NOT dropped here as they are used by stateful tests.
|
||||
@@ -868,7 +884,7 @@ else
|
||||
fi
|
||||
clickhouse-client --query "CREATE TABLE test.hits_s3 (WatchID UInt64, JavaEnable UInt8, Title String, GoodEvent Int16, EventTime DateTime, EventDate Date, CounterID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RegionID UInt32, UserID UInt64, CounterClass Int8, OS UInt8, UserAgent UInt8, URL String, Referer String, URLDomain String, RefererDomain String, Refresh UInt8, IsRobot UInt8, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), ResolutionWidth UInt16, ResolutionHeight UInt16, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, FlashMinor2 String, NetMajor UInt8, NetMinor UInt8, UserAgentMajor UInt16, UserAgentMinor FixedString(2), CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, MobilePhone UInt8, MobilePhoneModel String, Params String, IPNetworkID UInt32, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, IsArtifical UInt8, WindowClientWidth UInt16, WindowClientHeight UInt16, ClientTimeZone Int16, ClientEventTime DateTime, SilverlightVersion1 UInt8, SilverlightVersion2 UInt8, SilverlightVersion3 UInt32, SilverlightVersion4 UInt16, PageCharset String, CodeVersion UInt32, IsLink UInt8, IsDownload UInt8, IsNotBounce UInt8, FUniqID UInt64, HID UInt32, IsOldCounter UInt8, IsEvent UInt8, IsParameter UInt8, DontCountHits UInt8, WithHash UInt8, HitColor FixedString(1), UTCEventTime DateTime, Age UInt8, Sex UInt8, Income UInt8, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), RemoteIP UInt32, RemoteIP6 FixedString(16), WindowName Int32, OpenerName Int32, HistoryLength Int16, BrowserLanguage FixedString(2), BrowserCountry FixedString(2), SocialNetwork String, SocialAction String, HTTPError UInt16, SendTiming Int32, DNSTiming Int32, ConnectTiming Int32, ResponseStartTiming Int32, ResponseEndTiming Int32, FetchTiming Int32, RedirectTiming Int32, DOMInteractiveTiming Int32, DOMContentLoadedTiming Int32, DOMCompleteTiming Int32, LoadEventStartTiming Int32, LoadEventEndTiming Int32, NSToDOMContentLoadedTiming Int32, FirstPaintTiming Int32, RedirectCount Int8, SocialSourceNetworkID UInt8, SocialSourcePage String, ParamPrice Int64, ParamOrderID String, ParamCurrency FixedString(3), ParamCurrencyID UInt16, GoalsReached Array(UInt32), OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, RefererHash UInt64, URLHash UInt64, CLID UInt32, YCLID UInt64, ShareService String, ShareURL String, ShareTitle String, ParsedParams Nested(Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), IslandID FixedString(16), RequestNum UInt32, RequestTry UInt8) ENGINE = MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192, storage_policy='s3_cache'"
|
||||
# AWS S3 is very inefficient, so increase memory even further:
|
||||
clickhouse-client --max_estimated_execution_time 0 --max_execution_time "$MAX_EXECUTION_TIME" --max_memory_usage 30G --max_memory_usage_for_user 30G --query "INSERT INTO test.hits_s3 SELECT * FROM test.hits SETTINGS enable_filesystem_cache_on_write_operations=0, write_through_distributed_cache=0, max_insert_threads=16"
|
||||
clickhouse-client --max_estimated_execution_time 0 --max_execution_time "$MAX_EXECUTION_TIME" --max_memory_usage 30G --max_memory_usage_for_user 30G --query "INSERT INTO test.hits_s3 SELECT * FROM test.hits SETTINGS enable_filesystem_cache_on_write_operations=0, write_through_distributed_cache=0, max_insert_threads=$MAX_INSERT_THREADS"
|
||||
|
||||
clickhouse-client --query "CREATE TABLE test.hits_parquet (Title String, URL String, Referer String, SearchPhrase String, WatchID UInt64, UserID UInt64, CounterID UInt32, EventTime DateTime, EventDate Date, RegionID UInt32, ClientIP UInt32) ENGINE = S3('https://clickhouse-public-datasets.s3.eu-central-1.amazonaws.com/hits_compatible/hits.parquet', NOSIGN)"
|
||||
|
||||
@@ -876,6 +892,7 @@ clickhouse-client --query "SHOW TABLES FROM test"
|
||||
clickhouse-client --query "SELECT count() FROM test.hits"
|
||||
clickhouse-client --query "SELECT count() FROM test.visits"
|
||||
"""
|
||||
command = f"MAX_INSERT_THREADS={max_insert_threads}\n" + command
|
||||
if with_s3_storage:
|
||||
command = "USE_S3_STORAGE_FOR_MERGE_TREE=1\n" + command
|
||||
# Run via Shell.run (bash, like Shell.check) but keep a log file so that
|
||||
@@ -1302,6 +1319,19 @@ clickhouse-client --query "SELECT count() FROM test.visits"
|
||||
result.set_label(Result.Label.LOG_CHECK)
|
||||
return results
|
||||
|
||||
# Exit codes coreutils `timeout` uses on expiry: 124 when the child dies on
|
||||
# the initial SIGTERM, 128+9 = 137 when a SIGTERM-ignoring child is escalated
|
||||
# with SIGKILL after --kill-after. Both mean the dump exceeded its cap.
|
||||
_TIMEOUT_EXIT_CODES = (124, 137)
|
||||
|
||||
def _annotate_timeout(self, res, stderr):
|
||||
# If `res` is one of timeout's expiry codes, prepend the "timed out"
|
||||
# annotation so a stuck dump is reported as a timeout rather than an
|
||||
# opaque non-zero failure. Returns the (possibly) annotated stderr.
|
||||
if res in self._TIMEOUT_EXIT_CODES:
|
||||
return f"timed out after {self.DUMP_SYSTEM_TABLE_TIMEOUT}s\n{stderr}"
|
||||
return stderr
|
||||
|
||||
def dump_system_tables(self):
|
||||
# Stop server so we can safely read data with clickhouse-local.
|
||||
# Why do we read data with clickhouse-local?
|
||||
@@ -1351,6 +1381,13 @@ clickhouse-client --query "SELECT count() FROM test.visits"
|
||||
#
|
||||
command_args_post = "-- --zookeeper.implementation=testkeeper"
|
||||
|
||||
# Bound each dump: a single hanging table (e.g. a huge minio_audit_logs
|
||||
# on s3 runs) must not consume the whole 9000s job budget. On expiry
|
||||
# timeout sends SIGTERM and returns 124; a dump that ignores SIGTERM is
|
||||
# escalated with SIGKILL after --kill-after and returns 128+9 = 137.
|
||||
# Both are timeouts, annotated by _annotate_timeout below.
|
||||
dump_prefix = f"timeout --signal=TERM --kill-after=60 {self.DUMP_SYSTEM_TABLE_TIMEOUT} "
|
||||
|
||||
Utils.clean_dir(p_temp_dir / "system_tables")
|
||||
res = True
|
||||
|
||||
@@ -1370,10 +1407,11 @@ clickhouse-client --query "SELECT count() FROM test.visits"
|
||||
for table in TABLES:
|
||||
path_arg = f" --path {self.run_path0}"
|
||||
res, stdout, stderr = Shell.get_res_stdout_stderr(
|
||||
f"cd {self.run_path0} && clickhouse local {command_args} {path_arg} --query \"select * from system.{table} into outfile '{temp_dir}/system_tables/{table}.tsv' format TSVWithNamesAndTypes\" {command_args_post}",
|
||||
f"cd {self.run_path0} && {dump_prefix}clickhouse local {command_args} {path_arg} --query \"select * from system.{table} into outfile '{temp_dir}/system_tables/{table}.tsv' format TSVWithNamesAndTypes\" {command_args_post}",
|
||||
verbose=True,
|
||||
)
|
||||
if res != 0:
|
||||
stderr = self._annotate_timeout(res, stderr)
|
||||
print(f"ERROR: Failed to dump system table: {table}\nError: {stderr}")
|
||||
scraping_system_table.set_info(
|
||||
f"Failed to dump system table: {table}\nError: {stderr}"
|
||||
@@ -1396,10 +1434,11 @@ clickhouse-client --query "SELECT count() FROM test.visits"
|
||||
if self.is_shared_catalog or self.is_db_replicated:
|
||||
path_arg = f" --path {self.run_path1}"
|
||||
res, stdout, stderr = Shell.get_res_stdout_stderr(
|
||||
f"cd {self.run_path1} && clickhouse local {command_args} {path_arg} --query \"select * from system.{table} into outfile '{temp_dir}/system_tables/{table}.1.tsv' format TSVWithNamesAndTypes\" {command_args_post}",
|
||||
f"cd {self.run_path1} && {dump_prefix}clickhouse local {command_args} {path_arg} --query \"select * from system.{table} into outfile '{temp_dir}/system_tables/{table}.1.tsv' format TSVWithNamesAndTypes\" {command_args_post}",
|
||||
verbose=True,
|
||||
)
|
||||
if res != 0:
|
||||
stderr = self._annotate_timeout(res, stderr)
|
||||
print(
|
||||
f"ERROR: Failed to dump system table from replica 1: {table}\nError: {stderr}"
|
||||
)
|
||||
@@ -1422,10 +1461,11 @@ clickhouse-client --query "SELECT count() FROM test.visits"
|
||||
if self.is_db_replicated:
|
||||
path_arg = f" --path {self.run_path2}"
|
||||
res, stdout, stderr = Shell.get_res_stdout_stderr(
|
||||
f"cd {self.run_path2} && clickhouse local {command_args} {path_arg} --query \"select * from system.{table} into outfile '{temp_dir}/system_tables/{table}.2.tsv' format TSVWithNamesAndTypes\" {command_args_post}",
|
||||
f"cd {self.run_path2} && {dump_prefix}clickhouse local {command_args} {path_arg} --query \"select * from system.{table} into outfile '{temp_dir}/system_tables/{table}.2.tsv' format TSVWithNamesAndTypes\" {command_args_post}",
|
||||
verbose=True,
|
||||
)
|
||||
if res != 0:
|
||||
stderr = self._annotate_timeout(res, stderr)
|
||||
print(
|
||||
f"ERROR: Failed to dump system table from replica 2: {table}\nError: {stderr}"
|
||||
)
|
||||
|
||||
@@ -7,6 +7,7 @@ import time
|
||||
import urllib.request
|
||||
from pathlib import Path
|
||||
|
||||
from ci.jobs.scripts.server_cleanup import kill_leftover_server_processes
|
||||
from ci.praktika.utils import Shell, Utils
|
||||
|
||||
repo_dir = Utils.cwd()
|
||||
@@ -67,6 +68,13 @@ class ClickHouseService:
|
||||
Path(self.log_dir).mkdir(parents=True, exist_ok=True)
|
||||
Path(self.pid_file).unlink(missing_ok=True)
|
||||
|
||||
# This context manager is entered once per job and starts a single
|
||||
# server on fixed shared ports. Right before that first start, clear any
|
||||
# clickhouse-server leaked by a previous CI job on this reused runner;
|
||||
# otherwise its held ports make this start fail
|
||||
# (see kill_leftover_server_processes).
|
||||
kill_leftover_server_processes()
|
||||
|
||||
argv = [
|
||||
str(Path(temp_dir) / "clickhouse-server"),
|
||||
"--config-file", self.config_file,
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import time
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
from ci.praktika.utils import Shell
|
||||
|
||||
|
||||
def download_and_extract_datasets(dataset_urls, target_dir, retries=5):
|
||||
"""Download dataset tarballs in parallel and extract them into target_dir.
|
||||
|
||||
Returns a list of error descriptions, one per dataset that could not be
|
||||
downloaded and extracted; an empty list means success. The caller can put
|
||||
the errors into Result.info so the failure is visible in the CI report
|
||||
without digging through the job log.
|
||||
|
||||
S3 sporadically returns transient errors (e.g. 503 Service Unavailable),
|
||||
and wget retries only network-level errors, not HTTP errors, so a single
|
||||
503 would otherwise fail the whole job. A failed attempt cannot be resumed
|
||||
mid-stream because the body is piped into tar, so rerun the whole pipeline
|
||||
on any failure - extraction into target_dir is idempotent.
|
||||
"""
|
||||
|
||||
def download(url):
|
||||
error = ""
|
||||
for attempt in range(1, retries + 1):
|
||||
exit_code, _, error = Shell.get_res_stdout_stderr(
|
||||
f'wget -nv -nd "{url}" -O- | tar --extract -C {target_dir}',
|
||||
verbose=True,
|
||||
)
|
||||
if exit_code == 0:
|
||||
return ""
|
||||
print(
|
||||
f"WARNING: Attempt [{attempt}/{retries}] to download [{url}] failed, err: [{error}]"
|
||||
)
|
||||
if attempt < retries:
|
||||
time.sleep(attempt * 30)
|
||||
return f"Failed to download [{url}] after [{retries}] attempts, last error: [{error}]"
|
||||
|
||||
print(f"Download datasets in parallel: [{len(dataset_urls)}]")
|
||||
with ThreadPoolExecutor(max_workers=len(dataset_urls)) as executor:
|
||||
return [error for error in executor.map(download, dataset_urls) if error]
|
||||
@@ -0,0 +1,497 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate the ClickHouse Cloud API reference documentation from the OpenAPI spec.
|
||||
|
||||
The Cloud API reference is backed by the live OpenAPI spec at
|
||||
`https://api.clickhouse.cloud/v1`. Individual endpoints can be in different
|
||||
maturity stages (GA, beta, private preview) or be deprecated, but Mintlify only
|
||||
allows a `tag` badge on navigation *groups*, not on individual OpenAPI operation
|
||||
entries. As a result a group badge could only be coarse, which is wrong whenever
|
||||
a group mixes beta and non-beta endpoints.
|
||||
|
||||
To get a per-endpoint badge in the sidebar, an operation needs its own `.mdx`
|
||||
page whose frontmatter carries the operation reference and a `tag` or
|
||||
`deprecated` flag. This script generates such a page for every operation that
|
||||
needs a badge; all other (GA) operations are referenced as plain
|
||||
`"METHOD /path"` strings in the navigation. The mix is deliberate: Mintlify
|
||||
bulk-appends every spec operation to a group that has an `openapi` field unless
|
||||
at least one of the group's pages is a string-form operation reference (MDX
|
||||
pages do not count), so an all-MDX navigation would render the whole tag tree a
|
||||
second time. The navigation subtree is written as a single fragment
|
||||
(`docs/products/cloud/api-reference/navigation.json`), and the consuming file
|
||||
(`products/cloud/navigation.json`, itself `$ref`-ed by `docs.json`) references
|
||||
that one definition via `$ref` so the navigation is never duplicated.
|
||||
|
||||
The navigation grouping mirrors the spec's `x-tagGroups`/`tags` (the same
|
||||
hierarchy the hosted Swagger view shows): each tag group is a top-level group;
|
||||
groups with more than one tag nest every tag as a subgroup, while single-tag
|
||||
groups list their operations directly.
|
||||
|
||||
Maturity is not a structured field in the spec; it is signalled in the operation
|
||||
`summary`/`description` free text ("This endpoint is in beta.", "private
|
||||
preview", ...) plus the standard OpenAPI `deprecated` boolean.
|
||||
`classify_operation` centralises that detection.
|
||||
|
||||
Usage:
|
||||
generate_cloud_api_reference.py [--spec URL_OR_PATH] [--docs-dir DIR]
|
||||
[--write | --check]
|
||||
|
||||
--write Write the generated pages, the navigation fragment and the $ref
|
||||
wiring (default).
|
||||
--check Exit non-zero if anything would change (for CI drift detection).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import urllib.request
|
||||
from pathlib import Path
|
||||
|
||||
DEFAULT_SPEC = "https://api.clickhouse.cloud/v1"
|
||||
API_REF_GROUP = "API reference"
|
||||
|
||||
# Directory (relative to the docs root) that holds the generated pages and the
|
||||
# single navigation fragment that defines the whole "API reference" group.
|
||||
API_REF_DIR = "products/cloud/api-reference"
|
||||
FRAGMENT_REL = f"{API_REF_DIR}/navigation.json"
|
||||
|
||||
# Pinned copy of the spec, committed to the repo. The navigation and the
|
||||
# generated pages reference this file rather than the live URL so that page
|
||||
# resolution is unambiguous (GT-translated copies of the spec live at
|
||||
# `<locale>/_specs/` and would otherwise compete for unqualified references)
|
||||
# and so that spec changes surface as reviewable diffs / CI drift.
|
||||
SPEC_PIN = "_specs/cloud-openapi.json"
|
||||
|
||||
# Files that consume the fragment via a `$ref` (relative to the consuming
|
||||
# file's own directory — Mintlify resolves `$ref` relative to the file it
|
||||
# appears in). `docs.json` is not a consumer: it reaches the group through its
|
||||
# `$ref` to `products/cloud/navigation.json`.
|
||||
CONSUMERS = {
|
||||
f"{Path(API_REF_DIR).parent}/navigation.json": "./api-reference/navigation.json",
|
||||
}
|
||||
|
||||
# HTTP methods an OpenAPI path item may carry (other keys such as `parameters`
|
||||
# are not operations). Operations are emitted in the spec's own path/method
|
||||
# order so the sidebar mirrors the spec.
|
||||
HTTP_METHODS = {"get", "put", "post", "delete", "options", "head", "patch", "trace"}
|
||||
|
||||
|
||||
def load_spec(source: str) -> dict:
|
||||
"""Load the OpenAPI spec from a URL or a local file path."""
|
||||
if re.match(r"^https?://", source):
|
||||
# Explicit timeout: this runs in the nightly workflow, and a hung TCP
|
||||
# connection would otherwise pin a runner until the workflow timeout.
|
||||
with urllib.request.urlopen(source, timeout=60) as response: # noqa: S310 (trusted URL)
|
||||
return json.loads(response.read())
|
||||
return json.loads(Path(source).read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def dir_slug(tag: str) -> str:
|
||||
"""Kebab-case a tag for use as a directory name (no camelCase splitting)."""
|
||||
return re.sub(r"[^a-z0-9]+", "-", tag.lower()).strip("-")
|
||||
|
||||
|
||||
def file_slug(operation_id: str) -> str:
|
||||
"""Kebab-case an operationId (camelCase aware) for use as a file name."""
|
||||
spaced = re.sub(r"(?<=[a-z0-9])(?=[A-Z])", " ", operation_id)
|
||||
return re.sub(r"[^a-z0-9]+", "-", spaced.lower()).strip("-")
|
||||
|
||||
|
||||
def classify_operation(operation: dict) -> tuple[str | None, bool]:
|
||||
"""Return (tag, deprecated) for an operation.
|
||||
|
||||
`tag` is the sidebar badge text ("Beta"/"Private preview") or None for GA.
|
||||
Maturity is detected from the free-text summary/description because the spec
|
||||
exposes no structured field for it.
|
||||
"""
|
||||
text = f"{operation.get('summary', '') or ''} {operation.get('description', '') or ''}".lower()
|
||||
tag = None
|
||||
if "private preview" in text:
|
||||
tag = "Private preview"
|
||||
elif re.search(r"\bbeta\b", text):
|
||||
tag = "Beta"
|
||||
return tag, bool(operation.get("deprecated"))
|
||||
|
||||
|
||||
def iter_operations(spec: dict):
|
||||
"""Yield operations in spec traversal order.
|
||||
|
||||
Yields dicts with: method, path, tag (OpenAPI tag), badge, deprecated,
|
||||
operation_id, summary.
|
||||
"""
|
||||
for path, methods in spec.get("paths", {}).items():
|
||||
for method, operation in methods.items():
|
||||
if method.lower() not in HTTP_METHODS or not isinstance(operation, dict):
|
||||
continue
|
||||
tags = operation.get("tags") or []
|
||||
badge, deprecated = classify_operation(operation)
|
||||
yield {
|
||||
"method": method.upper(),
|
||||
"path": path,
|
||||
"tag": tags[0] if tags else "Other",
|
||||
"badge": badge,
|
||||
"deprecated": deprecated,
|
||||
"operation_id": operation["operationId"],
|
||||
"summary": operation.get("summary") or operation["operationId"],
|
||||
"description": operation.get("description") or "",
|
||||
}
|
||||
|
||||
|
||||
def needs_page(entry: dict) -> bool:
|
||||
"""Whether an operation needs its own MDX page (i.e. carries a badge)."""
|
||||
return bool(entry["badge"] or entry["deprecated"])
|
||||
|
||||
|
||||
# Intra-spec cross-link, e.g. `[Get ClickPipe](#tag/ClickPipes/operation/clickPipeGet)`.
|
||||
# These anchors resolve on the single-page Swagger view only.
|
||||
SPEC_LINK_RE = re.compile(r"\]\(#tag/[^/)]+/operation/([A-Za-z0-9_-]+)\)")
|
||||
|
||||
|
||||
def operation_slug_map(spec: dict) -> dict:
|
||||
"""Map every operationId to the site path of its reference page.
|
||||
|
||||
Badge operations get a generated stub at `file_slug(operationId)`; GA
|
||||
operations get a Mintlify-generated page whose slug is the kebab-cased
|
||||
summary (e.g. "Get list of available organizations" becomes
|
||||
`organization/get-list-of-available-organizations`).
|
||||
"""
|
||||
slugs = {}
|
||||
for entry in iter_operations(spec):
|
||||
leaf = file_slug(entry["operation_id"]) if needs_page(entry) else dir_slug(entry["summary"])
|
||||
slugs[entry["operation_id"]] = f"/{API_REF_DIR}/{dir_slug(entry['tag'])}/{leaf}"
|
||||
return slugs
|
||||
|
||||
|
||||
def rewrite_spec_links(text: str, slugs: dict) -> str:
|
||||
"""Rewrite intra-spec Swagger anchors to the per-endpoint page paths.
|
||||
|
||||
`#tag/<Tag>/operation/<id>` anchors do not exist on the split
|
||||
per-endpoint pages, so descriptions copied into a page body would ship
|
||||
broken cross-links. Unknown operationIds fail the run rather than
|
||||
shipping a link to nowhere.
|
||||
"""
|
||||
def replace(match: re.Match) -> str:
|
||||
operation_id = match.group(1)
|
||||
if operation_id not in slugs:
|
||||
raise SystemExit(f"Description links to unknown operation: {operation_id}")
|
||||
return f"]({slugs[operation_id]})"
|
||||
|
||||
return SPEC_LINK_RE.sub(replace, text)
|
||||
|
||||
|
||||
def mdx_escape(text: str) -> str:
|
||||
"""Escape spec description text for use as MDX body content.
|
||||
|
||||
Bare `{`/`}` outside backtick code spans would be parsed as JSX
|
||||
expressions; inside code spans they are literal and must stay unescaped.
|
||||
The only raw HTML the descriptions use is `<br />`, which is valid JSX.
|
||||
"""
|
||||
parts = re.split(r"(`[^`]*`)", text)
|
||||
return "".join(
|
||||
part if part.startswith("`") else part.replace("{", "\\{").replace("}", "\\}")
|
||||
for part in parts
|
||||
)
|
||||
|
||||
|
||||
def page_content(entry: dict) -> str:
|
||||
"""Render the MDX page for a single operation.
|
||||
|
||||
The `openapi` reference is qualified with the pinned spec path: the repo
|
||||
also carries GT-translated spec copies (`<locale>/_specs/...`), and an
|
||||
unqualified `"METHOD /path"` matches those too, so Mintlify may resolve
|
||||
the page against a translated copy (descriptions rendered in the wrong
|
||||
language, or dropped).
|
||||
|
||||
The page-header description is hidden site-wide by a deliberate rule in
|
||||
`_site/styles.css`, so the maturity badge and the endpoint description
|
||||
(which leads with the disclaimer, e.g. "This endpoint is in beta. ...")
|
||||
are emitted as page body content instead, fenced by AUTOGENERATED
|
||||
markers.
|
||||
"""
|
||||
lines = [
|
||||
"---",
|
||||
f"title: {json.dumps(entry['summary'])}",
|
||||
f"openapi: {json.dumps('/' + SPEC_PIN + ' ' + entry['method'] + ' ' + entry['path'])}",
|
||||
]
|
||||
if entry["description"]:
|
||||
lines.append(f"description: {json.dumps(entry['description'])}")
|
||||
if entry["badge"]:
|
||||
lines.append(f"tag: {json.dumps(entry['badge'])}")
|
||||
if entry["deprecated"]:
|
||||
lines.append("deprecated: true")
|
||||
lines.append("---")
|
||||
lines.append("")
|
||||
body = []
|
||||
if entry["badge"]:
|
||||
# The wrapper's data attribute drives pure-CSS rules in
|
||||
# `_site/styles.css` that paint the badge as a pill next to the page
|
||||
# title (the slot the native deprecated pill uses) and hide this
|
||||
# in-body copy. The <Badge> itself is kept for contexts without the
|
||||
# stylesheet (markdown exports, `llms.txt`).
|
||||
color = {"Beta": "blue", "Private preview": "purple"}[entry["badge"]]
|
||||
body.append(
|
||||
f'<span data-endpoint-badge={json.dumps(entry["badge"])}>'
|
||||
f'<Badge color="{color}">{entry["badge"]}</Badge></span>'
|
||||
)
|
||||
if entry["description"]:
|
||||
body.append(mdx_escape(entry["description"]))
|
||||
if body:
|
||||
lines.append("{/* AUTOGENERATED_START */}")
|
||||
lines.append("")
|
||||
for block in body:
|
||||
lines.append(block)
|
||||
lines.append("")
|
||||
lines.append("{/* AUTOGENERATED_END */}")
|
||||
lines.append("")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def build_fragment(spec: dict, entries_by_tag: dict) -> dict:
|
||||
"""Build the "API reference" group object stored as the navigation fragment.
|
||||
|
||||
Each x-tagGroup becomes a top-level group. A group with more than one tag
|
||||
nests every tag as a subgroup (mirroring the hosted Swagger view, e.g.
|
||||
"Organization" > "Organization"); a single-tag group lists its operations
|
||||
directly.
|
||||
"""
|
||||
def page_ref(entry: dict) -> str:
|
||||
# String-form refs for GA operations: at least one of these must be
|
||||
# present so Mintlify skips bulk auto-population of the openapi group.
|
||||
if not needs_page(entry):
|
||||
return f"{entry['method']} {entry['path']}"
|
||||
return f"{API_REF_DIR}/{dir_slug(entry['tag'])}/{file_slug(entry['operation_id'])}"
|
||||
|
||||
def pages_for(tag: str) -> list:
|
||||
return [page_ref(e) for e in entries_by_tag.get(tag, [])]
|
||||
|
||||
groups = []
|
||||
covered = set()
|
||||
for tag_group in spec.get("x-tagGroups", []):
|
||||
tags = tag_group["tags"]
|
||||
covered.update(tags)
|
||||
if len(tags) == 1:
|
||||
pages = pages_for(tags[0])
|
||||
else:
|
||||
pages = [{"group": tag, "pages": pages_for(tag)} for tag in tags]
|
||||
groups.append({"group": tag_group["name"], "pages": pages})
|
||||
|
||||
orphan_tags = sorted(set(entries_by_tag) - covered)
|
||||
if orphan_tags:
|
||||
raise SystemExit(
|
||||
f"OpenAPI tags not present in x-tagGroups (would be dropped from nav): {orphan_tags}"
|
||||
)
|
||||
|
||||
# The fragment is the *pages array* only, not the group object: a JSON
|
||||
# file whose top level carries an `openapi` key is picked up by Mintlify's
|
||||
# OpenAPI-spec scan and produces a validation warning on every build. The
|
||||
# group object (with its `openapi` spec binding) lives inline in each
|
||||
# consumer, `$ref`-ing this array — the same pattern docs.json uses for
|
||||
# `redirects`.
|
||||
return groups
|
||||
|
||||
|
||||
def match_object_span(text: str, open_brace: int) -> int:
|
||||
"""Return the index just past the `}` matching the `{` at `open_brace`."""
|
||||
depth = 0
|
||||
in_string = False
|
||||
escaped = False
|
||||
for i in range(open_brace, len(text)):
|
||||
char = text[i]
|
||||
if in_string:
|
||||
if escaped:
|
||||
escaped = False
|
||||
elif char == "\\":
|
||||
escaped = True
|
||||
elif char == '"':
|
||||
in_string = False
|
||||
continue
|
||||
if char == '"':
|
||||
in_string = True
|
||||
elif char == "{":
|
||||
depth += 1
|
||||
elif char == "}":
|
||||
depth -= 1
|
||||
if depth == 0:
|
||||
return i + 1
|
||||
raise SystemExit("Unbalanced braces while locating the API reference group")
|
||||
|
||||
|
||||
def rewire_to_ref(text: str, ref_path: str) -> str:
|
||||
"""Point the consumer's "API reference" group at the pages fragment, once.
|
||||
|
||||
The target form is a one-line group object whose `pages` is a `$ref` to
|
||||
the fragment array. A textual splice (rather than re-serializing the whole
|
||||
file) keeps every unrelated byte unchanged. Handles the two prior states —
|
||||
a bare `{ "$ref": ... }` group (older wiring) and the original multi-line
|
||||
inline group — and is idempotent once the target form is in place.
|
||||
"""
|
||||
# The object form pins both the spec and the output directory of the
|
||||
# pages Mintlify generates for the string-form operation refs. The
|
||||
# explicit directory keeps those pages out of the default `api-reference`
|
||||
# namespace, which the locale navs' bare openapi groups also generate
|
||||
# into (from the un-pinned live spec) — first writer wins there, so the
|
||||
# English pages would otherwise randomly lose their pinned-spec content.
|
||||
wired = (
|
||||
f'{{ "group": "{API_REF_GROUP}", "openapi": '
|
||||
f'{{ "source": "{SPEC_PIN}", "directory": "{API_REF_DIR}" }}, '
|
||||
f'"pages": {{ "$ref": "{ref_path}" }} }}'
|
||||
)
|
||||
if wired in text:
|
||||
return text # already rewired
|
||||
prior_forms = [
|
||||
f'{{ "group": "{API_REF_GROUP}", "openapi": "{SPEC_PIN}", '
|
||||
f'"pages": {{ "$ref": "{ref_path}" }} }}',
|
||||
f'{{ "$ref": "{ref_path}" }}',
|
||||
]
|
||||
for prior in prior_forms:
|
||||
if prior in text:
|
||||
return text.replace(prior, wired)
|
||||
match = re.search(
|
||||
r'(?m)^(?P<indent> *)\{\n *"group": "' + re.escape(API_REF_GROUP) + r'",\n *"openapi":',
|
||||
text,
|
||||
)
|
||||
if match:
|
||||
indent = match.group("indent")
|
||||
start = match.start() + len(indent) # position of the opening '{'
|
||||
end = match_object_span(text, start)
|
||||
return text[:start] + wired + text[end:]
|
||||
raise SystemExit(
|
||||
f'Could not find the "{API_REF_GROUP}" openapi group nor an existing '
|
||||
f'$ref "{ref_path}" to rewire'
|
||||
)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--spec", default=DEFAULT_SPEC, help="OpenAPI spec URL or file path")
|
||||
parser.add_argument("--docs-dir", default="docs", help="Path to the docs root")
|
||||
mode = parser.add_mutually_exclusive_group()
|
||||
mode.add_argument("--write", action="store_true", help="Write changes (default)")
|
||||
mode.add_argument("--check", action="store_true", help="Fail if anything would change")
|
||||
args = parser.parse_args()
|
||||
check_only = args.check
|
||||
|
||||
docs_dir = Path(args.docs_dir)
|
||||
api_ref_dir = docs_dir / API_REF_DIR
|
||||
|
||||
spec = load_spec(args.spec)
|
||||
op_slugs = operation_slug_map(spec)
|
||||
|
||||
# Group operations by OpenAPI tag, preserving spec traversal order.
|
||||
entries_by_tag: dict[str, list] = {}
|
||||
expected_files: dict[Path, str] = {}
|
||||
badge_counts = {"Beta": 0, "Private preview": 0}
|
||||
deprecated_count = 0
|
||||
total_operations = 0
|
||||
for entry in iter_operations(spec):
|
||||
total_operations += 1
|
||||
entry["description"] = rewrite_spec_links(entry["description"], op_slugs)
|
||||
entries_by_tag.setdefault(entry["tag"], []).append(entry)
|
||||
if entry["badge"]:
|
||||
badge_counts[entry["badge"]] += 1
|
||||
if entry["deprecated"]:
|
||||
deprecated_count += 1
|
||||
if not needs_page(entry):
|
||||
continue
|
||||
rel = Path(API_REF_DIR) / dir_slug(entry["tag"]) / f"{file_slug(entry['operation_id'])}.mdx"
|
||||
if rel in expected_files:
|
||||
raise SystemExit(f"Duplicate generated page path: {rel}")
|
||||
expected_files[rel] = page_content(entry)
|
||||
|
||||
# The navigation fragment is the single source of truth for the group.
|
||||
fragment = build_fragment(spec, entries_by_tag)
|
||||
expected_files[Path(FRAGMENT_REL)] = json.dumps(fragment, indent=2, ensure_ascii=False) + "\n"
|
||||
|
||||
# Pin the spec the navigation and pages were generated from, so that page
|
||||
# resolution never falls back to a translated locale copy and API changes
|
||||
# show up as reviewable diffs. GA operations have no stub (their pages are
|
||||
# generated by Mintlify from the string refs), so their description is
|
||||
# injected as `x-mint.content` — Mintlify appends it as page body content,
|
||||
# which is the only visible place for it given that the page-header
|
||||
# description is hidden site-wide by `_site/styles.css`. Swagger-only
|
||||
# anchors are rewritten to the per-endpoint pages here as well.
|
||||
for path_item in spec.get("paths", {}).values():
|
||||
for method, operation in path_item.items():
|
||||
if method not in HTTP_METHODS or not isinstance(operation, dict):
|
||||
continue
|
||||
entry_badge, entry_deprecated = classify_operation(operation)
|
||||
description = operation.get("description")
|
||||
if description and not (entry_badge or entry_deprecated):
|
||||
x_mint = operation.setdefault("x-mint", {})
|
||||
x_mint["content"] = mdx_escape(rewrite_spec_links(description, op_slugs))
|
||||
# Defuse secret-shaped example values: the spec illustrates Slack webhook
|
||||
# fields with placeholder URLs (`T00000000/B00000000/XXXX...`) that still
|
||||
# match GitHub's secret-scanning pattern and block every push containing
|
||||
# the pinned spec.
|
||||
spec_text = json.dumps(spec, indent=2, ensure_ascii=False) + "\n"
|
||||
spec_text = re.sub(
|
||||
r"https://hooks\.slack\.com/services/[A-Za-z0-9/]+",
|
||||
"https://hooks.slack.com/services/EXAMPLE/WEBHOOK/URL",
|
||||
spec_text,
|
||||
)
|
||||
expected_files[Path(SPEC_PIN)] = spec_text
|
||||
|
||||
# Determine page/fragment changes (create/update/delete).
|
||||
changes = []
|
||||
for rel, content in sorted(expected_files.items()):
|
||||
path = docs_dir / rel
|
||||
current = path.read_text(encoding="utf-8") if path.exists() else None
|
||||
if current != content:
|
||||
changes.append(("update" if current is not None else "create", rel))
|
||||
if api_ref_dir.exists():
|
||||
for path in api_ref_dir.rglob("*.mdx"):
|
||||
if path.relative_to(docs_dir) not in expected_files:
|
||||
changes.append(("delete", path.relative_to(docs_dir)))
|
||||
|
||||
# Rewire the consuming files to the fragment via $ref (idempotent).
|
||||
consumer_updates = {}
|
||||
for rel, ref_path in CONSUMERS.items():
|
||||
path = docs_dir / rel
|
||||
text = path.read_text(encoding="utf-8")
|
||||
new_text = rewire_to_ref(text, ref_path)
|
||||
if new_text != text:
|
||||
json.loads(new_text) # fail early if the splice produced invalid JSON
|
||||
consumer_updates[path] = new_text
|
||||
changes.append(("rewire", rel))
|
||||
|
||||
total_pages = len(expected_files) - 2 # minus the fragment and the pinned spec
|
||||
print(
|
||||
f"{total_operations} operations ({total_pages} badge pages) | "
|
||||
f"Beta {badge_counts['Beta']} | "
|
||||
f"Private preview {badge_counts['Private preview']} | deprecated {deprecated_count}"
|
||||
)
|
||||
|
||||
if check_only:
|
||||
if changes:
|
||||
for kind, rel in changes:
|
||||
print(f" {kind}: {rel}")
|
||||
print(f"Drift detected: {len(changes)} change(s)")
|
||||
return 1
|
||||
print("No drift.")
|
||||
return 0
|
||||
|
||||
# Write pages + fragment.
|
||||
for rel, content in expected_files.items():
|
||||
path = docs_dir / rel
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(content, encoding="utf-8")
|
||||
# Remove stale generated pages and prune empty directories.
|
||||
if api_ref_dir.exists():
|
||||
for path in sorted(api_ref_dir.rglob("*.mdx")):
|
||||
if path.relative_to(docs_dir) not in expected_files:
|
||||
path.unlink()
|
||||
for path in sorted(api_ref_dir.rglob("*"), reverse=True):
|
||||
if path.is_dir() and not any(path.iterdir()):
|
||||
path.rmdir()
|
||||
# Rewire consumers.
|
||||
for path, new_text in consumer_updates.items():
|
||||
path.write_text(new_text, encoding="utf-8")
|
||||
|
||||
print(f"Wrote {total_pages} pages + fragment; rewired {len(consumer_updates)} consumer(s)")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -111,7 +111,12 @@ def collect_snippet_anchors(text, docs_root, page_dir, seen):
|
||||
seen.add(sp)
|
||||
with open(sp, "r", encoding="utf-8", errors="replace") as f:
|
||||
snip = f.read()
|
||||
# Never advertise ids that only occur inside code samples or MDX
|
||||
# comments -- they don't render, so they are not fragment targets.
|
||||
snip = strip_code_blocks(strip_mdx_comments(snip))
|
||||
ids.update(m.group(1) or m.group(2) for m in ANCHOR_ID_RE.finditer(snip))
|
||||
# Element ids (e.g. `<Step id="...">`) are fragment targets too.
|
||||
ids.update(m.group(1) for m in ELEMENT_ID_RE.finditer(snip))
|
||||
ids |= collect_snippet_anchors(snip, docs_root, os.path.dirname(sp), seen)
|
||||
return ids
|
||||
|
||||
@@ -191,22 +196,34 @@ def materialize_redirects(docs_root, dest):
|
||||
continue
|
||||
if any(os.path.exists(os.path.join(dest, src + e)) for e in ("", ".mdx", ".md")):
|
||||
continue # a real page already covers this path
|
||||
# For English sources, seed the placeholder with the destination's anchor
|
||||
# ids (only `<a id>` tags, not its content, so we don't re-check the
|
||||
# destination's own links) -- this makes a fragment link to the redirect
|
||||
# source (e.g. .../oss#install-clickhouse) resolve, since Mintlify applies
|
||||
# the fragment on the destination. Locale sources get an empty placeholder
|
||||
# (their destinations are checked for page-existence only; see below).
|
||||
# For English sources, seed the placeholder with the destination's
|
||||
# fragment ids (written as `<a id>` stubs only, not its content, so we
|
||||
# don't re-check the destination's own links) -- this makes a fragment
|
||||
# link to the redirect source (e.g. .../oss#install-clickhouse)
|
||||
# resolve, since Mintlify applies the fragment on the destination. The
|
||||
# ids are collected from the original source with the same hygiene as
|
||||
# the page pass: heading `{#anchor}`s, element ids, and anchors
|
||||
# inherited from imported snippets, with code samples and MDX comments
|
||||
# stripped first so ids that never render are not advertised. Locale
|
||||
# sources get an empty placeholder (their destinations are checked for
|
||||
# page-existence only; see below).
|
||||
anchors = set()
|
||||
if src.split("/")[0] not in LOCALE_PREFIXES:
|
||||
dest_url = (r.get("destination") or "").strip()
|
||||
if dest_url.startswith("/"):
|
||||
for e in (".mdx", ".md"):
|
||||
cand = os.path.join(dest, dest_url.lstrip("/") + e)
|
||||
cand = os.path.join(docs_root, dest_url.lstrip("/") + e)
|
||||
if os.path.isfile(cand):
|
||||
with open(cand, encoding="utf-8", errors="replace") as f:
|
||||
anchors = {m.group(1) or m.group(2)
|
||||
for m in ANCHOR_ID_RE.finditer(f.read())}
|
||||
raw = f.read()
|
||||
text = strip_code_blocks(strip_mdx_comments(raw))
|
||||
anchors = {m.group(1) or m.group(2)
|
||||
for m in ANCHOR_ID_RE.finditer(text)}
|
||||
# Element ids (e.g. `<Step id="...">`) too.
|
||||
anchors |= {m.group(1) for m in ELEMENT_ID_RE.finditer(text)}
|
||||
# Anchors inherited from imported snippets.
|
||||
anchors |= collect_snippet_anchors(
|
||||
text, docs_root, os.path.dirname(cand), set())
|
||||
break
|
||||
p = os.path.join(dest, src + ".mdx")
|
||||
os.makedirs(os.path.dirname(p) or ".", exist_ok=True)
|
||||
@@ -243,7 +260,13 @@ def build_tree(docs_root, dest):
|
||||
anchors = collect_snippet_anchors(raw, docs_root, root, set())
|
||||
# Non-<a> element ids (e.g. <div id="...">) are valid fragment
|
||||
# targets too, but lychee doesn't extract them -- add them here.
|
||||
anchors |= {m.group(1) for m in ELEMENT_ID_RE.finditer(raw)}
|
||||
# Scan with code samples and MDX comments stripped (same
|
||||
# hygiene as the snippet and redirect paths), so ids that never
|
||||
# render are not advertised.
|
||||
anchors |= {
|
||||
m.group(1)
|
||||
for m in ELEMENT_ID_RE.finditer(strip_code_blocks(strip_mdx_comments(raw)))
|
||||
}
|
||||
if anchors:
|
||||
text += "\n\n" + "".join(
|
||||
f'<a id="{a}"></a>\n' for a in sorted(anchors)
|
||||
|
||||
@@ -21,7 +21,8 @@ The check definitions are declared once here and shared with the Praktika job
|
||||
(``ci/jobs/docs_job_mintlify.py``), which imports them. The aggregator job runs
|
||||
the full set (``DEFAULT_CHECKS`` plus, when a locale tree changed,
|
||||
``LOCALE_CHECKS``); this client driver runs only ``CLIENT_CHECKS`` -- the checks
|
||||
a consuming repo can act on for the slice it owns (validate + internal links).
|
||||
a consuming repo can act on for the slice it owns (default-locale snippet
|
||||
imports, validate, and internal links).
|
||||
Redirects, external links, and the locale checks are aggregator-global and are
|
||||
left to the aggregator job. With ``--scoped``, ``mint validate`` is replaced by
|
||||
``scoped_validate.mjs`` over the replaced folders plus every out-of-scope file
|
||||
@@ -60,7 +61,12 @@ VALIDATE_CHECK = ("Validate docs.json", f"{MINT} validate")
|
||||
INTERNAL_LINKS_CHECK = ("Check internal links and anchors", f"{LYCHEE} --mode links .")
|
||||
REDIRECTS_CHECK = ("Check redirects", f"{LYCHEE} --mode redirects .")
|
||||
EXTERNAL_LINKS_CHECK = ("Check external links (warnings)", f"{LYCHEE} --mode external .")
|
||||
SNIPPET_IMPORTS_CHECK = (
|
||||
"Check snippet imports",
|
||||
"python3 ../ci/jobs/scripts/docs/snippet_component_imports_check.py .",
|
||||
)
|
||||
DEFAULT_CHECKS = [
|
||||
SNIPPET_IMPORTS_CHECK,
|
||||
VALIDATE_CHECK,
|
||||
INTERNAL_LINKS_CHECK,
|
||||
REDIRECTS_CHECK,
|
||||
@@ -68,13 +74,14 @@ DEFAULT_CHECKS = [
|
||||
]
|
||||
|
||||
# The subset a consuming client repo (e.g. clickhouse-connect) runs: only the
|
||||
# checks that validate the slice it owns. `mint validate` proves its docs.json
|
||||
# checks that validate the slice it owns. The snippet check rejects missing
|
||||
# file-local imports in default-locale snippets, `mint validate` proves its docs.json
|
||||
# fragment and frontmatter are well-formed, and the internal-links check proves
|
||||
# its own links and anchors resolve. Redirects, external links, and the locale
|
||||
# checks are aggregator-global concerns a client neither owns nor can fix (they
|
||||
# depend on the site-wide redirects map, third-party sites, and the translated
|
||||
# trees), so the client driver does not run them.
|
||||
CLIENT_CHECKS = [VALIDATE_CHECK, INTERNAL_LINKS_CHECK]
|
||||
CLIENT_CHECKS = [SNIPPET_IMPORTS_CHECK, VALIDATE_CHECK, INTERNAL_LINKS_CHECK]
|
||||
|
||||
|
||||
# Swaps the full `mint validate` (which MDX-parses the whole site, ~13 minutes)
|
||||
@@ -240,4 +247,4 @@ def main(argv=None):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
sys.exit(main())
|
||||
|
||||
@@ -0,0 +1,247 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Validate imports inside default-locale Mintlify snippets.
|
||||
|
||||
Every snippet resolves its own imports. A page-level import is not visible to
|
||||
a snippet imported by that page, and the same rule applies recursively when a
|
||||
snippet renders another snippet. This check requires every non-built-in MDX
|
||||
tag to have a local import and prevents snippets from importing the custom
|
||||
Image component, which can collide with a page-level Image import.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import re
|
||||
from collections import defaultdict
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
IMPORT_RE = re.compile(
|
||||
r"^\s*import\s+(?P<spec>.+?)\s+from\s+['\"](?P<src>[^'\"]+)['\"]\s*;?\s*$",
|
||||
re.MULTILINE,
|
||||
)
|
||||
TAG_RE = re.compile(r"<\/?([A-Z][A-Za-z0-9_]*)\b")
|
||||
IMG_SRC_RE = re.compile(r"<img\b[^>]*\bsrc=['\"]([^'\"]+)['\"]", re.IGNORECASE)
|
||||
DECLARED_EXPORT_RE = re.compile(
|
||||
r"\bexport\s+(?:default\s+)?(?:const|let|var|function|class)\s+"
|
||||
r"([A-Z][A-Za-z0-9_]*)"
|
||||
)
|
||||
TRANSLATION_DIRS = {"ar", "es", "fr", "ja", "ko", "pt-BR", "ru", "zh"}
|
||||
MINTLIFY_BUILTINS = {
|
||||
"Accordion",
|
||||
"CodeBlock",
|
||||
"Frame",
|
||||
"Info",
|
||||
"Note",
|
||||
"Step",
|
||||
"Steps",
|
||||
"Tab",
|
||||
"Tabs",
|
||||
"Tip",
|
||||
"Warning",
|
||||
}
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Binding:
|
||||
exported: str
|
||||
local: str
|
||||
source: str
|
||||
|
||||
|
||||
def without_fenced_code(text: str) -> str:
|
||||
"""Blank fenced code while retaining line boundaries for import parsing."""
|
||||
output: list[str] = []
|
||||
fence: str | None = None
|
||||
for line in text.splitlines(keepends=True):
|
||||
marker = re.match(r"^\s*(`{3,}|~{3,})", line)
|
||||
if marker:
|
||||
char = marker.group(1)[0]
|
||||
if fence is None:
|
||||
fence = char
|
||||
elif fence == char:
|
||||
fence = None
|
||||
output.append("\n" if line.endswith("\n") else "")
|
||||
elif fence is None:
|
||||
output.append(line)
|
||||
else:
|
||||
output.append("\n" if line.endswith("\n") else "")
|
||||
return "".join(output)
|
||||
|
||||
|
||||
def parse_bindings(text: str) -> list[Binding]:
|
||||
bindings: list[Binding] = []
|
||||
for match in IMPORT_RE.finditer(without_fenced_code(text)):
|
||||
spec = match.group("spec").strip()
|
||||
source = match.group("src")
|
||||
if spec.startswith("{") and spec.endswith("}"):
|
||||
for piece in spec[1:-1].split(","):
|
||||
piece = piece.strip()
|
||||
if not piece:
|
||||
continue
|
||||
names = re.split(r"\s+as\s+", piece, maxsplit=1)
|
||||
bindings.append(Binding(names[0], names[-1], source))
|
||||
elif spec.startswith("*"):
|
||||
local = re.split(r"\s+as\s+", spec, maxsplit=1)[-1]
|
||||
bindings.append(Binding(Path(source).stem, local, source))
|
||||
elif re.fullmatch(r"[A-Za-z_$][A-Za-z0-9_$]*", spec):
|
||||
bindings.append(Binding(Path(source).stem, spec, source))
|
||||
return bindings
|
||||
|
||||
|
||||
def is_nested_snippet_source(source: str) -> bool:
|
||||
return source.startswith("/snippets/") and source.endswith((".md", ".mdx"))
|
||||
|
||||
|
||||
def is_translation_source(source: str) -> bool:
|
||||
parts = Path(source.lstrip("/")).parts
|
||||
return len(parts) > 1 and parts[0] == "snippets" and parts[1] in TRANSLATION_DIRS
|
||||
|
||||
|
||||
def find_page_import_collisions(docs_root: Path) -> list[str]:
|
||||
"""Find bindings Mint would declare twice when expanding nested snippets."""
|
||||
errors: list[str] = []
|
||||
bindings_cache: dict[Path, list[Binding]] = {}
|
||||
|
||||
def bindings_for(path: Path) -> list[Binding]:
|
||||
if path not in bindings_cache:
|
||||
bindings_cache[path] = parse_bindings(
|
||||
path.read_text(encoding="utf-8", errors="ignore")
|
||||
)
|
||||
return bindings_cache[path]
|
||||
|
||||
def collect_bindings(
|
||||
path: Path,
|
||||
visited: set[Path],
|
||||
declarations: dict[str, list[tuple[Path, str]]],
|
||||
) -> None:
|
||||
if path in visited or not path.is_file():
|
||||
return
|
||||
visited.add(path)
|
||||
for binding in bindings_for(path):
|
||||
declarations[binding.local].append((path, binding.source))
|
||||
if is_nested_snippet_source(binding.source):
|
||||
collect_bindings(
|
||||
docs_root / binding.source.lstrip("/"),
|
||||
visited,
|
||||
declarations,
|
||||
)
|
||||
|
||||
for path in sorted(docs_root.rglob("*")):
|
||||
if path.suffix not in {".md", ".mdx"}:
|
||||
continue
|
||||
relative_path = path.relative_to(docs_root)
|
||||
if (
|
||||
relative_path.parts[0] in TRANSLATION_DIRS
|
||||
or relative_path.parts[0] == "snippets"
|
||||
):
|
||||
continue
|
||||
|
||||
declarations: dict[str, list[tuple[Path, str]]] = defaultdict(list)
|
||||
collect_bindings(path, set(), declarations)
|
||||
for local, occurrences in sorted(declarations.items()):
|
||||
if len(occurrences) < 2:
|
||||
continue
|
||||
details = "; ".join(
|
||||
f"{owner.relative_to(docs_root).as_posix()} imports {source}"
|
||||
for owner, source in occurrences
|
||||
)
|
||||
errors.append(
|
||||
f"{relative_path.as_posix()}: duplicate import binding {local}: "
|
||||
f"{details}"
|
||||
)
|
||||
|
||||
return errors
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("docs_root", nargs="?", default=".")
|
||||
args = parser.parse_args()
|
||||
|
||||
docs_root = Path(args.docs_root).resolve()
|
||||
snippets_root = docs_root / "snippets"
|
||||
if not snippets_root.is_dir():
|
||||
parser.error(f"No snippets directory under docs root: {docs_root}")
|
||||
|
||||
errors: list[str] = []
|
||||
checked = 0
|
||||
checked_images = 0
|
||||
|
||||
for path in sorted(snippets_root.rglob("*")):
|
||||
if path.suffix not in {".md", ".mdx"}:
|
||||
continue
|
||||
relative_path = path.relative_to(snippets_root)
|
||||
if (
|
||||
"components" in relative_path.parts
|
||||
or relative_path.parts[0] in TRANSLATION_DIRS
|
||||
):
|
||||
continue
|
||||
|
||||
checked += 1
|
||||
text = path.read_text(encoding="utf-8", errors="ignore")
|
||||
visible_text = without_fenced_code(text)
|
||||
bindings = parse_bindings(text)
|
||||
imported = {binding.local for binding in bindings}
|
||||
declared = set(DECLARED_EXPORT_RE.findall(visible_text))
|
||||
|
||||
if any(
|
||||
binding.source == "/snippets/components/Image.jsx"
|
||||
for binding in bindings
|
||||
):
|
||||
errors.append(
|
||||
f"{relative_path.as_posix()}: use <Frame><img ... /></Frame> "
|
||||
"instead of importing the custom Image component"
|
||||
)
|
||||
|
||||
used_tags = set(TAG_RE.findall(visible_text))
|
||||
missing = sorted(used_tags - imported - declared - MINTLIFY_BUILTINS)
|
||||
if missing:
|
||||
errors.append(
|
||||
f"{relative_path.as_posix()}: missing local import(s) for "
|
||||
+ ", ".join(missing)
|
||||
)
|
||||
|
||||
for source in IMG_SRC_RE.findall(visible_text):
|
||||
if not source.startswith("/"):
|
||||
continue
|
||||
checked_images += 1
|
||||
target = docs_root / source.lstrip("/")
|
||||
if not target.is_file():
|
||||
errors.append(
|
||||
f"{relative_path.as_posix()}: local image does not exist: {source}"
|
||||
)
|
||||
|
||||
for binding in bindings:
|
||||
if not is_nested_snippet_source(binding.source):
|
||||
continue
|
||||
target = docs_root / binding.source.lstrip("/")
|
||||
if not target.is_file():
|
||||
errors.append(
|
||||
f"{relative_path.as_posix()}: nested snippet import does not exist: "
|
||||
f"{binding.source}"
|
||||
)
|
||||
if is_translation_source(binding.source):
|
||||
errors.append(
|
||||
f"{relative_path.as_posix()}: default-locale snippet imports translated "
|
||||
f"snippet {binding.source}"
|
||||
)
|
||||
|
||||
errors.extend(find_page_import_collisions(docs_root))
|
||||
|
||||
if errors:
|
||||
print(f"Found {len(errors)} snippet import error(s):")
|
||||
for error in errors:
|
||||
print(f" - {error}")
|
||||
return 1
|
||||
|
||||
print(
|
||||
f"Checked imports in {checked} snippet file(s) and "
|
||||
f"{checked_images} local image reference(s): OK"
|
||||
)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -105,6 +105,104 @@ class Targeting:
|
||||
return candidate
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def is_functional_test_file(fpath: str) -> bool:
|
||||
"""A changed path that is itself a stateless functional test source file."""
|
||||
fpath = fpath.removeprefix("./")
|
||||
return fpath.startswith("tests/queries/0_stateless/") and Path(fpath).is_file()
|
||||
|
||||
@staticmethod
|
||||
def is_integration_test_file(fpath: str) -> bool:
|
||||
"""A changed path that is itself an integration test module."""
|
||||
fpath = fpath.removeprefix("./")
|
||||
return (
|
||||
fpath.startswith("tests/integration/test_")
|
||||
and not fpath.startswith("tests/integration/test_e2e_")
|
||||
and Path(fpath).name.startswith("test")
|
||||
and fpath.endswith(".py")
|
||||
and Path(fpath).is_file()
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def is_ci_job_script(fpath: str) -> bool:
|
||||
"""A changed path under the CI job scripts themselves.
|
||||
|
||||
Tolerated alongside test-file changes by the batch-skip check in
|
||||
`functional_tests.py` / `integration_test_job.py`: such a change is
|
||||
exercised identically by every batch, so a batch that does not
|
||||
contain the changed test file is still a valid check of the
|
||||
(possibly changed) job script.
|
||||
"""
|
||||
fpath = fpath.removeprefix("./")
|
||||
return fpath.startswith("ci/jobs/") and Path(fpath).is_file()
|
||||
|
||||
@classmethod
|
||||
def functional_test_hash_batch_file(cls, fpath: str):
|
||||
"""Return the on-disk stateless test filename (with extension) that
|
||||
`clickhouse-test --run-by-hash-*` uses to bucket the given changed path,
|
||||
or `None` if it cannot be resolved to a concrete test source file.
|
||||
|
||||
`clickhouse-test`'s `is_test_from_dir`/`get_selected_tests` only look
|
||||
at files directly inside the suite root (`os.listdir`, not
|
||||
recursive), so a file nested in a subdirectory - e.g.
|
||||
`tests/queries/0_stateless/helpers/httpclient.py` or
|
||||
`tests/queries/0_stateless/data_avro/generate_avro.sh` - is never a
|
||||
test case there, no matter its extension. Hashing such a nested
|
||||
file's basename would fabricate a bucket assignment that does not
|
||||
correspond to how `--run-by-hash-*` actually splits the suite, so
|
||||
return `None` (the caller then conservatively runs the batch) unless
|
||||
the file's parent directory is exactly the suite root.
|
||||
"""
|
||||
test_dir = Path("tests/queries/0_stateless")
|
||||
path = Path(fpath.removeprefix("./"))
|
||||
if path.parent != test_dir:
|
||||
return None
|
||||
fname = path.name
|
||||
for ext in cls._TEST_FILE_EXTENSIONS:
|
||||
if fname.endswith(ext):
|
||||
return fname
|
||||
base_name = cls._derive_test_name(fpath)
|
||||
if base_name is None:
|
||||
return None
|
||||
for ext in cls._TEST_FILE_EXTENSIONS:
|
||||
if (test_dir / f"{base_name}{ext}").is_file():
|
||||
return f"{base_name}{ext}"
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def is_sequential_functional_test(test_source_file: str) -> bool:
|
||||
"""True if the on-disk stateless test file (e.g. `00001_x.sql`, as
|
||||
returned by `functional_test_hash_batch_file`) is tagged `no-parallel`
|
||||
or `sequential`.
|
||||
|
||||
Mirrors `clickhouse-test`'s own `is_sequential_test`/tag-parsing logic,
|
||||
so the batch-skip check in `functional_tests.py` can tell whether a
|
||||
changed test would even be selected by a job invoked with the
|
||||
`parallel`/`sequential` runner option (`--no-sequential`/`--no-parallel`),
|
||||
which splits the suite into two independently hash-batched job flavors.
|
||||
"""
|
||||
if test_source_file.endswith(".sql") or test_source_file.endswith(".sql.j2"):
|
||||
comment_sign = "--"
|
||||
elif test_source_file.endswith((".sh", ".py", ".expect")):
|
||||
comment_sign = "#"
|
||||
else:
|
||||
return False
|
||||
path = Path("tests/queries/0_stateless") / test_source_file
|
||||
try:
|
||||
with path.open("r", encoding="utf-8", errors="ignore") as f:
|
||||
for line in f:
|
||||
line = line.rstrip("\n")
|
||||
if not line.startswith(comment_sign):
|
||||
continue
|
||||
rest = line[len(comment_sign):].lstrip()
|
||||
if not rest.startswith("Tags:"):
|
||||
continue
|
||||
tags = {t.strip() for t in rest[len("Tags:"):].split(",")}
|
||||
return "no-parallel" in tags or "sequential" in tags
|
||||
except OSError:
|
||||
return False
|
||||
return False
|
||||
|
||||
def get_changed_tests(self):
|
||||
# TODO: add support for integration tests
|
||||
result = set()
|
||||
|
||||
@@ -51,6 +51,23 @@
|
||||
<max_threads>
|
||||
<max>128</max>
|
||||
</max_threads>
|
||||
|
||||
<!--
|
||||
Test-only fault-injection delays. TCPHandler runs them via
|
||||
std::this_thread::sleep_for, which does not observe query cancellation, so a
|
||||
fuzzed multi-minute value keeps the connection thread blocked past the 90s
|
||||
hung-check window on a cancelled query. Cap them: legit stateless uses are
|
||||
<= 100ms, and clamping a fuzzed value to 1s cannot trip the hung check.
|
||||
-->
|
||||
<sleep_in_send_data_ms>
|
||||
<max>1000</max>
|
||||
</sleep_in_send_data_ms>
|
||||
<sleep_in_send_tables_status_ms>
|
||||
<max>1000</max>
|
||||
</sleep_in_send_tables_status_ms>
|
||||
<sleep_after_receiving_query_ms>
|
||||
<max>1000</max>
|
||||
</sleep_after_receiving_query_ms>
|
||||
</constraints>
|
||||
|
||||
<!-- Server-side backstop: keeps max_parser_backtracks `changed` so a server-side
|
||||
|
||||
@@ -134,9 +134,12 @@ function fuzz
|
||||
--logger.log=server.log 2>&1 | tee -a stderr.log >> server.log 2>&1
|
||||
exit "${PIPESTATUS[0]}" ) &
|
||||
server_bg_pid=$!
|
||||
for _ in {1..30}
|
||||
# A debug or sanitizer server can take over a minute from fork to listening;
|
||||
# give it the same 120s budget as `wait_ready` in `clickhouse_proc.py`.
|
||||
# A dead server is detected early, so the deadline only affects hung servers.
|
||||
for _ in {1..120}
|
||||
do
|
||||
if clickhouse-client --receive_timeout=5 --query "select 1"
|
||||
if clickhouse-client --receive_timeout=5 --query "select 1" || ! kill -0 $server_bg_pid
|
||||
then
|
||||
break
|
||||
fi
|
||||
@@ -232,57 +235,104 @@ function fuzz
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Allow the fuzzer to run for some time, giving it a grace period of 5m to finish once the time
|
||||
# out triggers. After that, it'll send a SIGKILL to the fuzzer to make sure it finishes within
|
||||
# a reasonable time.
|
||||
# Bound the parser/AST recursion on the client command line, matching the server-side caps in
|
||||
# limit-recursion-settings.xml. The client parses every corpus query locally, and a corpus
|
||||
# `SET compatibility=...` reverts max_parser_backtracks to its pre-24.3 default of 0 (unbounded);
|
||||
# a command-line value survives that revert, unlike a profile value.
|
||||
timeout --verbose --signal TERM --kill-after=5m --preserve-status "${FUZZ_TIME_LIMIT:-30m}" clickhouse-client \
|
||||
--max_memory_usage_in_client=1000000000 \
|
||||
--receive_timeout=10 \
|
||||
--receive_data_timeout_ms=10000 \
|
||||
--stacktrace \
|
||||
--max_parser_backtracks=1000000 \
|
||||
--max_parser_depth=1000 \
|
||||
$FUZZER_ARGS \
|
||||
> fuzzer.log \
|
||||
2>&1 &
|
||||
fuzzer_pid=$!
|
||||
echo "Fuzzer pid is $fuzzer_pid"
|
||||
# Convert FUZZ_TIME_LIMIT (e.g. "30m", "60m", "1800s" or plain seconds) into seconds
|
||||
# so that the remaining budget can be recomputed between fuzzer passes.
|
||||
fuzz_time_limit="${FUZZ_TIME_LIMIT:-30m}"
|
||||
case "$fuzz_time_limit" in
|
||||
*h) fuzz_budget_seconds=$(( ${fuzz_time_limit%h} * 3600 ));;
|
||||
*m) fuzz_budget_seconds=$(( ${fuzz_time_limit%m} * 60 ));;
|
||||
*s) fuzz_budget_seconds=$(( ${fuzz_time_limit%s} ));;
|
||||
*) fuzz_budget_seconds=$(( fuzz_time_limit ));;
|
||||
esac
|
||||
|
||||
# We need to give timeout some time to execute the underlying command with that many arguments
|
||||
elapsed=0
|
||||
maximum=50
|
||||
while [[ $elapsed -lt $maximum ]]; do
|
||||
if ps -o pid= --ppid "$fuzzer_pid"; then
|
||||
echo "Found underlying PID!"
|
||||
break;
|
||||
else
|
||||
echo "Not found. Trying again..."
|
||||
fi
|
||||
sleep 0.1
|
||||
elapsed=$((elapsed+1))
|
||||
done
|
||||
|
||||
# The fuzzer_pid belongs to the timeout process.
|
||||
actual_fuzzer_pid=$(ps -o pid= --ppid "$fuzzer_pid")
|
||||
|
||||
if [[ "$IS_ASAN" = "1" ]];
|
||||
then
|
||||
echo "ASAN build detected. Not using gdb since it disables LeakSanitizer detections"
|
||||
else
|
||||
echo "Attaching gdb to the fuzzer itself"
|
||||
gdb -batch -command script.gdb -p $actual_fuzzer_pid &
|
||||
fi
|
||||
|
||||
# Wait for the fuzzer to complete.
|
||||
# Note that the 'wait || ...' thing is required so that the script doesn't
|
||||
# exit because of 'set -e' when 'wait' returns nonzero code.
|
||||
fuzz_started_at=$SECONDS
|
||||
fuzzer_exit_code=0
|
||||
wait "$fuzzer_pid" || fuzzer_exit_code=$?
|
||||
echo "Fuzzer exit code is $fuzzer_exit_code"
|
||||
fuzz_pass=0
|
||||
: > fuzzer.log
|
||||
while :; do
|
||||
fuzz_pass=$((fuzz_pass+1))
|
||||
remaining_seconds=$(( fuzz_budget_seconds - (SECONDS - fuzz_started_at) ))
|
||||
echo "=== Fuzzer pass $fuzz_pass, remaining time budget: ${remaining_seconds}s ==="
|
||||
|
||||
# Allow the fuzzer to run for some time, giving it a grace period of 5m to finish once the time
|
||||
# out triggers. After that, it'll send a SIGKILL to the fuzzer to make sure it finishes within
|
||||
# a reasonable time.
|
||||
# Bound the parser/AST recursion on the client command line, matching the server-side caps in
|
||||
# limit-recursion-settings.xml. The client parses every corpus query locally, and a corpus
|
||||
# `SET compatibility=...` reverts max_parser_backtracks to its pre-24.3 default of 0 (unbounded);
|
||||
# a command-line value survives that revert, unlike a profile value.
|
||||
timeout --verbose --signal TERM --kill-after=5m --preserve-status "${remaining_seconds}s" clickhouse-client \
|
||||
--max_memory_usage_in_client=1000000000 \
|
||||
--receive_timeout=10 \
|
||||
--receive_data_timeout_ms=10000 \
|
||||
--stacktrace \
|
||||
--max_parser_backtracks=1000000 \
|
||||
--max_parser_depth=1000 \
|
||||
$FUZZER_ARGS \
|
||||
>> fuzzer.log \
|
||||
2>&1 &
|
||||
fuzzer_pid=$!
|
||||
echo "Fuzzer pid is $fuzzer_pid"
|
||||
|
||||
# We need to give timeout some time to execute the underlying command with that many arguments
|
||||
elapsed=0
|
||||
maximum=50
|
||||
while [[ $elapsed -lt $maximum ]]; do
|
||||
if ps -o pid= --ppid "$fuzzer_pid"; then
|
||||
echo "Found underlying PID!"
|
||||
break;
|
||||
else
|
||||
echo "Not found. Trying again..."
|
||||
fi
|
||||
sleep 0.1
|
||||
elapsed=$((elapsed+1))
|
||||
done
|
||||
|
||||
# The fuzzer_pid belongs to the timeout process.
|
||||
actual_fuzzer_pid=$(ps -o pid= --ppid "$fuzzer_pid")
|
||||
|
||||
if [[ "$IS_ASAN" = "1" ]];
|
||||
then
|
||||
echo "ASAN build detected. Not using gdb since it disables LeakSanitizer detections"
|
||||
else
|
||||
echo "Attaching gdb to the fuzzer itself"
|
||||
gdb -batch -command script.gdb -p $actual_fuzzer_pid &
|
||||
fi
|
||||
|
||||
# Wait for the fuzzer to complete.
|
||||
# Note that the 'wait || ...' thing is required so that the script doesn't
|
||||
# exit because of 'set -e' when 'wait' returns nonzero code.
|
||||
fuzzer_exit_code=0
|
||||
wait "$fuzzer_pid" || fuzzer_exit_code=$?
|
||||
echo "Fuzzer exit code is $fuzzer_exit_code"
|
||||
|
||||
# A non-zero exit code is either the time limit (TERM/KILL sent by `timeout`) or a
|
||||
# client/server failure — in both cases stop and let the code below classify it.
|
||||
if [[ "$fuzzer_exit_code" != "0" ]]; then
|
||||
break
|
||||
fi
|
||||
# BuzzHouse enforces its own internal time budget and exits 0 when it is reached.
|
||||
if [[ "$FUZZER_TO_RUN" != "AST Fuzzer" ]]; then
|
||||
break
|
||||
fi
|
||||
# Exit code 0 means the client walked the whole corpus and exited voluntarily. For the
|
||||
# targeted AST fuzzer the corpus is small, so a pass can finish within a couple of
|
||||
# minutes of a 30-minute budget. Each pass starts from a fresh random seed, so rerunning
|
||||
# the corpus explores new mutations instead of throwing away the remaining budget.
|
||||
remaining_seconds=$(( fuzz_budget_seconds - (SECONDS - fuzz_started_at) ))
|
||||
if [[ "$remaining_seconds" -lt 60 ]]; then
|
||||
echo "Fuzzer finished the corpus and only ${remaining_seconds}s of the budget remain, not restarting"
|
||||
break
|
||||
fi
|
||||
# Make sure the server is still accepting queries before restarting: a fuzzer that
|
||||
# exited with code 0 against a dead server would otherwise restart-loop until the budget
|
||||
# runs out and hide the failure.
|
||||
if ! clickhouse-client --receive_timeout=5 --query "SELECT 'fuzzer restart liveness check'"; then
|
||||
echo "Server is not responding, not restarting the fuzzer"
|
||||
break
|
||||
fi
|
||||
echo "Fuzzer finished the corpus with success, restarting it to use the remaining ${remaining_seconds}s of the budget"
|
||||
done
|
||||
|
||||
# If the server dies, most often the fuzzer returns Code 210: Connetion
|
||||
# refused, and sometimes also code 32: attempt to read after eof. For
|
||||
|
||||
@@ -228,7 +228,7 @@ test_named_collections_encrypted2/test.py 355884
|
||||
test_backup_restore_on_cluster/test.py 355552
|
||||
test_refreshable_mat_view_replicated/test.py 355015
|
||||
test_lost_part_during_startup/test.py 354182
|
||||
test_scheduler/test.py 351404
|
||||
test_scheduler_io/test.py 351404
|
||||
test_ytsaurus/test_tables.py 349422
|
||||
test_mysql_database_engine/test.py 348017
|
||||
test_storage_iceberg_schema_evolution/test_evolved_schema_simple.py 343043
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from ci.defs.defs import SYNC
|
||||
from ci.praktika.gh import GH
|
||||
from ci.praktika.info import Info
|
||||
from ci.praktika.result import Result
|
||||
|
||||
# This status is a marker that the sync process can be started. We set it from
|
||||
@@ -7,6 +8,10 @@ from ci.praktika.result import Result
|
||||
|
||||
|
||||
def main():
|
||||
if Info().repo_name != "ClickHouse/ClickHouse":
|
||||
print(f"Not applicable for repo [{Info().repo_name}], skipping")
|
||||
return
|
||||
|
||||
statuses = GH.get_commit_statuses()
|
||||
if statuses is None:
|
||||
print(f"Failed to fetch commit statuses, skip setting [{SYNC}]")
|
||||
|
||||
@@ -36,10 +36,13 @@ export MALLOC_CONF="abort_conf:true,abort:true,narenas:$(nproc --all)"
|
||||
# Must match CHServer.JEMALLOC_PROFILER_SAMPLING_RATE in performance_tests.py.
|
||||
JEMALLOC_PROFILER_SAMPLING_RATE=16
|
||||
|
||||
# Disable cgroup memory correction for report-building clickhouse-local so each
|
||||
# process is tracked against its own RSS, not the shared job cgroup (avoids Code 241).
|
||||
# Passed after `--` so it word-splits into server settings. Keep in sync with
|
||||
# REPORT_LOCAL_SERVER_SETTINGS in performance_tests.py.
|
||||
# Settings for the report-building clickhouse-local (post-processing of the perf
|
||||
# results, not the measured servers). Keep in sync with
|
||||
# REPORT_LOCAL_{QUERY,SERVER}_SETTINGS in performance_tests.py.
|
||||
# Keep report aggregations in RAM: report/tmp cannot hold a spill of the
|
||||
# heaviest randomization queries, so spilling only fails with NOT_ENOUGH_SPACE.
|
||||
CHPC_REPORT_LOCAL_QUERY_SETTINGS="--max_bytes_before_external_group_by=0 --max_bytes_ratio_before_external_group_by=0 --max_bytes_before_external_sort=0 --max_bytes_ratio_before_external_sort=0"
|
||||
# Track each process against its own RSS, not the job cgroup (MEMORY_LIMIT_EXCEEDED).
|
||||
CHPC_REPORT_LOCAL_SERVER_SETTINGS="--memory_worker_use_cgroup=0"
|
||||
|
||||
function wait_for_server # port, pid
|
||||
@@ -606,7 +609,7 @@ create table query_run_metrics_for_stats engine File(
|
||||
create table query_run_metric_names engine File(TSV, 'analyze/query-run-metric-names.tsv')
|
||||
as select metric_names from query_run_metric_arrays limit 1
|
||||
;
|
||||
" -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a analyze/errors.log 1>&2)
|
||||
" $CHPC_REPORT_LOCAL_QUERY_SETTINGS -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a analyze/errors.log 1>&2)
|
||||
|
||||
# This is a lateral join in bash... please forgive me.
|
||||
# We don't have arrayPermute(), so I have to make random permutations with
|
||||
@@ -625,6 +628,7 @@ do
|
||||
--file \"$file\" \
|
||||
--structure 'test text, query text, run int, version UInt8, metrics Array(float)' \
|
||||
--query \"$(cat "$script_dir/eqmed.sql")\" \
|
||||
$CHPC_REPORT_LOCAL_QUERY_SETTINGS \
|
||||
-- $CHPC_REPORT_LOCAL_SERVER_SETTINGS \
|
||||
>> \"analyze/query-metric-stats.tsv\"" \
|
||||
2>> analyze/errors.log \
|
||||
@@ -652,7 +656,13 @@ unset IFS
|
||||
# --memsuspend:
|
||||
#
|
||||
# If the available memory falls below 2 * size, GNU parallel will suspend some of the running jobs.
|
||||
parallel -v --joblog analyze/parallel-log.txt --memsuspend 15G --null < analyze/commands.txt 2>> analyze/errors.log
|
||||
#
|
||||
# With external aggregation disabled, a single heavy job stays in RAM, so bound
|
||||
# concurrency by host RAM to avoid MEMORY_LIMIT_EXCEEDED; --memsuspend suspends
|
||||
# some jobs anyway if they collectively approach the limit.
|
||||
report_jobs=$(( $(awk '/MemTotal/ {print int($2/1024/1024)}' /proc/meminfo) / 15 ))
|
||||
[ "$report_jobs" -lt 1 ] && report_jobs=1
|
||||
parallel -v -j "$report_jobs" --joblog analyze/parallel-log.txt --memsuspend 15G --null < analyze/commands.txt 2>> analyze/errors.log
|
||||
|
||||
clickhouse-local --query "
|
||||
-- Join the metric names back to the metric statistics we've calculated, and make
|
||||
@@ -679,7 +689,7 @@ create table query_metric_stats_denorm engine File(TSVWithNamesAndTypes,
|
||||
left array join metric_name, left, right, diff, stat_threshold
|
||||
order by test, query_index, metric_name
|
||||
;
|
||||
" -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a analyze/errors.log 1>&2)
|
||||
" $CHPC_REPORT_LOCAL_QUERY_SETTINGS -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a analyze/errors.log 1>&2)
|
||||
}
|
||||
|
||||
# Analyze results
|
||||
@@ -1009,7 +1019,7 @@ create table all_query_metrics_tsv engine File(TSV, 'report/all-query-metrics.ts
|
||||
and query_display_names.query_index = report_thresholds.query_index
|
||||
and query_display_names.query_display_name = report_thresholds.query_display_name
|
||||
order by test, query_index;
|
||||
" -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a report/errors.log 1>&2)
|
||||
" $CHPC_REPORT_LOCAL_QUERY_SETTINGS -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a report/errors.log 1>&2)
|
||||
|
||||
# Prepare source data for metrics and flamegraphs for queries that were profiled
|
||||
# by perf.py.
|
||||
@@ -1133,7 +1143,7 @@ create table stacks engine File(TSV, 'report/stacks.$version.tsv') as
|
||||
group by test, query_index, trace_type, trace
|
||||
order by test, query_index, trace_type, trace
|
||||
;
|
||||
" -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a report/errors.log 1>&2) &
|
||||
" $CHPC_REPORT_LOCAL_QUERY_SETTINGS -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a report/errors.log 1>&2) &
|
||||
done
|
||||
wait
|
||||
|
||||
@@ -1266,7 +1276,7 @@ create table changes engine File(TSV, 'metrics/changes.tsv')
|
||||
)
|
||||
order by diff desc
|
||||
;
|
||||
" -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a metrics/errors.log 1>&2)
|
||||
" $CHPC_REPORT_LOCAL_QUERY_SETTINGS -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS 2> >(tee -a metrics/errors.log 1>&2)
|
||||
|
||||
IFS=$'\n'
|
||||
for prefix in $(cut -f1 "metrics/metrics.tsv" | sort | uniq)
|
||||
@@ -1346,7 +1356,7 @@ create table ci_checks engine File(TSVWithNamesAndTypes, 'ci-checks.tsv')
|
||||
array join map('old', left, 'new', right) as test_desc_
|
||||
)
|
||||
;
|
||||
" -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS
|
||||
" $CHPC_REPORT_LOCAL_QUERY_SETTINGS -- $CHPC_REPORT_LOCAL_SERVER_SETTINGS
|
||||
|
||||
# Upload some run attributes. I use this weird form because it is the same
|
||||
# form that can be used for historical data when you only have compare.log.
|
||||
@@ -1458,6 +1468,13 @@ case "$stage" in
|
||||
;&
|
||||
esac
|
||||
|
||||
# A non-empty report/errors.log fails the check. Print it so the cause is in
|
||||
# the job log instead of only the results archive.
|
||||
if [ -s report/errors.log ]; then
|
||||
echo "### report/errors.log ###"
|
||||
cat report/errors.log
|
||||
fi
|
||||
|
||||
# Print some final debug info to help debug Weirdness, of which there is plenty.
|
||||
jobs
|
||||
#pstree -apgT
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Dependency-light release helpers.
|
||||
|
||||
This module is deliberately kept free of the release toolchain's heavy imports
|
||||
(`github`, `boto3`, `unidiff`, ...) and of the `ci.praktika` stack. The release
|
||||
driver `tests/ci/create_release.py` drags in the former at import time, none of
|
||||
which is shipped in the `CI Tests` docker image, so the pure release-decision
|
||||
logic lives here -- importable as `ci.jobs.scripts.release_checks` -- where the
|
||||
`ci/tests/` unit-test suite can exercise it hermetically.
|
||||
"""
|
||||
|
||||
|
||||
def is_empty_patch_release(patch: int, tweak: int) -> bool:
|
||||
"""
|
||||
Whether a patch release would be empty and must be refused.
|
||||
|
||||
For a patch release the tweak equals the number of commits since the
|
||||
previous release tag (see `Git.tweak`), so `tweak == 1` means the only
|
||||
commit on top of the previous release is the automated post-release
|
||||
version bump — there is nothing to release (e.g. `v25.8.28.1-lts`).
|
||||
|
||||
The exception is `patch == 1`: that is the first user-facing
|
||||
`stable`/`lts` release of a freshly cut branch. Its previous tag is the
|
||||
non-user-facing `vX.Y.1.1-new`, and the single automated
|
||||
`testing -> stable/lts` version-update commit also yields `tweak == 1`.
|
||||
That release is legitimate and must be allowed. The post-release bump
|
||||
always increments `patch`, so an already-published branch is always at
|
||||
`patch >= 2` on a rerun.
|
||||
"""
|
||||
return tweak == 1 and patch != 1
|
||||
@@ -0,0 +1,44 @@
|
||||
from ci.praktika.info import Info
|
||||
from ci.praktika.utils import Shell, Utils
|
||||
|
||||
|
||||
def kill_leftover_server_processes():
|
||||
"""Kill ClickHouse server processes leaked by a previous CI job.
|
||||
|
||||
Runners are reused across jobs, and a job that is cancelled or times out
|
||||
can leave its clickhouse-server running or slowly shutting down. Such a
|
||||
leftover keeps the server ports, so the next job's server fails every
|
||||
listen with `Address already in use` and its `wait_ready` times out with
|
||||
an opaque `Connection refused`.
|
||||
|
||||
Call this from every entry point that starts the job's own server on the
|
||||
host, right before the first start. At that moment the current job has not
|
||||
started any server yet, so anything matching here is a leftover from a
|
||||
previous job and is stale by definition. Never runs locally: a local run
|
||||
may share the machine with a developer's own server that must not be
|
||||
touched.
|
||||
"""
|
||||
if Info().is_local_run:
|
||||
return
|
||||
# The bracket in the pattern also keeps pkill from matching the shell that
|
||||
# runs it: the literal `clickhouse[- ]server` in that shell's own cmdline
|
||||
# does not match the regex it denotes.
|
||||
pattern = "clickhouse[- ]server"
|
||||
leftovers = Shell.get_output(f"pgrep -a -f '{pattern}'").strip()
|
||||
if not leftovers:
|
||||
return
|
||||
print(
|
||||
"WARNING: killing leftover clickhouse server processes"
|
||||
f" from a previous job:\n{leftovers}"
|
||||
)
|
||||
Shell.check(f"pkill -9 -f '{pattern}'", verbose=True)
|
||||
for _ in range(10):
|
||||
if not Shell.get_output(f"pgrep -f '{pattern}'").strip():
|
||||
break
|
||||
Utils.sleep(1)
|
||||
else:
|
||||
print("WARNING: leftover clickhouse server processes survived SIGKILL")
|
||||
Info().add_workflow_warning(
|
||||
"Leftover clickhouse server processes from a previous job"
|
||||
" were found and killed, see job.log"
|
||||
)
|
||||
@@ -1,7 +1,7 @@
|
||||
import re
|
||||
|
||||
from ci.defs.defs import JobNames
|
||||
from ci.defs.job_configs import JobConfigs
|
||||
from ci.defs.job_configs import JobConfigs, build_digest_config
|
||||
from ci.jobs.scripts.workflow_hooks.new_tests_check import (
|
||||
has_new_functional_tests,
|
||||
has_new_integration_tests,
|
||||
@@ -80,6 +80,22 @@ def _has_keeper_stress_changes(changed_files):
|
||||
return False
|
||||
|
||||
|
||||
def _has_build_digest_changes(changed_files):
|
||||
"""True if any changed file may affect the compiled ClickHouse binary,
|
||||
per `build_digest_config.include_paths`/`exclude_paths` - the same paths
|
||||
that gate the build job's cache digest in `ci/defs/job_configs.py`.
|
||||
"""
|
||||
include = [p.removeprefix("./") for p in build_digest_config.include_paths]
|
||||
exclude = [p.removeprefix("./") for p in build_digest_config.exclude_paths]
|
||||
for f in changed_files:
|
||||
p = f.removeprefix(".").removeprefix("/")
|
||||
if any(p.startswith(inc) for inc in include) and not any(
|
||||
p.startswith(exc) for exc in exclude
|
||||
):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
_info_cache = None
|
||||
|
||||
# Labels that mark a PR as a bug fix (set by the `pr_labels_and_category.py`
|
||||
@@ -378,16 +394,26 @@ def should_skip_job(job_name):
|
||||
if _is_coverage_it:
|
||||
return True, "Skipped: only unit tests changed, integration coverage not needed"
|
||||
|
||||
# Run the LLVM Coverage merge/report job only when the build itself may have
|
||||
# changed. Coverage numbers only move when the compiled binary changes; a
|
||||
# PR that only touches tests/docs/CI scripts would produce a merge report
|
||||
# identical to master, so skip it. PR-only, for the same reason as the
|
||||
# coverage sub-job skipping above: master coverage runs must always
|
||||
# publish a complete baseline.
|
||||
if (
|
||||
job_name == JobNames.LLVM_COVERAGE
|
||||
and _info_cache.pr_number > 0
|
||||
and not _has_build_digest_changes(_info_cache.get_changed_files() or [])
|
||||
):
|
||||
return True, "No build-affecting changes"
|
||||
|
||||
# If only CI scripts changed (no product code), run a minimal set of tests
|
||||
# to validate the CI pipeline: stateless batch 1 and amd_asan_ubsan integration batch 1.
|
||||
# Individual coverage test jobs run normally, but the LLVM merge/report job is skipped
|
||||
# so that partial shard data does not corrupt the master coverage number.
|
||||
# Individual coverage test jobs run normally; the LLVM merge/report job is
|
||||
# already skipped above whenever the build is unaffected.
|
||||
if changed_files and all(
|
||||
f.startswith("ci/") and f.endswith(".py") for f in changed_files
|
||||
):
|
||||
if job_name == JobNames.LLVM_COVERAGE:
|
||||
return True, "Skipped: only CI scripts changed; skipping coverage merge to preserve master coverage number"
|
||||
|
||||
if JobNames.STATELESS in job_name:
|
||||
match = re.search(r"(\d)/\d", job_name)
|
||||
if match and match.group(1) != "1" or "sequential" in job_name:
|
||||
|
||||
@@ -9,6 +9,8 @@ from pathlib import Path
|
||||
from praktika.result import Result
|
||||
from praktika.utils import Shell, Utils
|
||||
|
||||
from ci.jobs.scripts.server_cleanup import kill_leftover_server_processes
|
||||
|
||||
temp_dir = f"{Utils.cwd()}/ci/tmp/"
|
||||
|
||||
MIN_TOTAL_TESTS = 5_939_581
|
||||
@@ -50,6 +52,7 @@ class ClickHouseBinary:
|
||||
|
||||
print("Starting ClickHouse server")
|
||||
print("Command: ", self.start_cmd)
|
||||
kill_leftover_server_processes()
|
||||
self.log_fd = open(self.log_file, "w")
|
||||
self.proc = subprocess.Popen(
|
||||
self.start_cmd, stderr=subprocess.STDOUT, stdout=self.log_fd, shell=True
|
||||
|
||||
@@ -10,6 +10,8 @@ from praktika.info import Info
|
||||
from praktika.result import Result
|
||||
from praktika.utils import Shell, Utils
|
||||
|
||||
from ci.jobs.scripts.server_cleanup import kill_leftover_server_processes
|
||||
|
||||
temp_dir = f"{Utils.cwd()}/ci/tmp/"
|
||||
|
||||
# Thresholds based on baseline run with ClickHouse 26.3 and ClickHouse-dialect queries.
|
||||
@@ -68,6 +70,7 @@ class ClickHouseBinary:
|
||||
|
||||
print("Starting ClickHouse server")
|
||||
print("Command: ", self.start_cmd)
|
||||
kill_leftover_server_processes()
|
||||
self.log_fd = open(self.log_file, "w")
|
||||
self.proc = subprocess.Popen(
|
||||
self.start_cmd, stderr=subprocess.STDOUT, stdout=self.log_fd, shell=True
|
||||
|
||||
@@ -13,6 +13,8 @@ from clickhouse_driver import Client
|
||||
from praktika.result import Result
|
||||
from praktika.utils import Shell, Utils
|
||||
|
||||
from ci.jobs.scripts.server_cleanup import kill_leftover_server_processes
|
||||
|
||||
temp_dir = f"{Utils.cwd()}/ci/tmp/"
|
||||
|
||||
|
||||
@@ -45,6 +47,7 @@ class ClickHouseBinary:
|
||||
def start(self):
|
||||
print("Starting ClickHouse server")
|
||||
print("Command: ", self.start_cmd)
|
||||
kill_leftover_server_processes()
|
||||
self.log_fd = open(self.log_file, "w")
|
||||
self.proc = subprocess.Popen(
|
||||
self.start_cmd, stderr=subprocess.STDOUT, stdout=self.log_fd, shell=True
|
||||
|
||||
@@ -291,10 +291,13 @@ class RunTest:
|
||||
if configured_select_list is not None:
|
||||
select_list = configured_select_list
|
||||
|
||||
source = f"s3('{url}')"
|
||||
# Public clickhouse-datasets bucket: read with NOSIGN so the query
|
||||
# does not fall back to server-managed credentials (rejected in user
|
||||
# queries by default). NOSIGN is the 2nd positional s3() argument.
|
||||
source = f"s3('{url}', NOSIGN)"
|
||||
source_format = self._dataset.get(SOURCE_FORMAT)
|
||||
if source_format is not None:
|
||||
source = f"s3('{url}', '{source_format}'"
|
||||
source = f"s3('{url}', NOSIGN, '{source_format}'"
|
||||
source_structure = self._dataset.get(SOURCE_STRUCTURE)
|
||||
if source_structure is not None:
|
||||
source = source + f", '{source_structure}'"
|
||||
|
||||
@@ -512,10 +512,10 @@
|
||||
const status_ = status.toLowerCase();
|
||||
|
||||
const isFailure =
|
||||
(status_.includes('fail') || status_.includes('error') || status_.includes('dropped') || status_ === 'xpass')
|
||||
(status_.includes('fail') || status_.includes('error') || status_.includes('dropped') || status_ === 'xpass' || status_ === 'slower')
|
||||
&& status_ !== 'xfail';
|
||||
const isWarning =
|
||||
status_.includes('pending') || status_.includes('running');
|
||||
status_.includes('pending') || status_.includes('running') || status_ === 'unstable';
|
||||
|
||||
if (filter === 'failures') {
|
||||
return isFailure;
|
||||
@@ -663,6 +663,9 @@
|
||||
const statusLower = (status || '').toLowerCase();
|
||||
if (statusLower.includes('error')) return 0;
|
||||
if (statusLower.includes('fail') && statusLower !== 'xfail') return 1;
|
||||
// Perf-comparison per-query statuses (compare.sh emits slower/unstable/success).
|
||||
if (statusLower === 'slower') return 1;
|
||||
if (statusLower === 'unstable') return 2;
|
||||
// Keep UNKNOWN right under the errors/failures: these are tests whose real
|
||||
// result was lost (e.g. demoted when the run aborted), so they are the rows
|
||||
// worth looking at first, not buried below all the OK rows.
|
||||
|
||||
@@ -668,7 +668,12 @@ def _config_workflow(workflow: Workflow.Config, job_name) -> Result:
|
||||
res_.append(Result.from_commands_run(name=name, command=pre_check))
|
||||
|
||||
results.append(
|
||||
Result.create_from(name="Pre Hooks", results=res_, stopwatch=sw_)
|
||||
Result.create_from(
|
||||
name="Pre Hooks",
|
||||
results=res_,
|
||||
stopwatch=sw_,
|
||||
with_info_from_results=True,
|
||||
)
|
||||
)
|
||||
# reread env object in case some new dada (JOB_KV_DATA) has been added in .pre_hooks
|
||||
env = _Environment.get()
|
||||
@@ -996,7 +1001,12 @@ def _finish_workflow(workflow, job_name):
|
||||
results_.append(Result.from_commands_run(name=name, command=check))
|
||||
|
||||
results.append(
|
||||
Result.create_from(name="Post Hooks", results=results_, stopwatch=sw_)
|
||||
Result.create_from(
|
||||
name="Post Hooks",
|
||||
results=results_,
|
||||
stopwatch=sw_,
|
||||
with_info_from_results=True,
|
||||
)
|
||||
)
|
||||
|
||||
ready_for_merge_status = Result.Status.OK
|
||||
|
||||
+12
-2
@@ -1075,7 +1075,12 @@ class Runner:
|
||||
else:
|
||||
name = str(check)
|
||||
results_.append(Result.from_commands_run(name=name, command=check))
|
||||
prehook_result = Result.create_from(name="Pre Hooks", results=results_, stopwatch=sw_)
|
||||
prehook_result = Result.create_from(
|
||||
name="Pre Hooks",
|
||||
results=results_,
|
||||
stopwatch=sw_,
|
||||
with_info_from_results=True,
|
||||
)
|
||||
|
||||
if res:
|
||||
print(f"=== Run script [{job.name}], workflow [{workflow.name}] ===")
|
||||
@@ -1129,7 +1134,12 @@ class Runner:
|
||||
name = str(check)
|
||||
results_.append(Result.from_commands_run(name=name, command=check))
|
||||
result.results.append(
|
||||
Result.create_from(name="Post Hooks", results=results_, stopwatch=sw_)
|
||||
Result.create_from(
|
||||
name="Post Hooks",
|
||||
results=results_,
|
||||
stopwatch=sw_,
|
||||
with_info_from_results=True,
|
||||
)
|
||||
)
|
||||
print("=== Post hooks finished ===")
|
||||
|
||||
|
||||
@@ -1,22 +1,36 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Unit tests for the backport branch-selection contract in
|
||||
`cherry_pick_branches.py`. Run with `python -m unittest` from `tests/ci/`, or
|
||||
with `pytest tests/ci/test_cherry_pick_branches.py` from the repo root.
|
||||
`cherry_pick_branches.py`. Run as part of the `ci/tests/` suite with
|
||||
`pytest ci/tests/test_cherry_pick_branches.py` from the repo root.
|
||||
|
||||
The module under test has no GitHub / git / CI dependencies, so these tests run
|
||||
anywhere. Label constants mirror `pr_info.Labels` and are kept local to avoid
|
||||
importing the heavyweight `cherry_pick` module.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
from cherry_pick_branches import (
|
||||
backport_floor,
|
||||
branch_version,
|
||||
label_version,
|
||||
select_backport_branches,
|
||||
version_key,
|
||||
# `cherry_pick_branches` lives under `tests/ci` and imports sibling modules by
|
||||
# bare name, so put that directory on `sys.path` only while importing it and
|
||||
# remove it again afterwards to avoid leaking it into the rest of the pytest
|
||||
# session.
|
||||
_CI_DIR = os.path.abspath(
|
||||
os.path.join(os.path.dirname(__file__), "..", "..", "tests", "ci")
|
||||
)
|
||||
sys.path.insert(0, _CI_DIR)
|
||||
try:
|
||||
# pylint: disable=import-error
|
||||
from cherry_pick_branches import (
|
||||
backport_floor,
|
||||
branch_version,
|
||||
label_version,
|
||||
select_backport_branches,
|
||||
version_key,
|
||||
)
|
||||
finally:
|
||||
sys.path.remove(_CI_DIR)
|
||||
|
||||
# Mirror of the label constants used by `cherry_pick.process_pr`.
|
||||
MUST_BACKPORT = "pr-must-backport"
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Unit tests for the pure release-decision helpers in
|
||||
`ci/jobs/scripts/release_checks.py`. Run as part of the `ci/tests/` suite with
|
||||
`pytest ci/tests/test_create_release.py` from the repo root.
|
||||
|
||||
`release_checks` is the dependency-light home of `is_empty_patch_release` (used
|
||||
by `tests/ci/create_release.py`'s `ReleaseInfo.prepare`). It is kept free of the
|
||||
release toolchain's heavy imports (`github`, `boto3`, `unidiff`, ...) and of the
|
||||
`ci.praktika` stack, so this test imports it as a plain `ci.jobs.scripts` module
|
||||
without the packages that the `CI Tests` docker image does not ship.
|
||||
"""
|
||||
|
||||
import unittest
|
||||
|
||||
from ci.jobs.scripts.release_checks import is_empty_patch_release
|
||||
|
||||
|
||||
class TestIsEmptyPatchRelease(unittest.TestCase):
|
||||
def test_rejects_empty_rerun(self):
|
||||
# Already-published branch: the only commit since the previous
|
||||
# stable/lts tag is the automated version bump (e.g. v25.8.28.1-lts).
|
||||
self.assertTrue(is_empty_patch_release(patch=28, tweak=1))
|
||||
|
||||
def test_allows_first_release_of_new_branch(self):
|
||||
# First user-facing stable/lts release on a freshly cut branch. Its
|
||||
# previous tag is vX.Y.1.1-new and the single testing -> stable commit
|
||||
# also yields tweak == 1, but the release is legitimate.
|
||||
self.assertFalse(is_empty_patch_release(patch=1, tweak=1))
|
||||
|
||||
def test_allows_non_empty_patch_release(self):
|
||||
# Real commits on top of the previous release -> tweak > 1.
|
||||
self.assertFalse(is_empty_patch_release(patch=28, tweak=42))
|
||||
|
||||
def test_allows_non_empty_first_release(self):
|
||||
self.assertFalse(is_empty_patch_release(patch=1, tweak=2222))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -0,0 +1,135 @@
|
||||
"""
|
||||
Regression test for the per-table wall-clock cap in
|
||||
ClickHouseProc.dump_system_tables (ci/jobs/scripts/clickhouse_proc.py).
|
||||
|
||||
Background
|
||||
----------
|
||||
After all functional tests pass, the job's "Collect logs" phase dumps ~12
|
||||
system tables one by one with `clickhouse local ... select * from system.<t>
|
||||
into outfile ...`. On amd_tsan + s3 runs the JSON-typed `system.minio_audit_logs`
|
||||
table can grow huge and `clickhouse local` can hang reading it. Because the dump
|
||||
command had NO per-command timeout, a single stuck table consumed the rest of
|
||||
the 9000s job budget; the job watchdog then SIGKILLed everything and the job
|
||||
finished with a job-level ERROR (exit code 125 / -15) and results:[] - no
|
||||
individual test failed. Observed on PRs #107307, #103402, #103706 and on master.
|
||||
|
||||
The fix wraps each dump in `timeout --signal=TERM --kill-after=60 <N>` so one
|
||||
stuck table is bounded and reported as a failed dump instead of killing the job.
|
||||
|
||||
These tests exercise the `timeout` wrapper mechanism (the same coreutil and
|
||||
flags the fix builds into `dump_prefix`), proving both directions with a small
|
||||
cap: a hanging command is killed within the cap and returns 124; a SIGTERM-
|
||||
ignoring command is escalated after --kill-after and returns 137; a fast command
|
||||
passes through untouched. They also assert the production code still builds the
|
||||
timeout prefix from the class constant and classifies both expiry codes.
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
_REPO_ROOT = Path(__file__).resolve().parent.parent.parent
|
||||
_SRC = _REPO_ROOT / "ci" / "jobs" / "scripts" / "clickhouse_proc.py"
|
||||
|
||||
|
||||
def _prefix(timeout_s, kill_after_s=60):
|
||||
# Mirror the exact prefix the fix builds in dump_system_tables. The
|
||||
# production code uses --kill-after=60; tests that need to observe the
|
||||
# escalation path pass a small kill_after_s so the test does not wait 60s.
|
||||
return f"timeout --signal=TERM --kill-after={kill_after_s} {timeout_s} "
|
||||
|
||||
|
||||
def test_hanging_dump_is_bounded_by_timeout():
|
||||
# A dump that would hang forever must be killed within the cap and report
|
||||
# timeout's exit code 124 - not run unbounded until the job watchdog fires.
|
||||
cap = 2
|
||||
start = time.monotonic()
|
||||
res = subprocess.run(
|
||||
_prefix(cap) + "sleep 30",
|
||||
shell=True,
|
||||
executable="/bin/bash",
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
)
|
||||
elapsed = time.monotonic() - start
|
||||
assert res.returncode == 124, (
|
||||
f"expected timeout exit 124, got {res.returncode}; the dump was not bounded"
|
||||
)
|
||||
assert elapsed < 15, (
|
||||
f"command took {elapsed:.1f}s (>= 15s); timeout did not enforce the {cap}s cap"
|
||||
)
|
||||
|
||||
|
||||
def test_without_timeout_the_dump_runs_unbounded():
|
||||
# Demonstrate the pre-fix behavior: without the timeout prefix the same
|
||||
# hanging command runs to completion (here a short sleep stands in for a
|
||||
# dump that would hang for the rest of the 9000s budget).
|
||||
start = time.monotonic()
|
||||
res = subprocess.run(
|
||||
"sleep 3",
|
||||
shell=True,
|
||||
executable="/bin/bash",
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
)
|
||||
elapsed = time.monotonic() - start
|
||||
assert res.returncode == 0
|
||||
assert elapsed >= 3, (
|
||||
f"sleep returned after {elapsed:.1f}s; expected it to run unbounded (>= 3s)"
|
||||
)
|
||||
|
||||
|
||||
def test_term_ignoring_dump_is_killed_and_reports_137():
|
||||
# Worst case: a dump that ignores SIGTERM (e.g. a child stuck in an
|
||||
# uninterruptible section, or one that traps TERM). timeout escalates to
|
||||
# SIGKILL after --kill-after and the wrapper exits 128+9 = 137, NOT 124.
|
||||
# The fix must still classify this as a timeout, so 137 is asserted here and
|
||||
# in _annotate_timeout's exit-code set (see the guard test below).
|
||||
cap = 1
|
||||
start = time.monotonic()
|
||||
# Run through the default shell and in the `cd ... && timeout ...` shape used
|
||||
# by dump_system_tables (via Shell.get_res_stdout_stderr), so the wrapping
|
||||
# shell survives and surfaces timeout's 137 exit code (the exit code the
|
||||
# production code inspects), not the raw SIGKILL.
|
||||
res = subprocess.run(
|
||||
"cd . && " + _prefix(cap, kill_after_s=1) + 'sh -c \'trap "" TERM; sleep 30\'',
|
||||
shell=True,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
)
|
||||
elapsed = time.monotonic() - start
|
||||
assert res.returncode == 137, (
|
||||
f"expected escalation exit 137, got {res.returncode}; the TERM-ignoring "
|
||||
"dump was not killed via --kill-after"
|
||||
)
|
||||
assert elapsed < 15, (
|
||||
f"command took {elapsed:.1f}s (>= 15s); --kill-after did not enforce the cap"
|
||||
)
|
||||
|
||||
|
||||
def test_fast_dump_passes_through_untouched():
|
||||
# A dump that finishes well within the cap must succeed unchanged.
|
||||
res = subprocess.run(
|
||||
_prefix(60) + "echo ok",
|
||||
shell=True,
|
||||
executable="/bin/bash",
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
text=True,
|
||||
)
|
||||
assert res.returncode == 0
|
||||
assert res.stdout.strip() == "ok"
|
||||
|
||||
|
||||
def test_production_code_bounds_each_dump_with_timeout():
|
||||
# Guard against a regression that drops the timeout wrapper: the source must
|
||||
# build the timeout prefix from the class constant and apply it to the dump.
|
||||
src = _SRC.read_text()
|
||||
assert "DUMP_SYSTEM_TABLE_TIMEOUT" in src
|
||||
assert "timeout --signal=TERM --kill-after=60" in src
|
||||
assert "{dump_prefix}clickhouse local" in src
|
||||
# Both timeout expiry codes must be classified: 124 (child died on SIGTERM)
|
||||
# and 137 (SIGTERM-ignoring child escalated to SIGKILL via --kill-after).
|
||||
assert "_TIMEOUT_EXIT_CODES = (124, 137)" in src
|
||||
# The annotation helper must be applied to every dump branch (replica 0/1/2).
|
||||
assert src.count("self._annotate_timeout(res, stderr)") == 3
|
||||
@@ -1,29 +1,42 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Unit tests for the pure helpers in `pr_version_info.py`. Run with
|
||||
`python -m unittest` from `tests/ci/`, or with
|
||||
`pytest tests/ci/test_pr_version_info.py` from the repo root.
|
||||
Unit tests for the pure helpers in `pr_version_info.py`. Run as part of the
|
||||
`ci/tests/` suite with `pytest ci/tests/test_pr_version_info.py` from the repo
|
||||
root.
|
||||
|
||||
`pr_version_info` keeps its GitHub / CIDB imports inside `main()`, so importing
|
||||
the helpers here pulls in no heavyweight dependencies.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
from pr_version_info import (
|
||||
SECTION_END,
|
||||
SECTION_START,
|
||||
MergedPR,
|
||||
has_backport_label,
|
||||
has_ignore_label,
|
||||
original_pr_number_from_backport_ref,
|
||||
partition_merged_prs,
|
||||
release_from_backport_ref,
|
||||
render_issue_section,
|
||||
render_section,
|
||||
upsert_section,
|
||||
version_key,
|
||||
# `pr_version_info` lives under `tests/ci` and imports sibling modules by bare
|
||||
# name, so put that directory on `sys.path` only while importing it and remove
|
||||
# it again afterwards to avoid leaking it into the rest of the pytest session.
|
||||
_CI_DIR = os.path.abspath(
|
||||
os.path.join(os.path.dirname(__file__), "..", "..", "tests", "ci")
|
||||
)
|
||||
sys.path.insert(0, _CI_DIR)
|
||||
try:
|
||||
# pylint: disable=import-error
|
||||
from pr_version_info import (
|
||||
SECTION_END,
|
||||
SECTION_START,
|
||||
MergedPR,
|
||||
has_backport_label,
|
||||
has_ignore_label,
|
||||
original_pr_number_from_backport_ref,
|
||||
partition_merged_prs,
|
||||
release_from_backport_ref,
|
||||
render_issue_section,
|
||||
render_section,
|
||||
upsert_section,
|
||||
version_key,
|
||||
)
|
||||
finally:
|
||||
sys.path.remove(_CI_DIR)
|
||||
|
||||
|
||||
class TestRenderSection(unittest.TestCase):
|
||||
@@ -198,3 +198,26 @@ def test_set_error():
|
||||
r = Result("t", Result.Status.OK)
|
||||
r.set_error()
|
||||
assert r.status == Result.Status.ERROR
|
||||
|
||||
|
||||
# --- with_info_from_results: hook failure reason must reach the aggregate node ---
|
||||
# Regression guard for the "Pre Hooks / Post Hooks" empty test_context_raw bug:
|
||||
# CIDB reads Result.info from the aggregate node, so a failing sub-hook's error
|
||||
# message (e.g. "ERROR: Change category is missing or invalid") must be lifted
|
||||
# into the parent when with_info_from_results=True.
|
||||
|
||||
def test_create_from_lifts_child_info_when_requested():
|
||||
subs = [
|
||||
Result("hook_ok", Result.Status.OK),
|
||||
Result("hook_bad", Result.Status.FAIL, info="ERROR: something is wrong"),
|
||||
]
|
||||
r = Result.create_from(name="Pre Hooks", results=subs, with_info_from_results=True)
|
||||
assert r.status == Result.Status.FAIL
|
||||
assert "ERROR: something is wrong" in r.info
|
||||
assert "hook_bad" in r.info
|
||||
|
||||
|
||||
def test_create_from_omits_child_info_by_default():
|
||||
subs = [Result("hook_bad", Result.Status.FAIL, info="ERROR: something is wrong")]
|
||||
r = Result.create_from(name="Pre Hooks", results=subs)
|
||||
assert r.info == ""
|
||||
|
||||
@@ -34,7 +34,6 @@ workflow = Workflow.Config(
|
||||
)
|
||||
for job in JobConfigs.special_build_jobs
|
||||
],
|
||||
*JobConfigs.darwin_fast_test_jobs,
|
||||
*JobConfigs.unittest_jobs,
|
||||
*JobConfigs.unittest_llvm_coverage_job,
|
||||
JobConfigs.docker_server,
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
from praktika import Job, Workflow
|
||||
|
||||
from ci.defs.defs import BASE_BRANCH, SECRETS, RunnerLabels
|
||||
|
||||
# Nightly sync of the ClickHouse Cloud API reference docs from the live OpenAPI
|
||||
# spec (https://api.clickhouse.cloud/v1). The job regenerates the per-endpoint
|
||||
# pages + docs.json navigation so each endpoint carries its own maturity badge
|
||||
# (Beta / Private preview / Deprecated), and opens or refreshes a single bot PR
|
||||
# when the docs drift from the spec. See ci/jobs/cloud_api_docs_nightly.py.
|
||||
|
||||
workflow = Workflow.Config(
|
||||
name="NightlyCloudAPIDocs",
|
||||
event=Workflow.Event.SCHEDULE,
|
||||
branches=[BASE_BRANCH],
|
||||
jobs=[
|
||||
Job.Config(
|
||||
name="Sync Cloud API docs",
|
||||
command="python3 ./ci/jobs/cloud_api_docs_nightly.py",
|
||||
runs_on=RunnerLabels.STYLE_CHECK_ARM,
|
||||
enable_gh_auth=True,
|
||||
),
|
||||
],
|
||||
secrets=SECRETS,
|
||||
enable_report=True,
|
||||
enable_cidb=False,
|
||||
cron_schedules=["13 7 * * *"],
|
||||
)
|
||||
|
||||
WORKFLOWS = [
|
||||
workflow,
|
||||
]
|
||||
@@ -5,7 +5,6 @@ from ci.defs.defs import (
|
||||
DOCKERS,
|
||||
SECRETS,
|
||||
ArtifactConfigs,
|
||||
ArtifactNames,
|
||||
JobNames,
|
||||
)
|
||||
from ci.defs.job_configs import JobConfigs
|
||||
@@ -14,7 +13,7 @@ from ci.jobs.scripts.workflow_hooks.trusted import can_be_tested
|
||||
|
||||
ALL_FUNCTIONAL_TESTS = [job.name for job in JobConfigs.functional_tests_jobs]
|
||||
|
||||
FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES = [
|
||||
CORE_BLOCKING_JOB_NAMES = [
|
||||
job.name
|
||||
for job in JobConfigs.functional_tests_jobs
|
||||
if any(
|
||||
@@ -22,16 +21,24 @@ FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES = [
|
||||
for substr in (
|
||||
"_debug, parallel",
|
||||
"_binary, parallel",
|
||||
"_binary, sequential",
|
||||
"_asan_ubsan, distributed plan, parallel",
|
||||
"_asan_ubsan, db disk, distributed plan, sequential",
|
||||
"_tsan, parallel",
|
||||
)
|
||||
)
|
||||
] + [
|
||||
job.name
|
||||
for job in JobConfigs.integration_test_jobs_required
|
||||
if "_asan_ubsan, db disk, old analyzer" in job.name
|
||||
] + [
|
||||
job.name
|
||||
for job in JobConfigs.unittest_jobs
|
||||
]
|
||||
|
||||
STYLE_AND_FAST_TESTS = [
|
||||
JobNames.STYLE_CHECK,
|
||||
JobNames.FAST_TEST,
|
||||
JobNames.CI_TESTS,
|
||||
*[j.name for j in JobConfigs.tidy_build_arm_jobs],
|
||||
]
|
||||
|
||||
@@ -56,7 +63,7 @@ workflow = Workflow.Config(
|
||||
JobConfigs.docs_job,
|
||||
JobConfigs.docs_job_mintlify,
|
||||
JobConfigs.fast_test,
|
||||
JobConfigs.ci_tests,
|
||||
JobConfigs.ci_tests.set_run_after(CORE_BLOCKING_JOB_NAMES),
|
||||
*JobConfigs.darwin_fast_test_jobs,
|
||||
*JobConfigs.tidy_build_arm_jobs,
|
||||
*[job.set_run_after(STYLE_AND_FAST_TESTS) for job in JobConfigs.build_jobs],
|
||||
@@ -65,15 +72,11 @@ workflow = Workflow.Config(
|
||||
for job in JobConfigs.extra_validation_build_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(REGULAR_BUILD_NAMES)
|
||||
for job in JobConfigs.release_build_jobs
|
||||
],
|
||||
*[
|
||||
(
|
||||
job.set_provides([ArtifactNames.ARM_FUZZERS, ArtifactNames.FUZZERS_CORPUS])
|
||||
if "fuzzers" in job.name
|
||||
else job
|
||||
).set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.special_build_jobs
|
||||
],
|
||||
*[job.set_run_after(STYLE_AND_FAST_TESTS) for job in JobConfigs.build_llvm_coverage_job],
|
||||
@@ -90,74 +93,97 @@ workflow = Workflow.Config(
|
||||
# `allow_failure=True` so an individual FAIL doesn't block PR merge -
|
||||
# the aggregate decision (validate iff at least one arch passed) lives
|
||||
# in the `new_tests_check.py` workflow post-hook below.
|
||||
*JobConfigs.bugfix_validation_ft_pr_jobs,
|
||||
*JobConfigs.bugfix_validation_it_jobs,
|
||||
*[
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.bugfix_validation_ft_pr_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.bugfix_validation_it_jobs
|
||||
],
|
||||
*[
|
||||
j.set_run_after(
|
||||
FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES
|
||||
if j.name not in FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES
|
||||
CORE_BLOCKING_JOB_NAMES
|
||||
if j.name not in CORE_BLOCKING_JOB_NAMES
|
||||
else []
|
||||
)
|
||||
for j in JobConfigs.functional_tests_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.functional_tests_jobs_azure
|
||||
],
|
||||
*JobConfigs.functional_test_llvm_coverage_jobs,
|
||||
*JobConfigs.functional_test_excluded_from_llvm_job,
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.functional_test_llvm_coverage_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.functional_test_excluded_from_llvm_job
|
||||
],
|
||||
*[
|
||||
job.set_run_after(
|
||||
CORE_BLOCKING_JOB_NAMES if job.name not in CORE_BLOCKING_JOB_NAMES else []
|
||||
)
|
||||
for job in JobConfigs.integration_test_jobs_required[:]
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.integration_test_jobs_non_required
|
||||
],
|
||||
*JobConfigs.integration_test_llvm_coverage_jobs,
|
||||
*JobConfigs.integration_test_excluded_from_llvm_job,
|
||||
*[
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.integration_test_llvm_coverage_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.integration_test_excluded_from_llvm_job
|
||||
],
|
||||
*JobConfigs.unittest_jobs,
|
||||
*JobConfigs.unittest_llvm_coverage_job,
|
||||
*[
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.unittest_llvm_coverage_job
|
||||
],
|
||||
JobConfigs.docker_server.set_run_after(
|
||||
FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES
|
||||
CORE_BLOCKING_JOB_NAMES
|
||||
),
|
||||
JobConfigs.docker_keeper.set_run_after(
|
||||
FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES
|
||||
CORE_BLOCKING_JOB_NAMES
|
||||
),
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.install_check_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.compatibility_test_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.stress_test_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.upgrade_test_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.ast_fuzzer_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.buzz_fuzzer_jobs
|
||||
],
|
||||
*[
|
||||
job.set_run_after(FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES)
|
||||
job.set_run_after(CORE_BLOCKING_JOB_NAMES)
|
||||
for job in JobConfigs.performance_comparison_with_master_head_jobs
|
||||
],
|
||||
JobConfigs.llvm_coverage_job,
|
||||
JobConfigs.sqllogic_test_master_job.set_run_after(
|
||||
FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES
|
||||
CORE_BLOCKING_JOB_NAMES
|
||||
),
|
||||
JobConfigs.sqlstorm_test_job.set_run_after(
|
||||
FUNCTIONAL_TESTS_PARALLEL_BLOCKING_JOB_NAMES
|
||||
CORE_BLOCKING_JOB_NAMES
|
||||
),
|
||||
# Keeper stress (PR): 3 no-fault scenarios (prod-mix, read-multi, write-multi),
|
||||
# default backend only, 15 min each. Runs when src/Coordination or stress test files change.
|
||||
|
||||
Vendored
+3
@@ -81,6 +81,7 @@ add_contrib (libcpuid-cmake libcpuid)
|
||||
add_contrib (libdivide-cmake)
|
||||
add_contrib (libmetrohash)
|
||||
add_contrib (lz4-cmake lz4)
|
||||
add_contrib (libdeflate-cmake libdeflate)
|
||||
add_contrib (murmurhash)
|
||||
add_contrib (replxx-cmake replxx)
|
||||
add_contrib (libpng-cmake libpng) # requires: zlib
|
||||
@@ -268,6 +269,8 @@ add_contrib (clickstack-cmake clickstack)
|
||||
add_contrib (librseq-cmake librseq)
|
||||
add_contrib (silk-cmake silk)
|
||||
|
||||
add_contrib (sz3-cmake sz3)
|
||||
|
||||
# Put all targets defined here and in subdirectories under "contrib/<immediate-subdir>" folders in GUI-based IDEs.
|
||||
# Some of third-party projects may override CMAKE_FOLDER or FOLDER property of their targets, so they would not appear
|
||||
# in "contrib/..." as originally planned, so we workaround this by fixing FOLDER properties of all targets manually,
|
||||
|
||||
Vendored
+1
-1
Submodule contrib/c-ares updated: 3ac47ee46e...c7a3138dcf
@@ -145,7 +145,10 @@ if (SANITIZE STREQUAL "memory")
|
||||
elseif (SANITIZE STREQUAL "thread")
|
||||
set(RUST_CARGO_BUILD_STD "-Zbuild-std=std,panic_abort,core,alloc")
|
||||
list(APPEND RUSTFLAGS "-Zsanitizer=thread")
|
||||
elseif (SANITIZE STREQUAL "address")
|
||||
elseif (SANITIZE STREQUAL "address" OR SANITIZE STREQUAL "address,undefined")
|
||||
# Rust has no UBSan, so the combined ASan+UBSan build applies only ASan. Besides the
|
||||
# instrumentation itself, `-Zsanitizer=address` arms wasmtime's `cfg(asan)` guard, preventing
|
||||
# a stray munmap of live memory at thread exit: https://github.com/bytecodealliance/wasmtime/issues/13857
|
||||
set(RUST_CARGO_BUILD_STD "-Zbuild-std=std,panic_abort,core,alloc")
|
||||
list(APPEND RUSTFLAGS "-Zsanitizer=address")
|
||||
endif()
|
||||
|
||||
Vendored
+1
-1
Submodule contrib/libarchive updated: ded82291ab...7219b0134d
@@ -1028,6 +1028,9 @@ typedef uint64_t uintmax_t;
|
||||
/* Define to 1 if you have the <stdarg.h> header file. */
|
||||
#define HAVE_STDARG_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdckdint.h> header file. */
|
||||
#define HAVE_STDCKDINT_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#define HAVE_STDINT_H 1
|
||||
|
||||
|
||||
+1
Submodule contrib/libdeflate added at ec0718b8e0
@@ -0,0 +1,30 @@
|
||||
option (ENABLE_LIBDEFLATE "Enable libdeflate (fast one-shot DEFLATE/zlib/gzip codec)" ${ENABLE_LIBRARIES})
|
||||
|
||||
if (NOT ENABLE_LIBDEFLATE)
|
||||
message(STATUS "Not using libdeflate")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(LIBDEFLATE_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/libdeflate")
|
||||
|
||||
# Architecture-specific code is pulled in via headers from these translation units, so the same
|
||||
# source list builds on every target; the per-arch cpu_features.c files compile to nothing on a
|
||||
# foreign architecture.
|
||||
set(SRCS
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/utils.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/arm/cpu_features.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/x86/cpu_features.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/deflate_compress.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/deflate_decompress.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/adler32.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/zlib_compress.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/zlib_decompress.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/crc32.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/gzip_compress.c"
|
||||
"${LIBDEFLATE_SOURCE_DIR}/lib/gzip_decompress.c"
|
||||
)
|
||||
|
||||
add_library(_libdeflate ${SRCS})
|
||||
add_library(ch_contrib::libdeflate ALIAS _libdeflate)
|
||||
|
||||
target_include_directories(_libdeflate SYSTEM BEFORE PUBLIC "${LIBDEFLATE_SOURCE_DIR}")
|
||||
Vendored
+1
-1
Submodule contrib/libpng updated: 0e37c0b477...3061454d98
+1
Submodule contrib/sz3 added at 596b59b3ee
@@ -0,0 +1,23 @@
|
||||
option(ENABLE_SZ3 "Enable SZ3" ${ENABLE_LIBRARIES})
|
||||
|
||||
if (NOT ENABLE_SZ3)
|
||||
message (STATUS "Not using SZ3")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# SZ3 is still under development, it writes its current version into the serialized compressed data.
|
||||
# Therefore, update SZ3 with care to avoid breaking existing persistencies.
|
||||
|
||||
# File contrib/sz3-cmake/SZ3/version.hpp was statically generated from version.hpp.in in contrib/sz3.
|
||||
# It must be updated when the library is updated. Refer to contrib/sz3/README.md for that (section #Installation).
|
||||
# Turn off ska hash because ska::unordered_map (this is inner hash map) doesn't work with UB sanitizer.
|
||||
set(SZ3_USE_SKA_HASH OFF)
|
||||
set(SZ3_PROJECT_DIR "${ClickHouse_SOURCE_DIR}/contrib/sz3")
|
||||
set(SZ3_SOURCE_DIR "${SZ3_PROJECT_DIR}/include")
|
||||
set(SZ3_VERSION_DIR "${ClickHouse_SOURCE_DIR}/contrib/sz3-cmake")
|
||||
|
||||
add_library(_sz3 INTERFACE)
|
||||
target_include_directories(_sz3 SYSTEM INTERFACE ${SZ3_SOURCE_DIR})
|
||||
target_include_directories(_sz3 SYSTEM INTERFACE ${SZ3_VERSION_DIR})
|
||||
|
||||
add_library(ch_contrib::sz3 ALIAS _sz3)
|
||||
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// DO NOT MODIFY version.hpp, it is automatically generated by cmake
|
||||
// Change the version numbers in CMakeLists.txt
|
||||
//
|
||||
|
||||
#ifndef SZ3_VERSION_HPP
|
||||
#define SZ3_VERSION_HPP
|
||||
#include <sstream>
|
||||
|
||||
#define SZ3_MAGIC_NUMBER 0xF342F310
|
||||
|
||||
#define SZ3_NAME "SZ3"
|
||||
#define SZ3_VER "3.3.2"
|
||||
#define SZ3_VER_MAJOR 3
|
||||
#define SZ3_VER_MINOR 3
|
||||
#define SZ3_VER_PATCH 2
|
||||
#define SZ3_VER_TWEAK 0
|
||||
|
||||
#define SZ3_DATA_VER "3.3.2"
|
||||
|
||||
inline uint32_t versionInt(const std::string& version) {
|
||||
uint32_t major = 0, minor = 0, patch = 0;
|
||||
char dot;
|
||||
std::stringstream ss(version);
|
||||
ss >> major >> dot >> minor >> dot >> patch;
|
||||
return (major << 24) | (minor << 16) | (patch<<8);
|
||||
}
|
||||
|
||||
inline std::string versionStr(uint32_t version) {
|
||||
uint32_t major = (version >> 24) & 0xFF;
|
||||
uint32_t minor = (version >> 16) & 0xFF;
|
||||
uint32_t patch = (version >> 8) & 0xFF;
|
||||
return std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(patch);
|
||||
}
|
||||
|
||||
#endif //SZ3_VERSION_HPP
|
||||
+3
-9
@@ -8,11 +8,6 @@ drafts/
|
||||
|
||||
# Skill scaffolds (internal docs for Claude Code, not user-facing pages).
|
||||
# Ignore everything under .mintlify/ EXCEPT each skill's SKILL.md definition.
|
||||
# The deploy pipeline honors .mintignore, so ignoring all of .mintlify/ hid the
|
||||
# SKILL.md files from skill discovery and they never published to
|
||||
# /.well-known/agent-skills. Keeping SKILL.md visible lets the deploy publish the
|
||||
# agent skills, while scaffolding (rules/, reference/, metadata.json, AGENTS.md,
|
||||
# etc.) stays ignored so it never becomes a doc page.
|
||||
.mintlify/*
|
||||
!.mintlify/skills/
|
||||
.mintlify/skills/*/*
|
||||
@@ -24,11 +19,10 @@ drafts/
|
||||
# declared" on re-injection) and can abort injection of the real scripts.
|
||||
_site/styles/
|
||||
|
||||
# Legacy Docusaurus content at the docs root. Anchor with a leading slash so
|
||||
# these match only the top-level dirs -- an unanchored `changelogs/` also matched
|
||||
# `resources/changelogs/` (gitignore any-depth semantics) and hid the real,
|
||||
# published changelog pages, which docs.json still references.
|
||||
# Legacy content in the docs folder. Anchored to the top level so that
|
||||
# resources/changelogs/ (and its locale copies) stays published.
|
||||
/_description_templates/
|
||||
/_includes/
|
||||
/changelogs/
|
||||
/en/
|
||||
/get-started/quickstarts/_TEMPLATE.mdx
|
||||
|
||||
@@ -1,556 +0,0 @@
|
||||
Row 1:
|
||||
──────
|
||||
count(): 6344
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
read
|
||||
|
||||
DB::ReadBufferFromFileDescriptor::nextImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/ReadBufferFromFileDescriptor.cpp:56
|
||||
DB::CompressedReadBufferBase::readCompressedData(unsigned long&, unsigned long&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/ReadBuffer.h:54
|
||||
DB::CompressedReadBufferFromFile::nextImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Compression/CompressedReadBufferFromFile.cpp:22
|
||||
DB::CompressedReadBufferFromFile::seek(unsigned long, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Compression/CompressedReadBufferFromFile.cpp:63
|
||||
DB::MergeTreeReaderStream::seekToMark(unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReaderStream.cpp:200
|
||||
std::_Function_handler<DB::ReadBuffer* (std::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> > const&), DB::MergeTreeReader::readData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn&, unsigned long, bool, unsigned long, bool)::{lambda(bool)#1}::operator()(bool) const::{lambda(std::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> > const&)#1}>::_M_invoke(std::_Any_data const&, std::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> > const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:212
|
||||
DB::IDataType::deserializeBinaryBulkWithMultipleStreams(DB::IColumn&, unsigned long, DB::IDataType::DeserializeBinaryBulkSettings&, std::shared_ptr<DB::IDataType::DeserializeBinaryBulkState>&) const
|
||||
/usr/local/include/c++/9.1.0/bits/std_function.h:690
|
||||
DB::MergeTreeReader::readData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn&, unsigned long, bool, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:232
|
||||
DB::MergeTreeReader::readRows(unsigned long, bool, unsigned long, DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:111
|
||||
DB::MergeTreeRangeReader::DelayedStream::finalize(DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:35
|
||||
DB::MergeTreeRangeReader::continueReadingChain(DB::MergeTreeRangeReader::ReadResult&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:219
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:487
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 2:
|
||||
──────
|
||||
count(): 3295
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
__pthread_cond_wait
|
||||
|
||||
std::condition_variable::wait(std::unique_lock<std::mutex>&)
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/src/c++11/../../../../../gcc-9.1.0/libstdc++-v3/src/c++11/condition_variable.cc:55
|
||||
Poco::Semaphore::wait()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../contrib/poco/Foundation/src/Semaphore.cpp:61
|
||||
DB::UnionBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/x86_64-pc-linux-gnu/bits/gthr-default.h:748
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Core/Block.h:90
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::LimitBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::AsynchronousBlockInputStream::calculate()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
std::_Function_handler<void (), DB::AsynchronousBlockInputStream::next()::{lambda()#1}>::_M_invoke(std::_Any_data const&)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:551
|
||||
ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::_List_iterator<ThreadFromGlobalPool>)
|
||||
/usr/local/include/c++/9.1.0/x86_64-pc-linux-gnu/bits/gthr-default.h:748
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::function<void ()>, int, std::optional<unsigned long>)::{lambda()#3}>(ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::function<void ()>, int, std::optional<unsigned long>)::{lambda()#3}&&)::{lambda()#1}::operator()() const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/ThreadPool.h:146
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 3:
|
||||
──────
|
||||
count(): 1978
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
DB::VolnitskyBase<true, true, DB::StringSearcher<true, true> >::search(unsigned char const*, unsigned long) const
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::MatchImpl<true, false>::vector_constant(DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::FunctionsStringSearch<DB::MatchImpl<true, false>, DB::NameLike>::executeImpl(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::PreparedFunctionImpl::execute(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Functions/IFunction.cpp:464
|
||||
DB::ExpressionAction::execute(DB::Block&, bool) const
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:677
|
||||
DB::ExpressionActions::execute(DB::Block&, bool) const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Interpreters/ExpressionActions.cpp:739
|
||||
DB::MergeTreeRangeReader::executePrewhereActionsAndFilterColumns(DB::MergeTreeRangeReader::ReadResult&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:660
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:546
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 4:
|
||||
──────
|
||||
count(): 1913
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
DB::VolnitskyBase<true, true, DB::StringSearcher<true, true> >::search(unsigned char const*, unsigned long) const
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::MatchImpl<true, false>::vector_constant(DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::FunctionsStringSearch<DB::MatchImpl<true, false>, DB::NameLike>::executeImpl(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::PreparedFunctionImpl::execute(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Functions/IFunction.cpp:464
|
||||
DB::ExpressionAction::execute(DB::Block&, bool) const
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:677
|
||||
DB::ExpressionActions::execute(DB::Block&, bool) const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Interpreters/ExpressionActions.cpp:739
|
||||
DB::MergeTreeRangeReader::executePrewhereActionsAndFilterColumns(DB::MergeTreeRangeReader::ReadResult&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:660
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:546
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 5:
|
||||
──────
|
||||
count(): 1672
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
DB::VolnitskyBase<true, true, DB::StringSearcher<true, true> >::search(unsigned char const*, unsigned long) const
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::MatchImpl<true, false>::vector_constant(DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::FunctionsStringSearch<DB::MatchImpl<true, false>, DB::NameLike>::executeImpl(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::PreparedFunctionImpl::execute(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Functions/IFunction.cpp:464
|
||||
DB::ExpressionAction::execute(DB::Block&, bool) const
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:677
|
||||
DB::ExpressionActions::execute(DB::Block&, bool) const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Interpreters/ExpressionActions.cpp:739
|
||||
DB::MergeTreeRangeReader::executePrewhereActionsAndFilterColumns(DB::MergeTreeRangeReader::ReadResult&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:660
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:546
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 6:
|
||||
──────
|
||||
count(): 1531
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
read
|
||||
|
||||
DB::ReadBufferFromFileDescriptor::nextImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/ReadBufferFromFileDescriptor.cpp:56
|
||||
DB::CompressedReadBufferBase::readCompressedData(unsigned long&, unsigned long&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/ReadBuffer.h:54
|
||||
DB::CompressedReadBufferFromFile::nextImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Compression/CompressedReadBufferFromFile.cpp:22
|
||||
void DB::deserializeBinarySSE2<4>(DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&, DB::ReadBuffer&, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/ReadBuffer.h:53
|
||||
DB::DataTypeString::deserializeBinaryBulk(DB::IColumn&, DB::ReadBuffer&, unsigned long, double) const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataTypes/DataTypeString.cpp:202
|
||||
DB::MergeTreeReader::readData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn&, unsigned long, bool, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:232
|
||||
DB::MergeTreeReader::readRows(unsigned long, bool, unsigned long, DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:111
|
||||
DB::MergeTreeRangeReader::DelayedStream::finalize(DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:35
|
||||
DB::MergeTreeRangeReader::startReadingChain(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:219
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 7:
|
||||
──────
|
||||
count(): 1034
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
DB::VolnitskyBase<true, true, DB::StringSearcher<true, true> >::search(unsigned char const*, unsigned long) const
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::MatchImpl<true, false>::vector_constant(DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::FunctionsStringSearch<DB::MatchImpl<true, false>, DB::NameLike>::executeImpl(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long)
|
||||
/opt/milovidov/ClickHouse/build_gcc9/programs/clickhouse
|
||||
DB::PreparedFunctionImpl::execute(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Functions/IFunction.cpp:464
|
||||
DB::ExpressionAction::execute(DB::Block&, bool) const
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:677
|
||||
DB::ExpressionActions::execute(DB::Block&, bool) const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Interpreters/ExpressionActions.cpp:739
|
||||
DB::MergeTreeRangeReader::executePrewhereActionsAndFilterColumns(DB::MergeTreeRangeReader::ReadResult&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:660
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:546
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 8:
|
||||
──────
|
||||
count(): 989
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
__lll_lock_wait
|
||||
|
||||
pthread_mutex_lock
|
||||
|
||||
DB::MergeTreeReaderStream::loadMarks()
|
||||
/usr/local/include/c++/9.1.0/bits/std_mutex.h:103
|
||||
DB::MergeTreeReaderStream::MergeTreeReaderStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, DB::MarkCache*, bool, DB::UncompressedCache*, unsigned long, unsigned long, unsigned long, DB::MergeTreeIndexGranularityInfo const*, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReaderStream.cpp:107
|
||||
std::_Function_handler<void (std::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> > const&), DB::MergeTreeReader::addStreams(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)::{lambda(std::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> > const&)#1}>::_M_invoke(std::_Any_data const&, std::vector<DB::IDataType::Substream, std::allocator<DB::IDataType::Substream> > const&)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_ptr.h:147
|
||||
DB::MergeTreeReader::addStreams(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:677
|
||||
DB::MergeTreeReader::MergeTreeReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<DB::MergeTreeDataPart const> const&, DB::NamesAndTypesList const&, DB::UncompressedCache*, DB::MarkCache*, bool, DB::MergeTreeData const&, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, unsigned long, unsigned long, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, double> > > const&, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_list.h:303
|
||||
DB::MergeTreeThreadSelectBlockInputStream::getNewTask()
|
||||
/usr/local/include/c++/9.1.0/bits/std_function.h:259
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:54
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 9:
|
||||
───────
|
||||
count(): 779
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
void DB::deserializeBinarySSE2<4>(DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&, DB::ReadBuffer&, unsigned long)
|
||||
/usr/local/lib/gcc/x86_64-pc-linux-gnu/9.1.0/include/emmintrin.h:727
|
||||
DB::DataTypeString::deserializeBinaryBulk(DB::IColumn&, DB::ReadBuffer&, unsigned long, double) const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataTypes/DataTypeString.cpp:202
|
||||
DB::MergeTreeReader::readData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn&, unsigned long, bool, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:232
|
||||
DB::MergeTreeReader::readRows(unsigned long, bool, unsigned long, DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:111
|
||||
DB::MergeTreeRangeReader::DelayedStream::finalize(DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:35
|
||||
DB::MergeTreeRangeReader::startReadingChain(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:219
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
|
||||
|
||||
Row 10:
|
||||
───────
|
||||
count(): 666
|
||||
sym: StackTrace::StackTrace(ucontext_t const&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Common/StackTrace.cpp:208
|
||||
DB::(anonymous namespace)::writeTraceInfo(DB::TimerType, int, siginfo_t*, void*) [clone .isra.0]
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/IO/BufferBase.h:99
|
||||
|
||||
|
||||
void DB::deserializeBinarySSE2<4>(DB::PODArray<unsigned char, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&, DB::PODArray<unsigned long, 4096ul, AllocatorWithHint<false, AllocatorHints::DefaultHint, 67108864ul>, 15ul, 16ul>&, DB::ReadBuffer&, unsigned long)
|
||||
/usr/local/lib/gcc/x86_64-pc-linux-gnu/9.1.0/include/emmintrin.h:727
|
||||
DB::DataTypeString::deserializeBinaryBulk(DB::IColumn&, DB::ReadBuffer&, unsigned long, double) const
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataTypes/DataTypeString.cpp:202
|
||||
DB::MergeTreeReader::readData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn&, unsigned long, bool, unsigned long, bool)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:232
|
||||
DB::MergeTreeReader::readRows(unsigned long, bool, unsigned long, DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeReader.cpp:111
|
||||
DB::MergeTreeRangeReader::DelayedStream::finalize(DB::Block&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:35
|
||||
DB::MergeTreeRangeReader::startReadingChain(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeRangeReader.cpp:219
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeRangeReader::read(unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> >&)
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readFromPartImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp:158
|
||||
DB::MergeTreeBaseSelectBlockInputStream::readImpl()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ExpressionBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ExpressionBlockInputStream.cpp:34
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::PartialSortingBlockInputStream::readImpl()
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/PartialSortingBlockInputStream.cpp:13
|
||||
DB::IBlockInputStream::read()
|
||||
/usr/local/include/c++/9.1.0/bits/stl_vector.h:108
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::loop(unsigned long)
|
||||
/usr/local/include/c++/9.1.0/bits/atomic_base.h:419
|
||||
DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)
|
||||
/home/milovidov/ClickHouse/build_gcc9/../src/DataStreams/ParallelInputsProcessor.h:215
|
||||
ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*, std::shared_ptr<DB::ThreadGroupStatus>, unsigned long&>(void (DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::*&&)(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long), DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>*&&, std::shared_ptr<DB::ThreadGroupStatus>&&, unsigned long&)::{lambda()#1}::operator()() const
|
||||
/usr/local/include/c++/9.1.0/bits/shared_ptr_base.h:729
|
||||
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
|
||||
/usr/local/include/c++/9.1.0/bits/unique_lock.h:69
|
||||
execute_native_thread_routine
|
||||
/home/milovidov/ClickHouse/ci/workspace/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:81
|
||||
start_thread
|
||||
|
||||
__clone
|
||||
+269
-46
@@ -26,6 +26,7 @@ import json
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
import unicodedata
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
@@ -35,13 +36,16 @@ THIS_REPO = Path(__file__).resolve().parent.parent
|
||||
DEFAULT_DOCUSAURUS = Path.home() / "Desktop" / "clickhouse-docs"
|
||||
SKIP_DIRS = {"node_modules", ".git", "i18n", ".claude", ".mintlify", "scripts", "snippets", "static"}
|
||||
# Translation dirs are managed by the localisation bot — never migrate them.
|
||||
TRANSLATION_DIRS = {"ja", "ko", "ru", "zh", "es", "pt-BR"}
|
||||
TRANSLATION_DIRS = {"ar", "es", "fr", "ja", "ko", "pt-BR", "ru", "zh"}
|
||||
# Same as SKIP_DIRS but allows the migrator's `--all` to descend into snippets/
|
||||
# so partials get the same transforms as pages.
|
||||
ITER_SKIP_DIRS = (SKIP_DIRS | TRANSLATION_DIRS) - {"snippets"}
|
||||
EXTS = (".md", ".mdx")
|
||||
RUNNABLE_IMPORT = 'import { RunnableCode } from "/snippets/components/RunnableCode/RunnableCode.jsx";'
|
||||
IMAGE_IMPORT = 'import { Image } from "/snippets/components/Image.jsx";'
|
||||
AGENT_PROMPT_IMPORT = (
|
||||
'import { AgentPrompt } from "/snippets/components/AgentPrompt/AgentPrompt.jsx";'
|
||||
)
|
||||
ADMON_TAG = {"note": "Note", "tip": "Tip", "info": "Info", "warning": "Warning",
|
||||
"caution": "Warning", "danger": "Danger", "important": "Warning"}
|
||||
|
||||
@@ -727,6 +731,68 @@ def _override_kapalink_ask_ai(text: str) -> str:
|
||||
return re.sub(r"<KapaLink>(.*?)</KapaLink>", repl, text, flags=re.DOTALL)
|
||||
|
||||
|
||||
def _override_clickstack_collector_agent_prompt(text: str) -> str:
|
||||
"""Point the ClickStack collector prompt at the official agent skill.
|
||||
|
||||
The upstream Docusaurus page still uses the docs-hosted ``SKILL.md`` URL.
|
||||
The canonical skill now lives in ``ClickHouse/agent-skills``. Installation
|
||||
is a prerequisite; the copied prompt must then invoke the collector skill.
|
||||
"""
|
||||
text = re.sub(
|
||||
r'prompt="(?:[^"]*clickstack-otel-collector/SKILL\.md|'
|
||||
r'npx skills add clickhouse/agent-skills)"',
|
||||
(
|
||||
'prompt="Use the clickstack-otel-collector skill to wire an '
|
||||
'OpenTelemetry collector into my Managed ClickStack service."'
|
||||
),
|
||||
text,
|
||||
)
|
||||
if "npx skills add clickhouse/agent-skills" not in text:
|
||||
text = text.replace(
|
||||
"<AgentPrompt",
|
||||
"Install the official ClickHouse agent skills before using the setup assistant:\n\n"
|
||||
"```bash\n"
|
||||
"npx skills add clickhouse/agent-skills\n"
|
||||
"```\n\n"
|
||||
"<AgentPrompt",
|
||||
1,
|
||||
)
|
||||
if "repositoryUrl=" not in text:
|
||||
text = re.sub(
|
||||
r'(^\s*description="[^"]*"\s*$)',
|
||||
r'\1\n repositoryUrl="https://github.com/ClickHouse/agent-skills"',
|
||||
text,
|
||||
count=1,
|
||||
flags=re.MULTILINE,
|
||||
)
|
||||
return text
|
||||
|
||||
|
||||
def _override_clickpipe_get_started(text: str, snippet_path: str) -> str:
|
||||
"""Use provider-specific wrappers because Mint snippets do not reliably
|
||||
pass variables through a parent that renders nested snippets."""
|
||||
text = text.replace("/snippets/_create_clickpipe.mdx", snippet_path)
|
||||
return re.sub(
|
||||
r'<CreateClickPipe\s+(?:storageProvider|provider)=(?:"[^"]*"|\'[^\']*\')\s*/>',
|
||||
"<CreateClickPipe />",
|
||||
text,
|
||||
)
|
||||
|
||||
|
||||
def _override_s3_clickpipe_get_started(text: str) -> str:
|
||||
return _override_clickpipe_get_started(
|
||||
text,
|
||||
"/snippets/clickpipes/object-storage/_create_s3_clickpipe.mdx",
|
||||
)
|
||||
|
||||
|
||||
def _override_gcs_clickpipe_get_started(text: str) -> str:
|
||||
return _override_clickpipe_get_started(
|
||||
text,
|
||||
"/snippets/clickpipes/object-storage/_create_gcs_clickpipe.mdx",
|
||||
)
|
||||
|
||||
|
||||
POST_TRANSFORM_OVERRIDES: dict[str, callable] = {
|
||||
"docs/sql-reference/data-types/newjson.md": _override_newjson,
|
||||
"docs/use-cases/AI_ML/MCP/03_librechat.md": _override_librechat,
|
||||
@@ -746,16 +812,22 @@ POST_TRANSFORM_OVERRIDES: dict[str, callable] = {
|
||||
"docs/interfaces/third-party/integrations.md": _override_third_party_libraries_sidebar,
|
||||
# <KapaLink> is a Docusaurus-only component; rewrite to a Mintlify Ask AI button.
|
||||
"docs/troubleshooting/index.md": _override_kapalink_ask_ai,
|
||||
"docs/use-cases/observability/clickstack/managed-onboarding/setting-up-your-opentelemetry-collector.md": (
|
||||
_override_clickstack_collector_agent_prompt
|
||||
),
|
||||
"docs/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/02_get-started.md": (
|
||||
_override_s3_clickpipe_get_started
|
||||
),
|
||||
"docs/integrations/data-ingestion/clickpipes/object-storage/google-cloud-storage/02_get-started.md": (
|
||||
_override_gcs_clickpipe_get_started
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def prune_unused_mdx_imports(text: str) -> str:
|
||||
"""Drop `import X from '/path/foo.mdx';` lines where X is never used in
|
||||
the body. Mintlify hoists an imported MDX snippet's own top-level imports
|
||||
into the parent page's compiled scope; if the snippet is never rendered
|
||||
(and only imported as dead code) it still contributes those declarations,
|
||||
which collide with the page's own (e.g. both declare `Image`) and break
|
||||
the page bundle ("Identifier 'X' has already been declared")."""
|
||||
the body. Each snippet resolves the imports declared in its own file, so
|
||||
retaining an unused nested snippet import only adds dead code."""
|
||||
|
||||
def is_used(name: str, body: str) -> bool:
|
||||
# <Name>, <Name />, <Name/>, <Name attr=...>, {Name}, or {expr Name expr}
|
||||
@@ -787,35 +859,6 @@ def prune_unused_mdx_imports(text: str) -> str:
|
||||
return "\n".join(out)
|
||||
|
||||
|
||||
def strip_snippet_component_imports(text: str, dest_path: Path | None) -> str:
|
||||
"""For files under `/snippets/`, drop imports of components from
|
||||
`/snippets/components/`. Mintlify hoists snippet imports into every
|
||||
page that imports the snippet, so when both the snippet and a host
|
||||
page import (e.g.) `Image`, the combined bundle has two top-level
|
||||
declarations of the same identifier and the page bundle errors out
|
||||
with `Identifier 'Image' has already been declared`. Host pages
|
||||
always carry these component imports themselves, so dropping the
|
||||
snippet's copy is safe (and is the only thing that keeps the page
|
||||
renderable)."""
|
||||
if dest_path is None:
|
||||
return text
|
||||
try:
|
||||
rel = dest_path.relative_to(THIS_REPO).as_posix()
|
||||
except ValueError:
|
||||
return text
|
||||
if not rel.startswith("snippets/"):
|
||||
return text
|
||||
|
||||
def keep(line: str) -> bool:
|
||||
m = IMPORT_LINE_RE.match(line)
|
||||
if not m:
|
||||
return True
|
||||
src = m.group("src")
|
||||
return not src.startswith("/snippets/components/")
|
||||
|
||||
return "\n".join(line for line in text.split("\n") if keep(line))
|
||||
|
||||
|
||||
def transform_imports(text: str, lk: Lookups, issues: list[str], source_docu_path: Path | None = None, json_vars: dict[str, str] | None = None, dest_path: Path | None = None) -> tuple[str, dict[str, str]]:
|
||||
image_vars: dict[str, str] = {}
|
||||
if json_vars is None:
|
||||
@@ -834,6 +877,33 @@ def transform_imports(text: str, lk: Lookups, issues: list[str], source_docu_pat
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
def _is_translated_snippet(target_url: str | None) -> bool:
|
||||
if not target_url:
|
||||
return False
|
||||
parts = Path(target_url.lstrip("/")).parts
|
||||
return (
|
||||
len(parts) > 1
|
||||
and parts[0] == "snippets"
|
||||
and parts[1] in TRANSLATION_DIRS
|
||||
)
|
||||
|
||||
def _prefer_snippet_candidate(
|
||||
candidate: str,
|
||||
common_suffix_length: int,
|
||||
current: str | None,
|
||||
current_suffix_length: int,
|
||||
) -> bool:
|
||||
"""Prefer the closest path match, then the default locale on ties.
|
||||
|
||||
The migrator only processes default-locale source files. Translation
|
||||
directories contain snippets with the same basename and path suffix,
|
||||
so an unordered tie can otherwise make an English snippet import a
|
||||
translated copy.
|
||||
"""
|
||||
if common_suffix_length != current_suffix_length:
|
||||
return common_suffix_length > current_suffix_length
|
||||
return _is_translated_snippet(current) and not _is_translated_snippet(candidate)
|
||||
|
||||
def _import_or_drop(spec: str, target_url: str, basename: str) -> str:
|
||||
if _is_self_import(target_url):
|
||||
issues.append(f"dropped self-referential snippet import in {dest_path}: {basename}")
|
||||
@@ -880,7 +950,7 @@ def transform_imports(text: str, lk: Lookups, issues: list[str], source_docu_pat
|
||||
n = 0
|
||||
while n < len(cand_parts) and n < len(src_parts) and cand_parts[-1-n] == src_parts[-1-n]:
|
||||
n += 1
|
||||
if n > best_len:
|
||||
if _prefer_snippet_candidate(path, n, best, best_len):
|
||||
best, best_len = path, n
|
||||
return _import_or_drop(spec, best, basename)
|
||||
except (OSError, ValueError):
|
||||
@@ -919,7 +989,7 @@ def transform_imports(text: str, lk: Lookups, issues: list[str], source_docu_pat
|
||||
n = 0
|
||||
while n < len(cand_parts) and n < len(src_parts) and cand_parts[-1-n] == src_parts[-1-n]:
|
||||
n += 1
|
||||
if n > best_len:
|
||||
if _prefer_snippet_candidate(path, n, best, best_len):
|
||||
best, best_len = path, n
|
||||
if best:
|
||||
return _import_or_drop(spec, best, basename)
|
||||
@@ -1117,6 +1187,33 @@ def transform_image_components(text: str, image_vars: dict[str, str]) -> str:
|
||||
return pattern.sub(repl, text)
|
||||
|
||||
|
||||
# Docusaurus also permits inline webpack-style image expressions such as
|
||||
# `img={require('@site/static/images/example.png')}`. There is no `require`
|
||||
# function in Mintlify's browser runtime, so these expressions throw at render
|
||||
# time and the screenshots disappear. Rewrite them to public `/images/...`
|
||||
# paths, preferring the converted WebP asset when it exists in this repo.
|
||||
INLINE_SITE_IMAGE_REQUIRE_RE = re.compile(
|
||||
r"img=\{\s*require\(\s*(['\"])@site/(?:static/)?images/([^'\"]+)\1\s*\)\s*\}"
|
||||
)
|
||||
|
||||
|
||||
def transform_inline_image_requires(text: str) -> str:
|
||||
def repl(m: re.Match) -> str:
|
||||
relative_path = Path(m.group(2))
|
||||
asset_path = THIS_REPO / "images" / relative_path
|
||||
if not asset_path.is_file() and relative_path.suffix.lower() in {
|
||||
".jpg",
|
||||
".jpeg",
|
||||
".png",
|
||||
}:
|
||||
webp_path = relative_path.with_suffix(".webp")
|
||||
if (THIS_REPO / "images" / webp_path).is_file():
|
||||
relative_path = webp_path
|
||||
return f'img="/images/{relative_path.as_posix()}"'
|
||||
|
||||
return INLINE_SITE_IMAGE_REQUIRE_RE.sub(repl, text)
|
||||
|
||||
|
||||
# ----- <SvgVar ... /> -> plain <img src="..." style={{width:"3rem"}} /> -----
|
||||
# Docusaurus' webpack SVG loader treats `import Foo from '...foo.svg'` as a
|
||||
# React component, so authors write `<Foo class="image" alt="..." style={...} />`
|
||||
@@ -1182,14 +1279,118 @@ def transform_image_logo_to_img(text: str) -> str:
|
||||
# Convert `<VerticalStepper>...</VerticalStepper>` (Click UI, splits content by
|
||||
# headings of `headerLevel` — defaults to h2) into Mintlify `<Steps>`/`<Step>`
|
||||
# blocks. Each matching heading inside the stepper marks the start of a new
|
||||
# Step; the heading line (anchor and all) is preserved inside the Step body so
|
||||
# existing in-page links keep working. Headings inside fenced code blocks are
|
||||
# ignored — e.g. `## comment` inside a `shell` fence is a shell comment, not a
|
||||
# Markdown heading.
|
||||
# Step and becomes its `title`/`id` props: the `id` carries the heading's
|
||||
# `{#anchor}` (or its auto-generated slug) so existing in-page links keep
|
||||
# working, and a heading left inside the body would render the step number
|
||||
# above the title. Headings inside fenced code blocks are ignored — e.g.
|
||||
# `## comment` inside a `shell` fence is a shell comment, not a Markdown
|
||||
# heading.
|
||||
VERTICAL_STEPPER_RE = re.compile(r"<VerticalStepper\b(?P<attrs>[^>]*)>(?P<body>.*?)</VerticalStepper>", re.DOTALL)
|
||||
VERTICAL_STEPPER_SELFCLOSE_RE = re.compile(r"<VerticalStepper\b[^>]*/>\s*\n?")
|
||||
HEADER_LEVEL_RE = re.compile(r'\bheaderLevel\s*=\s*"h([1-6])"')
|
||||
FENCE_RE = re.compile(r"^[ \t]*(```+|~~~+)", re.MULTILINE)
|
||||
STEP_HEADING_RE = re.compile(
|
||||
r"^\s*#{1,6}\s+(?P<title>.*?)(?:\s*\{#(?P<anchor>[^}]+)\})?\s*$"
|
||||
)
|
||||
# Inline markup that a plain string `title` prop would render literally.
|
||||
# Only non-interactive markup (code spans, bold) is serialized into the
|
||||
# title; links and JSX are flattened out beforehand (see _flatten_links).
|
||||
STEP_TITLE_MARKUP_RE = re.compile(r"`|\*\*")
|
||||
STEP_TITLE_TOKEN_RE = re.compile(
|
||||
r"`(?P<code>[^`]+)`"
|
||||
r"|\*\*(?P<bold>[^*]+)\*\*"
|
||||
)
|
||||
# Interactive content in a step heading: a markdown link or a JSX element
|
||||
# (e.g. `<TrackedLink ...>`). The Step title element owns the anchor click
|
||||
# handler, so interactive nodes must never be serialized into `title`.
|
||||
STEP_TITLE_INTERACTIVE_RE = re.compile(r"\[[^\]]*\]\(|</?[A-Za-z]")
|
||||
|
||||
|
||||
def _step_slug(text: str) -> str:
|
||||
# GitHub-style slug of the heading's plain text, for headings without an
|
||||
# explicit `{#anchor}` — matches the anchor the renderer auto-generates.
|
||||
text = re.sub(r"\[([^\]]*)\]\([^)\s]+\)", r"\1", text)
|
||||
text = re.sub(r"</?[A-Za-z][^>]*>", "", text).replace("`", "").replace("**", "")
|
||||
out = []
|
||||
for ch in text.strip().lower():
|
||||
if ch in (" ", "-"):
|
||||
out.append("-")
|
||||
else:
|
||||
cat = unicodedata.category(ch)
|
||||
if cat[0] in ("L", "N", "M") or ch == "_":
|
||||
out.append(ch)
|
||||
return "".join(out)
|
||||
|
||||
|
||||
def _flatten_links(title: str) -> str:
|
||||
# Linked text keeps its words, tags are dropped:
|
||||
# `[Download](url) the config` -> `Download the config`,
|
||||
# `<TrackedLink ...>Download</TrackedLink> the config` -> `Download the config`.
|
||||
title = re.sub(r"\[([^\]]*)\]\([^)\s]+\)", r"\1", title)
|
||||
return re.sub(r"</?[A-Za-z][^>]*>", "", title).strip()
|
||||
|
||||
|
||||
def _claim_step_anchor(claimed: set[str], title: str, anchor: str | None) -> str:
|
||||
# Register the step's fragment id: the explicit `{#anchor}` verbatim, or
|
||||
# the auto slug suffixed with `-1`, `-2`, ... past ids already claimed.
|
||||
if not anchor:
|
||||
base = anchor = _step_slug(title)
|
||||
n = 0
|
||||
while anchor in claimed:
|
||||
n += 1
|
||||
anchor = f"{base}-{n}"
|
||||
claimed.add(anchor)
|
||||
return anchor
|
||||
|
||||
|
||||
def _claimed_ids_before(text: str, end: int) -> set[str]:
|
||||
# Fragment ids claimed by headings before `end`, in document order and
|
||||
# mirroring the renderer's assignment (explicit `{#anchor}` or the auto
|
||||
# slug), so anchorless stepper headings never reuse an earlier fragment.
|
||||
claimed: set[str] = set()
|
||||
in_fence = False
|
||||
for line in text[:end].split("\n"):
|
||||
if FENCE_RE.match(line):
|
||||
in_fence = not in_fence
|
||||
continue
|
||||
if in_fence:
|
||||
continue
|
||||
hm = STEP_HEADING_RE.match(line)
|
||||
if hm:
|
||||
_claim_step_anchor(claimed, hm.group("title").strip(), hm.group("anchor"))
|
||||
return claimed
|
||||
|
||||
|
||||
def _jsx_escape(text: str) -> str:
|
||||
return (
|
||||
text.replace("&", "&")
|
||||
.replace("{", "{")
|
||||
.replace("}", "}")
|
||||
.replace("<", "<")
|
||||
)
|
||||
|
||||
|
||||
def _step_title_attr(title: str) -> str:
|
||||
# A plain string when possible, a JSX fragment when the title carries
|
||||
# non-interactive inline markup (code spans, bold). Links and JSX must be
|
||||
# flattened out with _flatten_links before calling this.
|
||||
if not STEP_TITLE_MARKUP_RE.search(title):
|
||||
if '"' in title:
|
||||
if "'" in title:
|
||||
return 'title="%s"' % title.replace('"', """)
|
||||
return "title='%s'" % title
|
||||
return 'title="%s"' % title
|
||||
pieces = []
|
||||
pos = 0
|
||||
for m in STEP_TITLE_TOKEN_RE.finditer(title):
|
||||
pieces.append(_jsx_escape(title[pos:m.start()]))
|
||||
if m.group("code") is not None:
|
||||
pieces.append("<code>%s</code>" % _jsx_escape(m.group("code")))
|
||||
else:
|
||||
pieces.append("<strong>%s</strong>" % _jsx_escape(m.group("bold")))
|
||||
pos = m.end()
|
||||
pieces.append(_jsx_escape(title[pos:]))
|
||||
return "title={<>%s</>}" % "".join(pieces)
|
||||
|
||||
|
||||
def _heading_positions_outside_fences(body: str, level: int) -> list[int]:
|
||||
@@ -1240,10 +1441,25 @@ def transform_vertical_stepper(text: str) -> str:
|
||||
return body.strip("\n")
|
||||
prelude = body[: positions[0]].strip("\n")
|
||||
steps = []
|
||||
claimed = _claimed_ids_before(m.string, m.start())
|
||||
for i, start in enumerate(positions):
|
||||
end = positions[i + 1] if i + 1 < len(positions) else len(body)
|
||||
seg = body[start:end].strip("\n")
|
||||
steps.append(f"<Step>\n{seg}\n</Step>")
|
||||
heading, _, rest = seg.partition("\n")
|
||||
hm = STEP_HEADING_RE.match(heading)
|
||||
title = hm.group("title").strip()
|
||||
anchor = _claim_step_anchor(claimed, title, hm.group("anchor"))
|
||||
rest = rest.strip(chr(10))
|
||||
if STEP_TITLE_INTERACTIVE_RE.search(title):
|
||||
# The heading carries a link or JSX. Interactive nodes must
|
||||
# not go into the title (its element owns the anchor click
|
||||
# handler), so the title is flattened to plain text and the
|
||||
# original inline content moves to the top of the step body,
|
||||
# keeping the link usable.
|
||||
rest = title + ("\n\n" + rest if rest else "")
|
||||
title = _flatten_links(title)
|
||||
opener = '<Step %s id="%s">' % (_step_title_attr(title), anchor)
|
||||
steps.append(f"{opener}\n{rest}\n</Step>")
|
||||
out = ("" if not prelude else prelude + "\n\n") + "<Steps>\n" + "\n".join(steps) + "\n</Steps>"
|
||||
return out
|
||||
return VERTICAL_STEPPER_RE.sub(repl, text)
|
||||
@@ -1951,6 +2167,7 @@ def migrate_file(path: Path, lk: Lookups, force: bool, dry_run: bool, docusaurus
|
||||
text = transform_admonitions(text)
|
||||
text = transform_details(text)
|
||||
text = transform_tabs(text)
|
||||
text = transform_inline_image_requires(text)
|
||||
text = transform_image_components(text, image_vars)
|
||||
text = transform_svg_components(text, image_vars)
|
||||
text = transform_image_logo_to_img(text)
|
||||
@@ -1970,12 +2187,12 @@ def migrate_file(path: Path, lk: Lookups, force: bool, dry_run: bool, docusaurus
|
||||
text = _inject_import(text, RUNNABLE_IMPORT)
|
||||
if image_vars and "/snippets/components/Image.jsx" not in text:
|
||||
text = _inject_import(text, IMAGE_IMPORT)
|
||||
if re.search(r"<AgentPrompt(?:[\s/>])", text) and "AgentPrompt/AgentPrompt.jsx" not in text:
|
||||
text = _inject_import(text, AGENT_PROMPT_IMPORT)
|
||||
|
||||
# Dedupe imports to avoid `Identifier 'X' has already been declared`
|
||||
# bundle errors that would render the page blank. See the two helpers
|
||||
# for the underlying Mintlify hoisting behaviour.
|
||||
# Remove unused nested snippet imports. Imports that remain stay local to
|
||||
# the file that renders the imported snippet.
|
||||
text = prune_unused_mdx_imports(text)
|
||||
text = strip_snippet_component_imports(text, path)
|
||||
|
||||
# Apply any per-file override (rare; for upstream patterns that don't map
|
||||
# cleanly to a generic transform, e.g. <Link><CardSecondary/></Link>).
|
||||
@@ -2007,6 +2224,12 @@ SKIP_TOPLEVEL = {"AGENTS.md", "README.md", "LICENSE.md", "CHANGELOG.md", "CONTRI
|
||||
# Hand-authored files that have no faithful upstream counterpart and must not
|
||||
# be regenerated by the migrator. Paths are relative to THIS_REPO.
|
||||
SKIP_FILES = {
|
||||
# Mintlify does not reliably pass variables through a parent snippet that
|
||||
# renders nested snippets. These three hand-authored snippets split the
|
||||
# provider-specific ClickPipe steps from their shared tail.
|
||||
"snippets/_create_clickpipe.mdx",
|
||||
"snippets/clickpipes/object-storage/_create_s3_clickpipe.mdx",
|
||||
"snippets/clickpipes/object-storage/_create_gcs_clickpipe.mdx",
|
||||
# Bridges the Docusaurus pattern of importing one .md page inline into
|
||||
# another (`@site/docs/sql-reference/statements/truncate.md`). Mintlify
|
||||
# can't import full pages, so this snippet holds the SQL-ref body and is
|
||||
|
||||
@@ -115,7 +115,7 @@ https://clickhouse.com/docs/get-started/quick-start,2,/core/get-started/setup/in
|
||||
/integrations/data-visualization/metabase-and-clickhouse.md,10,/integrations/connectors/data-visualization/metabase-and-clickhouse,basename-unique,
|
||||
/integrations/language-clients/java/client/client.mdx,9,/core/concepts/features/interfaces/client,basename-ambiguous,/integrations/language-clients/java/client | /resources/contribute/native-protocol/client
|
||||
/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3,8,/core/reference/engines/table-engines/mergetree-family/mergetree,basename-unique,
|
||||
/getting-started/install/install.mdx,8,/core/get-started/install/install,basename+parent-unique,/products/chdb/install
|
||||
/getting-started/install/install.mdx,8,/core/get-started/install/install,basename+parent-unique,/chdb/install
|
||||
/knowledgebase/aws-privatelink-setup-for-clickpipes,8,,no-match,
|
||||
/integrations/data-ingestion/data-formats/json/intro.md,8,/core/guides/clickhouse/data-formats/json/intro,basename+parent-unique,/core/get-started/about/intro | /core/guides/clickhouse/data-formats/intro | /products/clickstack/migration/elastic/intro | /products/cloud/getting-started/intro
|
||||
/core/get-started/quick-start,7,/core/get-started/setup/install,manual,
|
||||
@@ -190,9 +190,9 @@ https://clickhouse.com/docs/introduction/distinctive-features/#data-compression,
|
||||
/language-clients/javascript/usage#streaming-files-nodejs-only,3,/products/cloud/guides/best-practices/usagelimits,contains-unique,
|
||||
https://clickhouse.com/docs/cloud/manage/api/swagger#tag/ClickPipes,3,,no-match,
|
||||
/sql-reference/functions/files.md/#file,3,/core/reference/functions/regular-functions/files,basename-unique,
|
||||
/managed-postgres/quickstart,3,/products/managed-postgres/quickstart,basename+parent-unique,/integrations/clickpipes/mongodb/quickstart | /products/chdb/datastore/quickstart
|
||||
/managed-postgres/quickstart,3,/products/managed-postgres/quickstart,basename+parent-unique,/integrations/clickpipes/mongodb/quickstart | /chdb/datastore/quickstart
|
||||
/use-cases/observability/clickstack/production#configure-ttl,3,/use-cases/observability/clickstack/managing/production,redirect-direct,
|
||||
/chdb/datastore/guides/pandas-performance,3,/products/chdb/guides/pandas-performance,basename-unique,
|
||||
/chdb/datastore/guides/pandas-performance,3,/chdb/guides/pandas-performance,basename-unique,
|
||||
/core/get-started/quickstarts/create-your-first-materialized-view,2,,no-match,
|
||||
/core/get-started/quickstarts/insert-data-using-clickhouse-client,2,,no-match,
|
||||
https://clickhouse.com/docs/en/interfaces/formats,2,/core/reference/formats,manual,/core/concepts/features/interfaces/formats | /core/reference/formats | /core/reference/settings/formats | /core/reference/system-tables/formats
|
||||
@@ -262,20 +262,20 @@ https://clickhouse.com/docs/cloud/manage/api/usageCost-api-reference,2,/api-refe
|
||||
/knowledgebase/certificate_verify_failed_error,2,/resources/support-center/knowledge-base/troubleshooting/certificate-verify-failed-error,manual,
|
||||
/faq/general/why-clickhouse-is-so-fast,2,/core/get-started/about/why-clickhouse-is-so-fast,basename-unique,
|
||||
https://clickhouse.com/docs/integrations/data-formats/json,2,/core/guides/clickhouse/data-formats/json/intro,manual,/core/guides/clickhouse/data-formats/json/exporting | /core/guides/clickhouse/data-formats/json/formats | /core/guides/clickhouse/data-formats/json/inference | /core/guides/clickhouse/data-formats/json/intro | /core/guides/clickhouse/data-formats/json/loading
|
||||
/chdb/guides/querying-pandas,2,/products/chdb/guides/querying-pandas,basename-unique,
|
||||
/chdb/guides/querying-pandas,2,/chdb/guides/querying-pandas,basename-unique,
|
||||
/managed-postgres/overview,2,/products/managed-postgres/overview,basename+parent-unique,/core/concepts/features/backup-restore/overview | /core/concepts/features/configuration/settings/overview | /core/concepts/features/operations/delete/overview | /core/concepts/features/operations/update/overview | /core/get-started/migration-guides/bigquery/overview | /core/get-started/migration-guides/elastic/overview | /core/get-started/migration-guides/overview | /core/get-started/migration-guides/postgres/overview | /core/get-started/migration-guides/redshift/overview | /core/get-started/migration-guides/snowflake/overview | /core/get-started/use-cases/overview | /core/guides/use-cases/data-warehousing/getting-started/overview | /integrations/clickpipes/bigquery/overview | /integrations/clickpipes/kinesis/overview | /integrations/clickpipes/object-storage/amazon-s3/overview | /integrations/clickpipes/object-storage/azure-blob-storage/overview | /integrations/clickpipes/object-storage/google-cloud-storage/overview | /integrations/connectors/data-ingestion/azure/azure-data-factory/overview | /core/concepts/features/interfaces/overview | /integrations/language-clients/csharp/overview | /products/clickstack/features/dashboards/overview | /products/clickstack/ingesting-data/overview | /products/clickstack/overview | /products/cloud/features/autoscaling/overview | /products/cloud/features/backups/overview | /products/cloud/features/monitoring/overview | /products/cloud/guides/infrastructure/deployment-options/byoc/overview | /products/cloud/reference/billing/marketplace/overview | /products/kubernetes-operator/overview | /core/reference/functions/regular-functions/overview | /core/reference/statements/create/dictionary/layouts/overview | /core/reference/statements/create/dictionary/sources/overview | /core/reference/system-tables/overview
|
||||
/managed-postgres/backup-and-restore,2,/products/managed-postgres/backup-and-restore,basename-unique,
|
||||
/managed-postgres/settings,2,/products/managed-postgres/settings,basename+parent-unique,/products/cloud/reference/settings | /core/reference/settings | /core/reference/settings/server-settings/settings | /core/reference/system-tables/settings
|
||||
/cloud/reference/byoc/architecture,2,/cloud/guides/infrastructure/deployment_options/byoc/architecture,redirect-direct,
|
||||
https://clickhouse.com/docs/cloud/manage/api/swagger#/paths/~1v1~1organizations~1:organizationId~1services~1:serviceId~1scaling/patch,2,,no-match,
|
||||
/managed-postgres/quickstart#create-postgres-database,2,/products/managed-postgres/quickstart,basename+parent-unique,/integrations/clickpipes/mongodb/quickstart | /products/chdb/datastore/quickstart
|
||||
/managed-postgres/quickstart#create-postgres-database,2,/products/managed-postgres/quickstart,basename+parent-unique,/integrations/clickpipes/mongodb/quickstart | /chdb/datastore/quickstart
|
||||
/use-cases/observability/clickstack/ingesting-data/kubernetes#forwarding-resouce-tags-to-pods,2,/products/clickstack/example-datasets/kubernetes,basename-ambiguous,/products/clickstack/integration-examples/kubernetes
|
||||
/examples/host-logs-dashboard.json,2,,no-match,
|
||||
https://clickhouse.com/docs/en/sql-reference/data-types/aggregatefunction,2,/core/reference/data-types/aggregatefunction,basename-unique,
|
||||
/chdb/datastore/debugging,2,/products/chdb/debugging,basename-unique,
|
||||
/chdb/datastore/guides/pandas-differences,2,/products/chdb/guides/pandas-differences,basename-unique,
|
||||
/chdb/datastore/guides/migration-from-pandas,2,/products/chdb/guides/migration-from-pandas,basename-unique,
|
||||
/getting-started/index.md,1,/products/chdb/getting-started,basename-ambiguous,/products/clickstack/getting-started
|
||||
/chdb/datastore/debugging,2,/chdb/debugging,basename-unique,
|
||||
/chdb/datastore/guides/pandas-differences,2,/chdb/guides/pandas-differences,basename-unique,
|
||||
/chdb/datastore/guides/migration-from-pandas,2,/chdb/guides/migration-from-pandas,basename-unique,
|
||||
/getting-started/index.md,1,/chdb/getting-started,basename-ambiguous,/products/clickstack/getting-started
|
||||
https://clickhouse.com/docs/knowledgebase/fix-developer-verification-error-in-macos,1,,no-match,
|
||||
https://clickhouse.com/docs/knowledgebase/why_default_logging_verbose,1,,no-match,
|
||||
/integrations/data-ingestion/s3/index.md,1,/core/reference/engines/table-engines/integrations/s3,basename-ambiguous,/core/reference/functions/table-functions/s3
|
||||
@@ -293,7 +293,7 @@ https://clickhouse.com/docs/en/interfaces/cli,1,/core/concepts/features/interfac
|
||||
https://clickhouse.com/docs/en/cloud/bestpractices/cloud-connection,1,,no-match,
|
||||
https://clickhouse.com/docs/en/interfaces/tcp,1,/core/concepts/features/interfaces/tcp,basename-unique,
|
||||
https://clickhouse.com/docs/en/interfaces/http,1,/core/concepts/features/security/external-authenticators/http,basename-ambiguous,/core/concepts/features/interfaces/http | /core/reference/statements/create/dictionary/sources/http
|
||||
/en/operations/utilities/clickhouse-local,1,/core/concepts/features/tools-and-utilities/clickhouse-local,manual,/products/chdb/guides/clickhouse-local
|
||||
/en/operations/utilities/clickhouse-local,1,/core/concepts/features/tools-and-utilities/clickhouse-local,manual,/chdb/guides/clickhouse-local
|
||||
/core/get-started/quickstarts/common-getting-started-issues,1,/core/get-started/quickstarts/home,manual,
|
||||
/en/sql-reference/data-types/map,1,/core/reference/data-types/map,basename-unique,
|
||||
/en/sql-reference/aggregate-functions/combinators,1,/core/reference/functions/aggregate-functions/combinators,basename-unique,
|
||||
@@ -545,7 +545,7 @@ https://clickhouse.com/docs/interfaces/formats/JSON/JSONAsObject,1,,no-match,
|
||||
https://clickhouse.com/docs/interfaces/,1,/core/concepts/features/interfaces/overview,manual,
|
||||
/knowledgebase/async_vs_optimize_read_in_order#what-about-optimize_read_in_order,1,,no-match,
|
||||
https://clickhouse.com/docs/knowledgebase/find-expensive-queries#initial_query_id-vs-query_id,1,/resources/support-center/knowledge-base/performance-optimization/find-expensive-queries,basename-unique,
|
||||
/chdb/guides/querying-apache-arrow,1,/products/chdb/guides/querying-apache-arrow,basename-unique,
|
||||
/chdb/guides/querying-apache-arrow,1,/chdb/guides/querying-apache-arrow,basename-unique,
|
||||
https://clickhouse.com/docs/cloud/manage/api/swagger#tag/ClickStack,1,,no-match,
|
||||
/images/clickstack/faq/metrics-explorer.png,1,,no-match,
|
||||
/core/guides/sre/configuring-ssl,1,/core/concepts/features/security/tls/configuring-tls,manual,
|
||||
@@ -616,7 +616,7 @@ https://clickhouse.com/docs/cloud/manage/api/swagger#tag/Billing,1,,no-match,
|
||||
/use-cases/observability/clickstack/production#create-a-database-ingestion-user-managed,1,/use-cases/observability/clickstack/managing/production,redirect-direct,
|
||||
https://clickhouse.com/docs/clickhouse-operator/managing-clusters/cleanup,1,,no-match,
|
||||
https://clickhouse.com/docs/en/sql-reference/statements/select/group-by#group-by-in-external-memory,1,/core/reference/statements/select/group-by,basename-unique,
|
||||
https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference,1,/core/reference/functions/aggregate-functions/reference,basename+parent-unique,/core/guides/use-cases/data-warehousing/reference | /integrations/clickpipes/kafka/reference | /integrations/connectors/data-ingestion/etl-tools/fivetran/reference | /integrations/connectors/tools/pg_clickhouse/reference | /products/chdb/reference | /products/cloud/reference
|
||||
https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference,1,/core/reference/functions/aggregate-functions/reference,basename+parent-unique,/core/guides/use-cases/data-warehousing/reference | /integrations/clickpipes/kafka/reference | /integrations/connectors/data-ingestion/etl-tools/fivetran/reference | /integrations/connectors/tools/pg_clickhouse/reference | /chdb/reference | /products/cloud/reference
|
||||
/use-cases/observability/clickstack/features/dashboards#custom-filters,1,/products/cloud/features/sql-console-features/dashboards,basename-ambiguous,/core/reference/system-tables/dashboards
|
||||
/use-cases/observability/clickstack/managing/performance_tuning#materialize-frequently-queried-attributes,1,/products/clickstack/managing/performance-tuning,basename-unique,
|
||||
/use-cases/observability/clickstack/features/dashboards#dashboards-editing-visualizations,1,/products/cloud/features/sql-console-features/dashboards,basename-ambiguous,/core/reference/system-tables/dashboards
|
||||
@@ -625,12 +625,12 @@ https://clickhouse.com/docs/operations/backup#take-an-incremental-backup,1,/core
|
||||
/docs/products/clickhouse-private/aws#install-volumesnapshot-crds,1,/integrations/clickpipes/aws-privatelink,contains-ambiguous,/products/clickstack/ingesting-data/sdks/aws-lambda | /products/clickstack/integration-examples/aws-lambda | /products/cloud/guides/security/connectivity/private-networking/aws-privatelink | /products/cloud/reference/billing/marketplace/aws-marketplace-committed | /products/cloud/reference/billing/marketplace/aws-marketplace-payg
|
||||
/docs/products/clickhouse-private/aws#install-storageclass-via-helm,1,/integrations/clickpipes/aws-privatelink,contains-ambiguous,/products/clickstack/ingesting-data/sdks/aws-lambda | /products/clickstack/integration-examples/aws-lambda | /products/cloud/guides/security/connectivity/private-networking/aws-privatelink | /products/cloud/reference/billing/marketplace/aws-marketplace-committed | /products/cloud/reference/billing/marketplace/aws-marketplace-payg
|
||||
/docs/products/clickhouse-private/aws#naming-your-clickhouse-cluster,1,/integrations/clickpipes/aws-privatelink,contains-ambiguous,/products/clickstack/ingesting-data/sdks/aws-lambda | /products/clickstack/integration-examples/aws-lambda | /products/cloud/guides/security/connectivity/private-networking/aws-privatelink | /products/cloud/reference/billing/marketplace/aws-marketplace-committed | /products/cloud/reference/billing/marketplace/aws-marketplace-payg
|
||||
/chdb/datastore/configuration,1,/integrations/language-clients/go/configuration,basename-ambiguous,/products/chdb/configuration | /products/kubernetes-operator/guides/configuration
|
||||
/chdb/datastore/configuration/performance-mode,1,/products/chdb/configuration/performance-mode,basename-unique,
|
||||
/chdb/datastore/guides/pandas-cookbook,1,/products/chdb/guides/pandas-cookbook,basename-unique,
|
||||
/chdb/datastore/guides/pandas-to-sql,1,/products/chdb/guides/pandas-to-sql,basename-unique,
|
||||
/chdb/datastore/debugging/explain,1,/products/chdb/debugging/explain,basename+parent-unique,/core/reference/statements/explain
|
||||
/chdb/datastore/configuration/execution-engine,1,/products/chdb/configuration/execution-engine,basename-unique,
|
||||
/chdb/datastore/configuration,1,/integrations/language-clients/go/configuration,basename-ambiguous,/chdb/configuration | /products/kubernetes-operator/guides/configuration
|
||||
/chdb/datastore/configuration/performance-mode,1,/chdb/configuration/performance-mode,basename-unique,
|
||||
/chdb/datastore/guides/pandas-cookbook,1,/chdb/guides/pandas-cookbook,basename-unique,
|
||||
/chdb/datastore/guides/pandas-to-sql,1,/chdb/guides/pandas-to-sql,basename-unique,
|
||||
/chdb/datastore/debugging/explain,1,/chdb/debugging/explain,basename+parent-unique,/core/reference/statements/explain
|
||||
/chdb/datastore/configuration/execution-engine,1,/chdb/configuration/execution-engine,basename-unique,
|
||||
/faq/general/why-clickhouse-is-so-fast,2,/core/get-started/about/why-clickhouse-is-so-fast,manual,
|
||||
/cloud/manage/api/swagger,1,/api-reference/organization/get-list-of-available-organizations,manual,
|
||||
/integrations/data-ingestion/gcs,1,/integrations/connectors/data-ingestion/GCP,manual,
|
||||
|
||||
|
+130
-111
@@ -35,50 +35,50 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/changelogs/25.8,docs/cloud/reference/01_changelog/02_release_notes/25_08.md,resources/changelogs/cloud/release-notes/25_08.mdx,https://clickhouse.com/docs/changelogs/25.8,https://private-7c7dfe99.mintlify.app/resources/changelogs/cloud/release-notes/25_08,matched,d15d9066cc3c7afe,true,d15d9066cc3c7afe,2026-06-23T07:34:28+00:00,false
|
||||
/changelogs/26.2,docs/cloud/reference/01_changelog/02_release_notes/26_2.md,resources/changelogs/cloud/release-notes/26_02.mdx,https://clickhouse.com/docs/changelogs/26.2,https://private-7c7dfe99.mintlify.app/resources/changelogs/cloud/release-notes/26_02,matched,a27a6e2235aba02c,true,a27a6e2235aba02c,2026-06-23T07:34:28+00:00,false
|
||||
/changelogs/26.4,docs/cloud/reference/01_changelog/02_release_notes/26_4.md,resources/changelogs/cloud/release-notes/26_4.mdx,https://clickhouse.com/docs/changelogs/26.4,https://private-7c7dfe99.mintlify.app/resources/changelogs/cloud/release-notes/26_4,matched,9c8ed48218404fe3,true,9c8ed48218404fe3,2026-06-23T07:34:28+00:00,false
|
||||
/chdb,docs/chdb/index.md,products/chdb/index.mdx,https://clickhouse.com/docs/chdb,https://private-7c7dfe99.mintlify.app/products/chdb/index,matched,dddf9f726fa8b665,true,dddf9f726fa8b665,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/api/python,docs/chdb/api/python.md,products/chdb/api/python.mdx,https://clickhouse.com/docs/chdb/api/python,https://private-7c7dfe99.mintlify.app/products/chdb/api/python,matched,0489c0df271df2dd,true,0489c0df271df2dd,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration,docs/chdb/configuration/index.md,products/chdb/configuration/index.mdx,https://clickhouse.com/docs/chdb/configuration,https://private-7c7dfe99.mintlify.app/products/chdb/configuration/index,matched,cac5b473edcf1434,true,cac5b473edcf1434,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration/execution-engine,docs/chdb/configuration/execution-engine.md,products/chdb/configuration/execution-engine.mdx,https://clickhouse.com/docs/chdb/configuration/execution-engine,https://private-7c7dfe99.mintlify.app/products/chdb/configuration/execution-engine,matched,4ed55df4b60d45c9,true,4ed55df4b60d45c9,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration/function-config,docs/chdb/configuration/function-config.md,products/chdb/configuration/function-config.mdx,https://clickhouse.com/docs/chdb/configuration/function-config,https://private-7c7dfe99.mintlify.app/products/chdb/configuration/function-config,matched,962300ada074a915,true,962300ada074a915,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration/performance-mode,docs/chdb/configuration/performance-mode.md,products/chdb/configuration/performance-mode.mdx,https://clickhouse.com/docs/chdb/configuration/performance-mode,https://private-7c7dfe99.mintlify.app/products/chdb/configuration/performance-mode,matched,272715acde2f4786,true,272715acde2f4786,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore,docs/chdb/datastore/index.md,products/chdb/datastore/index.mdx,https://clickhouse.com/docs/chdb/datastore,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/index,matched,7d43a3455770c1a8,true,7d43a3455770c1a8,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/accessors,docs/chdb/datastore/accessors.md,products/chdb/datastore/accessors.mdx,https://clickhouse.com/docs/chdb/datastore/accessors,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/accessors,matched,d231c56ecda5460f,true,d231c56ecda5460f,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/aggregation,docs/chdb/datastore/aggregation.md,products/chdb/datastore/aggregation.mdx,https://clickhouse.com/docs/chdb/datastore/aggregation,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/aggregation,matched,25475c9287264b36,true,25475c9287264b36,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/class-reference,docs/chdb/datastore/class-reference.md,products/chdb/datastore/class-reference.mdx,https://clickhouse.com/docs/chdb/datastore/class-reference,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/class-reference,matched,7e26544f7ea684dd,true,7e26544f7ea684dd,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/execution-model,docs/chdb/datastore/execution-model.md,products/chdb/datastore/execution-model.mdx,https://clickhouse.com/docs/chdb/datastore/execution-model,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/execution-model,matched,c94ce6273fb8ae03,true,c94ce6273fb8ae03,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/factory-methods,docs/chdb/datastore/factory-methods.md,products/chdb/datastore/factory-methods.mdx,https://clickhouse.com/docs/chdb/datastore/factory-methods,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/factory-methods,matched,f7583f237c400c99,true,f7583f237c400c99,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/io,docs/chdb/datastore/io.md,products/chdb/datastore/io.mdx,https://clickhouse.com/docs/chdb/datastore/io,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/io,matched,9887802e2f517a87,true,9887802e2f517a87,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/pandas-compat,docs/chdb/datastore/pandas-compat.md,products/chdb/datastore/pandas-compat.mdx,https://clickhouse.com/docs/chdb/datastore/pandas-compat,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/pandas-compat,matched,09396fe108a4e5fc,true,09396fe108a4e5fc,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/query-building,docs/chdb/datastore/query-building.md,products/chdb/datastore/query-building.mdx,https://clickhouse.com/docs/chdb/datastore/query-building,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/query-building,matched,29573c963c59d113,true,29573c963c59d113,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/quickstart,docs/chdb/datastore/quickstart.md,products/chdb/datastore/quickstart.mdx,https://clickhouse.com/docs/chdb/datastore/quickstart,https://private-7c7dfe99.mintlify.app/products/chdb/datastore/quickstart,matched,5d0f85beb28e250c,true,5d0f85beb28e250c,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging,docs/chdb/debugging/index.md,products/chdb/debugging/index.mdx,https://clickhouse.com/docs/chdb/debugging,https://private-7c7dfe99.mintlify.app/products/chdb/debugging/index,matched,1423b47ee348921b,true,1423b47ee348921b,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging/explain,docs/chdb/debugging/explain.md,products/chdb/debugging/explain.mdx,https://clickhouse.com/docs/chdb/debugging/explain,https://private-7c7dfe99.mintlify.app/products/chdb/debugging/explain,matched,09c1b1f004366cfe,true,09c1b1f004366cfe,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging/logging,docs/chdb/debugging/logging.md,products/chdb/debugging/logging.mdx,https://clickhouse.com/docs/chdb/debugging/logging,https://private-7c7dfe99.mintlify.app/products/chdb/debugging/logging,matched,50f7188f8ffd929f,true,50f7188f8ffd929f,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging/profiling,docs/chdb/debugging/profiling.md,products/chdb/debugging/profiling.mdx,https://clickhouse.com/docs/chdb/debugging/profiling,https://private-7c7dfe99.mintlify.app/products/chdb/debugging/profiling,matched,f60d6a61d4022183,true,f60d6a61d4022183,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/getting-started,docs/chdb/getting-started.md,products/chdb/getting-started.mdx,https://clickhouse.com/docs/chdb/getting-started,https://private-7c7dfe99.mintlify.app/products/chdb/getting-started,matched,fe6d28d4f0004884,true,fe6d28d4f0004884,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides,docs/chdb/guides/index.md,products/chdb/guides/index.mdx,https://clickhouse.com/docs/chdb/guides,https://private-7c7dfe99.mintlify.app/products/chdb/guides/index,matched,6c6e0c2616162854,true,6c6e0c2616162854,2026-05-08T20:59:49+00:00,false
|
||||
/chdb/guides/apache-arrow,docs/chdb/guides/querying-apache-arrow.md,products/chdb/guides/querying-apache-arrow.mdx,https://clickhouse.com/docs/chdb/guides/apache-arrow,https://private-7c7dfe99.mintlify.app/products/chdb/guides/querying-apache-arrow,matched,add68d9d7c2384a1,true,add68d9d7c2384a1,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/clickhouse-local,docs/chdb/guides/clickhouse-local.md,products/chdb/guides/clickhouse-local.mdx,https://clickhouse.com/docs/chdb/guides/clickhouse-local,https://private-7c7dfe99.mintlify.app/products/chdb/guides/clickhouse-local,matched,06581bbecd2e4346,true,06581bbecd2e4346,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/jupysql,docs/chdb/guides/jupysql.md,products/chdb/guides/jupysql.mdx,https://clickhouse.com/docs/chdb/guides/jupysql,https://private-7c7dfe99.mintlify.app/products/chdb/guides/jupysql,matched,e6384b2ee9b82af2,true,e6384b2ee9b82af2,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/migration-from-pandas,docs/chdb/guides/migration-from-pandas.md,products/chdb/guides/migration-from-pandas.mdx,https://clickhouse.com/docs/chdb/guides/migration-from-pandas,https://private-7c7dfe99.mintlify.app/products/chdb/guides/migration-from-pandas,matched,ed57262b96eb0e1a,true,ed57262b96eb0e1a,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas,docs/chdb/guides/querying-pandas.md,products/chdb/guides/querying-pandas.mdx,https://clickhouse.com/docs/chdb/guides/pandas,https://private-7c7dfe99.mintlify.app/products/chdb/guides/querying-pandas,matched,73a0749a7a37be27,true,73a0749a7a37be27,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-cookbook,docs/chdb/guides/pandas-cookbook.md,products/chdb/guides/pandas-cookbook.mdx,https://clickhouse.com/docs/chdb/guides/pandas-cookbook,https://private-7c7dfe99.mintlify.app/products/chdb/guides/pandas-cookbook,matched,68bfbddbb8a9f5eb,true,68bfbddbb8a9f5eb,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-differences,docs/chdb/guides/pandas-differences.md,products/chdb/guides/pandas-differences.mdx,https://clickhouse.com/docs/chdb/guides/pandas-differences,https://private-7c7dfe99.mintlify.app/products/chdb/guides/pandas-differences,matched,b9df1f550e8c8f6d,true,b9df1f550e8c8f6d,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-performance,docs/chdb/guides/pandas-performance.md,products/chdb/guides/pandas-performance.mdx,https://clickhouse.com/docs/chdb/guides/pandas-performance,https://private-7c7dfe99.mintlify.app/products/chdb/guides/pandas-performance,matched,989bc488b1a53ff3,true,989bc488b1a53ff3,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-to-sql,docs/chdb/guides/pandas-to-sql.md,products/chdb/guides/pandas-to-sql.mdx,https://clickhouse.com/docs/chdb/guides/pandas-to-sql,https://private-7c7dfe99.mintlify.app/products/chdb/guides/pandas-to-sql,matched,e11bd70186f3cfb1,true,e11bd70186f3cfb1,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/query-remote-clickhouse,docs/chdb/guides/query-remote-clickhouse.md,products/chdb/guides/query-remote-clickhouse.mdx,https://clickhouse.com/docs/chdb/guides/query-remote-clickhouse,https://private-7c7dfe99.mintlify.app/products/chdb/guides/query-remote-clickhouse,matched,27ea13a9d6a87686,true,27ea13a9d6a87686,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/querying-parquet,docs/chdb/guides/querying-parquet.md,products/chdb/guides/querying-parquet.mdx,https://clickhouse.com/docs/chdb/guides/querying-parquet,https://private-7c7dfe99.mintlify.app/products/chdb/guides/querying-parquet,matched,80e13888b6bfca7d,true,80e13888b6bfca7d,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/querying-s3,docs/chdb/guides/querying-s3-bucket.md,products/chdb/guides/querying-s3-bucket.mdx,https://clickhouse.com/docs/chdb/guides/querying-s3,https://private-7c7dfe99.mintlify.app/products/chdb/guides/querying-s3-bucket,matched,2c1fe0f08e90b42f,true,2c1fe0f08e90b42f,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install,docs/chdb/install/index.md,products/chdb/install/index.mdx,https://clickhouse.com/docs/chdb/install,https://private-7c7dfe99.mintlify.app/products/chdb/install/index,matched,f4fe0f2b796f0289,true,f4fe0f2b796f0289,2026-05-08T09:09:20+00:00,false
|
||||
/chdb/install/bun,docs/chdb/install/bun.md,products/chdb/install/bun.mdx,https://clickhouse.com/docs/chdb/install/bun,https://private-7c7dfe99.mintlify.app/products/chdb/install/bun,matched,f57567c9fe116449,true,f57567c9fe116449,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/c,docs/chdb/install/c.md,products/chdb/install/c.mdx,https://clickhouse.com/docs/chdb/install/c,https://private-7c7dfe99.mintlify.app/products/chdb/install/c,matched,e57d5c73e5742e09,true,c17f13b9de744cfc,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/go,docs/chdb/install/go.md,products/chdb/install/go.mdx,https://clickhouse.com/docs/chdb/install/go,https://private-7c7dfe99.mintlify.app/products/chdb/install/go,matched,7d0084cb0163c70e,true,7d0084cb0163c70e,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/nodejs,docs/chdb/install/nodejs.md,products/chdb/install/nodejs.mdx,https://clickhouse.com/docs/chdb/install/nodejs,https://private-7c7dfe99.mintlify.app/products/chdb/install/nodejs,matched,91c924d920f523d5,true,91c924d920f523d5,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/python,docs/chdb/install/python.md,products/chdb/install/python.mdx,https://clickhouse.com/docs/chdb/install/python,https://private-7c7dfe99.mintlify.app/products/chdb/install/python,matched,f4c72ac98bf51ab2,true,61207cac7f171e56,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/rust,docs/chdb/install/rust.md,products/chdb/install/rust.mdx,https://clickhouse.com/docs/chdb/install/rust,https://private-7c7dfe99.mintlify.app/products/chdb/install/rust,matched,d49d5ccf9f0cf9e8,true,d49d5ccf9f0cf9e8,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/reference,docs/chdb/reference/index.md,products/chdb/reference/index.mdx,https://clickhouse.com/docs/chdb/reference,https://private-7c7dfe99.mintlify.app/products/chdb/reference/index,matched,cf0eff26ed511084,true,cf0eff26ed511084,2026-05-08T09:09:20+00:00,false
|
||||
/chdb/reference/data-formats,docs/chdb/reference/data-formats.md,products/chdb/reference/data-formats.mdx,https://clickhouse.com/docs/chdb/reference/data-formats,https://private-7c7dfe99.mintlify.app/products/chdb/reference/data-formats,matched,eab5061aa975b157,true,f53e26bdce713e13,2026-06-22T17:40:10+00:00,false
|
||||
/chdb/reference/sql-reference,docs/chdb/reference/sql-reference.md,products/chdb/reference/sql-reference.mdx,https://clickhouse.com/docs/chdb/reference/sql-reference,https://private-7c7dfe99.mintlify.app/products/chdb/reference/sql-reference,matched,f7f453059f1e4378,true,f7f453059f1e4378,2026-06-22T17:40:10+00:00,false
|
||||
/chdb,docs/chdb/index.md,chdb/index.mdx,https://clickhouse.com/docs/chdb,https://private-7c7dfe99.mintlify.app/chdb/index,matched,dddf9f726fa8b665,true,dddf9f726fa8b665,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/api/python,docs/chdb/api/python.md,chdb/api/python.mdx,https://clickhouse.com/docs/chdb/api/python,https://private-7c7dfe99.mintlify.app/chdb/api/python,matched,0489c0df271df2dd,true,0489c0df271df2dd,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration,docs/chdb/configuration/index.md,chdb/configuration/index.mdx,https://clickhouse.com/docs/chdb/configuration,https://private-7c7dfe99.mintlify.app/chdb/configuration/index,matched,cac5b473edcf1434,true,cac5b473edcf1434,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration/execution-engine,docs/chdb/configuration/execution-engine.md,chdb/configuration/execution-engine.mdx,https://clickhouse.com/docs/chdb/configuration/execution-engine,https://private-7c7dfe99.mintlify.app/chdb/configuration/execution-engine,matched,4ed55df4b60d45c9,true,4ed55df4b60d45c9,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration/function-config,docs/chdb/configuration/function-config.md,chdb/configuration/function-config.mdx,https://clickhouse.com/docs/chdb/configuration/function-config,https://private-7c7dfe99.mintlify.app/chdb/configuration/function-config,matched,962300ada074a915,true,962300ada074a915,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/configuration/performance-mode,docs/chdb/configuration/performance-mode.md,chdb/configuration/performance-mode.mdx,https://clickhouse.com/docs/chdb/configuration/performance-mode,https://private-7c7dfe99.mintlify.app/chdb/configuration/performance-mode,matched,272715acde2f4786,true,272715acde2f4786,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore,docs/chdb/datastore/index.md,chdb/datastore/index.mdx,https://clickhouse.com/docs/chdb/datastore,https://private-7c7dfe99.mintlify.app/chdb/datastore/index,matched,7d43a3455770c1a8,true,7d43a3455770c1a8,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/accessors,docs/chdb/datastore/accessors.md,chdb/datastore/accessors.mdx,https://clickhouse.com/docs/chdb/datastore/accessors,https://private-7c7dfe99.mintlify.app/chdb/datastore/accessors,matched,d231c56ecda5460f,true,d231c56ecda5460f,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/aggregation,docs/chdb/datastore/aggregation.md,chdb/datastore/aggregation.mdx,https://clickhouse.com/docs/chdb/datastore/aggregation,https://private-7c7dfe99.mintlify.app/chdb/datastore/aggregation,matched,25475c9287264b36,true,25475c9287264b36,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/class-reference,docs/chdb/datastore/class-reference.md,chdb/datastore/class-reference.mdx,https://clickhouse.com/docs/chdb/datastore/class-reference,https://private-7c7dfe99.mintlify.app/chdb/datastore/class-reference,matched,7e26544f7ea684dd,true,7e26544f7ea684dd,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/execution-model,docs/chdb/datastore/execution-model.md,chdb/datastore/execution-model.mdx,https://clickhouse.com/docs/chdb/datastore/execution-model,https://private-7c7dfe99.mintlify.app/chdb/datastore/execution-model,matched,c94ce6273fb8ae03,true,c94ce6273fb8ae03,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/factory-methods,docs/chdb/datastore/factory-methods.md,chdb/datastore/factory-methods.mdx,https://clickhouse.com/docs/chdb/datastore/factory-methods,https://private-7c7dfe99.mintlify.app/chdb/datastore/factory-methods,matched,f7583f237c400c99,true,f7583f237c400c99,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/io,docs/chdb/datastore/io.md,chdb/datastore/io.mdx,https://clickhouse.com/docs/chdb/datastore/io,https://private-7c7dfe99.mintlify.app/chdb/datastore/io,matched,9887802e2f517a87,true,9887802e2f517a87,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/pandas-compat,docs/chdb/datastore/pandas-compat.md,chdb/datastore/pandas-compat.mdx,https://clickhouse.com/docs/chdb/datastore/pandas-compat,https://private-7c7dfe99.mintlify.app/chdb/datastore/pandas-compat,matched,09396fe108a4e5fc,true,09396fe108a4e5fc,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/query-building,docs/chdb/datastore/query-building.md,chdb/datastore/query-building.mdx,https://clickhouse.com/docs/chdb/datastore/query-building,https://private-7c7dfe99.mintlify.app/chdb/datastore/query-building,matched,29573c963c59d113,true,29573c963c59d113,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/datastore/quickstart,docs/chdb/datastore/quickstart.md,chdb/datastore/quickstart.mdx,https://clickhouse.com/docs/chdb/datastore/quickstart,https://private-7c7dfe99.mintlify.app/chdb/datastore/quickstart,matched,5d0f85beb28e250c,true,5d0f85beb28e250c,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging,docs/chdb/debugging/index.md,chdb/debugging/index.mdx,https://clickhouse.com/docs/chdb/debugging,https://private-7c7dfe99.mintlify.app/chdb/debugging/index,matched,1423b47ee348921b,true,1423b47ee348921b,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging/explain,docs/chdb/debugging/explain.md,chdb/debugging/explain.mdx,https://clickhouse.com/docs/chdb/debugging/explain,https://private-7c7dfe99.mintlify.app/chdb/debugging/explain,matched,09c1b1f004366cfe,true,09c1b1f004366cfe,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging/logging,docs/chdb/debugging/logging.md,chdb/debugging/logging.mdx,https://clickhouse.com/docs/chdb/debugging/logging,https://private-7c7dfe99.mintlify.app/chdb/debugging/logging,matched,50f7188f8ffd929f,true,50f7188f8ffd929f,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/debugging/profiling,docs/chdb/debugging/profiling.md,chdb/debugging/profiling.mdx,https://clickhouse.com/docs/chdb/debugging/profiling,https://private-7c7dfe99.mintlify.app/chdb/debugging/profiling,matched,f60d6a61d4022183,true,f60d6a61d4022183,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/getting-started,docs/chdb/getting-started.md,chdb/getting-started.mdx,https://clickhouse.com/docs/chdb/getting-started,https://private-7c7dfe99.mintlify.app/chdb/getting-started,matched,fe6d28d4f0004884,true,fe6d28d4f0004884,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides,docs/chdb/guides/index.md,chdb/guides/index.mdx,https://clickhouse.com/docs/chdb/guides,https://private-7c7dfe99.mintlify.app/chdb/guides/index,matched,6c6e0c2616162854,true,6c6e0c2616162854,2026-05-08T20:59:49+00:00,false
|
||||
/chdb/guides/apache-arrow,docs/chdb/guides/querying-apache-arrow.md,chdb/guides/querying-apache-arrow.mdx,https://clickhouse.com/docs/chdb/guides/apache-arrow,https://private-7c7dfe99.mintlify.app/chdb/guides/querying-apache-arrow,matched,add68d9d7c2384a1,true,add68d9d7c2384a1,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/clickhouse-local,docs/chdb/guides/clickhouse-local.md,chdb/guides/clickhouse-local.mdx,https://clickhouse.com/docs/chdb/guides/clickhouse-local,https://private-7c7dfe99.mintlify.app/chdb/guides/clickhouse-local,matched,06581bbecd2e4346,true,06581bbecd2e4346,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/jupysql,docs/chdb/guides/jupysql.md,chdb/guides/jupysql.mdx,https://clickhouse.com/docs/chdb/guides/jupysql,https://private-7c7dfe99.mintlify.app/chdb/guides/jupysql,matched,e6384b2ee9b82af2,true,e6384b2ee9b82af2,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/migration-from-pandas,docs/chdb/guides/migration-from-pandas.md,chdb/guides/migration-from-pandas.mdx,https://clickhouse.com/docs/chdb/guides/migration-from-pandas,https://private-7c7dfe99.mintlify.app/chdb/guides/migration-from-pandas,matched,ed57262b96eb0e1a,true,ed57262b96eb0e1a,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas,docs/chdb/guides/querying-pandas.md,chdb/guides/querying-pandas.mdx,https://clickhouse.com/docs/chdb/guides/pandas,https://private-7c7dfe99.mintlify.app/chdb/guides/querying-pandas,matched,73a0749a7a37be27,true,73a0749a7a37be27,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-cookbook,docs/chdb/guides/pandas-cookbook.md,chdb/guides/pandas-cookbook.mdx,https://clickhouse.com/docs/chdb/guides/pandas-cookbook,https://private-7c7dfe99.mintlify.app/chdb/guides/pandas-cookbook,matched,68bfbddbb8a9f5eb,true,68bfbddbb8a9f5eb,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-differences,docs/chdb/guides/pandas-differences.md,chdb/guides/pandas-differences.mdx,https://clickhouse.com/docs/chdb/guides/pandas-differences,https://private-7c7dfe99.mintlify.app/chdb/guides/pandas-differences,matched,b9df1f550e8c8f6d,true,b9df1f550e8c8f6d,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-performance,docs/chdb/guides/pandas-performance.md,chdb/guides/pandas-performance.mdx,https://clickhouse.com/docs/chdb/guides/pandas-performance,https://private-7c7dfe99.mintlify.app/chdb/guides/pandas-performance,matched,989bc488b1a53ff3,true,989bc488b1a53ff3,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/pandas-to-sql,docs/chdb/guides/pandas-to-sql.md,chdb/guides/pandas-to-sql.mdx,https://clickhouse.com/docs/chdb/guides/pandas-to-sql,https://private-7c7dfe99.mintlify.app/chdb/guides/pandas-to-sql,matched,e11bd70186f3cfb1,true,e11bd70186f3cfb1,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/query-remote-clickhouse,docs/chdb/guides/query-remote-clickhouse.md,chdb/guides/query-remote-clickhouse.mdx,https://clickhouse.com/docs/chdb/guides/query-remote-clickhouse,https://private-7c7dfe99.mintlify.app/chdb/guides/query-remote-clickhouse,matched,27ea13a9d6a87686,true,27ea13a9d6a87686,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/querying-parquet,docs/chdb/guides/querying-parquet.md,chdb/guides/querying-parquet.mdx,https://clickhouse.com/docs/chdb/guides/querying-parquet,https://private-7c7dfe99.mintlify.app/chdb/guides/querying-parquet,matched,80e13888b6bfca7d,true,80e13888b6bfca7d,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/guides/querying-s3,docs/chdb/guides/querying-s3-bucket.md,chdb/guides/querying-s3-bucket.mdx,https://clickhouse.com/docs/chdb/guides/querying-s3,https://private-7c7dfe99.mintlify.app/chdb/guides/querying-s3-bucket,matched,2c1fe0f08e90b42f,true,2c1fe0f08e90b42f,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install,docs/chdb/install/index.md,chdb/install/index.mdx,https://clickhouse.com/docs/chdb/install,https://private-7c7dfe99.mintlify.app/chdb/install/index,matched,f4fe0f2b796f0289,true,f4fe0f2b796f0289,2026-05-08T09:09:20+00:00,false
|
||||
/chdb/install/bun,docs/chdb/install/bun.md,chdb/install/bun.mdx,https://clickhouse.com/docs/chdb/install/bun,https://private-7c7dfe99.mintlify.app/chdb/install/bun,matched,f57567c9fe116449,true,f57567c9fe116449,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/c,docs/chdb/install/c.md,chdb/install/c.mdx,https://clickhouse.com/docs/chdb/install/c,https://private-7c7dfe99.mintlify.app/chdb/install/c,matched,e57d5c73e5742e09,true,c17f13b9de744cfc,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/go,docs/chdb/install/go.md,chdb/install/go.mdx,https://clickhouse.com/docs/chdb/install/go,https://private-7c7dfe99.mintlify.app/chdb/install/go,matched,7d0084cb0163c70e,true,7d0084cb0163c70e,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/nodejs,docs/chdb/install/nodejs.md,chdb/install/nodejs.mdx,https://clickhouse.com/docs/chdb/install/nodejs,https://private-7c7dfe99.mintlify.app/chdb/install/nodejs,matched,91c924d920f523d5,true,91c924d920f523d5,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/python,docs/chdb/install/python.md,chdb/install/python.mdx,https://clickhouse.com/docs/chdb/install/python,https://private-7c7dfe99.mintlify.app/chdb/install/python,matched,f4c72ac98bf51ab2,true,61207cac7f171e56,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/install/rust,docs/chdb/install/rust.md,chdb/install/rust.mdx,https://clickhouse.com/docs/chdb/install/rust,https://private-7c7dfe99.mintlify.app/chdb/install/rust,matched,d49d5ccf9f0cf9e8,true,d49d5ccf9f0cf9e8,2026-06-23T07:34:28+00:00,false
|
||||
/chdb/reference,docs/chdb/reference/index.md,chdb/reference/index.mdx,https://clickhouse.com/docs/chdb/reference,https://private-7c7dfe99.mintlify.app/chdb/reference/index,matched,cf0eff26ed511084,true,cf0eff26ed511084,2026-05-08T09:09:20+00:00,false
|
||||
/chdb/reference/data-formats,docs/chdb/reference/data-formats.md,chdb/reference/data-formats.mdx,https://clickhouse.com/docs/chdb/reference/data-formats,https://private-7c7dfe99.mintlify.app/chdb/reference/data-formats,matched,eab5061aa975b157,true,f53e26bdce713e13,2026-06-22T17:40:10+00:00,false
|
||||
/chdb/reference/sql-reference,docs/chdb/reference/sql-reference.md,chdb/reference/sql-reference.mdx,https://clickhouse.com/docs/chdb/reference/sql-reference,https://private-7c7dfe99.mintlify.app/chdb/reference/sql-reference,matched,f7f453059f1e4378,true,f7f453059f1e4378,2026-06-22T17:40:10+00:00,false
|
||||
/clickhouse-operator/guides/configuration,docs/kubernetes-operator/03_guides/02_configuration.mdx,products/kubernetes-operator/guides/configuration.mdx,https://clickhouse.com/docs/clickhouse-operator/guides/configuration,https://private-7c7dfe99.mintlify.app/products/kubernetes-operator/guides/configuration,matched,330939d1f3ec2281,true,330939d1f3ec2281,2026-06-22T14:29:17+00:00,false
|
||||
/clickhouse-operator/guides/introduction,docs/kubernetes-operator/03_guides/01_introduction.mdx,products/kubernetes-operator/guides/introduction.mdx,https://clickhouse.com/docs/clickhouse-operator/guides/introduction,https://private-7c7dfe99.mintlify.app/products/kubernetes-operator/guides/introduction,matched,9d71670c757c0cf3,true,9d71670c757c0cf3,2026-06-22T14:29:17+00:00,false
|
||||
/clickhouse-operator/install/helm,docs/kubernetes-operator/02_install/helm.mdx,products/kubernetes-operator/install/helm.mdx,https://clickhouse.com/docs/clickhouse-operator/install/helm,https://private-7c7dfe99.mintlify.app/products/kubernetes-operator/install/helm,matched,63b5115dd3a467bf,true,63b5115dd3a467bf,2026-05-08T09:09:20+00:00,false
|
||||
@@ -322,8 +322,8 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/engines/database-engines/,docs/engines/database-engines/index.md,reference/engines/database-engines/index.mdx,https://clickhouse.com/docs/engines/database-engines/,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/index,matched,ef7d22cc4d26fc3f,true,ef7d22cc4d26fc3f,2026-06-22T17:40:10+00:00,false
|
||||
/engines/database-engines/atomic,docs/engines/database-engines/atomic.md,reference/engines/database-engines/atomic.mdx,https://clickhouse.com/docs/engines/database-engines/atomic,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/atomic,matched,da03ef9fd175695f,true,da03ef9fd175695f,2026-06-23T07:34:28+00:00,false
|
||||
/engines/database-engines/backup,docs/engines/database-engines/backup.md,reference/engines/database-engines/backup.mdx,https://clickhouse.com/docs/engines/database-engines/backup,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/backup,matched,ac8a03231b481c3c,true,ac8a03231b481c3c,2026-06-23T07:34:28+00:00,false
|
||||
/engines/database-engines/datalakecatalog,docs/engines/database-engines/datalake.md,reference/engines/database-engines/datalake.mdx,https://clickhouse.com/docs/engines/database-engines/datalakecatalog,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/datalake,matched,7c93ac67f9b17baa,true,8d4b627541a1bf75,2026-07-01T10:15:59+00:00,false
|
||||
/engines/database-engines/materialized-postgresql,docs/engines/database-engines/materialized-postgresql.md,reference/engines/database-engines/materialized-postgresql.mdx,https://clickhouse.com/docs/engines/database-engines/materialized-postgresql,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/materialized-postgresql,matched,94d1548d3a757f10,true,84043451cd110f3c,2026-07-01T10:15:59+00:00,false
|
||||
/engines/database-engines/datalakecatalog,docs/engines/database-engines/datalake.md,reference/engines/database-engines/datalake.mdx,https://clickhouse.com/docs/engines/database-engines/datalakecatalog,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/datalake,matched,0b9c7a7806420688,true,0b9c7a7806420688,2026-07-11T17:50:23+00:00,true
|
||||
/engines/database-engines/materialized-postgresql,docs/engines/database-engines/materialized-postgresql.md,reference/engines/database-engines/materialized-postgresql.mdx,https://clickhouse.com/docs/engines/database-engines/materialized-postgresql,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/materialized-postgresql,matched,d0ab812edf5599df,true,d0ab812edf5599df,2026-07-11T17:50:23+00:00,true
|
||||
/engines/database-engines/mysql,docs/engines/database-engines/mysql.md,reference/engines/database-engines/mysql.mdx,https://clickhouse.com/docs/engines/database-engines/mysql,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/mysql,matched,9eba1d36455f7c8c,true,9eba1d36455f7c8c,2026-07-01T10:43:53+00:00,false
|
||||
/engines/database-engines/postgresql,docs/engines/database-engines/postgresql.md,reference/engines/database-engines/postgresql.mdx,https://clickhouse.com/docs/engines/database-engines/postgresql,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/postgresql,matched,7016de18e2556c50,true,7016de18e2556c50,2026-06-23T07:34:28+00:00,false
|
||||
/engines/database-engines/replicated,docs/engines/database-engines/replicated.md,reference/engines/database-engines/replicated.mdx,https://clickhouse.com/docs/engines/database-engines/replicated,https://private-7c7dfe99.mintlify.app/reference/engines/database-engines/replicated,matched,d31fecb5d94082da,true,d31fecb5d94082da,2026-06-23T07:34:28+00:00,false
|
||||
@@ -342,19 +342,19 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/engines/table-engines/integrations/hudi,docs/engines/table-engines/integrations/hudi.md,reference/engines/table-engines/integrations/hudi.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/hudi,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/hudi,matched,add3632c25f929f0,true,add3632c25f929f0,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/iceberg,docs/engines/table-engines/integrations/iceberg.md,reference/engines/table-engines/integrations/iceberg.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/iceberg,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/iceberg,matched,e9f504a653bf1209,true,e9f504a653bf1209,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/jdbc,docs/engines/table-engines/integrations/jdbc.md,reference/engines/table-engines/integrations/jdbc.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/jdbc,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/jdbc,matched,01bc8ffee6fa7fc9,true,01bc8ffee6fa7fc9,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/kafka,docs/engines/table-engines/integrations/kafka.md,reference/engines/table-engines/integrations/kafka.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/kafka,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/kafka,matched,ceeff3f9c6e83d32,true,42b346c1b1df5b6d,2026-07-01T10:15:59+00:00,false
|
||||
/engines/table-engines/integrations/kafka,docs/engines/table-engines/integrations/kafka.md,reference/engines/table-engines/integrations/kafka.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/kafka,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/kafka,matched,ceeff3f9c6e83d32,true,ceeff3f9c6e83d32,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/integrations/materialized-postgresql,docs/engines/table-engines/integrations/materialized-postgresql.md,reference/engines/table-engines/integrations/materialized-postgresql.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/materialized-postgresql,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/materialized-postgresql,matched,874433a820ac2a17,true,874433a820ac2a17,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/mongodb,docs/engines/table-engines/integrations/mongodb.md,reference/engines/table-engines/integrations/mongodb.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/mongodb,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/mongodb,matched,efa4dbb935d8f6c7,true,efa4dbb935d8f6c7,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/mysql,docs/engines/table-engines/integrations/mysql.md,reference/engines/table-engines/integrations/mysql.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/mysql,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/mysql,matched,1296429552947fdb,true,0853c9e2f57717b0,2026-07-01T10:15:59+00:00,false
|
||||
/engines/table-engines/integrations/mysql,docs/engines/table-engines/integrations/mysql.md,reference/engines/table-engines/integrations/mysql.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/mysql,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/mysql,matched,1296429552947fdb,true,1296429552947fdb,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/integrations/nats,docs/engines/table-engines/integrations/nats.md,reference/engines/table-engines/integrations/nats.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/nats,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/nats,matched,57f6c46115de9116,true,57f6c46115de9116,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/odbc,docs/engines/table-engines/integrations/odbc.md,reference/engines/table-engines/integrations/odbc.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/odbc,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/odbc,matched,24e63b70f957a005,true,24e63b70f957a005,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/paimon,docs/engines/table-engines/integrations/paimon.md,reference/engines/table-engines/integrations/paimon.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/paimon,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/paimon,matched,1417d995a072c70f,true,1417d995a072c70f,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/postgresql,docs/engines/table-engines/integrations/postgresql.md,reference/engines/table-engines/integrations/postgresql.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/postgresql,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/postgresql,matched,83829e1682f5b520,true,e3b7e7dc4ee8a35e,2026-07-01T10:15:59+00:00,false
|
||||
/engines/table-engines/integrations/postgresql,docs/engines/table-engines/integrations/postgresql.md,reference/engines/table-engines/integrations/postgresql.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/postgresql,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/postgresql,matched,83829e1682f5b520,true,83829e1682f5b520,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/integrations/rabbitmq,docs/engines/table-engines/integrations/rabbitmq.md,reference/engines/table-engines/integrations/rabbitmq.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/rabbitmq,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/rabbitmq,matched,121058d7118d011e,true,121058d7118d011e,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/redis,docs/engines/table-engines/integrations/redis.md,reference/engines/table-engines/integrations/redis.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/redis,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/redis,matched,f310111446bed1db,true,f310111446bed1db,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/s3,docs/engines/table-engines/integrations/s3.md,reference/engines/table-engines/integrations/s3.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/s3,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/s3,matched,2a9043b891a52b39,true,2a9043b891a52b39,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/s3,docs/engines/table-engines/integrations/s3.md,reference/engines/table-engines/integrations/s3.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/s3,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/s3,matched,f3c7ad05e50d5b51,true,f3c7ad05e50d5b51,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/integrations/s3queue,docs/engines/table-engines/integrations/s3queue.md,reference/engines/table-engines/integrations/s3queue.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/s3queue,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/s3queue,matched,90f98117c864c71d,true,90f98117c864c71d,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/integrations/sqlite,docs/engines/table-engines/integrations/sqlite.md,reference/engines/table-engines/integrations/sqlite.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/sqlite,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/sqlite,matched,2ff0655387533e85,true,7c57bc57ee3573e4,2026-07-01T10:15:59+00:00,false
|
||||
/engines/table-engines/integrations/sqlite,docs/engines/table-engines/integrations/sqlite.md,reference/engines/table-engines/integrations/sqlite.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/sqlite,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/sqlite,matched,2ff0655387533e85,true,2ff0655387533e85,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/integrations/ytsaurus,docs/engines/table-engines/integrations/ytsaurus.md,reference/engines/table-engines/integrations/ytsaurus.mdx,https://clickhouse.com/docs/engines/table-engines/integrations/ytsaurus,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/ytsaurus,matched,8b424c806172df36,true,8b424c806172df36,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/log-family/,docs/engines/table-engines/log-family/index.md,reference/engines/table-engines/log-family/index.mdx,https://clickhouse.com/docs/engines/table-engines/log-family/,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/log-family/index,matched,526635ff55be8133,true,526635ff55be8133,2026-07-01T10:43:53+00:00,false
|
||||
/engines/table-engines/log-family/log,docs/engines/table-engines/log-family/log.md,reference/engines/table-engines/log-family/log.mdx,https://clickhouse.com/docs/engines/table-engines/log-family/log,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/log-family/log,matched,589fc5521d34b691,true,589fc5521d34b691,2026-06-23T07:34:28+00:00,false
|
||||
@@ -362,22 +362,22 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/engines/table-engines/log-family/tinylog,docs/engines/table-engines/log-family/tinylog.md,reference/engines/table-engines/log-family/tinylog.mdx,https://clickhouse.com/docs/engines/table-engines/log-family/tinylog,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/log-family/tinylog,matched,6aca92cecd7097cb,true,6aca92cecd7097cb,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/,docs/engines/table-engines/mergetree-family/index.md,reference/engines/table-engines/mergetree-family/index.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/index,matched,ad8165aa1c3ca613,true,ad8165aa1c3ca613,2026-06-22T17:40:10+00:00,false
|
||||
/engines/table-engines/mergetree-family/aggregatingmergetree,docs/engines/table-engines/mergetree-family/aggregatingmergetree.md,reference/engines/table-engines/mergetree-family/aggregatingmergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/aggregatingmergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/aggregatingmergetree,matched,4becd804ebb33bdf,true,4becd804ebb33bdf,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/annindexes,docs/engines/table-engines/mergetree-family/annindexes.md,reference/engines/table-engines/mergetree-family/annindexes.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/annindexes,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/annindexes,matched,e93e14a52943c91e,true,cd12eb174b1d8e55,2026-07-01T10:15:59+00:00,false
|
||||
/engines/table-engines/mergetree-family/annindexes,docs/engines/table-engines/mergetree-family/annindexes.md,reference/engines/table-engines/mergetree-family/annindexes.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/annindexes,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/annindexes,matched,bb45078d465bc529,true,bb45078d465bc529,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/mergetree-family/coalescingmergetree,docs/engines/table-engines/mergetree-family/coalescingmergetree.md,reference/engines/table-engines/mergetree-family/coalescingmergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/coalescingmergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/coalescingmergetree,matched,5da4d9c8bacaa639,true,5da4d9c8bacaa639,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/collapsingmergetree,docs/engines/table-engines/mergetree-family/collapsingmergetree.md,reference/engines/table-engines/mergetree-family/collapsingmergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/collapsingmergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/collapsingmergetree,matched,b4c154dcf1aa53bf,true,b4c154dcf1aa53bf,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/custom-partitioning-key,docs/engines/table-engines/mergetree-family/custom-partitioning-key.md,reference/engines/table-engines/mergetree-family/custom-partitioning-key.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/custom-partitioning-key,matched,e1465cd2777f9d7a,true,e1465cd2777f9d7a,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/graphitemergetree,docs/engines/table-engines/mergetree-family/graphitemergetree.md,reference/engines/table-engines/mergetree-family/graphitemergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/graphitemergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/graphitemergetree,matched,e14e6f9370ea584c,true,e14e6f9370ea584c,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/mergetree,docs/engines/table-engines/mergetree-family/mergetree.md,reference/engines/table-engines/mergetree-family/mergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/mergetree,matched,68a97357e97778a9,true,68a97357e97778a9,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/mergetree,docs/engines/table-engines/mergetree-family/mergetree.md,reference/engines/table-engines/mergetree-family/mergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/mergetree,matched,8b59448f8884ca49,true,8b59448f8884ca49,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/mergetree-family/replacingmergetree,docs/engines/table-engines/mergetree-family/replacingmergetree.md,reference/engines/table-engines/mergetree-family/replacingmergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/replacingmergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/replacingmergetree,matched,d116730b34a765e1,true,d116730b34a765e1,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/replication,docs/engines/table-engines/mergetree-family/replication.md,reference/engines/table-engines/mergetree-family/replication.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/replication,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/replication,matched,99530f32e611a580,true,99530f32e611a580,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/summingmergetree,docs/engines/table-engines/mergetree-family/summingmergetree.md,reference/engines/table-engines/mergetree-family/summingmergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/summingmergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/summingmergetree,matched,de384c5b110b046f,true,de384c5b110b046f,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/mergetree-family/textindexes,docs/engines/table-engines/mergetree-family/textindexes.md,reference/engines/table-engines/mergetree-family/textindexes.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/textindexes,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/textindexes,matched,b2b9aa09d49c0245,true,eec19d03257295fa,2026-07-01T10:15:59+00:00,false
|
||||
/engines/table-engines/mergetree-family/textindexes,docs/engines/table-engines/mergetree-family/textindexes.md,reference/engines/table-engines/mergetree-family/textindexes.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/textindexes,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/textindexes,matched,b2b9aa09d49c0245,true,b2b9aa09d49c0245,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/mergetree-family/versionedcollapsingmergetree,docs/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md,reference/engines/table-engines/mergetree-family/versionedcollapsingmergetree.mdx,https://clickhouse.com/docs/engines/table-engines/mergetree-family/versionedcollapsingmergetree,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/mergetree-family/versionedcollapsingmergetree,matched,680de6ba2e6d5b27,true,680de6ba2e6d5b27,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/,docs/engines/table-engines/special/index.md,reference/engines/table-engines/special/index.mdx,https://clickhouse.com/docs/engines/table-engines/special/,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/index,matched,851e551dcf4c3b6c,true,851e551dcf4c3b6c,2026-06-22T17:40:10+00:00,false
|
||||
/engines/table-engines/special/alias,docs/engines/table-engines/special/alias.md,reference/engines/table-engines/special/alias.mdx,https://clickhouse.com/docs/engines/table-engines/special/alias,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/alias,matched,229e00339da2c897,true,229e00339da2c897,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/buffer,docs/engines/table-engines/special/buffer.md,reference/engines/table-engines/special/buffer.mdx,https://clickhouse.com/docs/engines/table-engines/special/buffer,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/buffer,matched,6e0aed541f48f9f7,true,6e0aed541f48f9f7,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/dictionary,docs/engines/table-engines/special/dictionary.md,reference/engines/table-engines/special/dictionary.mdx,https://clickhouse.com/docs/engines/table-engines/special/dictionary,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/dictionary,matched,7630e3f4daa5ef75,true,7630e3f4daa5ef75,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/distributed,docs/engines/table-engines/special/distributed.md,reference/engines/table-engines/special/distributed.mdx,https://clickhouse.com/docs/engines/table-engines/special/distributed,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/distributed,matched,36792e30ad2101ea,true,36792e30ad2101ea,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/distributed,docs/engines/table-engines/special/distributed.md,reference/engines/table-engines/special/distributed.mdx,https://clickhouse.com/docs/engines/table-engines/special/distributed,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/distributed,matched,42402543ed9d749a,true,42402543ed9d749a,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/special/executable,docs/engines/table-engines/special/executable.md,reference/engines/table-engines/special/executable.mdx,https://clickhouse.com/docs/engines/table-engines/special/executable,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/executable,matched,fb8f67eae79f0fe0,true,fb8f67eae79f0fe0,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/external-data,docs/engines/table-engines/special/external-data.md,reference/engines/table-engines/special/external-data.mdx,https://clickhouse.com/docs/engines/table-engines/special/external-data,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/external-data,matched,889f3532c3ed2b16,true,889f3532c3ed2b16,2026-06-22T14:29:17+00:00,false
|
||||
/engines/table-engines/special/file,docs/engines/table-engines/special/file.md,reference/engines/table-engines/special/file.mdx,https://clickhouse.com/docs/engines/table-engines/special/file,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/file,matched,8b6800a2b82d8cb0,true,8b6800a2b82d8cb0,2026-06-23T07:34:28+00:00,false
|
||||
@@ -388,9 +388,10 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/engines/table-engines/special/memory,docs/engines/table-engines/special/memory.md,reference/engines/table-engines/special/memory.mdx,https://clickhouse.com/docs/engines/table-engines/special/memory,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/memory,matched,4b2e8682c62ea55a,true,4b2e8682c62ea55a,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/merge,docs/engines/table-engines/special/merge.md,reference/engines/table-engines/special/merge.mdx,https://clickhouse.com/docs/engines/table-engines/special/merge,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/merge,matched,bb88ebe93c4cca8b,true,bb88ebe93c4cca8b,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/null,docs/engines/table-engines/special/null.md,reference/engines/table-engines/special/null.mdx,https://clickhouse.com/docs/engines/table-engines/special/null,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/null,matched,d0711da176d30a5d,true,d0711da176d30a5d,2026-06-22T14:29:17+00:00,false
|
||||
/engines/table-engines/special/query-runner,docs/engines/table-engines/special/query-runner.md,reference/engines/table-engines/special/query-runner.mdx,https://clickhouse.com/docs/engines/table-engines/special/query-runner,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/query-runner,matched,5c6207a7bee01520,true,5c6207a7bee01520,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/special/set,docs/engines/table-engines/special/set.md,reference/engines/table-engines/special/set.mdx,https://clickhouse.com/docs/engines/table-engines/special/set,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/set,matched,cd61da9acac6ea74,true,cd61da9acac6ea74,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/time_series,docs/engines/table-engines/integrations/time-series.md,reference/engines/table-engines/integrations/time-series.mdx,https://clickhouse.com/docs/engines/table-engines/special/time_series,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/time-series,matched,f6587d476176f8c7,true,f6587d476176f8c7,2026-06-23T07:34:28+00:00,false
|
||||
/engines/table-engines/special/url,docs/engines/table-engines/special/url.md,reference/engines/table-engines/special/url.mdx,https://clickhouse.com/docs/engines/table-engines/special/url,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/url,matched,992dc8ac9dc3dfe9,true,2270feda9fd8ceb8,2026-07-01T10:15:59+00:00,false
|
||||
/engines/table-engines/special/time_series,docs/engines/table-engines/integrations/time-series.md,reference/engines/table-engines/integrations/time-series.mdx,https://clickhouse.com/docs/engines/table-engines/special/time_series,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/integrations/time-series,matched,c774ddca738799ad,true,c774ddca738799ad,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/special/url,docs/engines/table-engines/special/url.md,reference/engines/table-engines/special/url.mdx,https://clickhouse.com/docs/engines/table-engines/special/url,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/url,matched,27fbf5234f0edede,true,27fbf5234f0edede,2026-07-11T17:50:23+00:00,true
|
||||
/engines/table-engines/special/view,docs/engines/table-engines/special/view.md,reference/engines/table-engines/special/view.mdx,https://clickhouse.com/docs/engines/table-engines/special/view,https://private-7c7dfe99.mintlify.app/reference/engines/table-engines/special/view,matched,26d10a8766db167b,true,26d10a8766db167b,2026-06-22T14:29:17+00:00,false
|
||||
/engines/table-functions/executable,docs/sql-reference/table-functions/executable.md,reference/functions/table-functions/executable.mdx,https://clickhouse.com/docs/engines/table-functions/executable,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/executable,matched,33da0a1ab05b92af,true,33da0a1ab05b92af,2026-06-23T07:34:28+00:00,false
|
||||
/examples/aggregate-function-combinators/anyIf,docs/guides/examples/aggregate_function_combinators/anyIf.md,guides/clickhouse/examples/aggregate-function-combinators/anyIf.mdx,https://clickhouse.com/docs/examples/aggregate-function-combinators/anyIf,https://private-7c7dfe99.mintlify.app/guides/clickhouse/examples/aggregate-function-combinators/anyIf,matched,c593e9d899ed3bc0,true,c593e9d899ed3bc0,2026-06-23T07:34:28+00:00,false
|
||||
@@ -777,11 +778,12 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/integrations/zingdata,docs/integrations/data-visualization/community_integrations/zingdata-and-clickhouse.md,integrations/connectors/data-visualization/community-integrations/zingdata-and-clickhouse.mdx,https://clickhouse.com/docs/integrations/zingdata,https://private-7c7dfe99.mintlify.app/integrations/connectors/data-visualization/community-integrations/zingdata-and-clickhouse,matched,faf313b1e6a25c0e,true,faf313b1e6a25c0e,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/arrowflight,docs/integrations/interfaces/arrowflight.md,concepts/features/interfaces/arrowflight.mdx,https://clickhouse.com/docs/interfaces/arrowflight,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/arrowflight,matched,04eeeb8046186afd,true,04eeeb8046186afd,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/cli,docs/interfaces/cli.md,concepts/features/interfaces/cli.mdx,https://clickhouse.com/docs/interfaces/cli,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/cli,matched,f2b2c5e32a1f3e8e,true,f2b2c5e32a1f3e8e,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/client,docs/interfaces/client.md,concepts/features/interfaces/client.mdx,https://clickhouse.com/docs/interfaces/client,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/client,matched,820c371d6b2f586e,true,3d12e7026dcf6277,2026-07-01T10:16:00+00:00,false
|
||||
/interfaces/client,docs/interfaces/client.md,concepts/features/interfaces/client.mdx,https://clickhouse.com/docs/interfaces/client,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/client,matched,7160b224ec1dfee5,true,7160b224ec1dfee5,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/cpp,docs/integrations/language-clients/cpp.md,concepts/features/interfaces/cpp.mdx | integrations/language-clients/cpp.mdx,https://clickhouse.com/docs/interfaces/cpp,,ambiguous,c5ebd1fb86153394,true,c5ebd1fb86153394,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/documentation-search,docs/interfaces/documentation-search.md,concepts/features/interfaces/documentation-search.mdx,https://clickhouse.com/docs/interfaces/documentation-search,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/documentation-search,matched,afd25b1621d42be8,true,afd25b1621d42be8,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/formats,docs/interfaces/formats.md,reference/formats/index.mdx,https://clickhouse.com/docs/interfaces/formats,https://private-7c7dfe99.mintlify.app/reference/formats/index,matched,29da7228e7dde84a,true,29da7228e7dde84a,2026-07-01T10:43:54+00:00,false
|
||||
/interfaces/formats/Arrow,docs/interfaces/formats/Arrow/Arrow.md,reference/formats/Arrow/Arrow.mdx,https://clickhouse.com/docs/interfaces/formats/Arrow,https://private-7c7dfe99.mintlify.app/reference/formats/Arrow/Arrow,matched,3824231d81936ec5,true,8c99eaa69a47fe53,2026-07-01T10:16:00+00:00,false
|
||||
/interfaces/formats/ArrowStream,docs/interfaces/formats/Arrow/ArrowStream.md,reference/formats/Arrow/ArrowStream.mdx,https://clickhouse.com/docs/interfaces/formats/ArrowStream,https://private-7c7dfe99.mintlify.app/reference/formats/Arrow/ArrowStream,matched,bb63ced40ff8afa7,true,bb63ced40ff8afa7,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/formats/Arrow,docs/interfaces/formats/Arrow/Arrow.md,reference/formats/Arrow/Arrow.mdx,https://clickhouse.com/docs/interfaces/formats/Arrow,https://private-7c7dfe99.mintlify.app/reference/formats/Arrow/Arrow,matched,b09f51d21b6258fa,true,b09f51d21b6258fa,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/formats/ArrowStream,docs/interfaces/formats/Arrow/ArrowStream.md,reference/formats/Arrow/ArrowStream.mdx,https://clickhouse.com/docs/interfaces/formats/ArrowStream,https://private-7c7dfe99.mintlify.app/reference/formats/Arrow/ArrowStream,matched,c3915f47d8817d86,true,c3915f47d8817d86,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/formats/Avro,docs/interfaces/formats/Avro/Avro.md,reference/formats/Avro/Avro.mdx,https://clickhouse.com/docs/interfaces/formats/Avro,https://private-7c7dfe99.mintlify.app/reference/formats/Avro/Avro,matched,86b38faa284d7602,true,86b38faa284d7602,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/formats/AvroConfluent,docs/interfaces/formats/Avro/AvroConfluent.md,reference/formats/Avro/AvroConfluent.mdx,https://clickhouse.com/docs/interfaces/formats/AvroConfluent,https://private-7c7dfe99.mintlify.app/reference/formats/Avro/AvroConfluent,matched,c922737f2307ceec,true,c922737f2307ceec,2026-06-23T07:39:32+00:00,false
|
||||
/interfaces/formats/BSONEachRow,docs/interfaces/formats/BSONEachRow.md,reference/formats/BSONEachRow.mdx,https://clickhouse.com/docs/interfaces/formats/BSONEachRow,https://private-7c7dfe99.mintlify.app/reference/formats/BSONEachRow,matched,5405382560ae38c8,true,5405382560ae38c8,2026-06-23T07:34:28+00:00,false
|
||||
@@ -861,7 +863,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/interfaces/formats/ProtobufSingle,docs/interfaces/formats/Protobuf/ProtobufSingle.md,reference/formats/Protobuf/ProtobufSingle.mdx,https://clickhouse.com/docs/interfaces/formats/ProtobufSingle,https://private-7c7dfe99.mintlify.app/reference/formats/Protobuf/ProtobufSingle,matched,6c958d1bfa513f4a,true,6c958d1bfa513f4a,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/formats/RawBLOB,docs/interfaces/formats/RawBLOB.md,reference/formats/RawBLOB.mdx,https://clickhouse.com/docs/interfaces/formats/RawBLOB,https://private-7c7dfe99.mintlify.app/reference/formats/RawBLOB,matched,d344c46f769e848e,true,d344c46f769e848e,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/formats/Regexp,docs/interfaces/formats/Regexp.md,reference/formats/Regexp.mdx,https://clickhouse.com/docs/interfaces/formats/Regexp,https://private-7c7dfe99.mintlify.app/reference/formats/Regexp,matched,01db9b97751fe567,true,01db9b97751fe567,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/formats/RowBinary,docs/interfaces/formats/RowBinary/RowBinary.md,reference/formats/RowBinary/RowBinary.mdx,https://clickhouse.com/docs/interfaces/formats/RowBinary,https://private-7c7dfe99.mintlify.app/reference/formats/RowBinary/RowBinary,matched,7af5cae38c8c0e94,true,687bad02e366f12b,2026-07-01T10:16:00+00:00,false
|
||||
/interfaces/formats/RowBinary,docs/interfaces/formats/RowBinary/RowBinary.md,reference/formats/RowBinary/RowBinary.mdx,https://clickhouse.com/docs/interfaces/formats/RowBinary,https://private-7c7dfe99.mintlify.app/reference/formats/RowBinary/RowBinary,matched,c3426f25895c0e5a,true,c3426f25895c0e5a,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/formats/RowBinaryWithDefaults,docs/interfaces/formats/RowBinary/RowBinaryWithDefaults.md,reference/formats/RowBinary/RowBinaryWithDefaults.mdx,https://clickhouse.com/docs/interfaces/formats/RowBinaryWithDefaults,https://private-7c7dfe99.mintlify.app/reference/formats/RowBinary/RowBinaryWithDefaults,matched,e6b73b30c4502fd5,true,e6b73b30c4502fd5,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/formats/RowBinaryWithNames,docs/interfaces/formats/RowBinary/RowBinaryWithNames.md,reference/formats/RowBinary/RowBinaryWithNames.mdx,https://clickhouse.com/docs/interfaces/formats/RowBinaryWithNames,https://private-7c7dfe99.mintlify.app/reference/formats/RowBinary/RowBinaryWithNames,matched,2a83ac2cbaf9b2ed,true,2a83ac2cbaf9b2ed,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/formats/RowBinaryWithNamesAndTypes,docs/interfaces/formats/RowBinary/RowBinaryWithNamesAndTypes.md,reference/formats/RowBinary/RowBinaryWithNamesAndTypes.mdx,https://clickhouse.com/docs/interfaces/formats/RowBinaryWithNamesAndTypes,https://private-7c7dfe99.mintlify.app/reference/formats/RowBinary/RowBinaryWithNamesAndTypes,matched,3c8db57986756c0b,true,3c8db57986756c0b,2026-06-23T07:34:28+00:00,false
|
||||
@@ -883,23 +885,25 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/interfaces/http,docs/integrations/interfaces/http.md,concepts/features/interfaces/http.mdx,https://clickhouse.com/docs/interfaces/http,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/http,matched,4fc88e9c495e16c6,true,4fc88e9c495e16c6,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/jdbc,docs/integrations/interfaces/jdbc.md,concepts/features/interfaces/jdbc.mdx,https://clickhouse.com/docs/interfaces/jdbc,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/jdbc,matched,96ba684e632efee8,true,96ba684e632efee8,2026-06-22T14:29:17+00:00,false
|
||||
/interfaces/mysql,docs/integrations/interfaces/mysql.md,concepts/features/interfaces/mysql.mdx,https://clickhouse.com/docs/interfaces/mysql,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/mysql,matched,680eaa6f5334b1d4,true,680eaa6f5334b1d4,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/natives-clients-and-interfaces,docs/interfaces/native-clients-interfaces-index.md,concepts/features/interfaces/native-clients-interfaces-index.mdx,https://clickhouse.com/docs/interfaces/natives-clients-and-interfaces,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/native-clients-interfaces-index,matched,bc9842824ee60cf0,true,bc9842824ee60cf0,2026-07-01T10:16:00+00:00,false
|
||||
/interfaces/natives-clients-and-interfaces,docs/interfaces/native-clients-interfaces-index.md,concepts/features/interfaces/native-clients-interfaces-index.mdx,https://clickhouse.com/docs/interfaces/natives-clients-and-interfaces,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/native-clients-interfaces-index,matched,5dceb435498aea92,true,5dceb435498aea92,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/odbc,docs/integrations/interfaces/odbc.md,concepts/features/interfaces/odbc.mdx,https://clickhouse.com/docs/interfaces/odbc,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/odbc,matched,18014418fca702e2,true,18014418fca702e2,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/overview,docs/integrations/interfaces/overview.md,concepts/features/interfaces/overview.mdx,https://clickhouse.com/docs/interfaces/overview,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/overview,matched,cf59fe61367d7168,true,cf59fe61367d7168,2026-06-22T17:40:10+00:00,false
|
||||
/interfaces/postgresql,docs/integrations/interfaces/postgresql.md,concepts/features/interfaces/postgresql.mdx,https://clickhouse.com/docs/interfaces/postgresql,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/postgresql,matched,294434dbb875c688,true,294434dbb875c688,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/prometheus,docs/integrations/interfaces/prometheus.md,concepts/features/interfaces/prometheus.mdx,https://clickhouse.com/docs/interfaces/prometheus,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/prometheus,matched,1119bf9a3149424f,true,1119bf9a3149424f,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/schema-inference,docs/interfaces/schema-inference.md,concepts/features/interfaces/schema-inference.mdx,https://clickhouse.com/docs/interfaces/schema-inference,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/schema-inference,matched,e46c21862c9a53c5,true,e46c21862c9a53c5,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/specs/NativeFormat,docs/interfaces/specs/NativeFormat.md,reference/interfaces/specs/NativeFormat.mdx,https://clickhouse.com/docs/interfaces/specs/NativeFormat,https://private-7c7dfe99.mintlify.app/reference/interfaces/specs/NativeFormat,matched,bfe804e56c11b686,true,35f0b1cba48d6b3f,2026-07-01T10:16:00+00:00,false
|
||||
/interfaces/specs/NativeProtocol,docs/interfaces/specs/NativeProtocol.md,reference/interfaces/specs/NativeProtocol.mdx,https://clickhouse.com/docs/interfaces/specs/NativeProtocol,https://private-7c7dfe99.mintlify.app/reference/interfaces/specs/NativeProtocol,matched,c551ad25ee1b2577,true,2fa6e1fdd6fa41c4,2026-07-01T10:16:00+00:00,false
|
||||
/interfaces/specs/NativeFormat,docs/interfaces/specs/NativeFormat.md,reference/interfaces/specs/NativeFormat.mdx,https://clickhouse.com/docs/interfaces/specs/NativeFormat,https://private-7c7dfe99.mintlify.app/reference/interfaces/specs/NativeFormat,matched,fe6995c3c9499cdf,true,fe6995c3c9499cdf,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/specs/NativeProtocol,docs/interfaces/specs/NativeProtocol.md,reference/interfaces/specs/NativeProtocol.mdx,https://clickhouse.com/docs/interfaces/specs/NativeProtocol,https://private-7c7dfe99.mintlify.app/reference/interfaces/specs/NativeProtocol,matched,db2587bb015d30fb,true,db2587bb015d30fb,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/ssh,docs/integrations/interfaces/ssh.md,concepts/features/interfaces/ssh.mdx,https://clickhouse.com/docs/interfaces/ssh,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/ssh,matched,e928c616b6b0a167,true,e928c616b6b0a167,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/tcp,docs/integrations/interfaces/tcp.md,concepts/features/interfaces/tcp.mdx,https://clickhouse.com/docs/interfaces/tcp,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/tcp,matched,81f0ed3e8a93aab0,true,81f0ed3e8a93aab0,2026-06-22T17:40:10+00:00,false
|
||||
/interfaces/third-party/,docs/interfaces/third-party/index.md,concepts/features/interfaces/third-party/index.mdx,https://clickhouse.com/docs/interfaces/third-party/,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/third-party/index,matched,fca7f456f51a4121,true,fca7f456f51a4121,2026-05-19T11:08:53+00:00,false
|
||||
/interfaces/third-party/client-libraries,docs/interfaces/third-party/client-libraries.md,integrations/language-clients/third-party/client-libraries.mdx,https://clickhouse.com/docs/interfaces/third-party/client-libraries,https://private-7c7dfe99.mintlify.app/integrations/language-clients/third-party/client-libraries,matched,b3742747f482bcbf,true,b3742747f482bcbf,2026-06-22T17:40:10+00:00,false
|
||||
/interfaces/third-party/gui,docs/interfaces/third-party/gui.md,integrations/connectors/tools/gui.mdx,https://clickhouse.com/docs/interfaces/third-party/gui,https://private-7c7dfe99.mintlify.app/integrations/connectors/tools/gui,matched,44d8cbe41ea1a3b2,true,aa38c966f5ec4d3c,2026-07-01T10:16:00+00:00,false
|
||||
/interfaces/third-party/client-libraries,docs/interfaces/third-party/client-libraries.md,integrations/language-clients/third-party/client-libraries.mdx,https://clickhouse.com/docs/interfaces/third-party/client-libraries,https://private-7c7dfe99.mintlify.app/integrations/language-clients/third-party/client-libraries,matched,a94273884d7410d9,true,a94273884d7410d9,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/third-party/gui,docs/interfaces/third-party/gui.md,integrations/connectors/tools/gui.mdx,https://clickhouse.com/docs/interfaces/third-party/gui,https://private-7c7dfe99.mintlify.app/integrations/connectors/tools/gui,matched,44d8cbe41ea1a3b2,true,44d8cbe41ea1a3b2,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/third-party/integrations,docs/interfaces/third-party/integrations.md,integrations/connectors/tools/third-party-libraries.mdx,https://clickhouse.com/docs/interfaces/third-party/integrations,https://private-7c7dfe99.mintlify.app/integrations/connectors/tools/third-party-libraries,matched,9409cc07827e23c0,true,9409cc07827e23c0,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/third-party/moose-olap,docs/integrations/language-clients/moose-olap.md,integrations/language-clients/third-party/moose-olap.mdx,https://clickhouse.com/docs/interfaces/third-party/moose-olap,https://private-7c7dfe99.mintlify.app/integrations/language-clients/third-party/moose-olap,matched,e91d9e6fd0a26aa4,true,e91d9e6fd0a26aa4,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/third-party/proxy,docs/interfaces/third-party/proxy.md,integrations/connectors/tools/proxy.mdx,https://clickhouse.com/docs/interfaces/third-party/proxy,https://private-7c7dfe99.mintlify.app/integrations/connectors/tools/proxy,matched,53379d5b0eb5251c,true,53379d5b0eb5251c,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/web-sql,docs/interfaces/web-sql.md,concepts/features/interfaces/web-sql.mdx,https://clickhouse.com/docs/interfaces/web-sql,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/web-sql,matched,0683226383da58f2,true,0683226383da58f2,2026-07-11T17:50:23+00:00,true
|
||||
/interfaces/web-terminal,docs/interfaces/web-terminal.md,concepts/features/interfaces/web-terminal.mdx,https://clickhouse.com/docs/interfaces/web-terminal,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/web-terminal,matched,08de855a74005122,true,08de855a74005122,2026-06-23T07:34:28+00:00,false
|
||||
/interfaces/web-ui-color-coding,docs/interfaces/web-ui-color-coding.md,concepts/features/interfaces/web-ui-color-coding.mdx,https://clickhouse.com/docs/interfaces/web-ui-color-coding,https://private-7c7dfe99.mintlify.app/concepts/features/interfaces/web-ui-color-coding,matched,f5152e2bd4d54953,true,f5152e2bd4d54953,2026-07-11T17:50:23+00:00,true
|
||||
/intro,docs/intro.md,get-started/about/intro.mdx,https://clickhouse.com/docs/intro,https://private-7c7dfe99.mintlify.app/get-started/about/intro,matched,ffe506c24865d5fd,true,ffe506c24865d5fd,2026-06-23T07:34:28+00:00,false
|
||||
/introduction-clickhouse,docs/introduction-index.md,,https://clickhouse.com/docs/introduction-clickhouse,,unmatched,dc72366dcf698c0d,false,,,false
|
||||
/knowledgebase/Insert_select_settings_tuning,knowledgebase/Insert_select_settings_tuning.mdx,,https://clickhouse.com/docs/knowledgebase/Insert_select_settings_tuning,,unmatched,54957a670b9c2203,false,,,false
|
||||
@@ -923,7 +927,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/knowledgebase/check_query_processing_time_only,knowledgebase/check_query_processing_time_only.mdx,,https://clickhouse.com/docs/knowledgebase/check_query_processing_time_only,,unmatched,50142e6fa338528c,false,,,false
|
||||
/knowledgebase/check_users_roles,knowledgebase/check_users_roles.mdx,,https://clickhouse.com/docs/knowledgebase/check_users_roles,,unmatched,3a32151232a6b98c,false,,,false
|
||||
/knowledgebase/clickhouse_cloud_api_usage,knowledgebase/clickhouse_cloud_api_usage.mdx,,https://clickhouse.com/docs/knowledgebase/clickhouse_cloud_api_usage,,unmatched,8b650af500c9acf7,false,,,false
|
||||
/knowledgebase/collect-and-draw-traces,knowledgebase/collect-and-draw-traces.mdx,,https://clickhouse.com/docs/knowledgebase/collect-and-draw-traces,,unmatched,c6c1eb1889987864,false,,,false
|
||||
/knowledgebase/collect-and-draw-traces,knowledgebase/collect-and-draw-traces.mdx,resources/support-center/knowledge-base/monitoring-debugging/collect-and-draw-traces.mdx,https://clickhouse.com/docs/knowledgebase/collect-and-draw-traces,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/monitoring-debugging/collect-and-draw-traces,matched,c6c1eb1889987864,true,c6c1eb1889987864,2026-07-13T12:33:13+00:00,true
|
||||
/knowledgebase/columnar-database,knowledgebase/columnar-database.mdx,resources/support-center/knowledge-base/general-faqs/columnar-database.mdx,https://clickhouse.com/docs/knowledgebase/columnar-database,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/general-faqs/columnar-database,matched,157c626f8a13dd4d,false,,,false
|
||||
/knowledgebase/common-rbac-queries,knowledgebase/common-rbac-queries.mdx,resources/support-center/knowledge-base/security/common-rbac-queries.mdx,https://clickhouse.com/docs/knowledgebase/common-rbac-queries,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/security/common-rbac-queries,matched,7eab19fd44668e93,false,,,false
|
||||
/knowledgebase/compare_resultsets,knowledgebase/compare_resultsets.mdx,,https://clickhouse.com/docs/knowledgebase/compare_resultsets,,unmatched,868ab53258733ccf,false,,,false
|
||||
@@ -981,7 +985,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/knowledgebase/mysql-to-parquet-csv-json,knowledgebase/mysql-to-parquet-csv-json.mdx,resources/support-center/knowledge-base/data-import-export/mysql-to-parquet-csv-json.mdx,https://clickhouse.com/docs/knowledgebase/mysql-to-parquet-csv-json,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/data-import-export/mysql-to-parquet-csv-json,matched,44c607da83683095,false,,,false
|
||||
/knowledgebase/node-js-example,knowledgebase/node-js-example.mdx,resources/support-center/knowledge-base/integrations/node-js-example.mdx,https://clickhouse.com/docs/knowledgebase/node-js-example,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/integrations/node-js-example,matched,ae94f635f518e540,false,,,false
|
||||
/knowledgebase/olap,knowledgebase/olap.mdx,resources/support-center/knowledge-base/general-faqs/olap.mdx,https://clickhouse.com/docs/knowledgebase/olap,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/general-faqs/olap,matched,e20f9f94eb03e49c,false,,,false
|
||||
/knowledgebase/opt-out-core-dump-collection,knowledgebase/opt-out-core-dump-collection.mdx,,https://clickhouse.com/docs/knowledgebase/opt-out-core-dump-collection,,unmatched,305afbbb6d384293,false,,,false
|
||||
/knowledgebase/opt-out-core-dump-collection,knowledgebase/opt-out-core-dump-collection.mdx,resources/support-center/knowledge-base/cloud-services/opt-out-core-dump-collection.mdx,https://clickhouse.com/docs/knowledgebase/opt-out-core-dump-collection,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/cloud-services/opt-out-core-dump-collection,matched,305afbbb6d384293,true,305afbbb6d384293,2026-07-13T12:33:13+00:00,true
|
||||
/knowledgebase/optimize_final_vs_final,knowledgebase/optimize_final_vs_final.mdx,,https://clickhouse.com/docs/knowledgebase/optimize_final_vs_final,,unmatched,046cb0e8076cf8c0,false,,,false
|
||||
/knowledgebase/oracle-odbc,knowledgebase/oracle-odbc.mdx,resources/support-center/knowledge-base/integrations/oracle-odbc.mdx,https://clickhouse.com/docs/knowledgebase/oracle-odbc,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/integrations/oracle-odbc,matched,e5b0ff50a5b4e2b5,false,,,false
|
||||
/knowledgebase/outputSendLogsLevelTracesToFile,knowledgebase/outputSendLogsLevelTracesToFile.mdx,resources/support-center/knowledge-base/monitoring-debugging/outputSendLogsLevelTracesToFile.mdx,https://clickhouse.com/docs/knowledgebase/outputSendLogsLevelTracesToFile,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/monitoring-debugging/outputSendLogsLevelTracesToFile,matched,7b366931a91740eb,false,,,false
|
||||
@@ -996,12 +1000,12 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/knowledgebase/python_http_requests,knowledgebase/python_http_requests.mdx,,https://clickhouse.com/docs/knowledgebase/python_http_requests,,unmatched,60b60a413c293223,false,,,false
|
||||
/knowledgebase/query_max_execution_time,knowledgebase/query_max_execution_time.mdx,,https://clickhouse.com/docs/knowledgebase/query_max_execution_time,,unmatched,44a2121418c10665,false,,,false
|
||||
/knowledgebase/read_consistency,knowledgebase/read_consistency.mdx,,https://clickhouse.com/docs/knowledgebase/read_consistency,,unmatched,ecb137fd1463f816,false,,,false
|
||||
/knowledgebase/recovering-from-corrupt-keeper-snapshot,knowledgebase/recovering-from-corrupt-keeper-snapshot.mdx,,https://clickhouse.com/docs/knowledgebase/recovering-from-corrupt-keeper-snapshot,,unmatched,0f81e70c983cec06,false,,,false
|
||||
/knowledgebase/recovering-from-corrupt-keeper-snapshot,knowledgebase/recovering-from-corrupt-keeper-snapshot.mdx,resources/support-center/knowledge-base/troubleshooting/recovering-from-corrupt-keeper-snapshot.mdx,https://clickhouse.com/docs/knowledgebase/recovering-from-corrupt-keeper-snapshot,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/troubleshooting/recovering-from-corrupt-keeper-snapshot,matched,0f81e70c983cec06,true,0f81e70c983cec06,2026-07-13T12:33:13+00:00,true
|
||||
/knowledgebase/recreate_table_across_terminals,knowledgebase/recreate_table_across_terminals.mdx,,https://clickhouse.com/docs/knowledgebase/recreate_table_across_terminals,,unmatched,fab3e9030eaa388b,false,,,false
|
||||
/knowledgebase/remove-default-user,knowledgebase/remove-default-user.mdx,resources/support-center/knowledge-base/security/remove-default-user.mdx,https://clickhouse.com/docs/knowledgebase/remove-default-user,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/security/remove-default-user,matched,803165c43e8eb2cc,false,,,false
|
||||
/knowledgebase/restore-replica-after-storage-failure,knowledgebase/restore-replica-after-storage-failure.mdx,,https://clickhouse.com/docs/knowledgebase/restore-replica-after-storage-failure,,unmatched,9892fa9d4ee47152,false,,,false
|
||||
/knowledgebase/restore-replica-after-storage-failure,knowledgebase/restore-replica-after-storage-failure.mdx,resources/support-center/knowledge-base/troubleshooting/restore-replica-after-storage-failure.mdx,https://clickhouse.com/docs/knowledgebase/restore-replica-after-storage-failure,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/troubleshooting/restore-replica-after-storage-failure,matched,9892fa9d4ee47152,true,9892fa9d4ee47152,2026-07-13T12:33:13+00:00,true
|
||||
/knowledgebase/row-column-policy,knowledgebase/row-column-policy.mdx,resources/support-center/knowledge-base/security/row-column-policy.mdx,https://clickhouse.com/docs/knowledgebase/row-column-policy,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/security/row-column-policy,matched,04a1c4adbd60bd15,false,,,false
|
||||
/knowledgebase/runbook-json,knowledgebase/runbook-json.mdx,,https://clickhouse.com/docs/knowledgebase/runbook-json,,unmatched,baada00b575a6461,false,,,false
|
||||
/knowledgebase/runbook-json,knowledgebase/runbook-json.mdx,resources/support-center/knowledge-base/tables-schema/runbook-json.mdx,https://clickhouse.com/docs/knowledgebase/runbook-json,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/tables-schema/runbook-json,matched,baada00b575a6461,true,baada00b575a6461,2026-07-13T12:33:13+00:00,true
|
||||
/knowledgebase/s3_export_data_year_month_folders,knowledgebase/s3_export_data_year_month_folders.mdx,,https://clickhouse.com/docs/knowledgebase/s3_export_data_year_month_folders,,unmatched,7b905336c6f75391,false,,,false
|
||||
/knowledgebase/schema_migration_tools,knowledgebase/schema_migration_tools.md,,https://clickhouse.com/docs/knowledgebase/schema_migration_tools,,unmatched,31a0167fdd60f403,false,,,false
|
||||
/knowledgebase/search-across-node-for-tables-with-a-wildcard,knowledgebase/search-across-node-for-tables-with-a-wildcard.mdx,resources/support-center/knowledge-base/tables-schema/search-across-node-for-tables-with-a-wildcard.mdx,https://clickhouse.com/docs/knowledgebase/search-across-node-for-tables-with-a-wildcard,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/tables-schema/search-across-node-for-tables-with-a-wildcard,matched,7a7699a4379151bf,false,,,false
|
||||
@@ -1010,7 +1014,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/knowledgebase/time-series,knowledgebase/time-series.mdx,resources/support-center/knowledge-base/general-faqs/time-series.mdx,https://clickhouse.com/docs/knowledgebase/time-series,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/general-faqs/time-series,matched,0c0d01e2f586c0d7,false,,,false
|
||||
/knowledgebase/tips-tricks-optimizing-basic-data-types-in-clickhouse,knowledgebase/tips-tricks-optimizing-basic-data-types-in-clickhouse.mdx,resources/support-center/knowledge-base/performance-optimization/tips-tricks-optimizing-basic-data-types-in-clickhouse.mdx,https://clickhouse.com/docs/knowledgebase/tips-tricks-optimizing-basic-data-types-in-clickhouse,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/performance-optimization/tips-tricks-optimizing-basic-data-types-in-clickhouse,matched,193be2e12900fc92,false,,,false
|
||||
/knowledgebase/unable-to-access-cloud-service,knowledgebase/unable-to-access-cloud-service.mdx,resources/support-center/knowledge-base/cloud-services/unable-to-access-cloud-service.mdx,https://clickhouse.com/docs/knowledgebase/unable-to-access-cloud-service,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/cloud-services/unable-to-access-cloud-service,matched,df9135ddc19fc1bb,false,,,false
|
||||
/knowledgebase/understanding-part-types-and-storage-formats,knowledgebase/understanding-part-types-and-storage-formats.mdx,,https://clickhouse.com/docs/knowledgebase/understanding-part-types-and-storage-formats,,unmatched,afb40c7d2cc36e85,false,,,false
|
||||
/knowledgebase/understanding-part-types-and-storage-formats,knowledgebase/understanding-part-types-and-storage-formats.mdx,resources/support-center/knowledge-base/data-management/understanding-part-types-and-storage-formats.mdx,https://clickhouse.com/docs/knowledgebase/understanding-part-types-and-storage-formats,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/data-management/understanding-part-types-and-storage-formats,matched,afb40c7d2cc36e85,true,afb40c7d2cc36e85,2026-07-13T12:33:13+00:00,true
|
||||
/knowledgebase/use-clickhouse-for-log-analytics,knowledgebase/use-clickhouse-for-log-analytics.mdx,resources/support-center/knowledge-base/general-faqs/use-clickhouse-for-log-analytics.mdx,https://clickhouse.com/docs/knowledgebase/use-clickhouse-for-log-analytics,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/general-faqs/use-clickhouse-for-log-analytics,matched,bafde1d93f13d10a,false,,,false
|
||||
/knowledgebase/useful-queries-for-troubleshooting,knowledgebase/useful-queries-for-troubleshooting.mdx,resources/support-center/knowledge-base/queries-sql/useful-queries-for-troubleshooting.mdx,https://clickhouse.com/docs/knowledgebase/useful-queries-for-troubleshooting,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/queries-sql/useful-queries-for-troubleshooting,matched,4b3ca172a1b4ae53,false,,,false
|
||||
/knowledgebase/using-array-join-to-extract-and-query-attributes,knowledgebase/using-array-join-to-extract-and-query-attributes.mdx,resources/support-center/knowledge-base/queries-sql/using-array-join-to-extract-and-query-attributes.mdx,https://clickhouse.com/docs/knowledgebase/using-array-join-to-extract-and-query-attributes,https://private-7c7dfe99.mintlify.app/resources/support-center/knowledge-base/queries-sql/using-array-join-to-extract-and-query-attributes,matched,4ba84b799e9b0e8d,false,,,false
|
||||
@@ -1085,7 +1089,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/configuration-files,docs/operations/configuration-files.md,concepts/features/configuration/server-config/configuration-files.mdx,https://clickhouse.com/docs/operations/configuration-files,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/server-config/configuration-files,matched,9e71d3c2fa185cdf,true,9e71d3c2fa185cdf,2026-06-23T07:34:28+00:00,false
|
||||
/operations/external-authenticators/,docs/operations/external-authenticators/index.md,concepts/features/security/external-authenticators/index.mdx,https://clickhouse.com/docs/operations/external-authenticators/,https://private-7c7dfe99.mintlify.app/concepts/features/security/external-authenticators/index,matched,18033d76305fc3d5,true,18033d76305fc3d5,2026-06-22T15:11:51+00:00,false
|
||||
/operations/external-authenticators/http,docs/operations/external-authenticators/http.md,concepts/features/security/external-authenticators/http.mdx,https://clickhouse.com/docs/operations/external-authenticators/http,https://private-7c7dfe99.mintlify.app/concepts/features/security/external-authenticators/http,matched,04f510d66c9b376c,true,04f510d66c9b376c,2026-06-23T07:34:28+00:00,false
|
||||
/operations/external-authenticators/jwt,docs/operations/external-authenticators/jwt.md,concepts/features/security/external-authenticators/jwt.mdx,https://clickhouse.com/docs/operations/external-authenticators/jwt,https://private-7c7dfe99.mintlify.app/concepts/features/security/external-authenticators/jwt,matched,3129828259cd1cb9,true,3129828259cd1cb9,2026-06-23T07:34:28+00:00,false
|
||||
/operations/external-authenticators/jwt,docs/operations/external-authenticators/jwt.md,concepts/features/security/external-authenticators/jwt.mdx,https://clickhouse.com/docs/operations/external-authenticators/jwt,https://private-7c7dfe99.mintlify.app/concepts/features/security/external-authenticators/jwt,matched,973a2cfefd575e80,true,973a2cfefd575e80,2026-07-11T17:50:23+00:00,true
|
||||
/operations/external-authenticators/kerberos,docs/operations/external-authenticators/kerberos.md,concepts/features/security/external-authenticators/kerberos.mdx,https://clickhouse.com/docs/operations/external-authenticators/kerberos,https://private-7c7dfe99.mintlify.app/concepts/features/security/external-authenticators/kerberos,matched,b7a3734788840b66,true,b7a3734788840b66,2026-06-23T07:34:28+00:00,false
|
||||
/operations/external-authenticators/ldap,docs/operations/external-authenticators/ldap.md,concepts/features/security/external-authenticators/ldap.mdx,https://clickhouse.com/docs/operations/external-authenticators/ldap,https://private-7c7dfe99.mintlify.app/concepts/features/security/external-authenticators/ldap,matched,9449246250219a1a,true,9449246250219a1a,2026-06-23T07:34:28+00:00,false
|
||||
/operations/external-authenticators/ssl-x509,docs/operations/external-authenticators/ssl-x509.md,concepts/features/security/external-authenticators/ssl-x509.mdx,https://clickhouse.com/docs/operations/external-authenticators/ssl-x509,https://private-7c7dfe99.mintlify.app/concepts/features/security/external-authenticators/ssl-x509,matched,947a7d558e471c72,true,947a7d558e471c72,2026-05-08T09:09:20+00:00,false
|
||||
@@ -1106,7 +1110,8 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/settings/formats,docs/operations/settings/settings-formats.md,reference/settings/formats.mdx,https://clickhouse.com/docs/operations/settings/formats,https://private-7c7dfe99.mintlify.app/reference/settings/formats,matched,fb2919ef2a5bda4b,true,4ea8acf23dcabe73,2026-07-01T10:16:01+00:00,false
|
||||
/operations/settings/memory-overcommit,docs/operations/settings/memory-overcommit.md,concepts/features/configuration/settings/memory-overcommit.mdx,https://clickhouse.com/docs/operations/settings/memory-overcommit,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/settings/memory-overcommit,matched,0a243f5510171522,true,0a243f5510171522,2026-06-23T07:34:28+00:00,false
|
||||
/operations/settings/merge-tree-settings,docs/operations/settings/merge-tree-settings.md,reference/settings/merge-tree-settings.mdx,https://clickhouse.com/docs/operations/settings/merge-tree-settings,https://private-7c7dfe99.mintlify.app/reference/settings/merge-tree-settings,matched,0d191efc3f88a394,true,401d24e983f4b918,2026-07-01T10:16:01+00:00,false
|
||||
/operations/settings/overview,docs/operations/settings/overview.md,concepts/features/configuration/settings/overview.mdx,https://clickhouse.com/docs/operations/settings/overview,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/settings/overview,matched,63d156ecfe2fb33b,true,756466e653966891,2026-07-01T10:16:01+00:00,false
|
||||
/operations/settings/oom-canary,docs/operations/settings/oom-canary.md,concepts/features/performance/troubleshoot/oom-canary.mdx,https://clickhouse.com/docs/operations/settings/oom-canary,https://private-7c7dfe99.mintlify.app/concepts/features/performance/troubleshoot/oom-canary,matched,06286ca739063d95,true,06286ca739063d95,2026-07-11T17:50:23+00:00,true
|
||||
/operations/settings/overview,docs/operations/settings/overview.md,concepts/features/configuration/settings/overview.mdx,https://clickhouse.com/docs/operations/settings/overview,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/settings/overview,matched,63d156ecfe2fb33b,true,63d156ecfe2fb33b,2026-07-11T17:50:23+00:00,true
|
||||
/operations/settings/permissions-for-queries,docs/operations/settings/permissions-for-queries.md,concepts/features/configuration/settings/permissions-for-queries.mdx,https://clickhouse.com/docs/operations/settings/permissions-for-queries,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/settings/permissions-for-queries,matched,89955380f36ffec5,true,89955380f36ffec5,2026-06-23T07:34:28+00:00,false
|
||||
/operations/settings/query-complexity,docs/operations/settings/query-complexity.md,concepts/features/configuration/settings/query-complexity.mdx,https://clickhouse.com/docs/operations/settings/query-complexity,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/settings/query-complexity,matched,cdc147d9f7450ac5,true,cdc147d9f7450ac5,2026-06-23T07:34:28+00:00,false
|
||||
/operations/settings/query-level,docs/operations/settings/settings-query-level.md,concepts/features/configuration/settings/settings-query-level.mdx,https://clickhouse.com/docs/operations/settings/query-level,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/settings/settings-query-level,matched,03f99ff0a17572c9,true,03f99ff0a17572c9,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1131,8 +1136,8 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/system-tables/azure_queue_settings,docs/operations/system-tables/azure_queue_settings.md,reference/system-tables/azure_queue_settings.mdx,https://clickhouse.com/docs/operations/system-tables/azure_queue_settings,https://private-7c7dfe99.mintlify.app/reference/system-tables/azure_queue_settings,matched,b47c4addf4ff730f,true,b47c4addf4ff730f,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/background_schedule_pool,docs/operations/system-tables/background_schedule_pool.md,reference/system-tables/background_schedule_pool.mdx,https://clickhouse.com/docs/operations/system-tables/background_schedule_pool,https://private-7c7dfe99.mintlify.app/reference/system-tables/background_schedule_pool,matched,003f06920ccec6ad,true,003f06920ccec6ad,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/background_schedule_pool_log,docs/operations/system-tables/background_schedule_pool_log.md,reference/system-tables/background_schedule_pool_log.mdx,https://clickhouse.com/docs/operations/system-tables/background_schedule_pool_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/background_schedule_pool_log,matched,801268572623f510,true,801268572623f510,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/backup_log,docs/operations/system-tables/backup_log.md,reference/system-tables/backup_log.mdx,https://clickhouse.com/docs/operations/system-tables/backup_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/backup_log,matched,bd6065a8091ca06b,true,23f64f52bedff424,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/backups,docs/operations/system-tables/backups.md,reference/system-tables/backups.mdx,https://clickhouse.com/docs/operations/system-tables/backups,https://private-7c7dfe99.mintlify.app/reference/system-tables/backups,matched,0cc9a7ed0b86c488,true,474096c2d8465fd9,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/backup_log,docs/operations/system-tables/backup_log.md,reference/system-tables/backup_log.mdx,https://clickhouse.com/docs/operations/system-tables/backup_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/backup_log,matched,bd6065a8091ca06b,true,bd6065a8091ca06b,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/backups,docs/operations/system-tables/backups.md,reference/system-tables/backups.mdx,https://clickhouse.com/docs/operations/system-tables/backups,https://private-7c7dfe99.mintlify.app/reference/system-tables/backups,matched,9b0cd37f8a7d5701,true,9b0cd37f8a7d5701,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/blob_storage_log,docs/operations/system-tables/blob_storage_log.md,reference/system-tables/blob_storage_log.mdx,https://clickhouse.com/docs/operations/system-tables/blob_storage_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/blob_storage_log,matched,40e7e7b30c3c4fde,true,40e7e7b30c3c4fde,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/build_options,docs/operations/system-tables/build_options.md,reference/system-tables/build_options.mdx,https://clickhouse.com/docs/operations/system-tables/build_options,https://private-7c7dfe99.mintlify.app/reference/system-tables/build_options,matched,fb2cc9ed0b52f163,true,fb2cc9ed0b52f163,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/certificates,docs/operations/system-tables/certificates.md,reference/system-tables/certificates.mdx,https://clickhouse.com/docs/operations/system-tables/certificates,https://private-7c7dfe99.mintlify.app/reference/system-tables/certificates,matched,7dfacd8a49ab3d16,true,7dfacd8a49ab3d16,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1159,7 +1164,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/system-tables/dictionaries,docs/operations/system-tables/dictionaries.md,reference/system-tables/dictionaries.mdx,https://clickhouse.com/docs/operations/system-tables/dictionaries,https://private-7c7dfe99.mintlify.app/reference/system-tables/dictionaries,matched,30d9c72de8848950,true,30d9c72de8848950,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/dictionary_layouts,docs/operations/system-tables/dictionary_layouts.md,reference/system-tables/dictionary_layouts.mdx,https://clickhouse.com/docs/operations/system-tables/dictionary_layouts,https://private-7c7dfe99.mintlify.app/reference/system-tables/dictionary_layouts,matched,7a3b74bfe0458a1b,true,7a3b74bfe0458a1b,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/dictionary_sources,docs/operations/system-tables/dictionary_sources.md,reference/system-tables/dictionary_sources.mdx,https://clickhouse.com/docs/operations/system-tables/dictionary_sources,https://private-7c7dfe99.mintlify.app/reference/system-tables/dictionary_sources,matched,6e83a1b795c18cda,true,6e83a1b795c18cda,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/dimensional_metrics,docs/operations/system-tables/dimensional_metrics.md,reference/system-tables/dimensional_metrics.mdx,https://clickhouse.com/docs/operations/system-tables/dimensional_metrics,https://private-7c7dfe99.mintlify.app/reference/system-tables/dimensional_metrics,matched,b785f035681c122d,true,41a8e212bd7abc30,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/dimensional_metrics,docs/operations/system-tables/dimensional_metrics.md,reference/system-tables/dimensional_metrics.mdx,https://clickhouse.com/docs/operations/system-tables/dimensional_metrics,https://private-7c7dfe99.mintlify.app/reference/system-tables/dimensional_metrics,matched,f8bebcc4ccb5dd7d,true,f8bebcc4ccb5dd7d,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/disk_types,docs/operations/system-tables/disk_types.md,reference/system-tables/disk_types.mdx,https://clickhouse.com/docs/operations/system-tables/disk_types,https://private-7c7dfe99.mintlify.app/reference/system-tables/disk_types,matched,a4fa51b57fe1d289,true,a4fa51b57fe1d289,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/disks,docs/operations/system-tables/disks.md,reference/system-tables/disks.mdx,https://clickhouse.com/docs/operations/system-tables/disks,https://private-7c7dfe99.mintlify.app/reference/system-tables/disks,matched,f5aad12f0f49430a,true,f5aad12f0f49430a,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/distributed_ddl_queue,docs/operations/system-tables/distributed_ddl_queue.md,reference/system-tables/distributed_ddl_queue.mdx,https://clickhouse.com/docs/operations/system-tables/distributed_ddl_queue,https://private-7c7dfe99.mintlify.app/reference/system-tables/distributed_ddl_queue,matched,1ffce34c4d08703f,true,1ffce34c4d08703f,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1174,13 +1179,13 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/system-tables/fail_points,docs/operations/system-tables/fail_points.md,reference/system-tables/fail_points.mdx,https://clickhouse.com/docs/operations/system-tables/fail_points,https://private-7c7dfe99.mintlify.app/reference/system-tables/fail_points,matched,dba698b365d9ef95,true,dba698b365d9ef95,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/filesystem_cache,docs/operations/system-tables/filesystem_cache.md,reference/system-tables/filesystem_cache.mdx,https://clickhouse.com/docs/operations/system-tables/filesystem_cache,https://private-7c7dfe99.mintlify.app/reference/system-tables/filesystem_cache,matched,a2328859464bad53,true,a2328859464bad53,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/filesystem_cache_log,docs/operations/system-tables/filesystem_cache_log.md,reference/system-tables/filesystem_cache_log.mdx,https://clickhouse.com/docs/operations/system-tables/filesystem_cache_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/filesystem_cache_log,matched,19f3dfba8f9194aa,true,19f3dfba8f9194aa,2026-05-13T13:08:27+00:00,false
|
||||
/operations/system-tables/filesystem_cache_settings,docs/operations/system-tables/filesystem_cache_settings.md,reference/system-tables/filesystem_cache_settings.mdx,https://clickhouse.com/docs/operations/system-tables/filesystem_cache_settings,https://private-7c7dfe99.mintlify.app/reference/system-tables/filesystem_cache_settings,matched,3fe77ee940d5f7b1,true,02a9c41e5f78a432,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/filesystem_cache_settings,docs/operations/system-tables/filesystem_cache_settings.md,reference/system-tables/filesystem_cache_settings.mdx,https://clickhouse.com/docs/operations/system-tables/filesystem_cache_settings,https://private-7c7dfe99.mintlify.app/reference/system-tables/filesystem_cache_settings,matched,a93be3313a7e0f69,true,a93be3313a7e0f69,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/filesystem_read_prefetches_log,docs/operations/system-tables/filesystem_read_prefetches_log.md,reference/system-tables/filesystem_read_prefetches_log.mdx,https://clickhouse.com/docs/operations/system-tables/filesystem_read_prefetches_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/filesystem_read_prefetches_log,matched,5b6d5025431391a3,true,5b6d5025431391a3,2026-05-13T13:08:27+00:00,false
|
||||
/operations/system-tables/formats,docs/operations/system-tables/formats.md,reference/system-tables/formats.mdx,https://clickhouse.com/docs/operations/system-tables/formats,https://private-7c7dfe99.mintlify.app/reference/system-tables/formats,matched,e0ce0d124bf02e9d,true,e0ce0d124bf02e9d,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/functions,docs/operations/system-tables/functions.md,reference/system-tables/functions.mdx,https://clickhouse.com/docs/operations/system-tables/functions,https://private-7c7dfe99.mintlify.app/reference/system-tables/functions,matched,8257e4513f41c25b,true,8257e4513f41c25b,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/grants,docs/operations/system-tables/grants.md,reference/system-tables/grants.mdx,https://clickhouse.com/docs/operations/system-tables/grants,https://private-7c7dfe99.mintlify.app/reference/system-tables/grants,matched,5a006ff06ee19344,true,7eff8cb2a297443e,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/grants,docs/operations/system-tables/grants.md,reference/system-tables/grants.mdx,https://clickhouse.com/docs/operations/system-tables/grants,https://private-7c7dfe99.mintlify.app/reference/system-tables/grants,matched,1bedeeb54cf1208d,true,1bedeeb54cf1208d,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/graphite_retentions,docs/operations/system-tables/graphite_retentions.md,reference/system-tables/graphite_retentions.mdx,https://clickhouse.com/docs/operations/system-tables/graphite_retentions,https://private-7c7dfe99.mintlify.app/reference/system-tables/graphite_retentions,matched,464bac9447aad728,true,464bac9447aad728,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/histogram_metrics,docs/operations/system-tables/histogram_metrics.md,reference/system-tables/histogram_metrics.mdx,https://clickhouse.com/docs/operations/system-tables/histogram_metrics,https://private-7c7dfe99.mintlify.app/reference/system-tables/histogram_metrics,matched,2620e2192210eefe,true,2620e2192210eefe,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/histogram_metrics,docs/operations/system-tables/histogram_metrics.md,reference/system-tables/histogram_metrics.mdx,https://clickhouse.com/docs/operations/system-tables/histogram_metrics,https://private-7c7dfe99.mintlify.app/reference/system-tables/histogram_metrics,matched,95f6e97eb816e949,true,95f6e97eb816e949,2026-07-12T08:08:11+00:00,true
|
||||
/operations/system-tables/hypothetical_indexes,docs/operations/system-tables/hypothetical_indexes.md,reference/system-tables/hypothetical_indexes.mdx,https://clickhouse.com/docs/operations/system-tables/hypothetical_indexes,https://private-7c7dfe99.mintlify.app/reference/system-tables/hypothetical_indexes,matched,3d35b0e70b7b2ccf,true,3d35b0e70b7b2ccf,2026-07-01T10:43:55+00:00,false
|
||||
/operations/system-tables/iceberg_files,docs/operations/system-tables/iceberg_files.md,reference/system-tables/iceberg_files.mdx,https://clickhouse.com/docs/operations/system-tables/iceberg_files,https://private-7c7dfe99.mintlify.app/reference/system-tables/iceberg_files,matched,8799d8712d764411,true,8799d8712d764411,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/iceberg_history,docs/operations/system-tables/iceberg_history.md,reference/system-tables/iceberg_history.mdx,https://clickhouse.com/docs/operations/system-tables/iceberg_history,https://private-7c7dfe99.mintlify.app/reference/system-tables/iceberg_history,matched,0177a8d290e37e65,true,17b260db60cb1f0c,2026-07-01T10:16:01+00:00,false
|
||||
@@ -1197,10 +1202,10 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/system-tables/keywords,docs/operations/system-tables/keywords.md,reference/system-tables/keywords.mdx,https://clickhouse.com/docs/operations/system-tables/keywords,https://private-7c7dfe99.mintlify.app/reference/system-tables/keywords,matched,580293e04e4b5ef0,true,580293e04e4b5ef0,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/licenses,docs/operations/system-tables/licenses.md,reference/system-tables/licenses.mdx,https://clickhouse.com/docs/operations/system-tables/licenses,https://private-7c7dfe99.mintlify.app/reference/system-tables/licenses,matched,9d1423ef5ce07210,true,9d1423ef5ce07210,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/macros,docs/operations/system-tables/macros.md,reference/system-tables/macros.mdx,https://clickhouse.com/docs/operations/system-tables/macros,https://private-7c7dfe99.mintlify.app/reference/system-tables/macros,matched,ca6dd30401322eb5,true,ca6dd30401322eb5,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/masking_policies,docs/operations/system-tables/masking_policies.md,reference/system-tables/masking_policies.mdx,https://clickhouse.com/docs/operations/system-tables/masking_policies,https://private-7c7dfe99.mintlify.app/reference/system-tables/masking_policies,matched,2122b6c04db57faf,true,2122b6c04db57faf,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/masking_policies,docs/operations/system-tables/masking_policies.md,reference/system-tables/masking_policies.mdx,https://clickhouse.com/docs/operations/system-tables/masking_policies,https://private-7c7dfe99.mintlify.app/reference/system-tables/masking_policies,matched,38395dfcc46cecbf,true,38395dfcc46cecbf,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/merge_tree_settings,docs/operations/system-tables/merge_tree_settings.md,reference/system-tables/merge_tree_settings.mdx,https://clickhouse.com/docs/operations/system-tables/merge_tree_settings,https://private-7c7dfe99.mintlify.app/reference/system-tables/merge_tree_settings,matched,e5e8db50498b1673,true,e5e8db50498b1673,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/merges,docs/operations/system-tables/merges.md,reference/system-tables/merges.mdx,https://clickhouse.com/docs/operations/system-tables/merges,https://private-7c7dfe99.mintlify.app/reference/system-tables/merges,matched,8dd4f36f4b9490c3,true,8dd4f36f4b9490c3,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/metric_log,docs/operations/system-tables/metric_log.md,reference/system-tables/metric_log.mdx,https://clickhouse.com/docs/operations/system-tables/metric_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/metric_log,matched,d375a7f97c724821,true,693beaebab5294fc,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/metric_log,docs/operations/system-tables/metric_log.md,reference/system-tables/metric_log.mdx,https://clickhouse.com/docs/operations/system-tables/metric_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/metric_log,matched,d375a7f97c724821,true,d375a7f97c724821,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/metrics,docs/operations/system-tables/metrics.md,reference/system-tables/metrics.mdx,https://clickhouse.com/docs/operations/system-tables/metrics,https://private-7c7dfe99.mintlify.app/reference/system-tables/metrics,matched,b9ad0a4ad63da2c1,true,919c2129e0bf1f98,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/models,docs/operations/system-tables/models.md,reference/system-tables/models.mdx,https://clickhouse.com/docs/operations/system-tables/models,https://private-7c7dfe99.mintlify.app/reference/system-tables/models,matched,6d6f942a7cc2bcb5,true,6d6f942a7cc2bcb5,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/moves,docs/operations/system-tables/moves.md,reference/system-tables/moves.mdx,https://clickhouse.com/docs/operations/system-tables/moves,https://private-7c7dfe99.mintlify.app/reference/system-tables/moves,matched,b7f2eb2b29243e5a,true,b7f2eb2b29243e5a,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1217,7 +1222,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/system-tables/parts_columns,docs/operations/system-tables/parts_columns.md,reference/system-tables/parts_columns.mdx,https://clickhouse.com/docs/operations/system-tables/parts_columns,https://private-7c7dfe99.mintlify.app/reference/system-tables/parts_columns,matched,54ddc77af6501853,true,54ddc77af6501853,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/predicate_statistics_log,docs/operations/system-tables/predicate_statistics_log.md,reference/system-tables/predicate_statistics_log.mdx,https://clickhouse.com/docs/operations/system-tables/predicate_statistics_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/predicate_statistics_log,matched,0c4c9b03e9bb41d4,true,0c4c9b03e9bb41d4,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/primes,docs/operations/system-tables/primes.md,reference/system-tables/primes.mdx,https://clickhouse.com/docs/operations/system-tables/primes,https://private-7c7dfe99.mintlify.app/reference/system-tables/primes,matched,c8bd5508638d5ac1,true,c8bd5508638d5ac1,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/privileges,docs/operations/system-tables/privileges.md,reference/system-tables/privileges.mdx,https://clickhouse.com/docs/operations/system-tables/privileges,https://private-7c7dfe99.mintlify.app/reference/system-tables/privileges,matched,44903fb248e34204,true,5b98c7994d5dca05,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/privileges,docs/operations/system-tables/privileges.md,reference/system-tables/privileges.mdx,https://clickhouse.com/docs/operations/system-tables/privileges,https://private-7c7dfe99.mintlify.app/reference/system-tables/privileges,matched,9e8e46e9c6fa0858,true,9e8e46e9c6fa0858,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/processes,docs/operations/system-tables/processes.md,reference/system-tables/processes.mdx,https://clickhouse.com/docs/operations/system-tables/processes,https://private-7c7dfe99.mintlify.app/reference/system-tables/processes,matched,4d198195a27aaeb2,true,4d198195a27aaeb2,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/processors_profile_log,docs/operations/system-tables/processors_profile_log.md,reference/system-tables/processors_profile_log.mdx,https://clickhouse.com/docs/operations/system-tables/processors_profile_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/processors_profile_log,matched,55bb2416a7045d67,true,55bb2416a7045d67,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/projection_parts,docs/operations/system-tables/projection_parts.md,reference/system-tables/projection_parts.mdx,https://clickhouse.com/docs/operations/system-tables/projection_parts,https://private-7c7dfe99.mintlify.app/reference/system-tables/projection_parts,matched,997eca3070cbeda5,true,997eca3070cbeda5,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1226,7 +1231,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/system-tables/query_cache,docs/operations/system-tables/query_cache.md,reference/system-tables/query_cache.mdx,https://clickhouse.com/docs/operations/system-tables/query_cache,https://private-7c7dfe99.mintlify.app/reference/system-tables/query_cache,matched,237bdf29179632fb,true,237bdf29179632fb,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/query_condition_cache,docs/operations/system-tables/query_condition_cache.md,reference/system-tables/query_condition_cache.mdx,https://clickhouse.com/docs/operations/system-tables/query_condition_cache,https://private-7c7dfe99.mintlify.app/reference/system-tables/query_condition_cache,matched,2cdfd85810116d3e,true,2cdfd85810116d3e,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/query_log,docs/operations/system-tables/query_log.md,reference/system-tables/query_log.mdx,https://clickhouse.com/docs/operations/system-tables/query_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/query_log,matched,9870502f6976e830,true,9870502f6976e830,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/query_metric_log,docs/operations/system-tables/query_metric_log.md,reference/system-tables/query_metric_log.mdx,https://clickhouse.com/docs/operations/system-tables/query_metric_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/query_metric_log,matched,b4aa3e45cd415c1c,true,54da85e537783afb,2026-07-01T10:16:01+00:00,false
|
||||
/operations/system-tables/query_metric_log,docs/operations/system-tables/query_metric_log.md,reference/system-tables/query_metric_log.mdx,https://clickhouse.com/docs/operations/system-tables/query_metric_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/query_metric_log,matched,b4aa3e45cd415c1c,true,b4aa3e45cd415c1c,2026-07-11T17:50:23+00:00,true
|
||||
/operations/system-tables/query_thread_log,docs/operations/system-tables/query_thread_log.md,reference/system-tables/query_thread_log.mdx,https://clickhouse.com/docs/operations/system-tables/query_thread_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/query_thread_log,matched,6c81b79d0d44a854,true,6c81b79d0d44a854,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/query_views_log,docs/operations/system-tables/query_views_log.md,reference/system-tables/query_views_log.mdx,https://clickhouse.com/docs/operations/system-tables/query_views_log,https://private-7c7dfe99.mintlify.app/reference/system-tables/query_views_log,matched,ab38df93c47223cd,true,ab38df93c47223cd,2026-06-23T07:34:28+00:00,false
|
||||
/operations/system-tables/quota_limits,docs/operations/system-tables/quota_limits.md,reference/system-tables/quota_limits.mdx,https://clickhouse.com/docs/operations/system-tables/quota_limits,https://private-7c7dfe99.mintlify.app/reference/system-tables/quota_limits,matched,89cf3fd2c278ac25,true,89cf3fd2c278ac25,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1296,11 +1301,11 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/operations/utilities/clickhouse-format,docs/operations/utilities/clickhouse-format.md,concepts/features/tools-and-utilities/clickhouse-format.mdx,https://clickhouse.com/docs/operations/utilities/clickhouse-format,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/clickhouse-format,matched,a84351289ccbef46,true,a84351289ccbef46,2026-06-23T07:34:28+00:00,false
|
||||
/operations/utilities/clickhouse-keeper-client,docs/operations/utilities/clickhouse-keeper-client.md,concepts/features/tools-and-utilities/clickhouse-keeper-client.mdx,https://clickhouse.com/docs/operations/utilities/clickhouse-keeper-client,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/clickhouse-keeper-client,matched,dc02ae2c6ced91d3,true,dc02ae2c6ced91d3,2026-06-23T07:34:28+00:00,false
|
||||
/operations/utilities/clickhouse-keeper-http-api,docs/operations/utilities/clickhouse-keeper-http-api.md,concepts/features/tools-and-utilities/clickhouse-keeper-http-api.mdx,https://clickhouse.com/docs/operations/utilities/clickhouse-keeper-http-api,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/clickhouse-keeper-http-api,matched,d6935497cb291c4b,true,d6935497cb291c4b,2026-06-23T07:34:28+00:00,false
|
||||
/operations/utilities/clickhouse-local,docs/operations/utilities/clickhouse-local.md,concepts/features/tools-and-utilities/clickhouse-local.mdx,https://clickhouse.com/docs/operations/utilities/clickhouse-local,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/clickhouse-local,matched,35f5c4c9ee66dd86,true,7e02c8aaa517574d,2026-07-01T10:16:01+00:00,false
|
||||
/operations/utilities/clickhouse-local,docs/operations/utilities/clickhouse-local.md,concepts/features/tools-and-utilities/clickhouse-local.mdx,https://clickhouse.com/docs/operations/utilities/clickhouse-local,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/clickhouse-local,matched,2c55cc0d16756ffa,true,2c55cc0d16756ffa,2026-07-11T17:50:23+00:00,true
|
||||
/operations/utilities/clickhouse-obfuscator,docs/operations/utilities/clickhouse-obfuscator.md,concepts/features/tools-and-utilities/clickhouse-obfuscator.mdx,https://clickhouse.com/docs/operations/utilities/clickhouse-obfuscator,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/clickhouse-obfuscator,matched,a1465aea8fd40bd2,true,a1465aea8fd40bd2,2026-06-22T14:29:17+00:00,false
|
||||
/operations/utilities/odbc-bridge,docs/operations/utilities/odbc-bridge.md,concepts/features/tools-and-utilities/odbc-bridge.mdx,https://clickhouse.com/docs/operations/utilities/odbc-bridge,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/odbc-bridge,matched,85d971b7567c96e5,true,85d971b7567c96e5,2026-06-23T07:34:28+00:00,false
|
||||
/operations/utilities/static-files-disk-uploader,docs/tools-and-utilities/static-files-disk-uploader.md,concepts/features/tools-and-utilities/static-files-disk-uploader.mdx,https://clickhouse.com/docs/operations/utilities/static-files-disk-uploader,https://private-7c7dfe99.mintlify.app/concepts/features/tools-and-utilities/static-files-disk-uploader,matched,419f3e9045c39dd2,true,419f3e9045c39dd2,2026-06-23T07:34:28+00:00,false
|
||||
/operations/workload-scheduling,docs/operations/workload-scheduling.md,concepts/features/configuration/server-config/workload-scheduling.mdx,https://clickhouse.com/docs/operations/workload-scheduling,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/server-config/workload-scheduling,matched,baed8369f9040fb4,true,8032e74c1af9f4e6,2026-07-01T10:16:01+00:00,false
|
||||
/operations/workload-scheduling,docs/operations/workload-scheduling.md,concepts/features/configuration/server-config/workload-scheduling.mdx,https://clickhouse.com/docs/operations/workload-scheduling,https://private-7c7dfe99.mintlify.app/concepts/features/configuration/server-config/workload-scheduling,matched,e5b24f9d2b2833ee,true,e5b24f9d2b2833ee,2026-07-11T17:50:23+00:00,true
|
||||
/optimize/asynchronous-inserts,docs/guides/best-practices/asyncinserts.md,concepts/features/operations/insert/asyncinserts.mdx,https://clickhouse.com/docs/optimize/asynchronous-inserts,https://private-7c7dfe99.mintlify.app/concepts/features/operations/insert/asyncinserts,matched,090826f9f6e052fc,true,090826f9f6e052fc,2026-06-23T07:34:28+00:00,false
|
||||
/optimize/avoid-mutations,docs/guides/best-practices/avoidmutations.md,,https://clickhouse.com/docs/optimize/avoid-mutations,,unmatched,d6bdbbc76771255f,false,,,false
|
||||
/optimize/avoid-nullable-columns,docs/guides/best-practices/avoidnullablecolumns.md,concepts/best-practices/avoidnullablecolumns.mdx,https://clickhouse.com/docs/optimize/avoid-nullable-columns,https://private-7c7dfe99.mintlify.app/concepts/best-practices/avoidnullablecolumns,matched,ebe75f7a8b4095db,true,ebe75f7a8b4095db,2026-05-08T09:09:20+00:00,false
|
||||
@@ -1320,7 +1325,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/shards,docs/managing-data/core-concepts/shards.mdx,guides/oss/deployment-and-scaling/shards.mdx,https://clickhouse.com/docs/shards,https://private-7c7dfe99.mintlify.app/guides/oss/deployment-and-scaling/shards,matched,c09957405447bdec,true,c09957405447bdec,2026-06-22T17:40:10+00:00,false
|
||||
/sql-reference,docs/sql-reference/index.md,reference/home.mdx,https://clickhouse.com/docs/sql-reference,https://private-7c7dfe99.mintlify.app/reference/home,matched,1aafbee1019940fc,true,1aafbee1019940fc,2026-05-21T08:24:25+00:00,false
|
||||
/sql-reference/aggregate-functions/,docs/sql-reference/aggregate-functions/index.md,reference/functions/aggregate-functions/index.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/index,matched,a0935e1dc4b303e2,true,a0935e1dc4b303e2,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/combinators,docs/sql-reference/aggregate-functions/combinators.md,reference/functions/aggregate-functions/combinators.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/combinators,matched,378575d2d4484704,true,378575d2d4484704,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/combinators,docs/sql-reference/aggregate-functions/combinators.md,reference/functions/aggregate-functions/combinators.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/combinators,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/combinators,matched,8d5bf5f23dd088af,true,8d5bf5f23dd088af,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/grouping_function,docs/sql-reference/aggregate-functions/grouping_function.md,reference/functions/aggregate-functions/grouping_function.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/grouping_function,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/grouping_function,matched,762a3b737dc65489,true,762a3b737dc65489,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/parametric-functions,docs/sql-reference/aggregate-functions/parametric-functions.md,reference/functions/aggregate-functions/parametric-functions.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/parametric-functions,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/parametric-functions,matched,5a0e0da43f9b2ee6,true,5a0e0da43f9b2ee6,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/,docs/sql-reference/aggregate-functions/reference/index.md,reference/functions/aggregate-functions/reference-index.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/reference-index,matched,b3012bcbb2f39266,true,f6e3dff3f3ba3633,2026-07-01T10:20:02+00:00,false
|
||||
@@ -1414,10 +1419,24 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/aggregate-functions/reference/quantiledeterministic,docs/sql-reference/aggregate-functions/reference/quantileDeterministic.md,reference/functions/aggregate-functions/quantileDeterministic.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantiledeterministic,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantileDeterministic,matched,6b577bef9f8aabe5,true,6b577bef9f8aabe5,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantileexact,docs/sql-reference/aggregate-functions/reference/quantileExact.md,reference/functions/aggregate-functions/quantileExact.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantileexact,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantileExact,matched,c06d0383b8fa44d6,true,c06d0383b8fa44d6,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantileexactweighted,docs/sql-reference/aggregate-functions/reference/quantileExactWeighted.md,reference/functions/aggregate-functions/quantileExactWeighted.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantileexactweighted,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantileExactWeighted,matched,55fe1cc2813d807d,true,55fe1cc2813d807d,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantiles,docs/sql-reference/aggregate-functions/reference/quantiles.md,reference/functions/aggregate-functions/quantiles.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantiles,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantiles,matched,10a8a9fb55d3667e,true,10a8a9fb55d3667e,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantiles,docs/sql-reference/aggregate-functions/reference/quantiles.md,reference/functions/aggregate-functions/quantiles.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantiles,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantiles,matched,75c099226d39bda0,true,75c099226d39bda0,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesBFloat16,docs/sql-reference/aggregate-functions/reference/quantilesBFloat16.md,reference/functions/aggregate-functions/quantilesBFloat16.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesBFloat16,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesBFloat16,matched,d0697196e4427f89,true,d0697196e4427f89,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesBFloat16Weighted,docs/sql-reference/aggregate-functions/reference/quantilesBFloat16Weighted.md,reference/functions/aggregate-functions/quantilesBFloat16Weighted.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesBFloat16Weighted,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesBFloat16Weighted,matched,e265fd331bc92260,true,e265fd331bc92260,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesDD,docs/sql-reference/aggregate-functions/reference/quantilesDD.md,reference/functions/aggregate-functions/quantilesDD.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesDD,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesDD,matched,bd4ebd8d572f239e,true,bd4ebd8d572f239e,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesDeterministic,docs/sql-reference/aggregate-functions/reference/quantilesDeterministic.md,reference/functions/aggregate-functions/quantilesDeterministic.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesDeterministic,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesDeterministic,matched,03d6b5b6fdbf9993,true,03d6b5b6fdbf9993,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesExact,docs/sql-reference/aggregate-functions/reference/quantilesExact.md,reference/functions/aggregate-functions/quantilesExact.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesExact,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesExact,matched,a50f4fdf88c5ad2d,true,a50f4fdf88c5ad2d,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesExactExclusive,docs/sql-reference/aggregate-functions/reference/quantilesExactExclusive.md,reference/functions/aggregate-functions/quantilesExactExclusive.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesExactExclusive,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesExactExclusive,matched,d34559dee60fa650,true,d34559dee60fa650,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantilesExactHigh,docs/sql-reference/aggregate-functions/reference/quantilesExactHigh.md,reference/functions/aggregate-functions/quantilesExactHigh.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesExactHigh,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesExactHigh,matched,bb9c525668c075cf,true,bb9c525668c075cf,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesExactInclusive,docs/sql-reference/aggregate-functions/reference/quantilesExactInclusive.md,reference/functions/aggregate-functions/quantilesExactInclusive.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesExactInclusive,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesExactInclusive,matched,585098e46f9ed905,true,585098e46f9ed905,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantilesExactLow,docs/sql-reference/aggregate-functions/reference/quantilesExactLow.md,reference/functions/aggregate-functions/quantilesExactLow.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesExactLow,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesExactLow,matched,f9b291f3b4bb43f8,true,f9b291f3b4bb43f8,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesExactWeighted,docs/sql-reference/aggregate-functions/reference/quantilesExactWeighted.md,reference/functions/aggregate-functions/quantilesExactWeighted.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesExactWeighted,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesExactWeighted,matched,56e80163af91c303,true,56e80163af91c303,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesExactWeightedInterpolated,docs/sql-reference/aggregate-functions/reference/quantilesExactWeightedInterpolated.md,reference/functions/aggregate-functions/quantilesExactWeightedInterpolated.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesExactWeightedInterpolated,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesExactWeightedInterpolated,matched,2335a1f42cb08413,true,2335a1f42cb08413,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesGK,docs/sql-reference/aggregate-functions/reference/quantilesGK.md,reference/functions/aggregate-functions/quantilesGK.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesGK,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesGK,matched,94e0f130f7219917,true,94e0f130f7219917,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantilesInterpolatedWeighted,docs/sql-reference/aggregate-functions/reference/quantilesInterpolatedWeighted.md,reference/functions/aggregate-functions/quantilesInterpolatedWeighted.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesInterpolatedWeighted,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesInterpolatedWeighted,matched,dbd2c5be58727f94,true,dbd2c5be58727f94,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesPrometheusHistogram,docs/sql-reference/aggregate-functions/reference/quantilesPrometheusHistogram.md,reference/functions/aggregate-functions/quantilesPrometheusHistogram.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesPrometheusHistogram,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesPrometheusHistogram,matched,70acdbd6470946bd,true,70acdbd6470946bd,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesTDigest,docs/sql-reference/aggregate-functions/reference/quantilesTDigest.md,reference/functions/aggregate-functions/quantilesTDigest.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesTDigest,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesTDigest,matched,63f8e7702b575c35,true,63f8e7702b575c35,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesTDigestWeighted,docs/sql-reference/aggregate-functions/reference/quantilesTDigestWeighted.md,reference/functions/aggregate-functions/quantilesTDigestWeighted.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesTDigestWeighted,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesTDigestWeighted,matched,4e5fb7815baab637,true,4e5fb7815baab637,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilesTiming,docs/sql-reference/aggregate-functions/reference/quantilesTiming.md,reference/functions/aggregate-functions/quantilesTiming.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilesTiming,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesTiming,matched,6d9d343510a6ef70,true,6d9d343510a6ef70,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/aggregate-functions/reference/quantilestimingweighted,docs/sql-reference/aggregate-functions/reference/quantilesTimingWeighted.md,reference/functions/aggregate-functions/quantilesTimingWeighted.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantilestimingweighted,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantilesTimingWeighted,matched,62b3f7a28b018c37,true,62b3f7a28b018c37,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantiletdigest,docs/sql-reference/aggregate-functions/reference/quantileTDigest.md,reference/functions/aggregate-functions/quantileTDigest.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantiletdigest,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantileTDigest,matched,1d7cc3bd0a254723,true,1d7cc3bd0a254723,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/aggregate-functions/reference/quantiletdigestweighted,docs/sql-reference/aggregate-functions/reference/quantileTDigestWeighted.md,reference/functions/aggregate-functions/quantileTDigestWeighted.mdx,https://clickhouse.com/docs/sql-reference/aggregate-functions/reference/quantiletdigestweighted,https://private-7c7dfe99.mintlify.app/reference/functions/aggregate-functions/quantileTDigestWeighted,matched,75265d258c6d0d1c,true,75265d258c6d0d1c,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1472,7 +1491,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/data-types/aggregatefunction,docs/sql-reference/data-types/aggregatefunction.md,reference/data-types/aggregatefunction.mdx,https://clickhouse.com/docs/sql-reference/data-types/aggregatefunction,https://private-7c7dfe99.mintlify.app/reference/data-types/aggregatefunction,matched,72700501d63e067f,true,72700501d63e067f,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/data-types/array,docs/sql-reference/data-types/array.md,reference/data-types/array.mdx,https://clickhouse.com/docs/sql-reference/data-types/array,https://private-7c7dfe99.mintlify.app/reference/data-types/array,matched,1e77a6674f8339d9,true,1e77a6674f8339d9,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/data-types/boolean,docs/sql-reference/data-types/boolean.md,reference/data-types/boolean.mdx,https://clickhouse.com/docs/sql-reference/data-types/boolean,https://private-7c7dfe99.mintlify.app/reference/data-types/boolean,matched,1030c84f2f356452,true,1030c84f2f356452,2026-06-22T14:29:17+00:00,false
|
||||
/sql-reference/data-types/data-types-binary-encoding,docs/sql-reference/data-types/data-types-binary-encoding.md,reference/data-types/data-types-binary-encoding.mdx,https://clickhouse.com/docs/sql-reference/data-types/data-types-binary-encoding,https://private-7c7dfe99.mintlify.app/reference/data-types/data-types-binary-encoding,matched,4f9c147ef25a77fd,true,4f9c147ef25a77fd,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/data-types/data-types-binary-encoding,docs/sql-reference/data-types/data-types-binary-encoding.md,reference/data-types/data-types-binary-encoding.mdx,https://clickhouse.com/docs/sql-reference/data-types/data-types-binary-encoding,https://private-7c7dfe99.mintlify.app/reference/data-types/data-types-binary-encoding,matched,1c7697d60319e2cb,true,1c7697d60319e2cb,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/data-types/date,docs/sql-reference/data-types/date.md,reference/data-types/date.mdx,https://clickhouse.com/docs/sql-reference/data-types/date,https://private-7c7dfe99.mintlify.app/reference/data-types/date,matched,a4e08d45fe47f80e,true,a4e08d45fe47f80e,2026-06-22T16:38:02+00:00,false
|
||||
/sql-reference/data-types/date32,docs/sql-reference/data-types/date32.md,reference/data-types/date32.mdx,https://clickhouse.com/docs/sql-reference/data-types/date32,https://private-7c7dfe99.mintlify.app/reference/data-types/date32,matched,bdf2f799fb7d1f31,true,bdf2f799fb7d1f31,2026-06-22T15:11:51+00:00,false
|
||||
/sql-reference/data-types/datetime,docs/sql-reference/data-types/datetime.md,reference/data-types/datetime.mdx,https://clickhouse.com/docs/sql-reference/data-types/datetime,https://private-7c7dfe99.mintlify.app/reference/data-types/datetime,matched,707225593664b6b5,true,707225593664b6b5,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1492,11 +1511,11 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/data-types/nested-data-structures/nested,docs/sql-reference/data-types/nested-data-structures/index.md,reference/data-types/nested-data-structures/index.mdx,https://clickhouse.com/docs/sql-reference/data-types/nested-data-structures/nested,https://private-7c7dfe99.mintlify.app/reference/data-types/nested-data-structures/index,matched,96a2119f5979ff03,true,96a2119f5979ff03,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/data-types/newjson,docs/sql-reference/data-types/newjson.md,reference/data-types/newjson.mdx,https://clickhouse.com/docs/sql-reference/data-types/newjson,https://private-7c7dfe99.mintlify.app/reference/data-types/newjson,matched,753d1eabe311c68b,true,753d1eabe311c68b,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/data-types/nullable,docs/sql-reference/data-types/nullable.md,reference/data-types/nullable.mdx,https://clickhouse.com/docs/sql-reference/data-types/nullable,https://private-7c7dfe99.mintlify.app/reference/data-types/nullable,matched,b957538773c3ef54,true,b957538773c3ef54,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/data-types/qbit,docs/sql-reference/data-types/qbit.md,reference/data-types/qbit.mdx,https://clickhouse.com/docs/sql-reference/data-types/qbit,https://private-7c7dfe99.mintlify.app/reference/data-types/qbit,matched,b594a1459891665a,true,03d2aa3a9ad92006,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/data-types/qbit,docs/sql-reference/data-types/qbit.md,reference/data-types/qbit.mdx,https://clickhouse.com/docs/sql-reference/data-types/qbit,https://private-7c7dfe99.mintlify.app/reference/data-types/qbit,matched,ae3224fc29cf15ef,true,ae3224fc29cf15ef,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/data-types/simpleaggregatefunction,docs/sql-reference/data-types/simpleaggregatefunction.md,reference/data-types/simpleaggregatefunction.mdx,https://clickhouse.com/docs/sql-reference/data-types/simpleaggregatefunction,https://private-7c7dfe99.mintlify.app/reference/data-types/simpleaggregatefunction,matched,421e3771a4d1e80d,true,421e3771a4d1e80d,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/data-types/special-data-types/,docs/sql-reference/data-types/special-data-types/index.md,reference/data-types/special-data-types/index.mdx,https://clickhouse.com/docs/sql-reference/data-types/special-data-types/,https://private-7c7dfe99.mintlify.app/reference/data-types/special-data-types/index,matched,ef0b6f747acfa0ec,true,ef0b6f747acfa0ec,2026-05-19T11:08:53+00:00,false
|
||||
/sql-reference/data-types/special-data-types/expression,docs/sql-reference/data-types/special-data-types/expression.md,reference/data-types/special-data-types/expression.mdx,https://clickhouse.com/docs/sql-reference/data-types/special-data-types/expression,https://private-7c7dfe99.mintlify.app/reference/data-types/special-data-types/expression,matched,88a8bd0cf24ef01e,true,88a8bd0cf24ef01e,2026-06-22T14:29:17+00:00,false
|
||||
/sql-reference/data-types/special-data-types/interval,docs/sql-reference/data-types/special-data-types/interval.md,reference/data-types/special-data-types/interval.mdx,https://clickhouse.com/docs/sql-reference/data-types/special-data-types/interval,https://private-7c7dfe99.mintlify.app/reference/data-types/special-data-types/interval,matched,49cc9486bc266fb3,true,5837b36610c2b5b2,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/data-types/special-data-types/interval,docs/sql-reference/data-types/special-data-types/interval.md,reference/data-types/special-data-types/interval.mdx,https://clickhouse.com/docs/sql-reference/data-types/special-data-types/interval,https://private-7c7dfe99.mintlify.app/reference/data-types/special-data-types/interval,matched,49cc9486bc266fb3,true,49cc9486bc266fb3,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/data-types/special-data-types/nothing,docs/sql-reference/data-types/special-data-types/nothing.md,reference/data-types/special-data-types/nothing.mdx,https://clickhouse.com/docs/sql-reference/data-types/special-data-types/nothing,https://private-7c7dfe99.mintlify.app/reference/data-types/special-data-types/nothing,matched,1c1875de77fd50b2,true,1c1875de77fd50b2,2026-06-22T15:11:51+00:00,false
|
||||
/sql-reference/data-types/special-data-types/set,docs/sql-reference/data-types/special-data-types/set.md,reference/data-types/special-data-types/set.mdx,https://clickhouse.com/docs/sql-reference/data-types/special-data-types/set,https://private-7c7dfe99.mintlify.app/reference/data-types/special-data-types/set,matched,aca07b0f37813976,true,aca07b0f37813976,2026-06-22T15:11:51+00:00,false
|
||||
/sql-reference/data-types/string,docs/sql-reference/data-types/string.md,reference/data-types/string.mdx,https://clickhouse.com/docs/sql-reference/data-types/string,https://private-7c7dfe99.mintlify.app/reference/data-types/string,matched,0bf0ed2ba989b68d,true,0bf0ed2ba989b68d,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1509,7 +1528,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/distributed-ddl,docs/sql-reference/distributed-ddl.md,reference/statements/distributed-ddl.mdx,https://clickhouse.com/docs/sql-reference/distributed-ddl,https://private-7c7dfe99.mintlify.app/reference/statements/distributed-ddl,matched,112d13bcf3046cf7,true,112d13bcf3046cf7,2026-05-09T17:02:01+00:00,false
|
||||
/sql-reference/formats,docs/sql-reference/formats.mdx,,https://clickhouse.com/docs/sql-reference/formats,,unmatched,f15d74887e89dbc7,true,f15d74887e89dbc7,2026-05-08T09:09:20+00:00,false
|
||||
/sql-reference/functions,docs/sql-reference/functions/index.md,reference/functions/index.mdx,https://clickhouse.com/docs/sql-reference/functions,https://private-7c7dfe99.mintlify.app/reference/functions/index,matched,f8bdbd53bca6538f,true,f8bdbd53bca6538f,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/functions/ai-functions,docs/sql-reference/functions/ai-functions.md,reference/functions/regular-functions/ai-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/ai-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/ai-functions,matched,dfb2eb70ee41fa43,true,24d2b7be00d23b41,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/functions/ai-functions,docs/sql-reference/functions/ai-functions.md,reference/functions/regular-functions/ai-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/ai-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/ai-functions,matched,87cb5ac45bcc006b,true,87cb5ac45bcc006b,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/functions/arithmetic-functions,docs/sql-reference/functions/arithmetic-functions.md,reference/functions/regular-functions/arithmetic-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/arithmetic-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/arithmetic-functions,matched,65ca3c057775c58e,true,59c17d88fcceafbd,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/functions/array-functions,docs/sql-reference/functions/array-functions.md,reference/functions/regular-functions/array-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/array-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/array-functions,matched,4728188b11d1c3b6,true,580e76a2dd531bc1,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/functions/array-join,docs/sql-reference/functions/array-join.md,reference/functions/regular-functions/array-join.mdx,https://clickhouse.com/docs/sql-reference/functions/array-join,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/array-join,matched,f957edbf7546dd57,true,f957edbf7546dd57,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1526,12 +1545,12 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/functions/financial-functions,docs/sql-reference/functions/financial-functions.md,reference/functions/regular-functions/financial-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/financial-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/financial-functions,matched,b3c9bb025596ba07,true,579a04fed7b56ba9,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/functions/functions-for-nulls,docs/sql-reference/functions/functions-for-nulls.md,reference/functions/regular-functions/functions-for-nulls.mdx,https://clickhouse.com/docs/sql-reference/functions/functions-for-nulls,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/functions-for-nulls,matched,b24195f9fa72734c,true,b24195f9fa72734c,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/,docs/sql-reference/functions/geo/index.md,reference/functions/regular-functions/geo/index.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/index,matched,011f1b78c752f258,true,011f1b78c752f258,2026-06-22T15:11:51+00:00,false
|
||||
/sql-reference/functions/geo/coordinates,docs/sql-reference/functions/geo/coordinates.md,reference/functions/regular-functions/geo/coordinates.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/coordinates,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/coordinates,matched,df1646edca9715cc,true,df1646edca9715cc,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/coordinates,docs/sql-reference/functions/geo/coordinates.md,reference/functions/regular-functions/geo/coordinates.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/coordinates,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/coordinates,matched,c7821c9cf588a08f,true,c7821c9cf588a08f,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/functions/geo/flipCoordinates,docs/sql-reference/functions/geo/flipCoordinates.md,reference/functions/regular-functions/geo/flipCoordinates.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/flipCoordinates,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/flipCoordinates,matched,ecfdec0409be257b,true,ecfdec0409be257b,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/geohash,docs/sql-reference/functions/geo/geohash.md,reference/functions/regular-functions/geo/geohash.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/geohash,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/geohash,matched,5b02c1d23fb7c027,true,5b02c1d23fb7c027,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/geometry,docs/sql-reference/functions/geo/geometry.md,reference/functions/regular-functions/geo/geometry.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/geometry,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/geometry,matched,4a937e11a15d6308,true,4a937e11a15d6308,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/h3,docs/sql-reference/functions/geo/h3.md,reference/functions/regular-functions/geo/h3.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/h3,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/h3,matched,112ace554b63bd5f,true,112ace554b63bd5f,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/mvt,docs/sql-reference/functions/geo/mvt.md,reference/functions/regular-functions/geo/mvt.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/mvt,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/mvt,matched,4b8cdf3df74bb014,true,4b8cdf3df74bb014,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/mvt,docs/sql-reference/functions/geo/mvt.md,reference/functions/regular-functions/geo/mvt.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/mvt,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/mvt,matched,3ad4e20538d17359,true,3ad4e20538d17359,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/functions/geo/polygons,docs/sql-reference/functions/geo/polygon.md,reference/functions/regular-functions/geo/polygon.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/polygons,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/polygon,matched,783554b75229a238,true,783554b75229a238,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/s2,docs/sql-reference/functions/geo/s2.md,reference/functions/regular-functions/geo/s2.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/s2,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/s2,matched,25a140f37d151801,true,25a140f37d151801,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/geo/svg,docs/sql-reference/functions/geo/svg.md,reference/functions/regular-functions/geo/svg.mdx,https://clickhouse.com/docs/sql-reference/functions/geo/svg,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/geo/svg,matched,10638f31971872f4,true,10638f31971872f4,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1541,7 +1560,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/functions/ip-address-functions,docs/sql-reference/functions/ip-address-functions.md,reference/functions/regular-functions/ip-address-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/ip-address-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/ip-address-functions,matched,07b39d5a48cb9cad,true,07b39d5a48cb9cad,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/json-functions,docs/sql-reference/functions/json-functions.md,reference/functions/regular-functions/json-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/json-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/json-functions,matched,1f6929cb7f12641e,true,1f6929cb7f12641e,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/logical-functions,docs/sql-reference/functions/logical-functions.md,reference/functions/regular-functions/logical-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/logical-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/logical-functions,matched,bb98f186198d2ed0,true,bb98f186198d2ed0,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/machine-learning-functions,docs/sql-reference/functions/machine-learning-functions.md,reference/functions/regular-functions/machine-learning-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/machine-learning-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/machine-learning-functions,matched,10776ce269a165a1,true,10776ce269a165a1,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/machine-learning-functions,docs/sql-reference/functions/machine-learning-functions.md,reference/functions/regular-functions/machine-learning-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/machine-learning-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/machine-learning-functions,matched,fe8b46d874e72ea4,true,fe8b46d874e72ea4,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/functions/math-functions,docs/sql-reference/functions/math-functions.md,reference/functions/regular-functions/math-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/math-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/math-functions,matched,92fa54c38be1b0fc,true,92fa54c38be1b0fc,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/nlp-functions,docs/sql-reference/functions/nlp-functions.md,reference/functions/regular-functions/nlp-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/nlp-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/nlp-functions,matched,d2b616e592a6b6bf,true,d2b616e592a6b6bf,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/functions/numeric-indexed-vector-functions,docs/sql-reference/functions/numeric-indexed-vector-functions.md,reference/functions/regular-functions/numeric-indexed-vector-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/numeric-indexed-vector-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/numeric-indexed-vector-functions,matched,119e6aa5f59fcf54,true,119e6aa5f59fcf54,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1559,7 +1578,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/functions/tuple-functions,docs/sql-reference/functions/tuple-functions.md,reference/functions/regular-functions/tuple-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/tuple-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/tuple-functions,matched,4216c2a5543f0efc,true,39b807196ddf915b,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/functions/tuple-map-functions,docs/sql-reference/functions/tuple-map-functions.md,reference/functions/regular-functions/tuple-map-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/tuple-map-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/tuple-map-functions,matched,6b14acbe7eb707cd,true,6b14acbe7eb707cd,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/type-conversion-functions,docs/sql-reference/functions/type-conversion-functions.md,reference/functions/regular-functions/type-conversion-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/type-conversion-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/type-conversion-functions,matched,95fedfe6cbfe1988,true,95fedfe6cbfe1988,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/udf,docs/sql-reference/functions/udf.md,reference/functions/regular-functions/udf.mdx,https://clickhouse.com/docs/sql-reference/functions/udf,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/udf,matched,4b2a1276f8355fe9,true,4b2a1276f8355fe9,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/functions/udf,docs/sql-reference/functions/udf.md,reference/functions/regular-functions/udf.mdx,https://clickhouse.com/docs/sql-reference/functions/udf,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/udf,matched,4b2a1276f8355fe9,true,4b2a1276f8355fe9,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/functions/ulid-functions,docs/sql-reference/functions/ulid-functions.md,reference/functions/regular-functions/ulid-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/ulid-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/ulid-functions,matched,405ad14ebe012723,true,90c8d51f3c8beae5,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/functions/uniqtheta-functions,docs/sql-reference/functions/uniqtheta-functions.md,reference/functions/regular-functions/uniqtheta-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/uniqtheta-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/uniqtheta-functions,matched,f6c57709732c2698,true,f6c57709732c2698,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/functions/url-functions,docs/sql-reference/functions/url-functions.md,reference/functions/regular-functions/url-functions.mdx,https://clickhouse.com/docs/sql-reference/functions/url-functions,https://private-7c7dfe99.mintlify.app/reference/functions/regular-functions/url-functions,matched,2500ec02c6e32dae,true,2500ec02c6e32dae,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1576,25 +1595,25 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/statements/alter/apply-patches,docs/sql-reference/statements/alter/apply-patches.md,reference/statements/alter/apply-patches.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/apply-patches,https://private-7c7dfe99.mintlify.app/reference/statements/alter/apply-patches,matched,2bba7ff9f47b7239,true,2bba7ff9f47b7239,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/column,docs/sql-reference/statements/alter/column.md,reference/statements/alter/column.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/column,https://private-7c7dfe99.mintlify.app/reference/statements/alter/column,matched,001cc608e340e1f6,true,001cc608e340e1f6,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/comment,docs/sql-reference/statements/alter/comment.md,reference/statements/alter/comment.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/comment,https://private-7c7dfe99.mintlify.app/reference/statements/alter/comment,matched,dcbbc74fb0568312,true,dcbbc74fb0568312,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/constraint,docs/sql-reference/statements/alter/constraint.md,reference/statements/alter/constraint.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/constraint,https://private-7c7dfe99.mintlify.app/reference/statements/alter/constraint,matched,2fd0b8517f3f0b7f,true,c29e0fea27b243f4,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/statements/alter/constraint,docs/sql-reference/statements/alter/constraint.md,reference/statements/alter/constraint.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/constraint,https://private-7c7dfe99.mintlify.app/reference/statements/alter/constraint,matched,2fd0b8517f3f0b7f,true,2fd0b8517f3f0b7f,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/alter/database-comment,docs/sql-reference/statements/alter/database-comment.md,reference/statements/alter/database-comment.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/database-comment,https://private-7c7dfe99.mintlify.app/reference/statements/alter/database-comment,matched,794f8576733173a6,true,794f8576733173a6,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/delete,docs/sql-reference/statements/alter/delete.md,reference/statements/alter/delete.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/delete,https://private-7c7dfe99.mintlify.app/reference/statements/alter/delete,matched,79df6fbd25ea241d,true,79df6fbd25ea241d,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/statements/alter/masking-policy,docs/sql-reference/statements/alter/masking-policy.md,reference/statements/alter/masking-policy.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/masking-policy,https://private-7c7dfe99.mintlify.app/reference/statements/alter/masking-policy,matched,db4497ceb4087eda,true,db4497ceb4087eda,2026-07-01T10:48:45+00:00,false
|
||||
/sql-reference/statements/alter/named-collection,docs/sql-reference/statements/alter/named-collection.md,reference/statements/alter/named-collection.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/named-collection,https://private-7c7dfe99.mintlify.app/reference/statements/alter/named-collection,matched,1ba41582c1e8ebc8,true,1ba41582c1e8ebc8,2026-07-01T10:48:45+00:00,false
|
||||
/sql-reference/statements/alter/order-by,docs/sql-reference/statements/alter/order-by.md,reference/statements/alter/order-by.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/order-by,https://private-7c7dfe99.mintlify.app/reference/statements/alter/order-by,matched,e4d1e2d42d9244d8,true,e4d1e2d42d9244d8,2026-06-07T13:44:09+00:00,false
|
||||
/sql-reference/statements/alter/partition,docs/sql-reference/statements/alter/partition.md,reference/statements/alter/partition.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/partition,https://private-7c7dfe99.mintlify.app/reference/statements/alter/partition,matched,32785de3bff088ba,true,32785de3bff088ba,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/projection,docs/sql-reference/statements/alter/projection.md,reference/statements/alter/projection.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/projection,https://private-7c7dfe99.mintlify.app/reference/statements/alter/projection,matched,534557eb3b456d42,true,4f226b1552bbed54,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/statements/alter/projection,docs/sql-reference/statements/alter/projection.md,reference/statements/alter/projection.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/projection,https://private-7c7dfe99.mintlify.app/reference/statements/alter/projection,matched,534557eb3b456d42,true,534557eb3b456d42,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/alter/quota,docs/sql-reference/statements/alter/quota.md,reference/statements/alter/quota.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/quota,https://private-7c7dfe99.mintlify.app/reference/statements/alter/quota,matched,909e4f2c82210358,true,909e4f2c82210358,2026-06-22T15:11:51+00:00,false
|
||||
/sql-reference/statements/alter/role,docs/sql-reference/statements/alter/role.md,reference/statements/alter/role.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/role,https://private-7c7dfe99.mintlify.app/reference/statements/alter/role,matched,303a2bb1adcbfc7e,true,303a2bb1adcbfc7e,2026-05-07T14:49:41+00:00,false
|
||||
/sql-reference/statements/alter/role,docs/sql-reference/statements/alter/role.md,reference/statements/alter/role.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/role,https://private-7c7dfe99.mintlify.app/reference/statements/alter/role,matched,af11c21156fd03d2,true,af11c21156fd03d2,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/alter/row-policy,docs/sql-reference/statements/alter/row-policy.md,reference/statements/alter/row-policy.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/row-policy,https://private-7c7dfe99.mintlify.app/reference/statements/alter/row-policy,matched,660c01b012c65f4b,true,660c01b012c65f4b,2026-06-22T14:29:17+00:00,false
|
||||
/sql-reference/statements/alter/sample-by,docs/sql-reference/statements/alter/sample-by.md,reference/statements/alter/sample-by.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/sample-by,https://private-7c7dfe99.mintlify.app/reference/statements/alter/sample-by,matched,7154b5b2b24b75bc,true,7154b5b2b24b75bc,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/setting,docs/sql-reference/statements/alter/setting.md,reference/statements/alter/setting.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/setting,https://private-7c7dfe99.mintlify.app/reference/statements/alter/setting,matched,333f7287eb8ca013,true,333f7287eb8ca013,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/settings-profile,docs/sql-reference/statements/alter/settings-profile.md,reference/statements/alter/settings-profile.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/settings-profile,https://private-7c7dfe99.mintlify.app/reference/statements/alter/settings-profile,matched,83638c15be36dac2,true,83638c15be36dac2,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/settings-profile,docs/sql-reference/statements/alter/settings-profile.md,reference/statements/alter/settings-profile.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/settings-profile,https://private-7c7dfe99.mintlify.app/reference/statements/alter/settings-profile,matched,a0f5b8fbf7e1edf8,true,a0f5b8fbf7e1edf8,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/alter/skipping-index,docs/sql-reference/statements/alter/skipping-index.md,reference/statements/alter/skipping-index.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/skipping-index,https://private-7c7dfe99.mintlify.app/reference/statements/alter/skipping-index,matched,639cf49f6b576656,true,639cf49f6b576656,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/statistics,docs/sql-reference/statements/alter/statistics.md,reference/statements/alter/statistics.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/statistics,https://private-7c7dfe99.mintlify.app/reference/statements/alter/statistics,matched,194bbb970cca9aaf,true,194bbb970cca9aaf,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/ttl,docs/sql-reference/statements/alter/ttl.md,reference/statements/alter/ttl.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/ttl,https://private-7c7dfe99.mintlify.app/reference/statements/alter/ttl,matched,fb1e74b3574ce837,true,fb1e74b3574ce837,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/update,docs/sql-reference/statements/alter/update.md,reference/statements/alter/update.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/update,https://private-7c7dfe99.mintlify.app/reference/statements/alter/update,matched,f24e62109df1df61,true,f24e62109df1df61,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/user,docs/sql-reference/statements/alter/user.md,reference/statements/alter/user.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/user,https://private-7c7dfe99.mintlify.app/reference/statements/alter/user,matched,bad6198b79924e96,true,bad6198b79924e96,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/alter/user,docs/sql-reference/statements/alter/user.md,reference/statements/alter/user.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/user,https://private-7c7dfe99.mintlify.app/reference/statements/alter/user,matched,cdc1cd40e5089387,true,cdc1cd40e5089387,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/alter/view,docs/sql-reference/statements/alter/view.md,reference/statements/alter/view.mdx,https://clickhouse.com/docs/sql-reference/statements/alter/view,https://private-7c7dfe99.mintlify.app/reference/statements/alter/view,matched,849db286b271b6aa,true,849db286b271b6aa,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/attach,docs/sql-reference/statements/attach.md,reference/statements/attach.mdx,https://clickhouse.com/docs/sql-reference/statements/attach,https://private-7c7dfe99.mintlify.app/reference/statements/attach,matched,0780d8eecea4ce0b,true,0780d8eecea4ce0b,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/check-grant,docs/sql-reference/statements/check-grant.md,reference/statements/check-grant.mdx,https://clickhouse.com/docs/sql-reference/statements/check-grant,https://private-7c7dfe99.mintlify.app/reference/statements/check-grant,matched,2d31634c588cb280,true,2d31634c588cb280,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1639,7 +1658,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/statements/create/role,docs/sql-reference/statements/create/role.md,reference/statements/create/role.mdx,https://clickhouse.com/docs/sql-reference/statements/create/role,https://private-7c7dfe99.mintlify.app/reference/statements/create/role,matched,437e57c81c3f0872,true,437e57c81c3f0872,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/create/row-policy,docs/sql-reference/statements/create/row-policy.md,reference/statements/create/row-policy.mdx,https://clickhouse.com/docs/sql-reference/statements/create/row-policy,https://private-7c7dfe99.mintlify.app/reference/statements/create/row-policy,matched,7af119041838a001,true,7af119041838a001,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/create/settings-profile,docs/sql-reference/statements/create/settings-profile.md,reference/statements/create/settings-profile.mdx,https://clickhouse.com/docs/sql-reference/statements/create/settings-profile,https://private-7c7dfe99.mintlify.app/reference/statements/create/settings-profile,matched,5840e875e6ec0ff5,true,5840e875e6ec0ff5,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/create/table,docs/sql-reference/statements/create/table.md,reference/statements/create/table.mdx,https://clickhouse.com/docs/sql-reference/statements/create/table,https://private-7c7dfe99.mintlify.app/reference/statements/create/table,matched,b6d3960dda3ce4cf,true,b6d3960dda3ce4cf,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/create/table,docs/sql-reference/statements/create/table.md,reference/statements/create/table.mdx,https://clickhouse.com/docs/sql-reference/statements/create/table,https://private-7c7dfe99.mintlify.app/reference/statements/create/table,matched,08c9793a6abaf3dd,true,08c9793a6abaf3dd,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/create/user,docs/sql-reference/statements/create/user.md,reference/statements/create/user.mdx,https://clickhouse.com/docs/sql-reference/statements/create/user,https://private-7c7dfe99.mintlify.app/reference/statements/create/user,matched,ea6560f73f342624,true,ea6560f73f342624,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/create/view,docs/sql-reference/statements/create/view.md,reference/statements/create/view.mdx,https://clickhouse.com/docs/sql-reference/statements/create/view,https://private-7c7dfe99.mintlify.app/reference/statements/create/view,matched,ac0e4dd6ac20be2e,true,ac0e4dd6ac20be2e,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/delete,docs/sql-reference/statements/delete.md,reference/statements/delete.mdx,https://clickhouse.com/docs/sql-reference/statements/delete,https://private-7c7dfe99.mintlify.app/reference/statements/delete,matched,635055619056b153,true,635055619056b153,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1649,8 +1668,8 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/statements/exchange,docs/sql-reference/statements/exchange.md,reference/statements/exchange.mdx,https://clickhouse.com/docs/sql-reference/statements/exchange,https://private-7c7dfe99.mintlify.app/reference/statements/exchange,matched,bd589160963e7bea,true,bd589160963e7bea,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/execute_as,docs/sql-reference/statements/execute_as.md,reference/statements/execute_as.mdx,https://clickhouse.com/docs/sql-reference/statements/execute_as,https://private-7c7dfe99.mintlify.app/reference/statements/execute_as,matched,7b03039504ddd659,true,7b03039504ddd659,2026-07-01T10:48:45+00:00,false
|
||||
/sql-reference/statements/exists,docs/sql-reference/statements/exists.md,reference/statements/exists.mdx,https://clickhouse.com/docs/sql-reference/statements/exists,https://private-7c7dfe99.mintlify.app/reference/statements/exists,matched,f787978eb7ad2aef,true,f787978eb7ad2aef,2026-06-22T14:29:17+00:00,false
|
||||
/sql-reference/statements/explain,docs/sql-reference/statements/explain.md,reference/statements/explain.mdx,https://clickhouse.com/docs/sql-reference/statements/explain,https://private-7c7dfe99.mintlify.app/reference/statements/explain,matched,78b77ac06ca12261,true,22bf55f8d547b783,2026-07-01T10:20:04+00:00,false
|
||||
/sql-reference/statements/grant,docs/sql-reference/statements/grant.md,reference/statements/grant.mdx,https://clickhouse.com/docs/sql-reference/statements/grant,https://private-7c7dfe99.mintlify.app/reference/statements/grant,matched,73699f1fff2afbdc,true,bb9e0ae273b53779,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/statements/explain,docs/sql-reference/statements/explain.md,reference/statements/explain.mdx,https://clickhouse.com/docs/sql-reference/statements/explain,https://private-7c7dfe99.mintlify.app/reference/statements/explain,matched,ee1d6ff0453bf661,true,ee1d6ff0453bf661,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/grant,docs/sql-reference/statements/grant.md,reference/statements/grant.mdx,https://clickhouse.com/docs/sql-reference/statements/grant,https://private-7c7dfe99.mintlify.app/reference/statements/grant,matched,73699f1fff2afbdc,true,73699f1fff2afbdc,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/hypothetical-index,docs/sql-reference/statements/hypothetical-index.md,reference/statements/hypothetical-index.mdx,https://clickhouse.com/docs/sql-reference/statements/hypothetical-index,https://private-7c7dfe99.mintlify.app/reference/statements/hypothetical-index,matched,aec447edb7a25094,true,aec447edb7a25094,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/statements/insert-into,docs/sql-reference/statements/insert-into.md,reference/statements/insert-into.mdx,https://clickhouse.com/docs/sql-reference/statements/insert-into,https://private-7c7dfe99.mintlify.app/reference/statements/insert-into,matched,b04169961ed35a16,true,b04169961ed35a16,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/kill,docs/sql-reference/statements/kill.md,reference/statements/kill.mdx,https://clickhouse.com/docs/sql-reference/statements/kill,https://private-7c7dfe99.mintlify.app/reference/statements/kill,matched,af21361ca18f3026,true,af21361ca18f3026,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1673,7 +1692,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/statements/select/intersect,docs/sql-reference/statements/select/intersect.md,reference/statements/select/intersect.mdx,https://clickhouse.com/docs/sql-reference/statements/select/intersect,https://private-7c7dfe99.mintlify.app/reference/statements/select/intersect,matched,2d206c976cd88c30,true,2d206c976cd88c30,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/select/into-outfile,docs/sql-reference/statements/select/into-outfile.md,reference/statements/select/into-outfile.mdx,https://clickhouse.com/docs/sql-reference/statements/select/into-outfile,https://private-7c7dfe99.mintlify.app/reference/statements/select/into-outfile,matched,4655e3a018c5dc42,true,4655e3a018c5dc42,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/select/join,docs/sql-reference/statements/select/join.md,reference/statements/select/join.mdx,https://clickhouse.com/docs/sql-reference/statements/select/join,https://private-7c7dfe99.mintlify.app/reference/statements/select/join,matched,85d0761a113d83bd,true,85d0761a113d83bd,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/select/limit,docs/sql-reference/statements/select/limit.md,reference/statements/select/limit.mdx,https://clickhouse.com/docs/sql-reference/statements/select/limit,https://private-7c7dfe99.mintlify.app/reference/statements/select/limit,matched,7a4d74ba92379a5f,true,7a4d74ba92379a5f,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/select/limit,docs/sql-reference/statements/select/limit.md,reference/statements/select/limit.mdx,https://clickhouse.com/docs/sql-reference/statements/select/limit,https://private-7c7dfe99.mintlify.app/reference/statements/select/limit,matched,619497c565e61107,true,619497c565e61107,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/select/limit-by,docs/sql-reference/statements/select/limit-by.md,reference/statements/select/limit-by.mdx,https://clickhouse.com/docs/sql-reference/statements/select/limit-by,https://private-7c7dfe99.mintlify.app/reference/statements/select/limit-by,matched,e36cb7202c0ca28f,true,e36cb7202c0ca28f,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/select/offset,docs/sql-reference/statements/select/offset.md,reference/statements/select/offset.mdx,https://clickhouse.com/docs/sql-reference/statements/select/offset,https://private-7c7dfe99.mintlify.app/reference/statements/select/offset,matched,5ebfe47b67f74463,true,5ebfe47b67f74463,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/select/order-by,docs/sql-reference/statements/select/order-by.md,reference/statements/select/order-by.mdx,https://clickhouse.com/docs/sql-reference/statements/select/order-by,https://private-7c7dfe99.mintlify.app/reference/statements/select/order-by,matched,d7ad45fdacd639e4,true,d7ad45fdacd639e4,2026-06-23T07:34:28+00:00,false
|
||||
@@ -1687,7 +1706,7 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/statements/set,docs/sql-reference/statements/set.md,reference/statements/set.mdx,https://clickhouse.com/docs/sql-reference/statements/set,https://private-7c7dfe99.mintlify.app/reference/statements/set,matched,04fdbe960f351e17,true,04fdbe960f351e17,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/set-role,docs/sql-reference/statements/set-role.md,reference/statements/set-role.mdx,https://clickhouse.com/docs/sql-reference/statements/set-role,https://private-7c7dfe99.mintlify.app/reference/statements/set-role,matched,af1d949b76a7c871,true,af1d949b76a7c871,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/show,docs/sql-reference/statements/show.md,reference/statements/show.mdx,https://clickhouse.com/docs/sql-reference/statements/show,https://private-7c7dfe99.mintlify.app/reference/statements/show,matched,49ceafd57e4d4c95,true,49ceafd57e4d4c95,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/statements/system,docs/sql-reference/statements/system.md,reference/statements/system.mdx,https://clickhouse.com/docs/sql-reference/statements/system,https://private-7c7dfe99.mintlify.app/reference/statements/system,matched,b3c369a977bf6836,true,61d284bfa81413f9,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/statements/system,docs/sql-reference/statements/system.md,reference/statements/system.mdx,https://clickhouse.com/docs/sql-reference/statements/system,https://private-7c7dfe99.mintlify.app/reference/statements/system,matched,2fa7a115a6ff6e92,true,2fa7a115a6ff6e92,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/statements/truncate,docs/sql-reference/statements/truncate.md,reference/statements/truncate.mdx,https://clickhouse.com/docs/sql-reference/statements/truncate,https://private-7c7dfe99.mintlify.app/reference/statements/truncate,matched,89b0b953f7e7370e,true,89b0b953f7e7370e,2026-06-22T17:40:10+00:00,false
|
||||
/sql-reference/statements/undrop,docs/sql-reference/statements/undrop.md,reference/statements/undrop.mdx,https://clickhouse.com/docs/sql-reference/statements/undrop,https://private-7c7dfe99.mintlify.app/reference/statements/undrop,matched,7bd54b91e1b6d80b,true,7bd54b91e1b6d80b,2026-06-22T15:11:51+00:00,false
|
||||
/sql-reference/statements/update,docs/sql-reference/statements/update.md,reference/statements/update.mdx,https://clickhouse.com/docs/sql-reference/statements/update,https://private-7c7dfe99.mintlify.app/reference/statements/update,matched,17436a6c6f051eb7,true,17436a6c6f051eb7,2026-07-01T10:44:01+00:00,false
|
||||
@@ -1725,26 +1744,26 @@ docusaurus_slug,docusaurus_file,mintlify_file,old_url,new_url,status,source_hash
|
||||
/sql-reference/table-functions/mergeTreeProjection,docs/sql-reference/table-functions/mergeTreeProjection.md,reference/functions/table-functions/mergeTreeProjection.mdx,https://clickhouse.com/docs/sql-reference/table-functions/mergeTreeProjection,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/mergeTreeProjection,matched,66e0e0e58a15f13b,true,66e0e0e58a15f13b,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/mergeTreeTextIndex,docs/sql-reference/table-functions/mergeTreeTextIndex.md,reference/functions/table-functions/mergeTreeTextIndex.mdx,https://clickhouse.com/docs/sql-reference/table-functions/mergeTreeTextIndex,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/mergeTreeTextIndex,matched,674be778b3ca892c,true,674be778b3ca892c,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/mongodb,docs/sql-reference/table-functions/mongodb.md,reference/functions/table-functions/mongodb.mdx,https://clickhouse.com/docs/sql-reference/table-functions/mongodb,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/mongodb,matched,49195415a7820476,true,49195415a7820476,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/mysql,docs/sql-reference/table-functions/mysql.md,reference/functions/table-functions/mysql.mdx,https://clickhouse.com/docs/sql-reference/table-functions/mysql,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/mysql,matched,fe5bcab4c8ead2cf,true,e87ac4e392b2e4cd,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/table-functions/mysql,docs/sql-reference/table-functions/mysql.md,reference/functions/table-functions/mysql.mdx,https://clickhouse.com/docs/sql-reference/table-functions/mysql,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/mysql,matched,fe5bcab4c8ead2cf,true,fe5bcab4c8ead2cf,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/table-functions/null,docs/sql-reference/table-functions/null.md,reference/functions/table-functions/null.mdx,https://clickhouse.com/docs/sql-reference/table-functions/null,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/null,matched,1e3e6c4337634880,true,1e3e6c4337634880,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/numbers,docs/sql-reference/table-functions/numbers.md,reference/functions/table-functions/numbers.mdx,https://clickhouse.com/docs/sql-reference/table-functions/numbers,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/numbers,matched,3627bf6180612a42,true,3627bf6180612a42,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/odbc,docs/sql-reference/table-functions/odbc.md,reference/functions/table-functions/odbc.mdx,https://clickhouse.com/docs/sql-reference/table-functions/odbc,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/odbc,matched,691274a25e970b95,true,691274a25e970b95,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/table-functions/paimon,docs/sql-reference/table-functions/paimon.md,reference/functions/table-functions/paimon.mdx,https://clickhouse.com/docs/sql-reference/table-functions/paimon,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/paimon,matched,ff6b4066c22e03bc,true,ff6b4066c22e03bc,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/table-functions/paimonCluster,docs/sql-reference/table-functions/paimonCluster.md,reference/functions/table-functions/paimonCluster.mdx,https://clickhouse.com/docs/sql-reference/table-functions/paimonCluster,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/paimonCluster,matched,8d4ff8a848c47497,true,8d4ff8a848c47497,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/table-functions/postgresql,docs/sql-reference/table-functions/postgresql.md,reference/functions/table-functions/postgresql.mdx,https://clickhouse.com/docs/sql-reference/table-functions/postgresql,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/postgresql,matched,e9257a9d71f3ed7c,true,4ee9d52f5ad86c50,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/table-functions/postgresql,docs/sql-reference/table-functions/postgresql.md,reference/functions/table-functions/postgresql.mdx,https://clickhouse.com/docs/sql-reference/table-functions/postgresql,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/postgresql,matched,e9257a9d71f3ed7c,true,e9257a9d71f3ed7c,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/table-functions/primes,docs/sql-reference/table-functions/primes.md,reference/functions/table-functions/primes.mdx,https://clickhouse.com/docs/sql-reference/table-functions/primes,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/primes,matched,4f2d1473a674bb1e,true,4f2d1473a674bb1e,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/prometheusQuery,docs/sql-reference/table-functions/prometheusQuery.md,reference/functions/table-functions/prometheusQuery.mdx,https://clickhouse.com/docs/sql-reference/table-functions/prometheusQuery,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/prometheusQuery,matched,d4ad7f0274fcfad0,true,d4ad7f0274fcfad0,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/prometheusQueryRange,docs/sql-reference/table-functions/prometheusQueryRange.md,reference/functions/table-functions/prometheusQueryRange.mdx,https://clickhouse.com/docs/sql-reference/table-functions/prometheusQueryRange,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/prometheusQueryRange,matched,6a2e1e15e33aa317,true,6a2e1e15e33aa317,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/redis,docs/sql-reference/table-functions/redis.md,reference/functions/table-functions/redis.mdx,https://clickhouse.com/docs/sql-reference/table-functions/redis,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/redis,matched,184e1d9e9cbbd26f,true,184e1d9e9cbbd26f,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/remote,docs/sql-reference/table-functions/remote.md,reference/functions/table-functions/remote.mdx,https://clickhouse.com/docs/sql-reference/table-functions/remote,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/remote,matched,97a89e26d6b3ccda,true,97a89e26d6b3ccda,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/s3,docs/sql-reference/table-functions/s3.md,reference/functions/table-functions/s3.mdx,https://clickhouse.com/docs/sql-reference/table-functions/s3,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/s3,matched,9cec0f4b7a609f93,true,9cec0f4b7a609f93,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/s3,docs/sql-reference/table-functions/s3.md,reference/functions/table-functions/s3.mdx,https://clickhouse.com/docs/sql-reference/table-functions/s3,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/s3,matched,072c7ce8a2b8052b,true,072c7ce8a2b8052b,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/table-functions/s3Cluster,docs/sql-reference/table-functions/s3Cluster.md,reference/functions/table-functions/s3Cluster.mdx,https://clickhouse.com/docs/sql-reference/table-functions/s3Cluster,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/s3Cluster,matched,de34caf2ef418b03,true,de34caf2ef418b03,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/sqlite,docs/sql-reference/table-functions/sqlite.md,reference/functions/table-functions/sqlite.mdx,https://clickhouse.com/docs/sql-reference/table-functions/sqlite,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/sqlite,matched,253c18ec99a52979,true,e3a58d5f3297ba15,2026-07-01T10:16:07+00:00,false
|
||||
/sql-reference/table-functions/sqlite,docs/sql-reference/table-functions/sqlite.md,reference/functions/table-functions/sqlite.mdx,https://clickhouse.com/docs/sql-reference/table-functions/sqlite,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/sqlite,matched,253c18ec99a52979,true,253c18ec99a52979,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/table-functions/timeSeriesMetrics,docs/sql-reference/table-functions/timeSeriesMetrics.md,reference/functions/table-functions/timeSeriesMetrics.mdx,https://clickhouse.com/docs/sql-reference/table-functions/timeSeriesMetrics,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/timeSeriesMetrics,matched,f7fa77ef91333364,true,f7fa77ef91333364,2026-05-19T11:08:53+00:00,false
|
||||
/sql-reference/table-functions/timeSeriesSamples,docs/sql-reference/table-functions/timeSeriesSamples.md,reference/functions/table-functions/timeSeriesSamples.mdx,https://clickhouse.com/docs/sql-reference/table-functions/timeSeriesSamples,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/timeSeriesSamples,matched,0d02ebf2a4c8af31,true,0d02ebf2a4c8af31,2026-06-22T15:11:51+00:00,false
|
||||
/sql-reference/table-functions/timeSeriesSelector,docs/sql-reference/table-functions/timeSeriesSelector.md,reference/functions/table-functions/timeSeriesSelector.mdx,https://clickhouse.com/docs/sql-reference/table-functions/timeSeriesSelector,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/timeSeriesSelector,matched,2efab495d0d434c3,true,2efab495d0d434c3,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/timeSeriesTags,docs/sql-reference/table-functions/timeSeriesTags.md,reference/functions/table-functions/timeSeriesTags.mdx,https://clickhouse.com/docs/sql-reference/table-functions/timeSeriesTags,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/timeSeriesTags,matched,6c5fde1e295f0580,true,6c5fde1e295f0580,2026-05-19T11:08:53+00:00,false
|
||||
/sql-reference/table-functions/url,docs/sql-reference/table-functions/url.md,reference/functions/table-functions/url.mdx,https://clickhouse.com/docs/sql-reference/table-functions/url,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/url,matched,e3a5435aaf87520e,true,e3a5435aaf87520e,2026-07-01T10:44:01+00:00,false
|
||||
/sql-reference/table-functions/url,docs/sql-reference/table-functions/url.md,reference/functions/table-functions/url.mdx,https://clickhouse.com/docs/sql-reference/table-functions/url,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/url,matched,10222d495317dbe6,true,10222d495317dbe6,2026-07-11T17:50:23+00:00,true
|
||||
/sql-reference/table-functions/urlCluster,docs/sql-reference/table-functions/urlCluster.md,reference/functions/table-functions/urlCluster.mdx,https://clickhouse.com/docs/sql-reference/table-functions/urlCluster,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/urlCluster,matched,7ab2dcf6aa50fc83,true,7ab2dcf6aa50fc83,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/values,docs/sql-reference/table-functions/values.md,reference/functions/table-functions/values.mdx,https://clickhouse.com/docs/sql-reference/table-functions/values,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/values,matched,8716709876043316,true,8716709876043316,2026-06-23T07:34:28+00:00,false
|
||||
/sql-reference/table-functions/view,docs/sql-reference/table-functions/view.md,reference/functions/table-functions/view.mdx,https://clickhouse.com/docs/sql-reference/table-functions/view,https://private-7c7dfe99.mintlify.app/reference/functions/table-functions/view,matched,aa22515e018d41f6,true,aa22515e018d41f6,2026-06-23T07:34:28+00:00,false
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -9,6 +9,7 @@ See Mintlify's docs on [custom scripts](https://www.mintlify.com/docs/customize/
|
||||
|
||||
- `ask-ai-button.js` — tweaks the Ask-AI button styling/behavior.
|
||||
- `custom-footer.js` — renders the custom site footer (`#ch-custom-footer`).
|
||||
- `galaxy.js` — initializes ClickHouse Galaxy analytics, tracks docs and knowledge-base page lifecycle events across Mintlify SPA navigation, sends canonical `https://clickhouse.com/docs` traffic to the production Galaxy API and `.mintlify.app` preview traffic to the development Galaxy API (disabled on localhost and unknown origins), and adds attribution plus the Galaxy visitor ID to ClickHouse Cloud links only on canonical production docs.
|
||||
- `inkeep-init.js` — replaces Mintlify's native search (⌘K / navbar search bar) with the Inkeep search modal. Search-only; AI chat stays on Kapa.
|
||||
- `kapa-init.js` — bootstraps the Kapa.ai RAG widget.
|
||||
- `navbar-cta.js` — adds the "Get started" CTA to the navbar.
|
||||
@@ -19,4 +20,4 @@ See Mintlify's docs on [custom scripts](https://www.mintlify.com/docs/customize/
|
||||
- `clickhouse-sql-highlight.js` — re-highlights `language="sql"` code blocks using the WASM lexer (ClickHouse-native colors, matching play.html / clickhouse-client) in place of Shiki. Must load after `clickhouse-sql-lexer-wasm.js`. Other languages are left as Shiki rendered them.
|
||||
|
||||
To wire a new script up, add a `{ "src": "/_site/customizations/<name>.js" }`
|
||||
entry to the top-level `scripts` array in `docs.json`.
|
||||
entry to the top-level `scripts` array in `docs.json`.
|
||||
|
||||
@@ -162,6 +162,10 @@
|
||||
+ '#' + FOOTER_ID + ' [data-bottom] a { font-size: 13px; white-space: nowrap; }'
|
||||
+ '#' + FOOTER_ID + ' [data-legal] { display: flex; flex-wrap: wrap; gap: 16px; }'
|
||||
+ '@media (max-width: 639px) {'
|
||||
+ ' #' + FOOTER_ID + ' [data-top] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }'
|
||||
+ ' #' + FOOTER_ID + ' [data-sitemap] { display: contents; }'
|
||||
+ ' #' + FOOTER_ID + ' [data-cta] { flex-direction: column; min-width: 0; }'
|
||||
+ ' #' + FOOTER_ID + ' [data-gh] { width: 100%; }'
|
||||
+ ' #' + FOOTER_ID + ' [data-bottom] { flex-direction: column; text-align: center; }'
|
||||
+ ' #' + FOOTER_ID + ' [data-legal] { justify-content: center; }'
|
||||
+ '}'
|
||||
|
||||
@@ -0,0 +1,384 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
// Mintlify adapter for clickhouse-docs/src/lib/galaxy. Keep the event
|
||||
// envelope and transport compatible with the legacy Docusaurus site so
|
||||
// existing dashboards continue to receive the same data.
|
||||
var APPLICATION = 'DOCS_WEBSITE';
|
||||
var isLocal = /^(localhost|127\.0\.0\.1|\[?::1\]?)$/
|
||||
.test(window.location.hostname || '');
|
||||
var isMintlifyPreview = /\.mintlify\.app$/
|
||||
.test(window.location.hostname || '');
|
||||
var isCanonicalDocs = window.location.origin === 'https://clickhouse.com' &&
|
||||
/^\/docs(?:\/|$)/.test(window.location.pathname);
|
||||
var API_HOST = null;
|
||||
if (!isLocal && isMintlifyPreview) {
|
||||
API_HOST = 'https://control-plane-internal.clickhouse-dev.com';
|
||||
} else if (isCanonicalDocs) {
|
||||
API_HOST = 'https://control-plane-internal.clickhouse.cloud';
|
||||
}
|
||||
var API_PATH = '/api/galaxy?sendGalaxyForensicEvent';
|
||||
var USER_ID_KEY = 'glx_anonymous_id';
|
||||
var SESSION_ID_KEY = 'glx_id';
|
||||
var MAX_COOKIE_AGE = 2147483647;
|
||||
var FLUSH_INTERVAL_MS = 5000;
|
||||
var KEEPALIVE_LIMIT_BYTES = 60 * 1024;
|
||||
var ATTRIBUTION_HOSTS = ['clickhouse.cloud', 'console.clickhouse.cloud'];
|
||||
|
||||
if (window.__clickhouseGalaxyInitialized) return;
|
||||
window.__clickhouseGalaxyInitialized = true;
|
||||
|
||||
var eventsQueue = [];
|
||||
var flushInFlight = null;
|
||||
|
||||
function uuid() {
|
||||
if (window.crypto && typeof window.crypto.randomUUID === 'function') {
|
||||
return window.crypto.randomUUID();
|
||||
}
|
||||
|
||||
// randomUUID is available in current browsers. This fallback keeps local
|
||||
// previews and older embedded browsers functional without adding a bundle
|
||||
// dependency solely for UUID generation.
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||
var r;
|
||||
if (window.crypto && typeof window.crypto.getRandomValues === 'function') {
|
||||
var value = new Uint8Array(1);
|
||||
window.crypto.getRandomValues(value);
|
||||
r = value[0] & 15;
|
||||
} else {
|
||||
r = Math.floor(Math.random() * 16);
|
||||
}
|
||||
return (c === 'x' ? r : (r & 3) | 8).toString(16);
|
||||
});
|
||||
}
|
||||
|
||||
function getCookie(name) {
|
||||
var prefix = encodeURIComponent(name) + '=';
|
||||
var cookies = document.cookie ? document.cookie.split(';') : [];
|
||||
for (var i = 0; i < cookies.length; i++) {
|
||||
var cookie = cookies[i].trim();
|
||||
if (cookie.indexOf(prefix) === 0) {
|
||||
try {
|
||||
return decodeURIComponent(cookie.slice(prefix.length));
|
||||
} catch (e) {
|
||||
return cookie.slice(prefix.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function storageGet(storage, key) {
|
||||
try {
|
||||
return storage.getItem(key);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function storageSet(storage, key, value) {
|
||||
try {
|
||||
storage.setItem(key, value);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function persistUserId(value) {
|
||||
try {
|
||||
var cookie = encodeURIComponent(USER_ID_KEY) + '=' + encodeURIComponent(value) +
|
||||
'; path=/; max-age=' + MAX_COOKIE_AGE;
|
||||
if (window.location.protocol === 'https:') cookie += '; secure';
|
||||
document.cookie = cookie;
|
||||
} catch (e) {}
|
||||
|
||||
storageSet(window.localStorage, USER_ID_KEY, value);
|
||||
storageSet(window.sessionStorage, USER_ID_KEY, value);
|
||||
}
|
||||
|
||||
function getUserId() {
|
||||
var id = getCookie(USER_ID_KEY) ||
|
||||
storageGet(window.localStorage, USER_ID_KEY) ||
|
||||
storageGet(window.sessionStorage, USER_ID_KEY) ||
|
||||
uuid();
|
||||
persistUserId(id);
|
||||
return id;
|
||||
}
|
||||
|
||||
function getSessionId() {
|
||||
var id = storageGet(window.sessionStorage, SESSION_ID_KEY);
|
||||
if (!id) {
|
||||
id = uuid();
|
||||
storageSet(window.sessionStorage, SESSION_ID_KEY, id);
|
||||
}
|
||||
return id || 'unknown';
|
||||
}
|
||||
|
||||
function getContext() {
|
||||
return {
|
||||
application: APPLICATION,
|
||||
page: window.location.href,
|
||||
userAgent: window.navigator.userAgent,
|
||||
};
|
||||
}
|
||||
|
||||
function track(event, properties) {
|
||||
if (!event) return;
|
||||
|
||||
var eventProperties = properties || { interaction: 'click' };
|
||||
var interaction = eventProperties.interaction;
|
||||
var extraProperties = {};
|
||||
for (var key in eventProperties) {
|
||||
if (Object.prototype.hasOwnProperty.call(eventProperties, key) && key !== 'interaction') {
|
||||
extraProperties[key] = eventProperties[key];
|
||||
}
|
||||
}
|
||||
|
||||
var parts = String(event).split('.');
|
||||
var payloadProperties = getContext();
|
||||
eventsQueue.push({
|
||||
application: APPLICATION,
|
||||
timestamp: Date.now(),
|
||||
userId: getUserId(),
|
||||
namespace: parts[0],
|
||||
component: parts[1],
|
||||
interaction: interaction,
|
||||
orgId: payloadProperties.orgId,
|
||||
event: parts[2],
|
||||
message: parts[2],
|
||||
properties: Object.assign({ properties: payloadProperties }, extraProperties),
|
||||
});
|
||||
}
|
||||
|
||||
function post(url, requestBody, useBeacon) {
|
||||
var json = JSON.stringify(requestBody);
|
||||
var blob = new Blob([json], { type: 'application/json;charset=UTF-8' });
|
||||
var tooLarge = blob.size > KEEPALIVE_LIMIT_BYTES;
|
||||
|
||||
if (useBeacon && !tooLarge && typeof window.navigator.sendBeacon === 'function') {
|
||||
try {
|
||||
if (window.navigator.sendBeacon(url, blob)) return Promise.resolve();
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
return window.fetch(url, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
|
||||
body: json,
|
||||
keepalive: !tooLarge,
|
||||
}).then(function (response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Galaxy request failed with status ' + response.status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function flushEvents(useBeacon) {
|
||||
if (flushInFlight || eventsQueue.length === 0) {
|
||||
return flushInFlight || Promise.resolve();
|
||||
}
|
||||
|
||||
var eventCount = eventsQueue.length;
|
||||
if (!API_HOST) {
|
||||
eventsQueue.splice(0, eventCount);
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var request = {
|
||||
rpcAction: 'sendGalaxyForensicEvent',
|
||||
galaxySessionId: getSessionId(),
|
||||
data: eventsQueue.slice(0, eventCount),
|
||||
};
|
||||
|
||||
flushInFlight = post(API_HOST + API_PATH, request, useBeacon === true)
|
||||
.then(function () {
|
||||
eventsQueue.splice(0, eventCount);
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.error('Could not log to galaxy', error);
|
||||
})
|
||||
.then(function () {
|
||||
flushInFlight = null;
|
||||
});
|
||||
|
||||
return flushInFlight;
|
||||
}
|
||||
|
||||
window.galaxy = {
|
||||
track: track,
|
||||
flushEvents: flushEvents,
|
||||
};
|
||||
|
||||
window.dispatchEvent(new Event('galaxy:ready'));
|
||||
|
||||
var flushInterval = window.setInterval(flushEvents, FLUSH_INTERVAL_MS);
|
||||
|
||||
function stopGalaxy() {
|
||||
window.clearInterval(flushInterval);
|
||||
void flushEvents(true);
|
||||
}
|
||||
|
||||
window.addEventListener('beforeunload', stopGalaxy);
|
||||
window.addEventListener('pagehide', function (event) {
|
||||
// Timers are suspended while a page is in the back/forward cache and
|
||||
// resume when it is restored. Clearing the interval here would leave a
|
||||
// restored page queueing events without ever flushing them.
|
||||
if (!event.persisted) stopGalaxy();
|
||||
});
|
||||
|
||||
function trackPageEvent(action) {
|
||||
track('docs.window.' + action, {
|
||||
interaction: 'trigger',
|
||||
});
|
||||
}
|
||||
|
||||
// Docusaurus hooks tracked load, focus, and blur for every docs and KB page.
|
||||
// Mintlify is a SPA, so watch the path to emit one load event per route.
|
||||
var lastPath = window.location.pathname;
|
||||
trackPageEvent('load');
|
||||
window.addEventListener('focus', function () { trackPageEvent('focus'); });
|
||||
window.addEventListener('blur', function () { trackPageEvent('blur'); });
|
||||
|
||||
// Track clicks declaratively from MDX, including clicks on descendants of
|
||||
// wrappers around Mintlify components:
|
||||
// <div data-galaxy-event="docs.install.download"
|
||||
// data-galaxy-prop-os="linux">...</div>
|
||||
function getTrackedHref(anchor) {
|
||||
var href = anchor.getAttribute('href');
|
||||
// Homepage click handlers add the canonical /docs base before navigating.
|
||||
// Record that final destination rather than the unprefixed DOM attribute.
|
||||
if (isCanonicalDocs && href && href.charAt(0) === '/' &&
|
||||
href.indexOf('//') !== 0 && !/^\/docs(?:\/|$)/.test(href)) {
|
||||
return '/docs' + href;
|
||||
}
|
||||
return href;
|
||||
}
|
||||
|
||||
document.addEventListener('click', function (event) {
|
||||
var target = event.target;
|
||||
if (!target || typeof target.closest !== 'function') return;
|
||||
|
||||
var element = target.closest('[data-galaxy-event]');
|
||||
if (!element) return;
|
||||
|
||||
var eventName = element.getAttribute('data-galaxy-event');
|
||||
if (!eventName) return;
|
||||
|
||||
var properties = { interaction: 'click' };
|
||||
var anchor = target.closest('a[href]') ||
|
||||
(element.tagName === 'A' ? element : element.querySelector('a[href]'));
|
||||
if (anchor) properties.href = getTrackedHref(anchor);
|
||||
|
||||
for (var i = 0; i < element.attributes.length; i++) {
|
||||
var attribute = element.attributes[i];
|
||||
if (attribute.name.indexOf('data-galaxy-prop-') === 0) {
|
||||
properties[attribute.name.slice('data-galaxy-prop-'.length)] = attribute.value;
|
||||
}
|
||||
}
|
||||
|
||||
track(eventName, properties);
|
||||
}, true);
|
||||
|
||||
function watchPath() {
|
||||
var path = window.location.pathname;
|
||||
if (path !== lastPath) {
|
||||
lastPath = path;
|
||||
trackPageEvent('load');
|
||||
updateCloudLinks();
|
||||
}
|
||||
window.requestAnimationFrame(watchPath);
|
||||
}
|
||||
window.requestAnimationFrame(watchPath);
|
||||
|
||||
// Preserve the attribution behavior from src/clientModules/utmPersistence:
|
||||
// retain campaign parameters and attach the Galaxy ID and page paths to
|
||||
// links into ClickHouse Cloud.
|
||||
function saveAttribution() {
|
||||
try {
|
||||
var params = new URLSearchParams(window.location.search);
|
||||
var values = {};
|
||||
params.forEach(function (value, key) {
|
||||
if (key.indexOf('utm_') === 0 || key === 'gclid') values[key] = value;
|
||||
});
|
||||
if (Object.keys(values).length > 0) {
|
||||
var expiration = new Date();
|
||||
expiration.setDate(expiration.getDate() + 14);
|
||||
window.localStorage.setItem('ch-utms', JSON.stringify({
|
||||
data: values,
|
||||
timestamp: expiration.getTime(),
|
||||
}));
|
||||
}
|
||||
if (!window.localStorage.getItem('origPath')) {
|
||||
window.localStorage.setItem('origPath', window.location.pathname);
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function storedAttribution() {
|
||||
try {
|
||||
var stored = window.localStorage.getItem('ch-utms');
|
||||
if (!stored) return null;
|
||||
var parsed = JSON.parse(stored);
|
||||
if (Date.now() > Number(parsed.timestamp)) {
|
||||
window.localStorage.removeItem('ch-utms');
|
||||
return null;
|
||||
}
|
||||
return parsed.data;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function googleAnalyticsId() {
|
||||
return getCookie('_ga');
|
||||
}
|
||||
|
||||
function updateCloudLinks() {
|
||||
if (!isCanonicalDocs) return;
|
||||
|
||||
saveAttribution();
|
||||
var attribution = storedAttribution();
|
||||
var links = document.querySelectorAll('a[href*="clickhouse.cloud"]');
|
||||
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
try {
|
||||
var url = new URL(links[i].href, window.location.href);
|
||||
if (ATTRIBUTION_HOSTS.indexOf(url.hostname) === -1) continue;
|
||||
|
||||
if (attribution) {
|
||||
for (var key in attribution) {
|
||||
if (Object.prototype.hasOwnProperty.call(attribution, key)) {
|
||||
url.searchParams.set(key, attribution[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
url.searchParams.set('glxid', getUserId());
|
||||
url.searchParams.set('pagePath', window.location.pathname);
|
||||
|
||||
var originalPath = storageGet(window.localStorage, 'origPath');
|
||||
if (originalPath) url.searchParams.set('origPath', originalPath);
|
||||
|
||||
var gaId = googleAnalyticsId();
|
||||
if (gaId) url.searchParams.set('utm_ga', gaId);
|
||||
|
||||
links[i].href = url.toString();
|
||||
} catch (e) {
|
||||
console.warn('Failed to update cloud link', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function startLinkObserver() {
|
||||
if (!isCanonicalDocs) return;
|
||||
|
||||
updateCloudLinks();
|
||||
new MutationObserver(updateCloudLinks).observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
});
|
||||
}
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', startLinkObserver);
|
||||
} else {
|
||||
startLinkObserver();
|
||||
}
|
||||
})();
|
||||
@@ -64,7 +64,7 @@
|
||||
['products/clickhouse-private', 'ClickHouse Private'],
|
||||
['products/managed-postgres', 'Managed Postgres'],
|
||||
['products/agentic-data-stack', 'Agentic Data Stack'],
|
||||
['products/chdb', 'chDB'],
|
||||
['chdb', 'chDB'],
|
||||
['products/kubernetes-operator', 'Kubernetes Operator'],
|
||||
['clickstack', 'ClickStack'],
|
||||
['integrations/clickpipes', 'ClickPipes'],
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
'use strict';
|
||||
|
||||
var CTA_ID = 'ch-navbar-cta';
|
||||
var CTA_HREF = 'https://clickhouse.cloud/signUp?loc=docs-nav-signUp-cta';
|
||||
|
||||
var githubSvg = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">'
|
||||
+ '<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.75C4.27 1.75 1.25 4.77 1.25 8.5c0 2.99 1.93 5.51 4.62 6.4.34.06.46-.14.46-.32 0-.16-.01-.69-.01-1.26-1.7.32-2.14-.6-2.27-.98-.08-.19-.41-.79-.7-.95-.24-.13-.58-.44-.01-.45.53-.01.91.49 1.04.69.61 1.02 1.58.73 1.97.56.06-.44.24-.74.43-.91-1.5-.17-3.07-.75-3.07-3.33 0-.73.26-1.34.69-1.81-.07-.17-.3-.86.07-1.79 0 0 .57-.18 1.86.69.54-.15 1.11-.23 1.69-.23.57 0 1.14.08 1.68.23 1.29-.88 1.86-.69 1.86-.69.37.93.14 1.62.07 1.79.43.47.69 1.07.69 1.81 0 2.59-1.58 3.16-3.08 3.33.25.21.46.62.46 1.25 0 .9-.01 1.63-.01 1.86 0 .18.13.39.47.32 2.67-.9 4.58-3.41 4.58-6.4 0-3.73-3.02-6.75-6.75-6.75Z" fill="currentColor"/>'
|
||||
@@ -63,10 +64,18 @@
|
||||
|
||||
var ctaLink = document.createElement('a');
|
||||
ctaLink.className = 'ch-cta-btn';
|
||||
ctaLink.href = 'https://clickhouse.cloud/signUp';
|
||||
ctaLink.href = CTA_HREF;
|
||||
ctaLink.target = '_blank';
|
||||
ctaLink.rel = 'noopener noreferrer';
|
||||
ctaLink.textContent = 'Get Started';
|
||||
ctaLink.onclick = function () {
|
||||
if (window.galaxy && typeof window.galaxy.track === 'function') {
|
||||
window.galaxy.track('docs.navbar.get-started', {
|
||||
interaction: 'click',
|
||||
href: CTA_HREF,
|
||||
});
|
||||
}
|
||||
};
|
||||
container.appendChild(ctaLink);
|
||||
|
||||
mapleNav.appendChild(container);
|
||||
@@ -112,4 +121,4 @@
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
})();
|
||||
})();
|
||||
|
||||
+223
-195
@@ -199,189 +199,25 @@
|
||||
"source": "/changelogs/26.4",
|
||||
"destination": "/resources/changelogs/cloud/release-notes/26_4"
|
||||
},
|
||||
{
|
||||
"source": "/chdb",
|
||||
"destination": "/products/chdb"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/api/python",
|
||||
"destination": "/products/chdb/api/python"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/configuration",
|
||||
"destination": "/products/chdb/configuration"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/configuration/execution-engine",
|
||||
"destination": "/products/chdb/configuration/execution-engine"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/configuration/function-config",
|
||||
"destination": "/products/chdb/configuration/function-config"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/configuration/performance-mode",
|
||||
"destination": "/products/chdb/configuration/performance-mode"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/data-formats",
|
||||
"destination": "/products/chdb/reference/data-formats"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore",
|
||||
"destination": "/products/chdb/datastore"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/accessors",
|
||||
"destination": "/products/chdb/datastore/accessors"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/aggregation",
|
||||
"destination": "/products/chdb/datastore/aggregation"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/class-reference",
|
||||
"destination": "/products/chdb/datastore/class-reference"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/execution-model",
|
||||
"destination": "/products/chdb/datastore/execution-model"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/factory-methods",
|
||||
"destination": "/products/chdb/datastore/factory-methods"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/io",
|
||||
"destination": "/products/chdb/datastore/io"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/pandas-compat",
|
||||
"destination": "/products/chdb/datastore/pandas-compat"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/query-building",
|
||||
"destination": "/products/chdb/datastore/query-building"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/datastore/quickstart",
|
||||
"destination": "/products/chdb/datastore/quickstart"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/debugging",
|
||||
"destination": "/products/chdb/debugging"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/debugging/explain",
|
||||
"destination": "/products/chdb/debugging/explain"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/debugging/logging",
|
||||
"destination": "/products/chdb/debugging/logging"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/debugging/profiling",
|
||||
"destination": "/products/chdb/debugging/profiling"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/getting-started",
|
||||
"destination": "/products/chdb/getting-started"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides",
|
||||
"destination": "/products/chdb/guides"
|
||||
"destination": "/chdb/reference/data-formats"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/apache-arrow",
|
||||
"destination": "/products/chdb/guides/querying-apache-arrow"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/clickhouse-local",
|
||||
"destination": "/products/chdb/guides/clickhouse-local"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/jupysql",
|
||||
"destination": "/products/chdb/guides/jupysql"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/migration-from-pandas",
|
||||
"destination": "/products/chdb/guides/migration-from-pandas"
|
||||
"destination": "/chdb/guides/querying-apache-arrow"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/pandas",
|
||||
"destination": "/products/chdb/guides/querying-pandas"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/pandas-cookbook",
|
||||
"destination": "/products/chdb/guides/pandas-cookbook"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/pandas-differences",
|
||||
"destination": "/products/chdb/guides/pandas-differences"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/pandas-performance",
|
||||
"destination": "/products/chdb/guides/pandas-performance"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/pandas-to-sql",
|
||||
"destination": "/products/chdb/guides/pandas-to-sql"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/query-remote-clickhouse",
|
||||
"destination": "/products/chdb/guides/query-remote-clickhouse"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/querying-parquet",
|
||||
"destination": "/products/chdb/guides/querying-parquet"
|
||||
"destination": "/chdb/guides/querying-pandas"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/guides/querying-s3",
|
||||
"destination": "/products/chdb/guides/querying-s3-bucket"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/install",
|
||||
"destination": "/products/chdb/install"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/install/bun",
|
||||
"destination": "/products/chdb/install/bun"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/install/c",
|
||||
"destination": "/products/chdb/install/c"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/install/go",
|
||||
"destination": "/products/chdb/install/go"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/install/nodejs",
|
||||
"destination": "/products/chdb/install/nodejs"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/install/python",
|
||||
"destination": "/products/chdb/install/python"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/install/rust",
|
||||
"destination": "/products/chdb/install/rust"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/reference",
|
||||
"destination": "/products/chdb/reference"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/reference/data-formats",
|
||||
"destination": "/products/chdb/reference/data-formats"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/reference/sql-reference",
|
||||
"destination": "/products/chdb/reference/sql-reference"
|
||||
"destination": "/chdb/guides/querying-s3-bucket"
|
||||
},
|
||||
{
|
||||
"source": "/chdb/sql-reference",
|
||||
"destination": "/products/chdb/reference/sql-reference"
|
||||
"destination": "/chdb/reference/sql-reference"
|
||||
},
|
||||
{
|
||||
"source": "/clickhouse-operator/guides/configuration",
|
||||
@@ -415,6 +251,10 @@
|
||||
"source": "/cloud-quick-start",
|
||||
"destination": "/get-started/setup/cloud"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/bestpractices",
|
||||
"destination": "/products/cloud/guides/best-practices"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/bestpractices/asynchronous-inserts",
|
||||
"destination": "/concepts/best-practices/use-materialized-views"
|
||||
@@ -737,27 +577,27 @@
|
||||
},
|
||||
{
|
||||
"source": "/cloud/manage/api/keys-api-reference",
|
||||
"destination": "/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/manage/api/members-api-reference",
|
||||
"destination": "/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/manage/api/organizations-api-reference",
|
||||
"destination": "/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/manage/api/services-api-reference",
|
||||
"destination": "/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/manage/api/swagger",
|
||||
"destination": "/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/manage/api/usageCost-api-reference",
|
||||
"destination": "/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/cloud/manage/backups",
|
||||
@@ -2303,6 +2143,10 @@
|
||||
"source": "/faq/general/",
|
||||
"destination": "/resources/support-center/knowledge-base/general-faqs"
|
||||
},
|
||||
{
|
||||
"source": "/faq/general/columnar-database",
|
||||
"destination": "/resources/support-center/knowledge-base/general-faqs/columnar-database"
|
||||
},
|
||||
{
|
||||
"source": "/faq/general/concurrency",
|
||||
"destination": "/resources/support-center/knowledge-base/general-faqs/concurrency"
|
||||
@@ -5601,23 +5445,23 @@
|
||||
},
|
||||
{
|
||||
"source": "/jp/cloud/manage/api/keys-api-reference",
|
||||
"destination": "/ja/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/jp/cloud/manage/api/members-api-reference",
|
||||
"destination": "/ja/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/jp/cloud/manage/api/organizations-api-reference",
|
||||
"destination": "/ja/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/jp/cloud/manage/api/services-api-reference",
|
||||
"destination": "/ja/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/jp/cloud/manage/api/usageCost-api-reference",
|
||||
"destination": "/ja/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/jp/cloud/manage/backups",
|
||||
@@ -15147,6 +14991,162 @@
|
||||
"source": "/jpgines/table-engines/integrations/google-cloud-storage",
|
||||
"destination": "/ja/reference/functions/table-functions/gcs"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/Insert_select_settings_tuning",
|
||||
"destination": "/resources/support-center/knowledge-base/performance-optimization/insert-select-settings-tuning"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/are_materialized_views_inserted_asynchronously",
|
||||
"destination": "/resources/support-center/knowledge-base/materialized-views/are-materialized-views-inserted-asynchronously"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/async_vs_optimize_read_in_order",
|
||||
"destination": "/resources/support-center/knowledge-base/performance-optimization/async-vs-optimize-read-in-order"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/backing_up_a_specific_partition",
|
||||
"destination": "/resources/support-center/knowledge-base/data-management/backing-up-a-specific-partition"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/calculate_ratio_of_zero_sparse_serialization",
|
||||
"destination": "/resources/support-center/knowledge-base/data-management/calculate-ratio-of-zero-sparse-serialization"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/certificate_verify_failed_error",
|
||||
"destination": "/resources/support-center/knowledge-base/troubleshooting/certificate-verify-failed-error"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/check_query_processing_time_only",
|
||||
"destination": "/resources/support-center/knowledge-base/performance-optimization/check-query-processing-time-only"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/check_users_roles",
|
||||
"destination": "/resources/support-center/knowledge-base/security/check-users-roles"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/clickhouse_cloud_api_usage",
|
||||
"destination": "/resources/support-center/knowledge-base/cloud-services/clickhouse-cloud-api-usage"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/collect-and-draw-traces",
|
||||
"destination": "/resources/support-center/knowledge-base/monitoring-debugging/collect-and-draw-traces"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/compare_resultsets",
|
||||
"destination": "/resources/support-center/knowledge-base/queries-sql/compare-resultsets"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/configure_cap_ipc_lock_and_cap_sys_nice_in_docker",
|
||||
"destination": "/resources/support-center/knowledge-base/troubleshooting/configure-cap-ipc-lock-and-cap-sys-nice-in-docker"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/connection_timeout_remote_remoteSecure",
|
||||
"destination": "/resources/support-center/knowledge-base/troubleshooting/connection-timeout-remote-remoteSecure"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/dictionary_using_strings",
|
||||
"destination": "/resources/support-center/knowledge-base/data-management/dictionary-using-strings"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/difference_between_official_builds_and_3rd_party",
|
||||
"destination": "/resources/support-center/knowledge-base/setup-installation/difference-between-official-builds-and-3rd-party"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/finding_expensive_queries_by_memory_usage",
|
||||
"destination": "/resources/support-center/knowledge-base/performance-optimization/finding-expensive-queries-by-memory-usage"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/how_to_display_queries_using_MV",
|
||||
"destination": "/resources/support-center/knowledge-base/materialized-views/how-to-display-queries-using-mv"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/how_to_use_parametrised_views",
|
||||
"destination": "/resources/support-center/knowledge-base/materialized-views/how-to-use-parametrised-views"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/importing_and_working_with_JSON_array_objects",
|
||||
"destination": "/resources/support-center/knowledge-base/data-import-export/importing-and-working-with-json-array-objects"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/json_extract_example",
|
||||
"destination": "/resources/support-center/knowledge-base/data-import-export/json-extract-example"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/json_simple_example",
|
||||
"destination": "/resources/support-center/knowledge-base/data-import-export/json-simple-example"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/maximum_number_of_tables_and_databases",
|
||||
"destination": "/resources/support-center/knowledge-base/configuration-settings/maximum-number-of-tables-and-databases"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/optimize_final_vs_final",
|
||||
"destination": "/resources/support-center/knowledge-base/performance-optimization/optimize-final-vs-final"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/part_intersects_previous_part",
|
||||
"destination": "/resources/support-center/knowledge-base/troubleshooting/part-intersects-previous-part"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/projection_example",
|
||||
"destination": "/resources/support-center/knowledge-base/materialized-views/projection-example"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/python_http_requests",
|
||||
"destination": "/resources/support-center/knowledge-base/integrations/python-http-requests"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/query_max_execution_time",
|
||||
"destination": "/resources/support-center/knowledge-base/performance-optimization/query-max-execution-time"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/read_consistency",
|
||||
"destination": "/resources/support-center/knowledge-base/data-management/read-consistency"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/recreate_table_across_terminals",
|
||||
"destination": "/resources/support-center/knowledge-base/tables-schema/recreate-table-across-terminals"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/s3_export_data_year_month_folders",
|
||||
"destination": "/resources/support-center/knowledge-base/data-import-export/s3-export-data-year-month-folders"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/schema_migration_tools",
|
||||
"destination": "/resources/support-center/knowledge-base/tables-schema/schema-migration-tools"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/send_logs_level",
|
||||
"destination": "/resources/support-center/knowledge-base/monitoring-debugging/send-logs-level"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/terraform_example",
|
||||
"destination": "/resources/support-center/knowledge-base/integrations/terraform-example"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/view_number_of_active_mutations",
|
||||
"destination": "/resources/support-center/knowledge-base/monitoring-debugging/view-number-of-active-mutations"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/when_is_ttl_applied",
|
||||
"destination": "/resources/support-center/knowledge-base/data-management/when-is-ttl-applied"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/why_default_logging_verbose",
|
||||
"destination": "/resources/support-center/knowledge-base/monitoring-debugging/why-default-logging-verbose"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/why_is_my_primary_key_not_used",
|
||||
"destination": "/resources/support-center/knowledge-base/performance-optimization/why-is-my-primary-key-not-used"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/why_recommend_clickhouse_keeper_over_zookeeper",
|
||||
"destination": "/resources/support-center/knowledge-base/general-faqs/why-recommend-clickhouse-keeper-over-zookeeper"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/windows_active_directory_to_ch_roles",
|
||||
"destination": "/resources/support-center/knowledge-base/security/windows-active-directory-to-ch-roles"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/ODBC-authentication-failed-error-using-PowerBI-CH-connector",
|
||||
"destination": "/resources/support-center/knowledge-base/integrations/ODBC-authentication-failed-error-using-PowerBI-CH-connector"
|
||||
@@ -15375,6 +15375,10 @@
|
||||
"source": "/knowledgebase/olap",
|
||||
"destination": "/resources/support-center/knowledge-base/general-faqs/olap"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/opt-out-core-dump-collection",
|
||||
"destination": "/resources/support-center/knowledge-base/cloud-services/opt-out-core-dump-collection"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/oracle-odbc",
|
||||
"destination": "/resources/support-center/knowledge-base/integrations/oracle-odbc"
|
||||
@@ -15407,14 +15411,26 @@
|
||||
"source": "/knowledgebase/python-clickhouse-connect-example",
|
||||
"destination": "/resources/support-center/knowledge-base/integrations/python-clickhouse-connect-example"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/recovering-from-corrupt-keeper-snapshot",
|
||||
"destination": "/resources/support-center/knowledge-base/troubleshooting/recovering-from-corrupt-keeper-snapshot"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/remove-default-user",
|
||||
"destination": "/resources/support-center/knowledge-base/security/remove-default-user"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/restore-replica-after-storage-failure",
|
||||
"destination": "/resources/support-center/knowledge-base/troubleshooting/restore-replica-after-storage-failure"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/row-column-policy",
|
||||
"destination": "/resources/support-center/knowledge-base/security/row-column-policy"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/runbook-json",
|
||||
"destination": "/resources/support-center/knowledge-base/tables-schema/runbook-json"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/search-across-node-for-tables-with-a-wildcard",
|
||||
"destination": "/resources/support-center/knowledge-base/tables-schema/search-across-node-for-tables-with-a-wildcard"
|
||||
@@ -15431,6 +15447,10 @@
|
||||
"source": "/knowledgebase/unable-to-access-cloud-service",
|
||||
"destination": "/resources/support-center/knowledge-base/cloud-services/unable-to-access-cloud-service"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/understanding-part-types-and-storage-formats",
|
||||
"destination": "/resources/support-center/knowledge-base/data-management/understanding-part-types-and-storage-formats"
|
||||
},
|
||||
{
|
||||
"source": "/knowledgebase/use-clickhouse-for-log-analytics",
|
||||
"destination": "/resources/support-center/knowledge-base/general-faqs/use-clickhouse-for-log-analytics"
|
||||
@@ -16189,23 +16209,23 @@
|
||||
},
|
||||
{
|
||||
"source": "/ko/cloud/manage/api/keys-api-reference",
|
||||
"destination": "/ko/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ko/cloud/manage/api/members-api-reference",
|
||||
"destination": "/ko/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ko/cloud/manage/api/organizations-api-reference",
|
||||
"destination": "/ko/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ko/cloud/manage/api/services-api-reference",
|
||||
"destination": "/ko/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ko/cloud/manage/api/usageCost-api-reference",
|
||||
"destination": "/ko/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ko/cloud/manage/backups",
|
||||
@@ -26255,6 +26275,10 @@
|
||||
"source": "/operations/settings/merge-tree-settings",
|
||||
"destination": "/reference/settings/merge-tree-settings"
|
||||
},
|
||||
{
|
||||
"source": "/operations/settings/oom-canary",
|
||||
"destination": "/concepts/features/performance/troubleshoot/oom-canary"
|
||||
},
|
||||
{
|
||||
"source": "/operations/settings/overview",
|
||||
"destination": "/concepts/features/configuration/settings/overview"
|
||||
@@ -28301,23 +28325,23 @@
|
||||
},
|
||||
{
|
||||
"source": "/ru/cloud/manage/api/keys-api-reference",
|
||||
"destination": "/ru/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ru/cloud/manage/api/members-api-reference",
|
||||
"destination": "/ru/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ru/cloud/manage/api/organizations-api-reference",
|
||||
"destination": "/ru/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ru/cloud/manage/api/services-api-reference",
|
||||
"destination": "/ru/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ru/cloud/manage/api/usageCost-api-reference",
|
||||
"destination": "/ru/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/ru/cloud/manage/backups",
|
||||
@@ -41865,23 +41889,23 @@
|
||||
},
|
||||
{
|
||||
"source": "/zh/cloud/manage/api/keys-api-reference",
|
||||
"destination": "/zh/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/zh/cloud/manage/api/members-api-reference",
|
||||
"destination": "/zh/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/zh/cloud/manage/api/organizations-api-reference",
|
||||
"destination": "/zh/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/zh/cloud/manage/api/services-api-reference",
|
||||
"destination": "/zh/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/zh/cloud/manage/api/usageCost-api-reference",
|
||||
"destination": "/zh/api-reference/organization/get-list-of-available-organizations"
|
||||
"destination": "/products/cloud/api-reference/organization/get-list-of-available-organizations"
|
||||
},
|
||||
{
|
||||
"source": "/zh/cloud/manage/backups",
|
||||
@@ -51430,5 +51454,9 @@
|
||||
{
|
||||
"source": "/zh/resources/about/history",
|
||||
"destination": "https://clickhouse.com/company/our-story"
|
||||
},
|
||||
{
|
||||
"source": "/api-reference/:path*",
|
||||
"destination": "/products/cloud/api-reference/:path*"
|
||||
}
|
||||
]
|
||||
|
||||
+343
-3
@@ -117,6 +117,231 @@ body[data-scroll-locked] {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
|
||||
/* Agent-assisted setup callout, ported from the Docusaurus AgentPrompt
|
||||
component. The `ch-` prefix keeps these rules isolated from Mintlify. */
|
||||
.ch-agent-prompt-wrapper {
|
||||
--agent-accent: #FBFF46;
|
||||
--agent-accent-bg: #FFFFE8;
|
||||
--agent-text: #161517;
|
||||
--agent-text-muted: #696E79;
|
||||
--agent-prompt-bg: #FFFFFF;
|
||||
--agent-prompt-border: #FCFF74;
|
||||
--agent-button-bg: #FBFF46;
|
||||
--agent-button-bg-hover: #EEF400;
|
||||
--agent-button-text: #161517;
|
||||
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
margin: 1.25rem 0 1.75rem;
|
||||
padding: 14px 16px;
|
||||
border: 1px solid var(--agent-accent);
|
||||
border-radius: 8px;
|
||||
background: var(--agent-accent-bg);
|
||||
}
|
||||
|
||||
.ch-agent-prompt-main-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-left,
|
||||
.ch-agent-prompt-copy-button {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-title {
|
||||
color: var(--agent-text);
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-prompt-area {
|
||||
flex: 1 1 auto;
|
||||
min-width: 0;
|
||||
overflow-x: auto;
|
||||
padding: 6px 10px;
|
||||
border: 1px solid var(--agent-prompt-border);
|
||||
border-radius: 6px;
|
||||
background: var(--agent-prompt-bg);
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-prompt-area::-webkit-scrollbar {
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-prompt-area::-webkit-scrollbar-thumb {
|
||||
border-radius: 3px;
|
||||
background: #FCFF74;
|
||||
}
|
||||
|
||||
.prose .ch-agent-prompt-prompt-text,
|
||||
.ch-agent-prompt-prompt-text {
|
||||
display: block;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
color: var(--agent-text);
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
font-size: 0.8125rem;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-copy-button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 7px 12px;
|
||||
border: 1px solid var(--agent-accent);
|
||||
border-radius: 6px;
|
||||
background: var(--agent-button-bg);
|
||||
color: var(--agent-button-text);
|
||||
cursor: pointer;
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 600;
|
||||
transition: background-color 120ms ease, transform 80ms ease;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-copy-button:hover {
|
||||
background: var(--agent-button-bg-hover);
|
||||
}
|
||||
|
||||
.ch-agent-prompt-copy-button:active {
|
||||
transform: translateY(1px);
|
||||
}
|
||||
|
||||
.ch-agent-prompt-copy-button:focus-visible,
|
||||
.ch-agent-prompt-outline-summary:focus-visible {
|
||||
outline: 2px solid #135BE6;
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-sub-row {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 8px;
|
||||
padding-left: 2px;
|
||||
font-size: 0.8125rem;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-description {
|
||||
color: var(--agent-text-muted);
|
||||
}
|
||||
|
||||
.prose a.ch-agent-prompt-repository-link,
|
||||
.ch-agent-prompt-repository-link {
|
||||
color: #135BE6 !important;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-outline {
|
||||
margin-top: 2px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px dashed var(--agent-prompt-border);
|
||||
}
|
||||
|
||||
.ch-agent-prompt-outline-summary {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 2px 0;
|
||||
border-radius: 3px;
|
||||
color: var(--agent-text);
|
||||
cursor: pointer;
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 600;
|
||||
list-style: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-outline-summary::-webkit-details-marker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-outline-summary:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-outline-chevron {
|
||||
flex-shrink: 0;
|
||||
transition: transform 150ms ease;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-outline[open] > .ch-agent-prompt-outline-summary > .ch-agent-prompt-outline-chevron {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.prose .ch-agent-prompt-outline-list,
|
||||
.ch-agent-prompt-outline-list {
|
||||
margin: 8px 0 2px;
|
||||
padding-left: 1.4rem;
|
||||
color: var(--agent-text-muted);
|
||||
font-size: 0.8125rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.prose .ch-agent-prompt-outline-list li,
|
||||
.ch-agent-prompt-outline-list li {
|
||||
margin: 2px 0;
|
||||
padding-left: 2px;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-outline-list li::marker {
|
||||
color: var(--agent-text);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
html.dark .ch-agent-prompt-wrapper,
|
||||
:is(.dark) .ch-agent-prompt-wrapper {
|
||||
--agent-accent: #FCFF74;
|
||||
--agent-accent-bg: rgba(251, 255, 70, 0.06);
|
||||
--agent-text: #FFFFFF;
|
||||
--agent-text-muted: #DFDFDF;
|
||||
--agent-prompt-bg: #1D1D1D;
|
||||
--agent-prompt-border: rgba(251, 255, 70, 0.35);
|
||||
--agent-button-bg: #FCFF74;
|
||||
--agent-button-bg-hover: #FBFF46;
|
||||
--agent-button-text: #151515;
|
||||
}
|
||||
|
||||
html.dark .prose a.ch-agent-prompt-repository-link,
|
||||
:is(.dark) .prose a.ch-agent-prompt-repository-link {
|
||||
color: #FCFF74 !important;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.ch-agent-prompt-main-row {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-prompt-area {
|
||||
order: 3;
|
||||
width: 100%;
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-copy-button {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-prompt-text {
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.ch-agent-prompt-sub-row {
|
||||
align-items: flex-start;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
/* The secondary navbar (`#navbar-transition-maple`) and the fixed sidebar
|
||||
(`#sidebar`) both reserve 40px above themselves for the announcement
|
||||
banner (Tailwind `lg:mt-10` / `top-10`). The banner is `position: fixed`
|
||||
@@ -613,9 +838,13 @@ html:not(.dark) .pagination-prev:hover {
|
||||
flex: 1 1 auto;
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
/* Small breathing room so the first nav item isn't flush against the
|
||||
pinned search row, and so scrolled content doesn't butt the top edge. */
|
||||
padding-top: 0.5rem;
|
||||
/* Gap below the pinned search + Ask AI row. Use margin, not padding: the
|
||||
scroll container's scrollbar track spans its whole padding box, so
|
||||
padding-top would leave the scrollbar flush against — visually touching —
|
||||
the search/Ask AI buttons. A margin pushes the scroll box itself (and
|
||||
therefore the top of its scrollbar) down below that row, so the scrollbar
|
||||
no longer exceeds the first nav item. */
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
/* Hide the chat assistant textarea and its floating-input wrapper */
|
||||
@@ -1025,6 +1254,14 @@ html.dark .dark\:hover\:bg-primary-light\/10:hover {
|
||||
background-color: rgba(253, 255, 117, 0.1) !important;
|
||||
}
|
||||
|
||||
/* Card CTAs use a group-hover dark variant. Keep that CTA readable when the
|
||||
card body is hovered instead of allowing the dark theme token to resolve
|
||||
to a near-black color. */
|
||||
html.dark .card:hover [data-component-part="card-cta"] button,
|
||||
:is(.dark) .card:hover [data-component-part="card-cta"] button {
|
||||
color: #FDFF75 !important;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
Card Icon Color Override
|
||||
============================================ */
|
||||
@@ -2031,6 +2268,15 @@ h5#sidebar-title {
|
||||
/* 768px */
|
||||
}
|
||||
|
||||
/* Custom explorers should use the full available width while the sidebar is
|
||||
hidden at intermediate tablet sizes; otherwise the 768px prose cap leaves a
|
||||
large unused area on the right. */
|
||||
@media (min-width: 768px) and (max-width: 1023px) {
|
||||
html[data-page-mode="custom"] #content-area {
|
||||
max-width: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Reduce outer container padding */
|
||||
#content-container {
|
||||
border-radius: 15px;
|
||||
@@ -2911,3 +3157,97 @@ a.mobile-nav-tabs-item[href$="/products/clickhouse-private"],
|
||||
a.mobile-nav-tabs-item[href$="/products/clickhouse-private/index"] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
Sidebar maturity badges before the entry text
|
||||
============================================ */
|
||||
|
||||
/* API reference sidebar entries carry maturity pills — `tag` frontmatter
|
||||
(Beta / Private preview, rendered as .nav-tag-pill) and `deprecated`
|
||||
frontmatter (a plain pill div). Both are div wrappers that follow the
|
||||
title <span> inside the entry's flex-wrap container; the title is the
|
||||
only non-div child there, so ordering div children first moves every
|
||||
pill in front of the text without touching the METHOD pill (which
|
||||
lives outside this container, as a direct child of the <a>). */
|
||||
#sidebar a .flex-wrap > div {
|
||||
order: -1;
|
||||
}
|
||||
|
||||
/* Cross out the sidebar entry text of deprecated endpoints (matching the
|
||||
Swagger convention). The deprecated pill rendered from `deprecated: true`
|
||||
frontmatter carries no semantic class or data attribute — the only stable
|
||||
hook is Mintlify's hard-coded pill background utility (light `bg-[#FDEAD8]`,
|
||||
always present in the class list even in dark mode). The title is the
|
||||
.break-words span; the METHOD pill spans carry no .break-words. */
|
||||
#sidebar a:has(div[class*="bg-[#FDEAD8]"]) span.break-words {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
Endpoint maturity pill next to the page title
|
||||
============================================ */
|
||||
|
||||
/* Generated Cloud API reference pages carry their maturity badge as body
|
||||
content (`[data-endpoint-badge]`, written by
|
||||
`ci/jobs/scripts/docs/generate_cloud_api_reference.py`). Mintlify shows
|
||||
the `deprecated` pill next to the page title but has nothing equivalent
|
||||
for `tag` badges, so a pseudo-element paints the pill in that slot from
|
||||
pure CSS — present at first paint, no hydration shift (a custom-JS clone
|
||||
was tried and popped in visibly). The in-body badge is hidden here; it
|
||||
stays in the MDX for contexts without this stylesheet (markdown exports). */
|
||||
#content-area:has(.mdx-content [data-endpoint-badge]) #page-title::after {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin-left: 0.75rem;
|
||||
padding: 0.125rem 0.375rem;
|
||||
border-radius: 0.375rem;
|
||||
font-size: 0.75rem;
|
||||
line-height: 1rem;
|
||||
font-weight: 600;
|
||||
color: #2563EB;
|
||||
background-color: rgba(37, 99, 235, 0.1);
|
||||
}
|
||||
.dark #content-area:has(.mdx-content [data-endpoint-badge]) #page-title::after,
|
||||
:is(.dark) #content-area:has(.mdx-content [data-endpoint-badge]) #page-title::after {
|
||||
color: #60A5FA;
|
||||
background-color: rgba(96, 165, 250, 0.14);
|
||||
}
|
||||
#content-area:has(.mdx-content [data-endpoint-badge="Beta"]) #page-title::after {
|
||||
content: "Beta";
|
||||
}
|
||||
#content-area:has(.mdx-content [data-endpoint-badge="Private preview"]) #page-title::after {
|
||||
content: "Private preview";
|
||||
color: #9333EA;
|
||||
background-color: rgba(147, 51, 234, 0.1);
|
||||
}
|
||||
.dark #content-area:has(.mdx-content [data-endpoint-badge="Private preview"]) #page-title::after,
|
||||
:is(.dark) #content-area:has(.mdx-content [data-endpoint-badge="Private preview"]) #page-title::after {
|
||||
color: #C084FC;
|
||||
background-color: rgba(192, 132, 252, 0.14);
|
||||
}
|
||||
.mdx-content [data-endpoint-badge] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
Compact integration table logos
|
||||
============================================ */
|
||||
|
||||
.integration-table-logo {
|
||||
display: inline-block;
|
||||
width: 1.5rem !important;
|
||||
height: 1.5rem !important;
|
||||
max-width: 1.5rem !important;
|
||||
margin: 0 0.5rem 0 0 !important;
|
||||
padding: 0.2rem;
|
||||
vertical-align: middle;
|
||||
object-fit: contain;
|
||||
background: #fff;
|
||||
border: 1px solid rgba(0, 0, 0, 0.08);
|
||||
border-radius: 0.375rem;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
td:has(> .integration-table-logo) {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -350,6 +350,7 @@ import { TrackedLink } from "/snippets/ar/components/GalaxyTrackedLink/GalaxyTra
|
||||
|
||||
<Note>
|
||||
**يؤدي هذا إلى ربط ملف السجل مباشرةً داخل الحاوية. ويتم ذلك لأغراض الاختبار باستخدام بيانات تجريبية ثابتة.**
|
||||
|
||||
</Note>
|
||||
</Step>
|
||||
|
||||
|
||||
@@ -258,6 +258,7 @@ import { TrackedLink } from "/snippets/ar/components/GalaxyTrackedLink/GalaxyTra
|
||||
|
||||
<Note>
|
||||
**يؤدي ذلك إلى ربط ملف السجل مباشرةً داخل الحاوية. ويُستخدم هذا لأغراض الاختبار مع بيانات تجريبية ثابتة.**
|
||||
|
||||
</Note>
|
||||
|
||||
## التحقق من السجلات في HyperDX
|
||||
|
||||
@@ -24,10 +24,10 @@ import { Image } from "/snippets/ar/components/Image.jsx";
|
||||
|
||||
إذا كانت حالة الاستخدام لديك تتضمن أداة معيّنة لا يتوفر لها برنامج تشغيل ClickHouse أصلي، وكنت ترغب في استخدامها عبر واجهة MySQL ووجدت بعض حالات عدم التوافق، فيُرجى [إنشاء issue](https://github.com/ClickHouse/ClickHouse/issues) في مستودع ClickHouse.
|
||||
|
||||
::::note
|
||||
<Note>
|
||||
لدعم لهجة SQL الخاصة بأدوات ذكاء الأعمال المذكورة أعلاه بشكل أفضل، تُشغّل واجهة MySQL في ClickHouse استعلامات SELECT ضمنيًا مع الإعداد [prefer_column_name_to_alias = 1](/ar/reference/settings/session-settings#prefer_column_name_to_alias).
|
||||
لا يمكن تعطيل هذا، وقد يؤدي في حالات نادرة إلى اختلاف في السلوك بين الاستعلامات المرسلة إلى واجهتَي الاستعلام العادية وMySQL في ClickHouse.
|
||||
::::
|
||||
</Note>
|
||||
|
||||
<div id="enabling-the-mysql-interface-on-clickhouse-cloud">
|
||||
## تمكين واجهة MySQL على ClickHouse Cloud
|
||||
|
||||
@@ -2215,10 +2215,6 @@
|
||||
}
|
||||
],
|
||||
"root": "ar/products/cloud/guides/index"
|
||||
},
|
||||
{
|
||||
"group": "مرجع واجهة برمجة التطبيقات",
|
||||
"openapi": "https://api.clickhouse.cloud/v1"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -13,6 +13,7 @@ import { Image } from "/snippets/ar/components/Image.jsx";
|
||||
|
||||
<Info>
|
||||
**يمكن تطبيق الدرس الموضّح في هذا الدليل على تطبيقات تخزين الكائنات الأخرى التي تملك دوال جداول مخصّصة لها، مثل [GCS](/ar/reference/functions/table-functions/gcs) و[Azure Blob storage](/ar/reference/functions/table-functions/azureBlobStorage).**
|
||||
|
||||
</Info>
|
||||
|
||||
قبل ضبط الخيوط وأحجام الكتل لتحسين أداء الإدراج، نوصي بأن يفهم المستخدمون آلية إدراج البيانات في S3. إذا كنت على دراية بهذه الآلية، أو كنت تريد فقط بعض النصائح السريعة، فانتقل إلى [المثال](/ar/integrations/connectors/data-ingestion/AWS/performance#example-dataset) أدناه.
|
||||
|
||||
@@ -59,11 +59,12 @@ import CommunityMaintainedBadge from "/snippets/ar/components/CommunityMaintaine
|
||||
|
||||
8. إذا أظهرت نتيجة **Ping Server** أنه يمكن الوصول إلى الخادم، فانقر على **Connect** للاتصال بخادم قاعدة البيانات.
|
||||
|
||||
:::tip
|
||||
<Tip>
|
||||
راجع [إصلاح مشكلات الاتصال](https://www.dbvis.com/docs/ug/troubleshooting/fixing-connection-issues/) للاطلاع على بعض النصائح إذا واجهت مشكلات في الاتصال بقاعدة البيانات.
|
||||
</Tip>
|
||||
|
||||
<div id="learn-more">
|
||||
## تعرّف على المزيد
|
||||
</div>
|
||||
|
||||
لمزيد من المعلومات حول DbVisualizer، راجع [وثائق DbVisualizer](https://www.dbvis.com/docs/ug/).
|
||||
لمزيد من المعلومات حول DbVisualizer، راجع [وثائق DbVisualizer](https://www.dbvis.com/docs/ug/).
|
||||
|
||||
@@ -186,7 +186,6 @@ SELECT tokens('abc def', 'ngrams', 3);
|
||||
*العمل مع مدخلات غير ASCII.*
|
||||
يمكن إنشاء فهرس نصي على بيانات نصية بأي لغة وبأي مجموعة محارف.
|
||||
بالنسبة إلى النصوص غير ASCII، يُوصى باستخدام المُجزِّئ `asciiCJK` لأنه يتعامل بشكل صحيح مع حدود الكلمات في Unicode، بما في ذلك محارف CJK.
|
||||
:::
|
||||
|
||||
**وسيطة المعالج المسبق (اختيارية)**. يشير المعالج المسبق إلى تعبير يُطبَّق على سلسلة الإدخال قبل تقسيمها إلى رموز.
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@ sudo ./llvm.sh 21
|
||||
</div>
|
||||
|
||||
<Note>
|
||||
تُعد Rust تبعية اختيارية لـ ClickHouse.
|
||||
إذا لم تكن Rust مثبّتة، فستُستبعَد بعض ميزات ClickHouse من عملية البناء.
|
||||
تُعد Rust تبعية اختيارية لـ ClickHouse.
|
||||
إذا لم تكن Rust مثبّتة، فستُستبعَد بعض ميزات ClickHouse من عملية البناء.
|
||||
</Note>
|
||||
|
||||
أولًا، اتبع الخطوات الواردة في [وثائق Rust الرسمية](https://www.rust-lang.org/tools/install) لتثبيت `rustup`.
|
||||
@@ -83,7 +83,7 @@ rustup component add rust-src
|
||||
```
|
||||
|
||||
<div id="build-clickhouse">
|
||||
## بناء ClickHouse
|
||||
## بناء ClickHouse
|
||||
</div>
|
||||
|
||||
نوصي بإنشاء مجلد منفصل باسم `build` داخل `ClickHouse` ليحتوي على جميع نواتج البناء:
|
||||
@@ -111,7 +111,7 @@ cmake -D CMAKE_BUILD_TYPE=Debug ..
|
||||
```
|
||||
|
||||
<Note>
|
||||
إذا كنت ترغب في استخدام مُصحِّح أخطاء مثل gdb، فأضِف `-D DEBUG_O_LEVEL="0"` إلى الأمر أعلاه لإزالة جميع تحسينات المصرّف، إذ قد تؤثر في قدرة gdb على عرض المتغيرات أو الوصول إليها.
|
||||
إذا كنت ترغب في استخدام مُصحِّح أخطاء مثل gdb، فأضِف `-D DEBUG_O_LEVEL="0"` إلى الأمر أعلاه لإزالة جميع تحسينات المصرّف، إذ قد تؤثر في قدرة gdb على عرض المتغيرات أو الوصول إليها.
|
||||
</Note>
|
||||
|
||||
شغّل ninja لإتمام عملية البناء:
|
||||
@@ -133,17 +133,18 @@ ninja -j 1 clickhouse
|
||||
```
|
||||
|
||||
<Note>
|
||||
تُعدّ `clickhouse-server` و`clickhouse-client` والملفات التنفيذية المشابهة روابط رمزية في الدليل `programs/` تشير إلى الملف التنفيذي `clickhouse` بعد اكتمال البناء.
|
||||
|
||||
:::tip
|
||||
يوفّر CMake اختصارات للأوامر أعلاه:
|
||||
|
||||
```sh
|
||||
cmake -S . -B build # تهيئة البناء، شغّل الأمر من الدليل الجذري للمستودع
|
||||
cmake --build build # تجميع
|
||||
```
|
||||
تُعدّ `clickhouse-server` و`clickhouse-client` والملفات التنفيذية المشابهة روابط رمزية في الدليل `programs/` تشير إلى الملف التنفيذي `clickhouse` بعد اكتمال البناء.
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
يوفّر CMake اختصارات للأوامر أعلاه:
|
||||
|
||||
```sh
|
||||
cmake -S . -B build # تهيئة البناء، شغّل الأمر من الدليل الجذري للمستودع
|
||||
cmake --build build # تجميع
|
||||
```
|
||||
</Tip>
|
||||
|
||||
<div id="running-the-clickhouse-executable">
|
||||
## تشغيل الملف التنفيذي لـ ClickHouse
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -198,7 +198,7 @@ function_config.use_chdb('length', 'substring')
|
||||
function_config.use_pandas('upper', 'lower')
|
||||
```
|
||||
|
||||
See [Function Config](/products/chdb/configuration/function-config) for details.
|
||||
See [Function Config](/chdb/configuration/function-config) for details.
|
||||
|
||||
---
|
||||
|
||||
@@ -304,5 +304,5 @@ config.use_performance_mode()
|
||||
<Tip>
|
||||
**Performance Mode**
|
||||
|
||||
If you are running heavy aggregation workloads and don't need exact pandas output compatibility (row order, MultiIndex, dtype corrections), consider using [Performance Mode](/products/chdb/configuration/performance-mode). It automatically sets the engine to `chdb` and removes all pandas compatibility overhead.
|
||||
If you are running heavy aggregation workloads and don't need exact pandas output compatibility (row order, MultiIndex, dtype corrections), consider using [Performance Mode](/chdb/configuration/performance-mode). It automatically sets the engine to `chdb` and removes all pandas compatibility overhead.
|
||||
</Tip>
|
||||
@@ -62,7 +62,7 @@ config.set_log_format("verbose") # More details
|
||||
config.enable_debug() # Sets DEBUG level + verbose format
|
||||
```
|
||||
|
||||
See [Logging](/products/chdb/debugging/logging) for details.
|
||||
See [Logging](/chdb/debugging/logging) for details.
|
||||
|
||||
### Cache Configuration {#cache}
|
||||
|
||||
@@ -102,7 +102,7 @@ config.set_cross_datastore_engine('pandas')
|
||||
print(config.execution_engine)
|
||||
```
|
||||
|
||||
See [Execution Engine](/products/chdb/configuration/execution-engine) for details.
|
||||
See [Execution Engine](/chdb/configuration/execution-engine) for details.
|
||||
|
||||
### Compatibility Mode {#compat-mode}
|
||||
|
||||
@@ -119,7 +119,7 @@ config.use_pandas_compat()
|
||||
print(config.compat_mode) # 'pandas' or 'performance'
|
||||
```
|
||||
|
||||
See [Performance Mode](/products/chdb/configuration/performance-mode) for details.
|
||||
See [Performance Mode](/chdb/configuration/performance-mode) for details.
|
||||
|
||||
### Profiling Configuration {#profiling}
|
||||
|
||||
@@ -135,7 +135,7 @@ config.set_profiling_enabled(False)
|
||||
print(config.profiling_enabled)
|
||||
```
|
||||
|
||||
See [Profiling](/products/chdb/debugging/profiling) for details.
|
||||
See [Profiling](/chdb/debugging/profiling) for details.
|
||||
|
||||
### Dtype Correction {#dtype}
|
||||
|
||||
@@ -259,8 +259,8 @@ config.enable_debug() # See what operations are used
|
||||
|
||||
## Related Documentation {#related}
|
||||
|
||||
- [Execution Engine](/products/chdb/configuration/execution-engine) - Engine selection details
|
||||
- [Performance Mode](/products/chdb/configuration/performance-mode) - SQL-first mode for maximum throughput
|
||||
- [Function Config](/products/chdb/configuration/function-config) - Per-function engine configuration
|
||||
- [Logging](/products/chdb/debugging/logging) - Logging configuration
|
||||
- [Profiling](/products/chdb/debugging/profiling) - Performance profiling
|
||||
- [Execution Engine](/chdb/configuration/execution-engine) - Engine selection details
|
||||
- [Performance Mode](/chdb/configuration/performance-mode) - SQL-first mode for maximum throughput
|
||||
- [Function Config](/chdb/configuration/function-config) - Per-function engine configuration
|
||||
- [Logging](/chdb/debugging/logging) - Logging configuration
|
||||
- [Profiling](/chdb/debugging/profiling) - Performance profiling
|
||||
+3
-3
@@ -278,6 +278,6 @@ detailed = ds[ds["val"] > 100].head(10)
|
||||
|
||||
## Related Documentation {#related}
|
||||
|
||||
- [Execution Engine](/products/chdb/configuration/execution-engine) — Engine selection (auto/chdb/pandas)
|
||||
- [Performance Guide](/products/chdb/guides/pandas-performance) — General optimization tips
|
||||
- [Key Differences from pandas](/products/chdb/guides/pandas-differences) — Behavioral differences
|
||||
- [Execution Engine](/chdb/configuration/execution-engine) — Engine selection (auto/chdb/pandas)
|
||||
- [Performance Guide](/chdb/guides/pandas-performance) — General optimization tips
|
||||
- [Key Differences from pandas](/chdb/guides/pandas-differences) — Behavioral differences
|
||||
+7
-7
@@ -83,7 +83,7 @@ ds = DataStore()
|
||||
| `from_random(rows, cols)` | Create with random data |
|
||||
| `run_sql(query)` | Create from SQL query |
|
||||
|
||||
See [Factory Methods](/products/chdb/datastore/factory-methods) for details.
|
||||
See [Factory Methods](/chdb/datastore/factory-methods) for details.
|
||||
|
||||
### Query Methods {#datastore-query}
|
||||
|
||||
@@ -103,11 +103,11 @@ See [Factory Methods](/products/chdb/datastore/factory-methods) for details.
|
||||
| `union(other, all=False)` | DataStore | Combine DataStores |
|
||||
| `when(cond, val)` | CaseWhen | CASE WHEN |
|
||||
|
||||
See [Query Building](/products/chdb/datastore/query-building) for details.
|
||||
See [Query Building](/chdb/datastore/query-building) for details.
|
||||
|
||||
### Pandas-compatible methods {#datastore-pandas}
|
||||
|
||||
See [Pandas Compatibility](/products/chdb/datastore/pandas-compat) for the complete list of 209 methods.
|
||||
See [Pandas Compatibility](/chdb/datastore/pandas-compat) for the complete list of 209 methods.
|
||||
|
||||
**Indexing:**
|
||||
`head()`, `tail()`, `sample()`, `loc`, `iloc`, `at`, `iat`, `query()`, `isin()`, `where()`, `mask()`, `get()`, `xs()`, `pop()`
|
||||
@@ -152,7 +152,7 @@ See [Pandas Compatibility](/products/chdb/datastore/pandas-compat) for the compl
|
||||
| `to_markdown()` | Markdown table |
|
||||
| `to_html()` | HTML table |
|
||||
|
||||
See [I/O Operations](/products/chdb/datastore/io) for details.
|
||||
See [I/O Operations](/chdb/datastore/io) for details.
|
||||
|
||||
### Debugging Methods {#datastore-debug}
|
||||
|
||||
@@ -161,7 +161,7 @@ See [I/O Operations](/products/chdb/datastore/io) for details.
|
||||
| `explain(verbose=False)` | Show execution plan |
|
||||
| `clear_cache()` | Clear cached results |
|
||||
|
||||
See [Debugging](/products/chdb/debugging/index) for details.
|
||||
See [Debugging](/chdb/debugging/index) for details.
|
||||
|
||||
### Magic Methods {#datastore-magic}
|
||||
|
||||
@@ -225,7 +225,7 @@ col = ds['name'] # Returns ColumnExpr
|
||||
| `.ip` | IP address operations | 9 methods |
|
||||
| `.geo` | Geo/distance operations | 14 methods |
|
||||
|
||||
See [Accessors](/products/chdb/datastore/accessors) for complete documentation.
|
||||
See [Accessors](/chdb/datastore/accessors) for complete documentation.
|
||||
|
||||
### Arithmetic Operations {#columnexpr-arithmetic}
|
||||
|
||||
@@ -412,7 +412,7 @@ F.row_number().over(order_by='date')
|
||||
F.lag('price', 1).over(partition_by='product', order_by='date')
|
||||
```
|
||||
|
||||
See [Aggregation](/products/chdb/datastore/aggregation#f-namespace) for details.
|
||||
See [Aggregation](/chdb/datastore/aggregation#f-namespace) for details.
|
||||
|
||||
### Field {#field-class}
|
||||
|
||||
+2
-2
@@ -201,7 +201,7 @@ Use `verbose=True` for more details:
|
||||
query.explain(verbose=True)
|
||||
```
|
||||
|
||||
See [Debugging: explain()](/products/chdb/debugging/explain) for complete documentation.
|
||||
See [Debugging: explain()](/chdb/debugging/explain) for complete documentation.
|
||||
|
||||
---
|
||||
|
||||
@@ -331,7 +331,7 @@ config.set_execution_engine('pandas')
|
||||
# All operations use pandas
|
||||
```
|
||||
|
||||
See [Configuration: Execution Engine](/products/chdb/configuration/execution-engine) for details.
|
||||
See [Configuration: Execution Engine](/chdb/configuration/execution-engine) for details.
|
||||
|
||||
---
|
||||
|
||||
@@ -29,7 +29,7 @@ DataStore uses **lazy evaluation** with **dual-engine execution**:
|
||||
2. **Smart Engine Selection**: QueryPlanner routes each segment to optimal engine (chDB for SQL, Pandas for complex ops)
|
||||
3. **Intermediate Caching**: Results cached at each step for fast iterative exploration
|
||||
|
||||
See [Execution Model](/products/chdb/datastore/execution-model) for details.
|
||||
See [Execution Model](/chdb/datastore/execution-model) for details.
|
||||
|
||||
## One-Line migration from Pandas {#migration}
|
||||
|
||||
@@ -58,7 +58,7 @@ DataStore delivers significant performance improvements over pandas, especially
|
||||
| Filter+Sort+Head | 1,537ms | 350ms | **4.40x** |
|
||||
| GroupBy agg | 406ms | 141ms | **2.88x** |
|
||||
|
||||
*Benchmark on 10M rows. See [benchmark script](https://github.com/chdb-io/chdb/blob/main/refs/benchmark_datastore_vs_pandas.py) and [Performance Guide](/products/chdb/guides/pandas-performance) for details.*
|
||||
*Benchmark on 10M rows. See [benchmark script](https://github.com/chdb-io/chdb/blob/main/refs/benchmark_datastore_vs_pandas.py) and [Performance Guide](/chdb/guides/pandas-performance) for details.*
|
||||
|
||||
## When to use DataStore {#when-to-use}
|
||||
|
||||
@@ -104,31 +104,31 @@ DataStore delivers significant performance improvements over pandas, especially
|
||||
## Documentation navigation {#navigation}
|
||||
|
||||
### Getting Started {#getting-started}
|
||||
- [Quickstart](/products/chdb/datastore/quickstart) - Installation and basic usage
|
||||
- [Migration from Pandas](/products/chdb/guides/migration-from-pandas) - Step-by-step migration guide
|
||||
- [Quickstart](/chdb/datastore/quickstart) - Installation and basic usage
|
||||
- [Migration from Pandas](/chdb/guides/migration-from-pandas) - Step-by-step migration guide
|
||||
|
||||
### API reference {#api-reference}
|
||||
- [Factory Methods](/products/chdb/datastore/factory-methods) - Creating DataStore from various sources
|
||||
- [Query Building](/products/chdb/datastore/query-building) - SQL-style query operations
|
||||
- [Pandas Compatibility](/products/chdb/datastore/pandas-compat) - All 209 pandas-compatible methods
|
||||
- [Accessors](/products/chdb/datastore/accessors) - String, DateTime, Array, JSON, URL, IP, Geo accessors
|
||||
- [Aggregation](/products/chdb/datastore/aggregation) - Aggregate and window functions
|
||||
- [I/O Operations](/products/chdb/datastore/io) - Reading and writing data
|
||||
- [Factory Methods](/chdb/datastore/factory-methods) - Creating DataStore from various sources
|
||||
- [Query Building](/chdb/datastore/query-building) - SQL-style query operations
|
||||
- [Pandas Compatibility](/chdb/datastore/pandas-compat) - All 209 pandas-compatible methods
|
||||
- [Accessors](/chdb/datastore/accessors) - String, DateTime, Array, JSON, URL, IP, Geo accessors
|
||||
- [Aggregation](/chdb/datastore/aggregation) - Aggregate and window functions
|
||||
- [I/O Operations](/chdb/datastore/io) - Reading and writing data
|
||||
|
||||
### Advanced topics {#advanced-topics}
|
||||
- [Execution Model](/products/chdb/datastore/execution-model) - Lazy evaluation and caching
|
||||
- [Class Reference](/products/chdb/datastore/class-reference) - Complete API reference
|
||||
- [Execution Model](/chdb/datastore/execution-model) - Lazy evaluation and caching
|
||||
- [Class Reference](/chdb/datastore/class-reference) - Complete API reference
|
||||
|
||||
### Configuration & debugging {#configuration-debugging}
|
||||
- [Configuration](/products/chdb/configuration/index) - All configuration options
|
||||
- [Performance Mode](/products/chdb/configuration/performance-mode) - SQL-first mode for maximum throughput
|
||||
- [Debugging](/products/chdb/debugging/index) - Explain, profiling, and logging
|
||||
- [Configuration](/chdb/configuration/index) - All configuration options
|
||||
- [Performance Mode](/chdb/configuration/performance-mode) - SQL-first mode for maximum throughput
|
||||
- [Debugging](/chdb/debugging/index) - Explain, profiling, and logging
|
||||
|
||||
### Pandas user guides {#pandas-user-guides}
|
||||
- [Pandas Cookbook](/products/chdb/guides/pandas-cookbook) - Common patterns
|
||||
- [Key Differences](/products/chdb/guides/pandas-differences) - Important differences from pandas
|
||||
- [Performance Guide](/products/chdb/guides/pandas-performance) - Optimization tips
|
||||
- [SQL for Pandas Users](/products/chdb/guides/pandas-to-sql) - Understanding the SQL behind pandas operations
|
||||
- [Pandas Cookbook](/chdb/guides/pandas-cookbook) - Common patterns
|
||||
- [Key Differences](/chdb/guides/pandas-differences) - Important differences from pandas
|
||||
- [Performance Guide](/chdb/guides/pandas-performance) - Optimization tips
|
||||
- [SQL for Pandas Users](/chdb/guides/pandas-to-sql) - Understanding the SQL behind pandas operations
|
||||
|
||||
## Quick example {#quick-example}
|
||||
|
||||
@@ -158,6 +158,6 @@ df = result.to_df() # Returns pandas DataFrame
|
||||
|
||||
## Next steps {#next-steps}
|
||||
|
||||
- **New to DataStore?** Start with the [Quickstart Guide](/products/chdb/datastore/quickstart)
|
||||
- **Coming from pandas?** Read the [Migration Guide](/products/chdb/guides/migration-from-pandas)
|
||||
- **Want to learn more?** Explore the [API Reference](/products/chdb/datastore/class-reference)
|
||||
- **New to DataStore?** Start with the [Quickstart Guide](/chdb/datastore/quickstart)
|
||||
- **Coming from pandas?** Read the [Migration Guide](/chdb/guides/migration-from-pandas)
|
||||
- **Want to learn more?** Explore the [API Reference](/chdb/datastore/class-reference)
|
||||
@@ -440,7 +440,7 @@ ds = DataStore.from_s3(
|
||||
|
||||
### GCS, Azure, HDFS {#cloud}
|
||||
|
||||
See [Factory Methods](/products/chdb/datastore/factory-methods) for cloud storage options.
|
||||
See [Factory Methods](/chdb/datastore/factory-methods) for cloud storage options.
|
||||
|
||||
---
|
||||
|
||||
+2
-2
@@ -422,7 +422,7 @@ result = ds['value'].shift(-1) # Lead
|
||||
| `to_numpy()` | NumPy array |
|
||||
| `to_clipboard()` | Clipboard |
|
||||
|
||||
See [I/O Operations](/products/chdb/datastore/io) for detailed documentation.
|
||||
See [I/O Operations](/chdb/datastore/io) for detailed documentation.
|
||||
|
||||
---
|
||||
|
||||
@@ -476,4 +476,4 @@ pd.testing.assert_frame_equal(
|
||||
)
|
||||
```
|
||||
|
||||
See [Key Differences](/products/chdb/guides/pandas-differences) for complete details.
|
||||
See [Key Differences](/chdb/guides/pandas-differences) for complete details.
|
||||
@@ -398,7 +398,7 @@ result = ds.sql("""
|
||||
|
||||
## Next Steps {#next-steps}
|
||||
|
||||
- Learn about all [Factory Methods](/products/chdb/datastore/factory-methods) for creating DataStore
|
||||
- Explore [Query Building](/products/chdb/datastore/query-building) for SQL-style operations
|
||||
- Check out [Accessors](/products/chdb/datastore/accessors) for string, datetime, and more
|
||||
- Read the [Performance Guide](/products/chdb/guides/pandas-performance) for optimization tips
|
||||
- Learn about all [Factory Methods](/chdb/datastore/factory-methods) for creating DataStore
|
||||
- Explore [Query Building](/chdb/datastore/query-building) for SQL-style operations
|
||||
- Check out [Accessors](/chdb/datastore/accessors) for string, datetime, and more
|
||||
- Read the [Performance Guide](/chdb/guides/pandas-performance) for optimization tips
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user